Я запускаю pytest для проверки функции, которая использует pdfminer для преобразования PDF в текст. Функция работает при выполнении $ python function.py, и я ожидаю, что результат будет таким. Я должен также указать, что я использую поток при разборе файла (io.BytesIO), и этот поток является причиной моего теста провал.
При запуске pytest функция завершается с ошибкой PDFSyntaxError.
# function.py
...
from pdfminer.pdfparser import PDFParser
from pdfminer.document import PDFDocument
req = requests.get(url_pointing_to_pdf_file)
pdf = io.BytesIO(req.content)
parser = PDFParser(pdf)
document = PDFDocument(parser, password=None) # this fails
...
pytest вызывает метод init в pdfdocument.py (часть библиотеки pdfminer) и останавливается здесь:
for xref in xrefs:
trailer = xref.get_trailer()
...
if 'Root' in trailer:
self.catalog = dict_value(trailer['Root'])
break
else:
raise PDFSyntaxError('No /Root object! - Is this really a PDF?')
...
И вот что показывает pytest при сбое тестирования функции:
tests/test_function.py:11:
----------------------------------------------------
.../function.py:157: in function
**document = PDFDocument(parser, password=None)**
...
E pdfminer.pdfparser.PDFSyntaxError: No /Root object! - Is this really a PDF?
lib/python3.6/site-packages/pdfminer/pdfdocument.py:583:PDFSyntaxError
Выполнение теста с файлом PDF, хранящимся в том же каталоге, что и function.py, прошло успешно, поэтому виновником является формат io.BytesIO загруженного файла PDF. Поскольку я хочу использовать поток с функцией.py, я хотел бы знать, есть ли лучший способ сделать это.