From d13d70fd56419b12786226af0067ef66a2904031 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 10 Apr 2020 01:27:46 -0700 Subject: [PATCH] Fix version checker failing for qpdf 10.0.0 Fixes #527 --- src/ocrmypdf/exec/__init__.py | 3 ++- tests/test_validation.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/ocrmypdf/exec/__init__.py b/src/ocrmypdf/exec/__init__.py index 838697fc..1fb3b047 100644 --- a/src/ocrmypdf/exec/__init__.py +++ b/src/ocrmypdf/exec/__init__.py @@ -23,6 +23,7 @@ import re import shutil import sys from collections.abc import Mapping +from distutils.version import LooseVersion from functools import lru_cache from subprocess import PIPE, STDOUT, CalledProcessError from subprocess import run as subprocess_run @@ -270,7 +271,7 @@ def check_external_program( raise MissingDependencyError() return - if found_version < need_version: + if LooseVersion(found_version) < LooseVersion(need_version): _error_old_version(program, package, need_version, found_version, required_for) if not recommended: raise MissingDependencyError() diff --git a/tests/test_validation.py b/tests/test_validation.py index fb03de3b..9fc5fe39 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -176,3 +176,31 @@ def test_language_warning(caplog): vd.check_options_languages(opts) assert opts.language == ['eng'] assert 'assuming --language' in caplog.text + + +def test_version_comparison(): + vd.check_external_program( + program="dummy_basic", + package="dummy", + version_checker=lambda: '9.0', + need_version='8.0.2', + ) + vd.check_external_program( + program="dummy_doubledigit", + package="dummy", + version_checker=lambda: '10.0', + need_version='8.0.2', + ) + vd.check_external_program( + program="tesseract", + package="tesseract", + version_checker=lambda: '4.0.0-beta.1', + need_version='4.0.0', + ) + with pytest.raises(MissingDependencyError): + vd.check_external_program( + program="dummy_fails", + package="dummy", + version_checker=lambda: '1.0', + need_version='2.0', + )