pdf-tooling 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/PKG-INFO +4 -2
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/README.md +3 -1
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/changelog.md +8 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/pyproject.toml +1 -1
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/.gitignore +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/CONTRIBUTING.md +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/LICENSE +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/Makefile +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/NOTICE +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/TESTING.md +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/THIRD_PARTY_LICENSES +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/scripts/assert_artifacts.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/scripts/assert_skips.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/scripts/gate_parity.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/scripts/licenses.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/scripts/measure_gate.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/scripts/reap_shims.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/__main__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/pdfium_raster.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/pdfium_text.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/pdfplumber_text.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/pikepdf_structure.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/pypdf_structure.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/reportlab_compose.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/soffice_office.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/subprocess_util.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/adapters/tesseract_ocr.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_compose.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_compress.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_create.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_decrypt.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_delete.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_doctor.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_encrypt.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_extract.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_info.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_linearize.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_merge.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_meta.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_meta_get.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_meta_set.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_ocr.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_office.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_permissions.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_rasterize.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_reorder.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_repair.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_rotate.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_split.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_stamp.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_tables.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_text.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_version.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/cmd_watermark.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/common.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/deprecated.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/exit_codes.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/main.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/cli/password.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/errors.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/models.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/batch.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/compose.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/crypto.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/document_password.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/inspect.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/merge.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/metadata.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/ocr.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/office.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/optimize.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/overlay.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/pagerange.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/pages.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/procpool.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/raster.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/split.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ops/textract.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/output/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/output/json.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/output/logging.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/output/table.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/compose.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/ocr.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/office.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/raster.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/structure.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/ports/text.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/_faults.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/atomic.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/confirm.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/naming.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/paths.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/policy.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/safety/tempnames.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/src/pdf_tooling/secret.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/__init__.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/_model.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_01.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_02.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_03.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_04.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_05.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_06.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_09.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/acceptance/audit_pdf_23.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/atomic_harness.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/conftest.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/corpus.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/dryreal.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/fixtures/provenance/pdf_tooling-0.1.1-py3-none-any.whl.provenance.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/fixtures/provenance/pdf_tooling-0.1.1.tar.gz.provenance.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/fixtures/provenance/pdf_tooling-0.2.0-py3-none-any.whl.provenance.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/fixtures/provenance/pdf_tooling-0.2.0.tar.gz.provenance.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/fs_snapshot.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/golden/README.md +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/golden/envelope_keys.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/golden/meta_get.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/golden/tables_lines.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/golden/text_layout.json +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/helpers/engine_hiding.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/helpers/pdfstream.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_atomic_crash.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_compose_roundtrip.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_cross_filesystem.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_crypto_roundtrip.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_ocr.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_office.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_office_orphan_probe.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_optimize_cli.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_or7_bulk_destructive.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_or7_engine_absent.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_out_dir_planning.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_overlay_preservation.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_pages_cli.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_purity_primitive.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_rasterize_cli.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_rasterize_signals.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_render_pool_start_method.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_samples_guard_fires.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_split_merge_atomicity.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_split_merge_cli.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_split_merge_roundtrip.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/integration/test_text_tables_cli.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/pagetree.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/pdfium_text.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/registry.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/samples_guard.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/seam_sitecustomize/sitecustomize.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/seams.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_acceptance_audit.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_assert_skips.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_batch_continuation.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_brand_surfaces.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_changelog_history.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_cli_contract.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_cli_spine.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_corpus.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_coverage_policy.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_derived_dimensions.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_docs_antirot.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_docstring_pointers.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_doctor.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_engine_boundary.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_engine_hiding_shim.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_envelope_contract.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_gate_budget.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_gate_parity.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_honesty_claims.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_import_boundaries.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_info.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_license_metadata_policy.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_license_policy.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_message_hygiene.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_pagerange.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_password_file_contract.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_password_leaks.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_pypi_provenance.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_read_seams.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_rename_completeness.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_samples.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_secret_leak_sweeps.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_testdata.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_usage_envelope.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/test_workflow_supply_chain.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_atomic_writer.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_compose.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_confirm.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_create.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_dryreal.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_golden.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_merge.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_meta_group.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_metadata.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_name_template.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_optimize.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_output_flags.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_overlay.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_pages.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_password_hint.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_password_resolution.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_ports_registry.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_procpool.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_raster.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_registry.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_safety_paths.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_samples_guard.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_secret.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_split.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_subprocess_util.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_tempnames.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_textract.py +0 -0
- {pdf_tooling-0.3.0 → pdf_tooling-0.3.1}/tests/unit/test_verb_help_content.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pdf-tooling
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: One safe, permissively-licensed command-line tool for the common PDF chores.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ArmandoHerra/pdf-tooling
|
|
6
6
|
Project-URL: Repository, https://github.com/ArmandoHerra/pdf-tooling
|
|
@@ -132,6 +132,8 @@ uv run pdftooling --version # tool, Python and engine versions on one
|
|
|
132
132
|
|
|
133
133
|
`uv run pdftooling --help` is the authoritative list of what is actually available at any moment — if a verb is not printed there, it does not exist yet.
|
|
134
134
|
|
|
135
|
+
**Page selection across verbs.** `split` always operates on the whole document and takes no `--pages`; to act on a subset of pages, use `extract` (keep a subset), `delete` (remove pages) or `reorder` (permute), each of which accepts `--pages`.
|
|
136
|
+
|
|
135
137
|
## Output contract
|
|
136
138
|
|
|
137
139
|
Rendered payloads go to **stdout**; diagnostics, warnings and progress go to **stderr**. `-o` selects the shape and defaults to `table` when stdout is a terminal and `json` when it is not, so piping into `jq` needs no flag.
|
|
@@ -200,7 +202,7 @@ Uniform across every verb.
|
|
|
200
202
|
## Safety contract
|
|
201
203
|
|
|
202
204
|
- `--dry-run` plans and reports; it writes nothing, anywhere.
|
|
203
|
-
- Outputs never clobber. An existing target needs `-f/--force`.
|
|
205
|
+
- Outputs never clobber. An existing target needs `-f/--force`. On a non-interactive run, overwriting in a multi-input invocation (`merge`, `delete`, `convert`, etc.) additionally requires `-y`: bulk (more than a single input) plus destructive (in-place or clobbering) on a non-terminal stdin is refused with exit 5 rather than prompted.
|
|
204
206
|
- Every write is write-to-temp-on-the-target-filesystem, `fsync`, then an atomic rename.
|
|
205
207
|
- Inputs are never mutated unless you pass `--in-place`, which writes a `.bak` sidecar first. `--no-backup` suppresses the sidecar and requires `--in-place` — on its own it is a usage error.
|
|
206
208
|
- A password is never accepted as a command-line value. `--password-file` takes a path or `-`, because `argv` is world-readable in `/proc` and lands in shell history.
|
|
@@ -92,6 +92,8 @@ uv run pdftooling --version # tool, Python and engine versions on one
|
|
|
92
92
|
|
|
93
93
|
`uv run pdftooling --help` is the authoritative list of what is actually available at any moment — if a verb is not printed there, it does not exist yet.
|
|
94
94
|
|
|
95
|
+
**Page selection across verbs.** `split` always operates on the whole document and takes no `--pages`; to act on a subset of pages, use `extract` (keep a subset), `delete` (remove pages) or `reorder` (permute), each of which accepts `--pages`.
|
|
96
|
+
|
|
95
97
|
## Output contract
|
|
96
98
|
|
|
97
99
|
Rendered payloads go to **stdout**; diagnostics, warnings and progress go to **stderr**. `-o` selects the shape and defaults to `table` when stdout is a terminal and `json` when it is not, so piping into `jq` needs no flag.
|
|
@@ -160,7 +162,7 @@ Uniform across every verb.
|
|
|
160
162
|
## Safety contract
|
|
161
163
|
|
|
162
164
|
- `--dry-run` plans and reports; it writes nothing, anywhere.
|
|
163
|
-
- Outputs never clobber. An existing target needs `-f/--force`.
|
|
165
|
+
- Outputs never clobber. An existing target needs `-f/--force`. On a non-interactive run, overwriting in a multi-input invocation (`merge`, `delete`, `convert`, etc.) additionally requires `-y`: bulk (more than a single input) plus destructive (in-place or clobbering) on a non-terminal stdin is refused with exit 5 rather than prompted.
|
|
164
166
|
- Every write is write-to-temp-on-the-target-filesystem, `fsync`, then an atomic rename.
|
|
165
167
|
- Inputs are never mutated unless you pass `--in-place`, which writes a `.bak` sidecar first. `--no-backup` suppresses the sidecar and requires `--in-place` — on its own it is a usage error.
|
|
166
168
|
- A password is never accepted as a command-line value. `--password-file` takes a path or `-`, because `argv` is world-readable in `/proc` and lands in shell history.
|
|
@@ -20,6 +20,14 @@ grep at `HEAD` — a grep at `HEAD` is exactly what hides a lost prepend.
|
|
|
20
20
|
|
|
21
21
|
<!-- CHANGELOG-ANCHOR: insert new entries directly below this line, newest first -->
|
|
22
22
|
|
|
23
|
+
## [PDF-49] Document two correct-but-surprising behaviours and cut the 0.3.1 patch — 2026-09-07
|
|
24
|
+
|
|
25
|
+
- **Manual testing against the published `0.3.0` surfaced three shapes that read as bugs and are, in fact, documented, tested design/safety contracts — this entry records that finding rather than fixing anything.** `split --pages` (no such option — subsetting is `extract`/`delete`/`reorder`), `extract --dry-run` without a destination (already documented as required in `--help`), and `-f` overwrite on a multi-input non-TTY run without `-y` (the B-079 bulk-destructive gate in `src/pdf_tooling/safety/confirm.py`, refused with exit 5) all behaved exactly per contract.
|
|
26
|
+
- **README's Safety-contract bullet on clobber-protection now also states the bulk-destructive `-y` rule**: on a non-interactive run, overwriting in a multi-input invocation (`merge`, `delete`, `convert`, etc.) additionally requires `-y`, because bulk plus destructive on a non-terminal stdin refuses with exit 5 rather than prompting.
|
|
27
|
+
- **A new note near the verb table clarifies page selection across verbs**: `split` always operates on the whole document and has no `--pages`; page subsetting is `extract` (keep), `delete` (remove) or `reorder` (permute).
|
|
28
|
+
- `website/` was verified against the same three components named in this spec's Evidence (`QuickStart.astro`, `Verbs.astro`, `ExitCodes.astro`) and no misrepresentation was found; `website/` is byte-unchanged.
|
|
29
|
+
- Version `0.3.1`; `uv.lock` regenerated in the same commit via `uv lock`, never hand-edited (one-line diff). `src/` is byte-untouched — no verb, port, adapter, safety or error module edited; the B-079 gate is unchanged.
|
|
30
|
+
|
|
23
31
|
## [PDF-48] fix: the rename census was blind to its own untracked new files — 2026-09-06
|
|
24
32
|
|
|
25
33
|
- **Two of this same spec's own new files were untracked throughout every local validation run, and `git grep` — which every census in `tests/test_rename_completeness.py` and `tests/test_brand_surfaces.py` uses — does not search untracked files by default.** `src/pdf_tooling/cli/deprecated.py` and `tests/test_rename_completeness.py` itself were staged only immediately before the prior commit, so `make test`/`make ci` reported clean locally while never actually exercising either file's content through the census instruments. CI's fresh checkout — where both files are tracked from the first commit — surfaced three real defects the local session could not: (1) `test_brand_surfaces.py`'s console-script-alias classifier (class `E`) did not include `deprecated.py`'s path, leaving its module docstring and its `pdf-toolkit`-alias notice call unclassified — class `E`'s count corrects `6 → 9` (the prior entry's `6 → 7` predates this fix and is not itself edited, per this file's own third rule); (2) `test_rename_completeness.py` spelled two of the frozen spellings literally in its own comments, the exact self-match hazard `test_brand_surfaces.py`'s needle-assembly trick exists to avoid, which this file had not applied to itself; (3) the remainder registries did not enumerate `deprecated.py`'s own occurrences. Re-verified with everything honestly tracked: `make test` 4093 passed / 0 failed; `make ci` 7/7 local checks, coverage unchanged at 94.69%; `make docs-gate` clean.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|