itchio
itchio copied to clipboard
Crash - FileNotFoundError: [Errno 2] No such file or directory when filename contains unusual symbols
I have this exception
Traceback (most recent call last):
File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/library.py", line 108, in download_library
for _ in r:
File "/usr/lib/python3.10/concurrent/futures/_base.py", line 621, in result_iterator
yield _result_or_cancel(fs.pop())
File "/usr/lib/python3.10/concurrent/futures/_base.py", line 319, in _result_or_cancel
return fut.result(timeout)
File "/usr/lib/python3.10/concurrent/futures/_base.py", line 451, in result
return self.__get_result()
File "/usr/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
raise self._exception
File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/library.py", line 99, in dl
g.download(self.login, platform)
File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/game.py", line 99, in download
self.do_download(d, token)
File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/game.py", line 232, in do_download
if utils.md5sum(out_file) != d["md5_hash"]:
File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/utils.py", line 54, in md5sum
with path.open("rb") as f:
File "/usr/lib/python3.10/pathlib.py", line 1119, in open
return self._accessor.open(self, mode, buffering, encoding, errors,
FileNotFoundError: [Errno 2] No such file or directory: 'darkjaguar8/a-fairys-day-adventure/A Fairy’s Day Adventure into the Human World.pdf'
The error happens with files that contain any non-English letters, a single quote and some other symbols
Coming to say I've hit this as well recently.
Friend and I found a temporary fix by setting whatever your environment is to UTF-8, copying the mangled file to the correct name, and adjusting utils.py to have the MD5 check section updated as follows:
"""Returns the md5sum of a file"""
md5 = hashlib.md5()
#with path.open("rb") as f:
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
md5.update(chunk)
return md5.hexdigest()
@undeadrattler Seems to work thanks, I really wonder why it doesn't download in the correct encoding format... it just dies if a filename has a apostrophe...