From 72156b5653289e3587879450fa3ab6fb7f499b11 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 3 Oct 2018 14:24:20 -0700 Subject: [PATCH] Degrade more gracefully when --optimize is set but JBIG2 is not present --- src/ocrmypdf/__main__.py | 23 ++++++++++++++++++----- src/ocrmypdf/exec/__init__.py | 1 - src/ocrmypdf/exec/jbig2enc.py | 1 - 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/ocrmypdf/__main__.py b/src/ocrmypdf/__main__.py index b2d9bb41..a9d0e9ff 100755 --- a/src/ocrmypdf/__main__.py +++ b/src/ocrmypdf/__main__.py @@ -472,21 +472,34 @@ def check_options_sidecar(options, log): options.sidecar = options.output_file + '.txt' -def _optional_program_check(name, version_fn, min_version, for_argument): +def _optional_program_required(name, version_fn, min_version, for_argument): try: if version_fn() < min_version: raise MissingDependencyError( "The installed '{}' is not supported. " "Install version {} or newer.".format(name, min_version)) - except FileNotFoundError: + except (FileNotFoundError, MissingDependencyError): raise MissingDependencyError( "Install the '{}' program to use {}.".format(name, for_argument)) +def _optional_program_recommended(name, version_fn, min_version, for_argument): + try: + if version_fn() < min_version: + raise MissingDependencyError( + "The installed '{}' is not supported. " + "Install version {} or newer.".format(name, min_version)) + except (FileNotFoundError, MissingDependencyError): + complain( + "For best results, install the optional program '{}' to use the " + "argument {}.".format(name, for_argument) + ) + + def check_options_preprocessing(options, log): if any((options.clean, options.clean_final)): from .exec import unpaper - _optional_program_check( + _optional_program_required( 'unpaper', unpaper.version, '6.1', '--clean, --clean-final' ) @@ -501,10 +514,10 @@ def check_options_ocr_behavior(options, log): def check_options_optimizing(options, log): if options.optimize >= 2: from .exec import pngquant, jbig2enc - _optional_program_check( + _optional_program_required( 'pngquant', pngquant.version, '2.0.1', '--optimize {2,3}' ) - _optional_program_check( + _optional_program_recommended( 'jbig2', jbig2enc.version, '0.28', '--optimize {2,3}' ) diff --git a/src/ocrmypdf/exec/__init__.py b/src/ocrmypdf/exec/__init__.py index 3af2b8fb..5fd2195c 100644 --- a/src/ocrmypdf/exec/__init__.py +++ b/src/ocrmypdf/exec/__init__.py @@ -24,7 +24,6 @@ from subprocess import run, STDOUT, PIPE, CalledProcessError from ..exceptions import MissingDependencyError - def get_version(program, *, version_arg='--version', regex=r'(\d+(\.\d+)*)'): "Get the version of the specified program" diff --git a/src/ocrmypdf/exec/jbig2enc.py b/src/ocrmypdf/exec/jbig2enc.py index 1fa95b2a..af4c874c 100644 --- a/src/ocrmypdf/exec/jbig2enc.py +++ b/src/ocrmypdf/exec/jbig2enc.py @@ -30,7 +30,6 @@ def version(): return get_version('jbig2', regex=r'jbig2enc (\d+(\.\d+)*).*') -@lru_cache(maxsize=1) def available(): try: version()