From a8565bac6ec2ce1efad5da0732af7b2da42c0f2a Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Sun, 15 Sep 2019 01:47:31 -0700 Subject: [PATCH] Fix any False in the ocrmypdf.ocr() API being set to True --- src/ocrmypdf/api.py | 14 ++++++++++++-- tests/test_validation.py | 21 ++++++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/ocrmypdf/api.py b/src/ocrmypdf/api.py index d279d6f4..b735f398 100644 --- a/src/ocrmypdf/api.py +++ b/src/ocrmypdf/api.py @@ -122,13 +122,23 @@ def create_options(*, input_file, output_file, **kwargs): for arg, val in kwargs.items(): if val is None: continue - if arg == 'tesseract_env': + + # These arguments with special handling for which we bypass + # argparse + if arg in {'tesseract_env', 'progress_bar'}: deferred.append((arg, val)) continue + cmd_style_arg = arg.replace('_', '-') - cmdline.append(f"--{cmd_style_arg}") + + # Booleans are special: add only if True, omit for False if isinstance(val, bool): + if val: + cmdline.append(f"--{cmd_style_arg}") continue + + # We have a parameter + cmdline.append(f"--{cmd_style_arg}") if isinstance(val, (int, float)): cmdline.append(str(val)) elif isinstance(val, str): diff --git a/tests/test_validation.py b/tests/test_validation.py index 3914986d..e5e3c8f9 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -16,13 +16,14 @@ # along with OCRmyPDF. If not, see . import os -from unittest.mock import MagicMock, patch +from unittest.mock import MagicMock, patch, call import pytest import ocrmypdf._validation as vd from ocrmypdf.api import create_options from ocrmypdf.exceptions import MissingDependencyError, BadArgsError +from ocrmypdf.pdfinfo import PdfInfo def make_opts(input_file='a.pdf', output_file='b.pdf', language='eng', **kwargs): @@ -119,3 +120,21 @@ def test_report_file_size(tmp_path, caplog): os.truncate(out, 50000) vd.report_output_file_size(opts, in_, out) assert 'No reason' in caplog.text + + +def test_false_action_store_true(): + opts = make_opts(keep_temporary_files=True) + assert opts.keep_temporary_files == True + opts = make_opts(keep_temporary_files=False) + assert opts.keep_temporary_files == False + + +@pytest.mark.parametrize('progress_bar', [True, False]) +def test_no_progress_bar(progress_bar, resources): + opts = make_opts(progress_bar=progress_bar, input_file=(resources / 'trivial.pdf')) + with patch('ocrmypdf.pdfinfo.info.tqdm', autospec=True) as tqdmpatch: + vd.check_options(opts) + pdfinfo = PdfInfo(opts.input_file, progbar=opts.progress_bar) + assert tqdmpatch.called + _args, kwargs = tqdmpatch.call_args + assert kwargs['disable'] != progress_bar