paratext-cli 0.2.3__tar.gz → 0.2.4__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.
Files changed (181) hide show
  1. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/PKG-INFO +1 -1
  2. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/pyproject.toml +1 -1
  3. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/__init__.py +1 -1
  4. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/extract.py +29 -0
  5. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_extract.py +41 -0
  6. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/uv.lock +1 -1
  7. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.github/workflows/ci.yml +0 -0
  8. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.github/workflows/publish.yml +0 -0
  9. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.gitignore +0 -0
  10. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/intro.md +0 -0
  11. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-1 split-the-framework-out-of-paratext-nls-and-release-it.md +0 -0
  12. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-10 remove-the-watttime-provider.md +0 -0
  13. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-11 make-paratext-new-self-installing.md +0 -0
  14. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-12 add-paratext-guide-so-agents-can-self-orient.md +0 -0
  15. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-13 guard-schema-prompt-and-view-drift.md +0 -0
  16. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-14 build-the-human-corrected-gold-eval-set-in-review.md +0 -0
  17. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-15 add-marc-and-dublin-core-export-formats.md +0 -0
  18. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-16 ship-schema-json-with-each-exported-dataset.md +0 -0
  19. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-17 add-the-project-inspector-and-fix-sqlite-thread-safety.md +0 -0
  20. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-18 point-the-default-card-detector-at-the-published-nls-repo.md +0 -0
  21. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-19 add-the-scope-aware-export-modal.md +0 -0
  22. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-2 add-the-inbuilt-review-web-ui.md +0 -0
  23. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-20 move-the-review-ui-onto-oat.md +0 -0
  24. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-21 render-entries-as-tables-read-only-and-editable.md +0 -0
  25. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-22 publish-gold-to-hugging-face-with-sign-in-with-hf.md +0 -0
  26. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-23 warn-on-incomplete-provenance-without-blocking-publication.md +0 -0
  27. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-24 add-the-paratext-logo-and-favicon.md +0 -0
  28. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-25 remove-duplicated-helpers-across-the-codebase.md +0 -0
  29. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-26 split-store-and-dataset-loading-out-of-the-review-server.md +0 -0
  30. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-27 lean-the-readme-and-split-the-reference-into-docs.md +0 -0
  31. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-28 add-notice-and-make-the-repository-public.md +0 -0
  32. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-29 rename-the-distribution-to-paratext-cli-and-publish-to-pypi.md +0 -0
  33. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-3 make-the-review-server-configurable.md +0 -0
  34. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-30 make-project-discovery-work-from-any-environment.md +0 -0
  35. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-31 give-clear-errors-for-provider-and-source-misconfiguration.md +0 -0
  36. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-32 add-a-configurable-output-budget-and-provider-extra-body-pas.md +0 -0
  37. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-33 bring-marc-output-up-to-isbd-punctuation-and-leader-conventi.md +0 -0
  38. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-34 replace-the-blind-margin-crop-with-a-content-aware-fallback.md +0 -0
  39. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-35 add-the-opt-in-ai-assistance-note-to-marc-and-dc-export.md +0 -0
  40. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-36 emit-only-one-main-entry-per-marc-record.md +0 -0
  41. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-37 extend-cli-test-coverage-to-argparse-wiring-round-resolution.md +0 -0
  42. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-38 walk-a-real-run-from-a-fresh-scaffold.md +0 -0
  43. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-39 add-the-paratext-dependency-when-scaffolding-into-an-existin.md +0 -0
  44. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-4 genericise-the-defaults-away-from-local-inference-servers.md +0 -0
  45. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-40 fix-cross-batch-accumulation-overwriting-metadata-jsonl.md +0 -0
  46. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-41 remove-the-silent-hf-default-from-format.md +0 -0
  47. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-42 add-paratext-export-db.md +0 -0
  48. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-43 decide-whether-a-gold-export-ships-as-a-held-out-test-split.md +0 -0
  49. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-44 hf-export-v2-multi-image-projects-and-round-versioning-as-hu.md +0 -0
  50. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-45 add-paratext-bench.md +0 -0
  51. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-46 review-ui-polish-flagged-stat-key-score-badge-and-verdict-to.md +0 -0
  52. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-47 eval-editor-reach-view-hidden-fields-and-diff-corrected-agai.md +0 -0
  53. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-48 add-richer-scaffolder-field-types-for-enums-and-lists.md +0 -0
  54. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-49 extend-the-carbon-providers.md +0 -0
  55. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-5 add-source-adapters-and-slim-the-project-layout.md +0 -0
  56. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-50 build-the-wordmark-in-a-mono-typeface.md +0 -0
  57. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-51 decide-whether-to-pursue-the-pypi-paratext-name.md +0 -0
  58. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-6 rename-init-to-new-and-document-every-cli-flag.md +0 -0
  59. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-7 key-runs-and-packages-on-the-prompt-hash.md +0 -0
  60. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-8 add-paratext-export-for-publishing-a-reviewed-round.md +0 -0
  61. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/.helical/tasks/PTX-9 add-carbon-aware-scheduling.md +0 -0
  62. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/AGENTS.md +0 -0
  63. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/LICENSE +0 -0
  64. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/NOTICE +0 -0
  65. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/README.md +0 -0
  66. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/assets/logo.png +0 -0
  67. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/assets/logo.svg +0 -0
  68. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/config.yml +0 -0
  69. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-0 - framework-split-and-first-release.md +0 -0
  70. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-1 - review-ui.md +0 -0
  71. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-2 - export-and-publishing.md +0 -0
  72. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-3 - oat-first-ui-rework.md +0 -0
  73. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-4 - packaging-and-pypi-release.md +0 -0
  74. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-5 - marc-fidelity.md +0 -0
  75. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-6 - test-coverage-and-onboarding.md +0 -0
  76. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-7 - export-v2.md +0 -0
  77. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/milestones/m-8 - review-ui-polish.md +0 -0
  78. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-1 - Split-the-framework-out-of-paratext-nls-and-release-it.md +0 -0
  79. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-10 - Remove-the-WattTime-provider.md +0 -0
  80. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-11 - Make-paratext-new-self-installing.md +0 -0
  81. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-12 - Add-paratext-guide-so-agents-can-self-orient.md +0 -0
  82. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-13 - Guard-schema-prompt-and-view-drift.md +0 -0
  83. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-14 - Build-the-human-corrected-gold-eval-set-in-review.md +0 -0
  84. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-15 - Add-MARC-and-Dublin-Core-export-formats.md +0 -0
  85. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-16 - Ship-schema.json-with-each-exported-dataset.md +0 -0
  86. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-17 - Add-the-project-inspector-and-fix-sqlite-thread-safety.md +0 -0
  87. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-18 - Point-the-default-card-detector-at-the-published-NLS-repo.md +0 -0
  88. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-19 - Add-the-scope-aware-export-modal.md +0 -0
  89. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-2 - Add-the-inbuilt-review-web-UI.md +0 -0
  90. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-20 - Move-the-review-UI-onto-Oat.md +0 -0
  91. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-21 - Render-entries-as-tables-read-only-and-editable.md +0 -0
  92. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-22 - Publish-gold-to-Hugging-Face-with-Sign-in-with-HF.md +0 -0
  93. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-23 - Warn-on-incomplete-provenance-without-blocking-publication.md +0 -0
  94. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-24 - Add-the-paratext-logo-and-favicon.md +0 -0
  95. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-25 - Remove-duplicated-helpers-across-the-codebase.md +0 -0
  96. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-26 - Split-Store-and-dataset-loading-out-of-the-review-server.md +0 -0
  97. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-27 - Lean-the-README-and-split-the-reference-into-docs.md +0 -0
  98. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-28 - Add-NOTICE-and-make-the-repository-public.md +0 -0
  99. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-29 - Rename-the-distribution-to-paratext-cli-and-publish-to-PyPI.md +0 -0
  100. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-3 - Make-the-review-server-configurable.md +0 -0
  101. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-30 - Make-project-discovery-work-from-any-environment.md +0 -0
  102. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-31 - Give-clear-errors-for-provider-and-source-misconfiguration.md +0 -0
  103. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-32 - Add-a-configurable-output-budget-and-provider-extra-body-passthrough.md +0 -0
  104. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-33 - Bring-MARC-output-up-to-ISBD-punctuation-and-leader-conventions.md +0 -0
  105. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-34 - Replace-the-blind-margin-crop-with-a-content-aware-fallback.md +0 -0
  106. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-35 - Add-the-opt-in-AI-assistance-note-to-MARC-and-DC-export.md +0 -0
  107. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-36 - Emit-only-one-main-entry-per-MARC-record.md +0 -0
  108. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-37 - Extend-CLI-test-coverage-to-argparse-wiring-round-resolution-and-config-layering.md +0 -0
  109. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-38 - Walk-a-real-run-from-a-fresh-scaffold.md +0 -0
  110. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-39 - Add-the-paratext-dependency-when-scaffolding-into-an-existing-project.md +0 -0
  111. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-4 - Genericise-the-defaults-away-from-local-inference-servers.md +0 -0
  112. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-40 - Fix-cross-batch-accumulation-overwriting-metadata.jsonl.md +0 -0
  113. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-41 - Remove-the-silent-hf-default-from-format.md +0 -0
  114. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-42 - Add-paratext-export-db.md +0 -0
  115. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-43 - Decide-whether-a-gold-export-ships-as-a-held-out-test-split.md +0 -0
  116. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-44 - HF-export-v2-multi-image-projects-and-round-versioning-as-Hub-revisions.md +0 -0
  117. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-45 - Add-paratext-bench.md +0 -0
  118. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-46 - Review-UI-polish-flagged-stat-key-score-badge-and-verdict-toggles.md +0 -0
  119. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-47 - Eval-editor-reach-View-hidden-fields-and-diff-corrected-against-model-output.md +0 -0
  120. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-48 - Add-richer-scaffolder-field-types-for-enums-and-lists.md +0 -0
  121. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-49 - Extend-the-carbon-providers.md +0 -0
  122. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-5 - Add-source-adapters-and-slim-the-project-layout.md +0 -0
  123. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-50 - Build-the-wordmark-in-a-mono-typeface.md +0 -0
  124. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-51 - Decide-whether-to-pursue-the-PyPI-paratext-name.md +0 -0
  125. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-6 - Rename-init-to-new-and-document-every-CLI-flag.md +0 -0
  126. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-7 - Key-runs-and-packages-on-the-prompt-hash.md +0 -0
  127. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-8 - Add-paratext-export-for-publishing-a-reviewed-round.md +0 -0
  128. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/backlog/tasks/task-9 - Add-carbon-aware-scheduling.md +0 -0
  129. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/docs/configuration.md +0 -0
  130. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/docs/export.md +0 -0
  131. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/docs/green-scheduling.md +0 -0
  132. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/docs/hf-export-spec.md +0 -0
  133. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/docs/publishing.md +0 -0
  134. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/docs/scanned-cards.md +0 -0
  135. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/paratext.example.toml +0 -0
  136. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/AGENTS.md +0 -0
  137. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/carbon.py +0 -0
  138. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/cards.py +0 -0
  139. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/catalogue.py +0 -0
  140. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/cli.py +0 -0
  141. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/config.py +0 -0
  142. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/datasets.py +0 -0
  143. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/hf_export.py +0 -0
  144. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/inspect.py +0 -0
  145. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/io.py +0 -0
  146. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/packaging.py +0 -0
  147. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/paratext.example.toml +0 -0
  148. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/projects/__init__.py +0 -0
  149. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/projects/card_template/__init__.py +0 -0
  150. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/projects/card_template/prompt.md +0 -0
  151. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/projects/card_template/schema.py +0 -0
  152. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/records.py +0 -0
  153. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/__init__.py +0 -0
  154. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/hf_oauth.py +0 -0
  155. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/server.py +0 -0
  156. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/static/app.js +0 -0
  157. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/static/favicon.svg +0 -0
  158. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/static/index.html +0 -0
  159. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/static/oat.min.css +0 -0
  160. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/review/static/oat.min.js +0 -0
  161. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/runner.py +0 -0
  162. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/scaffold.py +0 -0
  163. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/sources.py +0 -0
  164. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/src/paratext/store.py +0 -0
  165. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_carbon.py +0 -0
  166. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_catalogue.py +0 -0
  167. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_cli.py +0 -0
  168. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_config.py +0 -0
  169. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_guide.py +0 -0
  170. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_hf_export.py +0 -0
  171. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_io.py +0 -0
  172. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_packaging.py +0 -0
  173. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_project_audit.py +0 -0
  174. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_records.py +0 -0
  175. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_review.py +0 -0
  176. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_rounds.py +0 -0
  177. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_runner.py +0 -0
  178. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_scaffold.py +0 -0
  179. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_show_through.py +0 -0
  180. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_sources.py +0 -0
  181. {paratext_cli-0.2.3 → paratext_cli-0.2.4}/tests/test_verso.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: paratext-cli
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Modular, project-based metadata extraction from digitised library/archive collections with a multimodal model
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -3,7 +3,7 @@
3
3
  # the plain name on PyPI belongs to an unrelated project, so the distribution
