From f6c7f7e80e03daad32243cdbea3666d66ae4b7a7 Mon Sep 17 00:00:00 2001 From: Julian Smith Date: Tue, 15 Jul 2025 11:30:44 +0100 Subject: [PATCH 1/3] scripts/test.py: improved specification of install version. We now use `-i ` to set version to be installed by `install` command. The `install` command now does not take a `` value. Specifying the implementation (without/without optimisation) is now done with `-I` instead of `-i`. --- scripts/test.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/scripts/test.py b/scripts/test.py index a6095f40e..340d10829 100755 --- a/scripts/test.py +++ b/scripts/test.py @@ -107,13 +107,16 @@ -h Show help. - -i + -I Set PyMuPDF implementations to test. must contain only these individual characters: 'r' - rebased. 'R' - rebased without optimisations. Default is 'r'. Also see `PyMuPDF:tests/run_compound.py`. + -i + Set version installed by the 'install' command. + -k Specify which test(s) to run; passed straight through to pytest's `-k`. For example `-k test_3354`. @@ -298,6 +301,7 @@ def main(argv): commands = list() env_extra = dict() implementations = 'r' + install_version = None mupdf_sync = None os_names = list() system_packages = False @@ -393,6 +397,9 @@ def main(argv): show_help = True elif arg == '-i': + install_version = next(args) + + elif arg == '-I': implementations = next(args) elif arg == '-k': @@ -459,16 +466,12 @@ def main(argv): venv = int(next(args)) assert venv in (0, 1, 2), f'Invalid {venv=} should be 0, 1 or 2.' - elif arg in ('build', 'cibw', 'pyodide', 'test', 'wheel'): + elif arg in ('build', 'cibw', 'install', 'pyodide', 'test', 'wheel'): commands.append(arg) elif arg == 'buildtest': commands += ['build', 'test'] - elif arg == 'install': - _pymupdf = next(args) - commands.append(f'{arg}.{_pymupdf}') - else: assert 0, f'Unrecognised option/command: {arg=}.' @@ -530,9 +533,13 @@ def main(argv): # Build wheel(s) with cibuildwheel. cibuildwheel(env_extra, cibw_name, cibw_pyodide, cibw_sdist) - elif command.startswith('install.'): - name = command[len('install.'):] - run(f'pip install --force-reinstall {name}') + elif command == 'install': + p = 'pymupdf' + if install_version: + if not install_version.startswith(('==', '>=', '>')): + p = f'{p}==' + p = f'{p}{install_version}' + run(f'pip install --force-reinstall {p}') have_installed = True elif command == 'test': From 5465a0ba200bd4e927f012403bb14f9bb75ec0f5 Mon Sep 17 00:00:00 2001 From: Julian Smith Date: Tue, 15 Jul 2025 11:33:38 +0100 Subject: [PATCH 2/3] tests/: added test_4496(). --- tests/resources/test_4496.hwpx | Bin 0 -> 13690 bytes tests/test_general.py | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100755 tests/resources/test_4496.hwpx diff --git a/tests/resources/test_4496.hwpx b/tests/resources/test_4496.hwpx new file mode 100755 index 0000000000000000000000000000000000000000..f1e0fb1a76482b1bbefb55af042afac0911c21cc GIT binary patch literal 13690 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 Date: Tue, 15 Jul 2025 11:34:09 +0100 Subject: [PATCH 3/3] changes.txt: retrospectively mark #4496 as fixed in 1.26.1. --- changes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changes.txt b/changes.txt index 47cab42ee..0abc9b5ba 100644 --- a/changes.txt +++ b/changes.txt @@ -33,6 +33,7 @@ Change Log * **Fixed** `4520 `_: show_pdf_page does not like empty pages created by new_page * **Fixed** `4524 `_: fitz.get_text ignores 'pages' kwarg * **Fixed** `4412 `_: Regression? Spurious error? in insert_pdf in v1.25.4 + * **Fixed** `4496 `_: pymupdf4llm with pymupdfpro * Other: