fb2-000065-005477.zip
- xxxx.zip (Внутри один fb2 файл)
- xxxx.zip (Внутри один fb2 файл)
Сканер проходит по всем файлам fb2-xxxxxxx-yyyyyyy.zip, но не заглядывает во вложенные zip файлы.
Потом догадался добавить расширение .zip в параметр SOPDS_BOOK_EXTENSIONS(Список расширений файлов, для включения в коллекцию книг по умолчанию содержит: .pdf .djvu .fb2 .epub .mobi)
После чего сканер начал парсить внутренние zip файлы.
Только начал ругаться что у объекта tree нет метода getroot
И действительно в классе FB2Zip в методе __create_tree__ объект tree создается методом etree.fromstring (создает объект класса Element), тогда как в классе FB2 в __create_tree__ объект tree создается методом etree.parse(создает объект класса ElementTree)
Может в классе FB2Zip сделать так чтобы метод __create_tree__ возвращал Element
class FB2(FB2Base):
def __init__(self, file, original_filename):
FB2Base.__init__(self, file, original_filename, Mimetype.FB2)
def __create_tree__(self):
try:
self.file.seek(0,0)
# Было так return etree.parse(self.file)
return etree.parse(self.file).getroot()
except Exception as err:
raise FB2StructureException('the file is not a valid XML (%s)'%err)
def __exit__(self, kind, value, traceback):
pass
Тогда __detect_namespaces(self, tree) можно было изменить на такое
def __detect_namespaces(self, tree):
# Было так if tree.getroot().tag.find(Namespace.FICTION_BOOK21) > 0:
if tree.tag.find(Namespace.FICTION_BOOK21) > 0:
self.__namespaces['fb'] = Namespace.FICTION_BOOK21
return None
Архив книг имеет такую структуру
Сканер проходит по всем файлам fb2-xxxxxxx-yyyyyyy.zip, но не заглядывает во вложенные zip файлы.
Потом догадался добавить расширение .zip в параметр SOPDS_BOOK_EXTENSIONS (Список расширений файлов, для включения в коллекцию книг по умолчанию содержит: .pdf .djvu .fb2 .epub .mobi)
После чего сканер начал парсить внутренние zip файлы. Только начал ругаться что у объекта tree нет метода getroot
src/book_tools/format/fb2.py:73
И действительно в классе FB2Zip в методе
__create_tree__
объект tree создается методомetree.fromstring
(создает объект класса Element), тогда как в классе FB2 в__create_tree__
объект tree создается методомetree.parse
(создает объект класса ElementTree)Может в классе FB2Zip сделать так чтобы метод
__create_tree__
возвращал ElementТогда
__detect_namespaces(self, tree)
можно было изменить на такое