4
4
  # carries the `-cli` suffix.
5
5
  name = "paratext-cli"
6
- version = "0.2.3"
6
+ version = "0.2.4"
7
7
  description = "Modular, project-based metadata extraction from digitised library/archive collections with a multimodal model"
8
8
  readme = "README.md"
9
9
  # Core is pure-Python + numpy/pillow/pydantic. The [detector] extra needs
@@ -1,3 +1,3 @@
1
1
  """paratext — metadata extraction from digitised collections with a multimodal model."""
2
2
 
3
- __version__ = "0.2.3"
3
+ __version__ = "0.2.4"
@@ -84,6 +84,27 @@ def _guard_stale_output(output: Path, header: dict, project: str, re_extract: bo
84
84
  )
85
85
 
86
86
 
87
+ def _report_failures(attempted: int, succeeded: int, last_error: str, output: Path) -> None:
88
+ """A run where the model never answered is a failure, not an empty result.
89
+
90
+ Every call failing means one cause — a bad key, a wrong base-url, a model the
91
+ endpoint doesn't serve — so it stops with that cause instead of reporting
92
+ success over an empty file.
93
+ """
94
+ failed = attempted - succeeded
95
+ if not failed:
96
+ return
97
+ errors = output.with_name(output.stem + "_errors" + output.suffix)
98
+ if succeeded:
99
+ print(f"\n! {failed} of {attempted} sample(s) failed — see {errors}")
100
+ return
101
+ raise SystemExit(
102
+ f"\nAll {attempted} sample(s) failed — the model was never reached.\n"
103
+ f" last error: {last_error}\n"
104
+ f" Check --base-url, --model and the API key, then see {errors}."
105
+ )
106
+
107
+
87
108
  def run(
88
109
  project: Project,
89
110
  source: Path,
@@ -138,9 +159,12 @@ def run(
138
159
  if seen:
139
160
  logger.info("Resuming run — skipping %d already-processed sample(s)", len(seen))
140
161
 
162
+ attempted = succeeded = 0
163
+ last_error = ""
141
164
  for sample in tqdm(project.iter_samples(source, limit), unit="sample"):
142
165
  if sample.id in seen:
143
166
  continue
167
+ attempted += 1
144
168
  # A sample can be pre-classified by iter_samples (e.g. a deterministic
145
169
  # verso filter) to skip the model call entirely.
146
170
  pre = (sample.metadata or {}).get("preclassified")
@@ -154,6 +178,7 @@ def run(
154
178
  "elapsed_s": 0.0,
155
179
  },
156
180
  )
181
+ succeeded += 1
157
182
  continue
158
183
  t0 = time.monotonic()
159
184
  try:
@@ -188,6 +213,7 @@ def run(
188
213
  except Exception as e:
189
214
  append_error(output, sample.id, str(e))
190
215
  logger.warning("[%s] failed: %s", sample.id, e)
216
+ last_error = str(e)
191
217
  continue
192
218
  elapsed = time.monotonic() - t0
193
219
  record = {
@@ -197,6 +223,9 @@ def run(
197
223
  "elapsed_s": round(elapsed, 3),
198
224
  }
199
225
  append_jsonl(output, record)
226
+ succeeded += 1
227
+
228
+ _report_failures(attempted, succeeded, last_error, Path(output))
200
229
 
201
230
  for notice in getattr(project.source, "notices", []):
202
231
  logger.warning("%s", notice)
@@ -165,3 +165,44 @@ def test_guard_is_a_no_op_for_a_new_file(tmp_path):
165
165
  from paratext.extract import _guard_stale_output
166
166
 
167
167
  _guard_stale_output(tmp_path / "nope.jsonl", _header(), "p", False)
168
+
169
+
170
+ def test_report_failures_is_silent_when_all_succeeded(tmp_path, capsys):
171
+ from paratext.extract import _report_failures
172
+
173
+ _report_failures(3, 3, "", tmp_path / "out.jsonl")
174
+ assert capsys.readouterr().out == ""
175
+
176
+
177
+ def test_report_failures_notes_a_partial_failure(tmp_path, capsys):
178
+ from paratext.extract import _report_failures
179
+
180
+ _report_failures(5, 3, "boom", tmp_path / "out.jsonl")
181
+ out = capsys.readouterr().out
182
+ assert "2 of 5" in out and "out_errors.jsonl" in out
183
+
184
+
185
+ def test_report_failures_stops_when_nothing_succeeded(tmp_path):
186
+ import pytest
187
+
188
+ from paratext.extract import _report_failures
189
+
190
+ with pytest.raises(SystemExit, match="All 4 sample"):
191
+ _report_failures(4, 0, "401 unauthorized", tmp_path / "out.jsonl")
192
+
193
+
194
+ def test_report_failures_names_the_last_error(tmp_path):
195
+ import pytest
196
+
197
+ from paratext.extract import _report_failures
198
+
199
+ with pytest.raises(SystemExit, match="401 unauthorized"):
200
+ _report_failures(1, 0, "401 unauthorized", tmp_path / "out.jsonl")
201
+
202
+
203
+ def test_report_failures_ignores_a_run_with_nothing_to_do(tmp_path, capsys):
204
+ from paratext.extract import _report_failures
205
+
206
+ # A full resume attempts nothing; that is not a failure.
207
+ _report_failures(0, 0, "", tmp_path / "out.jsonl")
208
+ assert capsys.readouterr().out == ""
@@ -803,7 +803,7 @@ wheels = [
803
803
 
804
804
  [[package]]
805
805
  name = "paratext-cli"
806
- version = "0.2.3"
806
+ version = "0.2.4"
807
807
  source = { editable = "." }
808
808
  dependencies = [
809
809
  { name = "huggingface-hub" },
File without changes
File without changes
File without changes
File without changes
File without changes