From c77ae4b34cce68c59e39e8f45ca2aed608886cda Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 20 Sep 2023 15:40:18 -0700 Subject: [PATCH] Change hookspec to migration parameters for generate_pdf to options object Breaking change for PDF rendering plugins (although none are known to exist). This provides better separation of Ghostscript specific concerns from the generic plugin interface. --- src/ocrmypdf/_pipeline.py | 3 +-- src/ocrmypdf/builtin_plugins/ghostscript.py | 7 +++---- src/ocrmypdf/pluginspec.py | 17 +++++++---------- tests/plugins/gs_feature_elision.py | 5 ++--- tests/plugins/gs_pdfa_failure.py | 5 ++--- tests/plugins/gs_render_failure.py | 5 ++--- tests/plugins/gs_render_soft_error.py | 5 ++--- 7 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/ocrmypdf/_pipeline.py b/src/ocrmypdf/_pipeline.py index add00082..57133a90 100644 --- a/src/ocrmypdf/_pipeline.py +++ b/src/ocrmypdf/_pipeline.py @@ -792,8 +792,7 @@ def convert_to_pdfa(input_pdf: Path, input_ps_stub: Path, context: PdfContext) - pdf_pages=[fix_docinfo_file], pdfmark=input_ps_stub, output_file=output_file, - compression=options.pdfa_image_compression, - color_conversion_strategy=options.color_conversion_strategy, + context=context, pdfa_part=options.output_type[-1], # is pdfa-1, pdfa-2, or pdfa-3 progressbar_class=( context.plugin_manager.hook.get_progressbar_class() diff --git a/src/ocrmypdf/builtin_plugins/ghostscript.py b/src/ocrmypdf/builtin_plugins/ghostscript.py index b5c645cd..7d033f6c 100644 --- a/src/ocrmypdf/builtin_plugins/ghostscript.py +++ b/src/ocrmypdf/builtin_plugins/ghostscript.py @@ -105,8 +105,7 @@ def generate_pdfa( pdf_pages, pdfmark, output_file, - compression, - color_conversion_strategy, + context, pdf_version, pdfa_part, progressbar_class, @@ -116,8 +115,8 @@ def generate_pdfa( ghostscript.generate_pdfa( pdf_pages=[*pdf_pages, pdfmark], output_file=output_file, - compression=compression, - color_conversion_strategy=color_conversion_strategy, + compression=context.options.pdfa_image_compression, + color_conversion_strategy=context.options.color_conversion_strategy, pdf_version=pdf_version, pdfa_part=pdfa_part, progressbar_class=progressbar_class, diff --git a/src/ocrmypdf/pluginspec.py b/src/ocrmypdf/pluginspec.py index 8ce09696..00c8a4df 100644 --- a/src/ocrmypdf/pluginspec.py +++ b/src/ocrmypdf/pluginspec.py @@ -351,7 +351,6 @@ def filter_pdf_page(page: PageContext, image_filename: Path, output_pdf: Path) - This hook will be called from child processes. Modifying global state will not affect the main process or other child processes. - Note: This is a :ref:`firstresult hook`. """ @@ -466,8 +465,7 @@ def generate_pdfa( pdf_pages: list[Path], pdfmark: Path, output_file: Path, - compression: str, - color_conversion_strategy: str, + context: PdfContext, pdf_version: str, pdfa_part: str, progressbar_class, @@ -485,13 +483,7 @@ def generate_pdfa( pdfmark: A PostScript file intended for Ghostscript with details on how to perform the PDF/A conversion. output_file: The name of the desired output file. - compression: One of ``'jpeg'``, ``'lossless'``, ``''``. For ``'jpeg'``, - the PDF/A generator should convert all images to JPEG encoding where - possible. For lossless, all images should be converted to FlateEncode - (lossless PNG). If an empty string, the PDF generator should make its - own decisions about how to encode images. - color_conversion_strategy: A valid Ghostscript color conversion strategy - name. + context: The current context. pdf_version: The minimum PDF version that the output file should be. At its own discretion, the PDF/A generator may raise the version, but should not lower it. @@ -517,6 +509,11 @@ def generate_pdfa( Note: This is a :ref:`firstresult hook`. + Note: + Before version 15.0.0, the ``context`` was not provided and ``compression`` + was provided instead. Plugins should now read the context object to determine + if compression is requested. + See Also: https://github.com/tqdm/tqdm """ diff --git a/tests/plugins/gs_feature_elision.py b/tests/plugins/gs_feature_elision.py index 7f6c7d9f..5f914dde 100644 --- a/tests/plugins/gs_feature_elision.py +++ b/tests/plugins/gs_feature_elision.py @@ -20,15 +20,14 @@ def run_append_stderr(*args, **kwargs): @hookimpl -def generate_pdfa(pdf_pages, pdfmark, output_file, compression, pdf_version, pdfa_part): +def generate_pdfa(pdf_pages, pdfmark, output_file, context, pdf_version, pdfa_part): with patch('ocrmypdf._exec.ghostscript.run_polling_stderr') as mock: mock.side_effect = run_append_stderr ghostscript.generate_pdfa( pdf_pages=pdf_pages, pdfmark=pdfmark, output_file=output_file, - compression=compression, - color_conversion_strategy='LeaveColorUnchanged', + context=context, pdf_version=pdf_version, pdfa_part=pdfa_part, progressbar_class=None, diff --git a/tests/plugins/gs_pdfa_failure.py b/tests/plugins/gs_pdfa_failure.py index df1c305e..9dc742e5 100644 --- a/tests/plugins/gs_pdfa_failure.py +++ b/tests/plugins/gs_pdfa_failure.py @@ -22,15 +22,14 @@ def run_rig_args(args, **kwargs): @hookimpl -def generate_pdfa(pdf_pages, pdfmark, output_file, compression, pdf_version, pdfa_part): +def generate_pdfa(pdf_pages, pdfmark, output_file, context, pdf_version, pdfa_part): with patch('ocrmypdf._exec.ghostscript.run_polling_stderr') as mock: mock.side_effect = run_rig_args ghostscript.generate_pdfa( pdf_pages=pdf_pages, pdfmark=pdfmark, output_file=output_file, - compression=compression, - color_conversion_strategy='LeaveColorUnchanged', + context=context, pdf_version=pdf_version, pdfa_part=pdfa_part, progressbar_class=None, diff --git a/tests/plugins/gs_render_failure.py b/tests/plugins/gs_render_failure.py index bdb83e04..4d955354 100644 --- a/tests/plugins/gs_render_failure.py +++ b/tests/plugins/gs_render_failure.py @@ -17,15 +17,14 @@ def raise_gs_fail(*args, **kwargs): @hookimpl -def generate_pdfa(pdf_pages, pdfmark, output_file, compression, pdf_version, pdfa_part): +def generate_pdfa(pdf_pages, pdfmark, output_file, context, pdf_version, pdfa_part): with patch('ocrmypdf._exec.ghostscript.run_polling_stderr') as mock: mock.side_effect = raise_gs_fail ghostscript.generate_pdfa( pdf_pages=pdf_pages, pdfmark=pdfmark, output_file=output_file, - compression=compression, - color_conversion_strategy='LeaveColorUnchanged', + context=context, pdf_version=pdf_version, pdfa_part=pdfa_part, progressbar_class=None, diff --git a/tests/plugins/gs_render_soft_error.py b/tests/plugins/gs_render_soft_error.py index 45f0f769..e276194a 100644 --- a/tests/plugins/gs_render_soft_error.py +++ b/tests/plugins/gs_render_soft_error.py @@ -23,7 +23,7 @@ def generate_pdfa( pdf_pages, pdfmark, output_file, - compression, + context, pdf_version, pdfa_part, stop_on_soft_error, @@ -34,8 +34,7 @@ def generate_pdfa( pdf_pages=pdf_pages, pdfmark=pdfmark, output_file=output_file, - compression=compression, - color_conversion_strategy='LeaveColorUnchanged', + context=context, pdf_version=pdf_version, pdfa_part=pdfa_part, progressbar_class=None,