Не завершается считывание торрент-файлов в emfind
vitlav opened this issue · comments
$ emfind orphans
# I: Client transmission is ready
# I: Fetching all hashes from client ...
# I: Validating the cache ...
... # I: Loading torrents from /var/lib/transmission-daemon/torrents/*.torrent -- Срезневский И.И. Материалы для словаря древнерусского языка по письменным памятникам - т. 1-3 - 1893-1912.8716b9a4acc15faf.torrent .. Traceback (most recent call last):
File "/usr/bin/emfind", line 9, in <module>
load_entry_point('emonoda==1.9.13', 'console_scripts', 'emfind')()
File "/usr/lib/python3.3/site-packages/emonoda/apps/emfind.py", line 193, in main
cache=get_cache(False),
File "/usr/lib/python3.3/site-packages/emonoda/apps/emfind.py", line 185, in get_cache
log=log_stderr,
File "/usr/lib/python3.3/site-packages/emonoda/helpers/datacache.py", line 29, in get_cache
if _update(cache, client, torrents_dir_path, name_filter, log):
File "/usr/lib/python3.3/site-packages/emonoda/helpers/datacache.py", line 80, in _update
torrents = tcollection.load_from_dir(path, name_filter, log)
File "/usr/lib/python3.3/site-packages/emonoda/helpers/tcollection.py", line 39, in load_from_dir
torrents[name] = tfile.Torrent(path=file_path)
File "/usr/lib/python3.3/site-packages/emonoda/tfile.py", line 97, in __init__
self.load_from_file(path)
File "/usr/lib/python3.3/site-packages/emonoda/tfile.py", line 101, in load_from_file
return self.load_from_data(torrent_file.read(), path)
File "/usr/lib/python3.3/site-packages/emonoda/tfile.py", line 104, in load_from_data
self._bencode = decode_data(data)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 151, in bdecode
return btype(f_or_data)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 115, in _decode_dict
ret[key] = bdecode(f)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 151, in bdecode
return btype(f_or_data)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 106, in _decode_list
item = bdecode(f)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 151, in bdecode
return btype(f_or_data)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 106, in _decode_list
item = bdecode(f)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 151, in bdecode
return btype(f_or_data)
File "/usr/lib/python3.3/site-packages/emonoda/thirdparty/bcoding.py", line 78, in _decode_int
return int(_readuntil(f))
ValueError: invalid literal for int() with base 10: '5nod'
Какой диагностикой можно воспользоваться, чтобы понять причину?
Выглядит как битый торрент-файл. Попробуй посмотреть на него через ctorrent -x filename.torrent
Во-первых, я не понимаю, какой файл. Потому что тот, название которого осталось на экране, нормальный - я его скопировал в отдельный каталог и там он отлично проиндексировался.
Я могу, как идея, проверить все торрент-файлы. Но тогда это надо делать через emfile, чтобы ему все файлы понравились.
А программа не может кидать исключения так, чтобы было понятно, по какому они поводу?
Нашёл с помощью emfile битый торрент, убрал его. Теперь застряли на:
FileExistsError: [Errno 17] File exists (mode 700 != expected mode 775): '/home/lav/.cache'
Ну какое ему дело до прав на мои каталоги?
Исключения про торренты.
Дай полное исключение на .cache. Я этой проверки не писал, выглядит, как питоновый выкрутас.
Нашёл с помощью emfile битый торрент, убрал его. Теперь застряли на:
FileExistsError: [Errno 17] File exists (mode 700 != expected mode 775): '/home/lav/.cache'
Ну какое ему дело до прав на мои каталоги?
Наткнулся на битую ссылку и упал:
# I: Scanning directory /net/torrent ...
Traceback (most recent call last):
File "/usr/bin/emfind", line 9, in <module>
load_entry_point('emonoda==1.9.13', 'console_scripts', 'emfind')()
File "/usr/lib/python3.3/site-packages/emonoda/apps/emfind.py", line 197, in main
log_stderr=log_stderr,
File "/usr/lib/python3.3/site-packages/emonoda/apps/emfind.py", line 80, in print_orphaned_files
all_files = build_all_files(data_root_path)
File "/usr/lib/python3.3/site-packages/emonoda/apps/emfind.py", line 59, in build_all_files
files[get_decoded_path(path)] = os.path.getsize(path)
File "/usr/lib/python3.3/genericpath.py", line 49, in getsize
return os.stat(filename).st_size
FileNotFoundError: [Errno 2] No such file or directory:
Зафиксил поведение на симлинках и добавил сообщение о битых торрентах.
На 3.4/3.5 ошибки с expected mode нет.