From eb1cd38f6c7e67bb143e99e33d596545d6e176ae Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 24 May 2017 16:19:15 -0700 Subject: [PATCH] Add an open helper that is compatible with pathlib --- ocrmypdf/helpers.py | 11 ++++++++++- ocrmypdf/pdfinfo.py | 13 ++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ocrmypdf/helpers.py b/ocrmypdf/helpers.py index 655debba..ea39f67d 100644 --- a/ocrmypdf/helpers.py +++ b/ocrmypdf/helpers.py @@ -3,7 +3,7 @@ from functools import partial from collections.abc import Iterable -from contextlib import suppress +from contextlib import suppress, contextmanager import sys import os @@ -77,3 +77,12 @@ def is_file_writable(test_file): with suppress(OSError): os.unlink(test_file) return True + + +@contextmanager +def universal_open(p, *args, **kwargs): + "Work around Python 3.5's inability to open(pathlib.Path())" + try: + yield p.open(*args, **kwargs) + except AttributeError: + yield open(p, *args, **kwargs) \ No newline at end of file diff --git a/ocrmypdf/pdfinfo.py b/ocrmypdf/pdfinfo.py index 40034135..2621eb43 100644 --- a/ocrmypdf/pdfinfo.py +++ b/ocrmypdf/pdfinfo.py @@ -12,6 +12,7 @@ from collections.abc import MutableMapping, Mapping import warnings from pathlib import Path from enum import Enum +from .helpers import universal_open matrix_mult = pypdf.pdf.utils.matrixMultiply @@ -593,17 +594,15 @@ def _pdf_get_pageinfo(pdf, pageno: int): def _pdf_get_all_pageinfo(infile): - if isinstance(infile, Path): - infile = str(infile) - pdf = pypdf.PdfFileReader(infile) - return [PageInfo(pdf, n) for n in range(pdf.numPages)] + with universal_open(infile, 'rb') as f: + pdf = pypdf.PdfFileReader(f) + return [PageInfo(pdf, n) for n in range(pdf.numPages)] class PageInfo: - def __init__(self, infile, pageno): - self._infile = infile + def __init__(self, pdf, pageno): self._pageno = pageno - self._pageinfo = _pdf_get_pageinfo(infile, pageno) + self._pageinfo = _pdf_get_pageinfo(pdf, pageno) @property def pageno(self):