classifyre-cli 0.4.112__tar.gz → 0.4.114__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 (286) hide show
  1. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/.turbo/turbo-build.log +1 -1
  2. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/PKG-INFO +1 -1
  3. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/package.json +1 -1
  4. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/pyproject.toml +1 -1
  5. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/outputs/rest.py +20 -5
  6. classifyre_cli-0.4.114/tests/test_rest_backpressure.py +150 -0
  7. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/uv.lock +61 -61
  8. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/.gitignore +0 -0
  9. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/.python-version +0 -0
  10. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/README.md +0 -0
  11. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/main.py +0 -0
  12. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/scripts/generate_models.py +0 -0
  13. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/__init__.py +0 -0
  14. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/config.py +0 -0
  15. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/__init__.py +0 -0
  16. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/base.py +0 -0
  17. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/broken_links/__init__.py +0 -0
  18. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/broken_links/detector.py +0 -0
  19. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/config.py +0 -0
  20. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/content/__init__.py +0 -0
  21. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/__init__.py +0 -0
  22. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/detector.py +0 -0
  23. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/extractor.py +0 -0
  24. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/__init__.py +0 -0
  25. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_base.py +0 -0
  26. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_factory.py +0 -0
  27. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_gliner2.py +0 -0
  28. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_image_classification.py +0 -0
  29. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_llm.py +0 -0
  30. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_object_detection.py +0 -0
  31. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_regex.py +0 -0
  32. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/runners/_text_classification.py +0 -0
  33. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/custom/trainer.py +0 -0
  34. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/dependencies.py +0 -0
  35. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/engine_version.py +0 -0
  36. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/pii/__init__.py +0 -0
  37. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/pii/detector.py +0 -0
  38. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/secrets/__init__.py +0 -0
  39. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/secrets/detector.py +0 -0
  40. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/threat/__init__.py +0 -0
  41. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/threat/code_security_detector.py +0 -0
  42. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/detectors/threat/yara_detector.py +0 -0
  43. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/file_evaluation/__init__.py +0 -0
  44. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/file_evaluation/runner.py +0 -0
  45. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/main.py +0 -0
  46. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/models/generated_detectors.py +0 -0
  47. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/models/generated_input.py +0 -0
  48. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/models/generated_single_asset_scan_results.py +0 -0
  49. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/outputs/__init__.py +0 -0
  50. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/outputs/base.py +0 -0
  51. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/outputs/console.py +0 -0
  52. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/outputs/factory.py +0 -0
  53. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/outputs/file.py +0 -0
  54. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/__init__.py +0 -0
  55. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/content_provider.py +0 -0
  56. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/detector_pipeline.py +0 -0
  57. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/parsed_content_provider.py +0 -0
  58. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/payload_window.py +0 -0
  59. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/scan_cache.py +0 -0
  60. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/text_artifact.py +0 -0
  61. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/pipeline/worker_pool.py +0 -0
  62. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/__init__.py +0 -0
  63. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/asset_metadata.py +0 -0
  64. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/atlassian_common.py +0 -0
  65. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/azure_blob_storage/__init__.py +0 -0
  66. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/azure_blob_storage/source.py +0 -0
  67. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/base.py +0 -0
  68. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/confluence/__init__.py +0 -0
  69. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/confluence/source.py +0 -0
  70. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/databricks/__init__.py +0 -0
  71. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/databricks/source.py +0 -0
  72. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/delta_lake/__init__.py +0 -0
  73. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/delta_lake/source.py +0 -0
  74. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/dependencies.py +0 -0
  75. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/dropbox/__init__.py +0 -0
  76. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/dropbox/auth.py +0 -0
  77. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/dropbox/source.py +0 -0
  78. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/elasticsearch/__init__.py +0 -0
  79. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/elasticsearch/source.py +0 -0
  80. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/email/__init__.py +0 -0
  81. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/email/source.py +0 -0
  82. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/git/__init__.py +0 -0
  83. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/git/source.py +0 -0
  84. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/google_cloud_storage/__init__.py +0 -0
  85. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/google_cloud_storage/source.py +0 -0
  86. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/google_workspace/__init__.py +0 -0
  87. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/google_workspace/source.py +0 -0
  88. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/hive/__init__.py +0 -0
  89. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/hive/source.py +0 -0
  90. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/hugging_face/__init__.py +0 -0
  91. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/hugging_face/source.py +0 -0
  92. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/iceberg/__init__.py +0 -0
  93. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/iceberg/source.py +0 -0
  94. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/jira/__init__.py +0 -0
  95. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/jira/source.py +0 -0
  96. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/kafka/__init__.py +0 -0
  97. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/kafka/rest.py +0 -0
  98. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/kafka/source.py +0 -0
  99. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/lakehouse_base.py +0 -0
  100. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/local_folder/__init__.py +0 -0
  101. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/local_folder/source.py +0 -0
  102. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/meilisearch/__init__.py +0 -0
  103. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/meilisearch/source.py +0 -0
  104. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/microsoft_365/__init__.py +0 -0
  105. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/microsoft_365/source.py +0 -0
  106. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/mongodb/__init__.py +0 -0
  107. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/mongodb/source.py +0 -0
  108. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/mssql/__init__.py +0 -0
  109. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/mssql/source.py +0 -0
  110. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/mysql/__init__.py +0 -0
  111. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/mysql/source.py +0 -0
  112. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/neo4j/__init__.py +0 -0
  113. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/neo4j/source.py +0 -0
  114. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/notion/__init__.py +0 -0
  115. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/notion/client.py +0 -0
  116. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/notion/source.py +0 -0
  117. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/object_storage/base.py +0 -0
  118. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/opensearch/__init__.py +0 -0
  119. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/opensearch/source.py +0 -0
  120. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/oracle/__init__.py +0 -0
  121. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/oracle/source.py +0 -0
  122. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/postgresql/__init__.py +0 -0
  123. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/postgresql/source.py +0 -0
  124. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/powerbi/__init__.py +0 -0
  125. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/powerbi/source.py +0 -0
  126. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/recipe_normalizer.py +0 -0
  127. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/reddit/__init__.py +0 -0
  128. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/reddit/source.py +0 -0
  129. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/s3_client.py +0 -0
  130. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/s3_compatible_storage/README.md +0 -0
  131. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/s3_compatible_storage/__init__.py +0 -0
  132. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/s3_compatible_storage/source.py +0 -0
  133. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/sandbox/__init__.py +0 -0
  134. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/sandbox/source.py +0 -0
  135. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/search_engine_base.py +0 -0
  136. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/servicedesk/__init__.py +0 -0
  137. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/servicedesk/source.py +0 -0
  138. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/slack/__init__.py +0 -0
  139. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/slack/source.py +0 -0
  140. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/snowflake/__init__.py +0 -0
  141. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/snowflake/source.py +0 -0
  142. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/sqlite/__init__.py +0 -0
  143. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/sqlite/source.py +0 -0
  144. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/tableau/__init__.py +0 -0
  145. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/tableau/source.py +0 -0
  146. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/tabular_base.py +0 -0
  147. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/tabular_utils.py +0 -0
  148. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/wordpress/__init__.py +0 -0
  149. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/wordpress/source.py +0 -0
  150. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/youtube/__init__.py +0 -0
  151. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/sources/youtube/source.py +0 -0
  152. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/telemetry.py +0 -0
  153. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/__init__.py +0 -0
  154. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/archive_extraction.py +0 -0
  155. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/content_extraction.py +0 -0
  156. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/dependency_groups.py +0 -0
  157. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/embedded_files.py +0 -0
  158. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/external_video.py +0 -0
  159. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/file_metadata.py +0 -0
  160. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/file_parser.py +0 -0
  161. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/file_to_images.py +0 -0
  162. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/hashing.py +0 -0
  163. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/legacy_office.py +0 -0
  164. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/payload.py +0 -0
  165. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/range_reader.py +0 -0
  166. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/resources.py +0 -0
  167. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/transcription.py +0 -0
  168. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/uv_sync.py +0 -0
  169. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/validation.py +0 -0
  170. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/src/utils/video_processing.py +0 -0
  171. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/__init__.py +0 -0
  172. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/_lakehouse_fakes.py +0 -0
  173. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/conftest.py +0 -0
  174. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/__init__.py +0 -0
  175. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
  176. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/conftest.py +0 -0
  177. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/content/__init__.py +0 -0
  178. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/__init__.py +0 -0
  179. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/conftest.py +0 -0
  180. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_gliner2_classification.py +0 -0
  181. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_invoice_extraction.py +0 -0
  182. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_llm_runner.py +0 -0
  183. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_pipeline_integration.py +0 -0
  184. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_regex_runner.py +0 -0
  185. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_runner_hardening.py +0 -0
  186. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/custom/test_transformer_runners.py +0 -0
  187. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/__init__.py +0 -0
  188. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/conftest.py +0 -0
  189. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/sample_invoice.pdf +0 -0
  190. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/test_pii_chunking.py +0 -0
  191. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/test_pii_detector.py +0 -0
  192. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
  193. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/test_pii_regional_entities.py +0 -0
  194. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/pii/test_pii_severity.py +0 -0
  195. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/secrets/__init__.py +0 -0
  196. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/secrets/test_secrets_detector.py +0 -0
  197. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
  198. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_base_detector.py +0 -0
  199. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
  200. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_detector_catalog_commercial.py +0 -0
  201. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_detector_pipeline_types.py +0 -0
  202. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_detector_schema_examples.py +0 -0
  203. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_detector_types.py +0 -0
  204. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_phase2_detectors.py +0 -0
  205. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/test_registry.py +0 -0
  206. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/threat/__init__.py +0 -0
  207. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/threat/test_code_security_detector.py +0 -0
  208. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/detectors/threat/test_yara_detector.py +0 -0
  209. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
  210. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/integration/test_wordpress_links_assets.py +0 -0
  211. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/pipeline/test_detector_outcomes.py +0 -0
  212. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/pipeline/test_detector_pipeline.py +0 -0
  213. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/pipeline/test_worker_pool.py +0 -0
  214. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_arrow_ipc_payloads.py +0 -0
  215. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_assets_metadata_catalog.py +0 -0
  216. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_azure_blob_storage_source.py +0 -0
  217. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_base_source_attachment.py +0 -0
  218. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_base_source_sampling.py +0 -0
  219. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_byte_valued_fields.py +0 -0
  220. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_config.py +0 -0
  221. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_confluence_source.py +0 -0
  222. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_custom_extractor.py +0 -0
  223. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_databricks_source.py +0 -0
  224. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_delta_lake_source.py +0 -0
  225. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_dependency_groups.py +0 -0
  226. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_dropbox_auth_command.py +0 -0
  227. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_dropbox_source.py +0 -0
  228. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_elasticsearch_source.py +0 -0
  229. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_email_source.py +0 -0
  230. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_file_evaluation_runner.py +0 -0
  231. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_git_source.py +0 -0
  232. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_google_cloud_storage_source.py +0 -0
  233. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_google_workspace_source.py +0 -0
  234. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_hashing.py +0 -0
  235. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_hive_source.py +0 -0
  236. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_hugging_face_source.py +0 -0
  237. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_iceberg_source.py +0 -0
  238. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_jira_source.py +0 -0
  239. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_kafka_source.py +0 -0
  240. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_local_folder_source.py +0 -0
  241. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_main.py +0 -0
  242. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_meilisearch_source.py +0 -0
  243. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_microsoft_365_source.py +0 -0
  244. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_mongodb_source.py +0 -0
  245. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_mssql_source.py +0 -0
  246. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_mysql_source.py +0 -0
  247. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_neo4j_source.py +0 -0
  248. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_notion_source.py +0 -0
  249. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_object_storage_download_efficiency.py +0 -0
  250. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_opensearch_source.py +0 -0
  251. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_oracle_source.py +0 -0
  252. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_outputs.py +0 -0
  253. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_payload_window.py +0 -0
  254. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_payload_window_parquet.py +0 -0
  255. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_postgresql_source.py +0 -0
  256. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_powerbi_source.py +0 -0
  257. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_range_reading.py +0 -0
  258. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_recipe_normalizer.py +0 -0
  259. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_reddit_source.py +0 -0
  260. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_s3_compatible_storage_source.py +0 -0
  261. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_sampling_automatic.py +0 -0
  262. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_sandbox_source.py +0 -0
  263. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_scan_cache.py +0 -0
  264. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_servicedesk_source.py +0 -0
  265. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_slack_source.py +0 -0
  266. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_snowflake_source.py +0 -0
  267. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_source_dependency_groups.py +0 -0
  268. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_source_strategy_conformance.py +0 -0
  269. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_sqlite_source.py +0 -0
  270. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_tableau_source.py +0 -0
  271. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_tabular_automatic_sampling.py +0 -0
  272. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_tabular_utils.py +0 -0
  273. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_uv_sync.py +0 -0
  274. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_wordpress_source.py +0 -0
  275. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_youtube_source.py +0 -0
  276. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/test_youtube_source_integration.py +0 -0
  277. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_archive_extraction.py +0 -0
  278. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_content_extraction.py +0 -0
  279. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_embedded_files.py +0 -0
  280. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_file_metadata.py +0 -0
  281. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_file_parser.py +0 -0
  282. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_file_to_images.py +0 -0
  283. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_legacy_office.py +0 -0
  284. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_payload.py +0 -0
  285. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_transcription.py +0 -0
  286. {classifyre_cli-0.4.112 → classifyre_cli-0.4.114}/tests/utils/test_video_processing.py +0 -0
@@ -1,3 +1,3 @@
1
1
  $ uv sync
2
- Resolved 309 packages in 387ms
2
+ Resolved 309 packages in 321ms
3
3
  Checked 51 packages in 1ms
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: classifyre-cli
3
- Version: 0.4.112
3
+ Version: 0.4.114
4
4
  Summary: Classifyre CLI — scan and classify unstructured data sources
5
5
  License: MIT
6
6
  Keywords: data,ingestion,metadata,pii,secrets,unstructured
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@classifyre/cli",
3
- "version": "0.4.112",
3
+ "version": "0.4.114",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "build": "uv sync",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "classifyre-cli"
3
- version = "0.4.112"
3
+ version = "0.4.114"
4
4
  description = "Classifyre CLI — scan and classify unstructured data sources"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -77,17 +77,32 @@ class _JitteredRetry(Retry):
77
77
  # attempt 5 → ~16 s
78
78
  # attempt 6 → ~32 s
79
79
  # attempt 7 → ~60 s (capped)
80
- # attempt 8 → ~60 s (capped)
81
- # Total extra wait: ~182 s (~3 min) — covers extended load spikes on a
82
- # single-node VPS before event-loop pressure drops.
80
+ # attempt 8+ → ~60 s (capped)
81
+ #
82
+ # Status retries are budgeted separately from — and much more generously than —
83
+ # connect/read, because the two failures mean opposite things. A connect/read
84
+ # failure is a broken request that will not fix itself by waiting much longer.
85
+ # A 503 is the API *deliberately* shedding an idempotent batch it wants us to
86
+ # send again (see AssetService.bulkIngest and CliBackpressureGuard); giving up
87
+ # on it discards ingested work, which is the one outcome backpressure exists to
88
+ # avoid. At 60 s per attempt past the ramp, _STATUS_RETRIES ≈ 30 minutes of
89
+ # patience: the CLI stalls under sustained pressure but the data still lands.
90
+ # Retry-After is honoured when the server sends it (urllib3 default), so the
91
+ # API can shorten or lengthen this on its own.
92
+ #
93
+ # total=None so the status budget is not silently capped by a smaller overall
94
+ # count — with total set, whichever limit is lowest wins.
83
95
  #
84
96
  # POST and PATCH are explicitly allowed: without this urllib3 only retries
85
97
  # idempotent methods (GET/HEAD) by default.
98
+ _STATUS_RETRIES = 32
99
+
86
100
  _RETRY_POLICY = _JitteredRetry(
87
- total=8,
101
+ total=None,
88
102
  connect=8,
89
103
  read=8,
90
- status=8,
104
+ status=_STATUS_RETRIES,
105
+ other=8,
91
106
  backoff_factor=2,
92
107
  backoff_max=60,
93
108
  status_forcelist={408, 429, 502, 503, 504},
@@ -0,0 +1,150 @@
1
+ """Backpressure contract between the CLI and the API.
2
+
3
+ The API sheds ingestion with 503 when its heap is near the V8 ceiling
4
+ (AssetService.bulkIngest / CliBackpressureGuard). That is only safe if the CLI
5
+ treats a 503 as "hold, then send this again" rather than as a failure: bulk
6
+ ingest is an idempotent upsert, so a retry costs a round trip, while giving up
7
+ silently discards assets and findings that were already extracted.
8
+
9
+ These tests pin that contract with a real socket server, because the thing that
10
+ can break it is the urllib3 Retry configuration, not our own code — and a
11
+ misconfiguration there (a `total` lower than `status`, a status code missing
12
+ from the forcelist) fails open, quietly, in exactly the case that matters.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ import threading
19
+ from http.server import BaseHTTPRequestHandler, HTTPServer
20
+ from typing import ClassVar
21
+
22
+ import pytest
23
+ import requests
24
+ from requests.adapters import HTTPAdapter
25
+
26
+ from src.outputs.rest import _RETRY_POLICY, _STATUS_RETRIES
27
+
28
+
29
+ class _FlakyHandler(BaseHTTPRequestHandler):
30
+ """Answers 503 for the first `unavailable_responses` calls, then 200."""
31
+
32
+ unavailable_responses: ClassVar[int] = 0
33
+ received_bodies: ClassVar[list[dict]] = []
34
+ calls: ClassVar[int] = 0
35
+
36
+ def do_POST(self) -> None:
37
+ type(self).calls += 1
38
+ length = int(self.headers.get("Content-Length", 0))
39
+ body = self.rfile.read(length)
40
+
41
+ if type(self).calls <= type(self).unavailable_responses:
42
+ self.send_response(503)
43
+ # Keeps the test fast: the CLI honours Retry-After, so the server
44
+ # picks the schedule instead of the ~2/4/8/16s exponential ramp.
45
+ # Note "0" would NOT work — urllib3 treats a falsy Retry-After as
46
+ # absent and falls back to its own backoff.
47
+ self.send_header("Retry-After", "1")
48
+ self.send_header("Content-Length", "0")
49
+ self.end_headers()
50
+ return
51
+
52
+ type(self).received_bodies.append(json.loads(body))
53
+ payload = b'{"ok": true}'
54
+ self.send_response(200)
55
+ self.send_header("Content-Type", "application/json")
56
+ self.send_header("Content-Length", str(len(payload)))
57
+ self.end_headers()
58
+ self.wfile.write(payload)
59
+
60
+ def log_message(self, *args: object) -> None:
61
+ pass
62
+
63
+
64
+ @pytest.fixture
65
+ def flaky_server():
66
+ def _start(unavailable_responses: int):
67
+ _FlakyHandler.unavailable_responses = unavailable_responses
68
+ _FlakyHandler.received_bodies = []
69
+ _FlakyHandler.calls = 0
70
+ server = HTTPServer(("127.0.0.1", 0), _FlakyHandler)
71
+ thread = threading.Thread(target=server.serve_forever, daemon=True)
72
+ thread.start()
73
+ return server
74
+
75
+ servers: list[HTTPServer] = []
76
+
77
+ def _factory(unavailable_responses: int) -> HTTPServer:
78
+ server = _start(unavailable_responses)
79
+ servers.append(server)
80
+ return server
81
+
82
+ yield _factory
83
+
84
+ for server in servers:
85
+ server.shutdown()
86
+ server.server_close()
87
+
88
+
89
+ def _session() -> requests.Session:
90
+ """A session wired exactly as RestOutput wires its own."""
91
+ session = requests.Session()
92
+ adapter = HTTPAdapter(max_retries=_RETRY_POLICY)
93
+ session.mount("http://", adapter)
94
+ session.mount("https://", adapter)
95
+ return session
96
+
97
+
98
+ def test_batch_survives_sustained_backpressure(flaky_server) -> None:
99
+ """The batch still lands after more 503s than the old budget allowed.
100
+
101
+ Nine is chosen deliberately: the previous policy was `total=8`, so this
102
+ exact scenario used to end with the assets discarded.
103
+ """
104
+ server = flaky_server(9)
105
+ url = f"http://127.0.0.1:{server.server_port}/assets/bulk"
106
+ batch = {"assets": [{"unique_id": "a1"}, {"unique_id": "a2"}]}
107
+
108
+ response = _session().post(url, json=batch, timeout=10)
109
+
110
+ assert response.status_code == 200
111
+ # The point of the whole exercise: the data arrived, unchanged, exactly
112
+ # once as far as the server's successful handling is concerned.
113
+ assert _FlakyHandler.received_bodies == [batch]
114
+
115
+
116
+ def test_status_budget_is_not_capped_by_total() -> None:
117
+ """`total` must not silently shorten the status budget.
118
+
119
+ urllib3 applies whichever limit is lowest, so a `total` of 8 would make a
120
+ `status` of 32 a lie — which is how the retry budget read as generous while
121
+ actually expiring after ~3 minutes. Asserted as configuration rather than
122
+ behaviour because waiting out 32 real backoffs would take ~28 minutes.
123
+ """
124
+ assert _RETRY_POLICY.total is None
125
+ assert _RETRY_POLICY.status == _STATUS_RETRIES
126
+ assert _STATUS_RETRIES >= 16
127
+
128
+ # The wall-clock patience that budget buys, at backoff_max per attempt
129
+ # once the ramp saturates.
130
+ patience_s = sum(
131
+ min(_RETRY_POLICY.backoff_factor * (2**i), _RETRY_POLICY.backoff_max)
132
+ for i in range(_RETRY_POLICY.status)
133
+ )
134
+ assert patience_s > 20 * 60
135
+
136
+
137
+ def test_backpressure_codes_are_all_retried() -> None:
138
+ for status in (408, 429, 502, 503, 504):
139
+ assert status in _RETRY_POLICY.status_forcelist
140
+
141
+ # Ingest is POST; urllib3 retries only idempotent methods unless told
142
+ # otherwise, and bulk ingest is an upsert so replay is safe.
143
+ assert "POST" in _RETRY_POLICY.allowed_methods
144
+ assert _RETRY_POLICY.respect_retry_after_header is True
145
+
146
+
147
+ def test_client_errors_are_not_retried() -> None:
148
+ """A rejected payload must fail fast, not be resent 32 times."""
149
+ for status in (400, 404, 422):
150
+ assert status not in _RETRY_POLICY.status_forcelist
@@ -562,30 +562,30 @@ wheels = [
562
562
 
563
563
  [[package]]
564
564
  name = "boto3"
565
- version = "1.43.70"
565
+ version = "1.43.71"
566
566
  source = { registry = "https://pypi.org/simple" }
567
567
  dependencies = [
568
568
  { name = "botocore" },
569
569
  { name = "jmespath" },
570
570
  { name = "s3transfer" },
571
571
  ]
572
- sdist = { url = "https://files.pythonhosted.org/packages/f6/20/68434d996c767e860329d78f2aaf1d7456173ba45f8d6fb8f4a394b85667/boto3-1.43.70.tar.gz", hash = "sha256:4f1e16b9eebbad3f312bb6fbf7685d40abdd52a691485cb9f09e7df60d912b41", size = 112688, upload-time = "2026-08-12T19:23:35.485Z" }
572
+ sdist = { url = "https://files.pythonhosted.org/packages/e0/ed/3220ca6396a7ce00a49aa6f43f20cae05ec6ac386e2b5d668adfad0b3eed/boto3-1.43.71.tar.gz", hash = "sha256:e3eddb6346ee23c895dd98e5c2cfc72cb5e5ed111aa6d4331f9e903a3e3bf4ee", size = 112630, upload-time = "2026-08-13T19:20:35.332Z" }
573
573
  wheels = [
574
- { url = "https://files.pythonhosted.org/packages/6e/d1/c95cae121ef5b77ecec08cb8e045eeb2a2c8ec605a5734b6f24bfb3a6326/boto3-1.43.70-py3-none-any.whl", hash = "sha256:b9399cce51bec9552e61a6b85015c42dea68752e79c00a7005d84eaf7ee15fef", size = 140028, upload-time = "2026-08-12T19:23:33.804Z" },
574
+ { url = "https://files.pythonhosted.org/packages/4f/16/7b54e7f5271756ab13beaaf6da03f62edcc3ee5ded651c2b17297e107040/boto3-1.43.71-py3-none-any.whl", hash = "sha256:3bb46661dc33121e56e3706753069d18f8dbcb644599cf098206546338602e16", size = 140024, upload-time = "2026-08-13T19:20:32.542Z" },
575
575
  ]
576
576
 
577
577
  [[package]]
578
578
  name = "botocore"
579
- version = "1.43.70"
579
+ version = "1.43.71"
580
580
  source = { registry = "https://pypi.org/simple" }
581
581
  dependencies = [
582
582
  { name = "jmespath" },
583
583
  { name = "python-dateutil" },
584
584
  { name = "urllib3" },
585
585
  ]
586
- sdist = { url = "https://files.pythonhosted.org/packages/2f/1a/ad4ff28cd0caa8ff4f39f18491169dc9ff4b2e359589be1f7108048e1915/botocore-1.43.70.tar.gz", hash = "sha256:a7bebdd0b1c8265e72759a4f7f61e9e43d57968b2c2a5e1e7b350d0a1e3ce81c", size = 15936837, upload-time = "2026-08-12T19:23:30.58Z" }
586
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/c2/98b8ff6a21a9ed99b0699f468446f26a679443b2bca46fcd6aaa0cfbae75/botocore-1.43.71.tar.gz", hash = "sha256:2cde7a55aaac86a2e9a3bcd2ce3fad1a31a4711749e10f350af231e55ccef7ed", size = 15943777, upload-time = "2026-08-13T19:20:29.292Z" }
587
587
  wheels = [
588
- { url = "https://files.pythonhosted.org/packages/69/b2/c16b4e2e7ccab1f0887c22fbe2d9859ceb4d35fb637cce8a380d51b52b06/botocore-1.43.70-py3-none-any.whl", hash = "sha256:95bc23a6472f8876349ae334b526e66006f6cf3c87bf39d3e9f057dc8c2eb85f", size = 15628519, upload-time = "2026-08-12T19:23:27.38Z" },
588
+ { url = "https://files.pythonhosted.org/packages/81/2f/700d973e3f0a37a275900be1a389af5a4ab67dd9362d17782b17f1045f0b/botocore-1.43.71-py3-none-any.whl", hash = "sha256:7bc3d5ddaca6f68e2eef707714264789048a6f496d375d976c560674f0cd1d1b", size = 15635728, upload-time = "2026-08-13T19:20:26.302Z" },
589
589
  ]
590
590
 
591
591
  [[package]]
@@ -923,7 +923,7 @@ wheels = [
923
923
 
924
924
  [[package]]
925
925
  name = "classifyre-cli"
926
- version = "0.4.112"
926
+ version = "0.4.114"
927
927
  source = { editable = "." }
928
928
  dependencies = [
929
929
  { name = "beautifulsoup4" },
@@ -1462,7 +1462,7 @@ youtube = [
1462
1462
 
1463
1463
  [[package]]
1464
1464
  name = "classifyre-schemas"
1465
- version = "0.4.112"
1465
+ version = "0.4.114"
1466
1466
  source = { editable = "../../packages/schemas" }
1467
1467
  dependencies = [
1468
1468
  { name = "fastjsonschema" },
@@ -1847,14 +1847,14 @@ wheels = [
1847
1847
 
1848
1848
  [[package]]
1849
1849
  name = "docling"
1850
- version = "2.119.0"
1850
+ version = "2.120.1"
1851
1851
  source = { registry = "https://pypi.org/simple" }
1852
1852
  dependencies = [
1853
1853
  { name = "docling-slim", extra = ["standard"] },
1854
1854
  ]
1855
- sdist = { url = "https://files.pythonhosted.org/packages/30/c2/f9fe1cc7780a41956c73e003773f002f9721671e9f76a2d19333e38f2e4c/docling-2.119.0.tar.gz", hash = "sha256:04b9aef29b9b94fc6e56fcd440824337d132a84074c7ba20b9cf055f220e72fb", size = 9016, upload-time = "2026-08-10T10:28:54.837Z" }
1855
+ sdist = { url = "https://files.pythonhosted.org/packages/83/a3/537c6f0ee2208e61538579f3dcf3abf5df4a4d6448c5c28c8574b5291903/docling-2.120.1.tar.gz", hash = "sha256:8ff9773147e7ce3588d67594239fb3b79be5733adfbf306ba46f4310fb1f61f0", size = 9013, upload-time = "2026-08-14T11:51:21.073Z" }
1856
1856
  wheels = [
1857
- { url = "https://files.pythonhosted.org/packages/1f/ea/37626a6ee6d4b26c14701b678eae81f53615c01afaa68b6b2367c4bbb09c/docling-2.119.0-py3-none-any.whl", hash = "sha256:3ff6f1dbe9f53ac034aca03c39fae374b381dc1eda4ad85d27a458fc13fbc917", size = 5180, upload-time = "2026-08-10T10:28:53.773Z" },
1857
+ { url = "https://files.pythonhosted.org/packages/16/90/ec73628602e3a49544f3c6a6a4fde02e0f6053d58e9b4279bc0839a55f8e/docling-2.120.1-py3-none-any.whl", hash = "sha256:04897c566285bf2df166ccae6acd285f1d41e2336755a89d05be515be2090bc3", size = 5179, upload-time = "2026-08-14T11:51:19.875Z" },
1858
1858
  ]
1859
1859
 
1860
1860
  [[package]]
@@ -1922,7 +1922,7 @@ wheels = [
1922
1922
 
1923
1923
  [[package]]
1924
1924
  name = "docling-parse"
1925
- version = "7.12.1"
1925
+ version = "7.13.0"
1926
1926
  source = { registry = "https://pypi.org/simple" }
1927
1927
  dependencies = [
1928
1928
  { name = "docling-core" },
@@ -1930,28 +1930,28 @@ dependencies = [
1930
1930
  { name = "pydantic" },
1931
1931
  { name = "pywin32", marker = "sys_platform == 'win32'" },
1932
1932
  ]
1933
- sdist = { url = "https://files.pythonhosted.org/packages/82/00/ab56de324d844cf5862f46f5c95dc18c5ee52dbb83d794c274c8e520373d/docling_parse-7.12.1.tar.gz", hash = "sha256:25c8759b19292ad8cf31e1b133980c30f0fd8800b510c02c56a3af5dbb989232", size = 6828762, upload-time = "2026-08-12T08:36:48.18Z" }
1933
+ sdist = { url = "https://files.pythonhosted.org/packages/ba/80/861612a7ee977ec27cf4966337cbfa9033e9a58378fbeb0449e732b6fe31/docling_parse-7.13.0.tar.gz", hash = "sha256:23575b21b8722466899135340b254124792d0c19d18cd223cad437dc4283f8f5", size = 6864422, upload-time = "2026-08-14T06:28:50.233Z" }
1934
1934
  wheels = [
1935
- { url = "https://files.pythonhosted.org/packages/ba/ff/4d4464e3e74dd54a47e0c811779a378f1f0b22b74adb2874bcc38885a3b5/docling_parse-7.12.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ff5ac71bc2a702cbc7bd4fd7c2fcbf6af483c982af4bae36fb727a9db169a849", size = 9667688, upload-time = "2026-08-12T08:36:20.274Z" },
1936
- { url = "https://files.pythonhosted.org/packages/6a/41/24b6303e0e5e79c3ea8d2daea0cdcbe95a3d71a0b1715bd5345ac7a3ba5a/docling_parse-7.12.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3c91f46776ba2aa3c31667747f4f39e91f8c1b58e391663c5e44d7bb416a3f6", size = 10191724, upload-time = "2026-08-12T08:36:22.102Z" },
1937
- { url = "https://files.pythonhosted.org/packages/53/31/951fc8740f2ab6ab1fb9a1d223269d082eedf8a4b1dcbee42da81a395efc/docling_parse-7.12.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:33fc4afd8b46a2c760a8ca4558b4d744d6c9d207318581f3234fec3df91ca85f", size = 10577523, upload-time = "2026-08-12T08:36:23.821Z" },
1938
- { url = "https://files.pythonhosted.org/packages/37/b9/0c17dfa3571705f4bdd698d929c4003cfc249d117c7317ae82a294cc18a3/docling_parse-7.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:344c7f1da55be7fc992045fb5ff07b411e589b1da62a8f943842ac7ac986245a", size = 11639307, upload-time = "2026-08-12T08:36:25.954Z" },
1939
- { url = "https://files.pythonhosted.org/packages/30/5b/5f589310d243b006d145c8e4cd0d9770accf2048ba6ad08d7608ac1f6e58/docling_parse-7.12.1-cp312-cp312-win_arm64.whl", hash = "sha256:cfddd1f3a3631e87d4c965b4ffd0dc95e249b046af0a6b8916e129285fb0e80c", size = 8964784, upload-time = "2026-08-12T08:36:27.94Z" },
1940
- { url = "https://files.pythonhosted.org/packages/0d/35/510104ef0f0f01e985fb4eeb9269aaec964e80dda4b64077d19099923782/docling_parse-7.12.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:b3a740f373f00c87555cdbbf996b726df1e99a9de5d95a24484f71d1f7394077", size = 9667627, upload-time = "2026-08-12T08:36:29.713Z" },
1941
- { url = "https://files.pythonhosted.org/packages/48/7b/6bab4aba25c7356f6afff8e067e6e2ced71767db7f0b1698537e27ff8853/docling_parse-7.12.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61a2f203a8e4ce5cd27fba2b6de4474eb11b5e6e1e17116e0dd349376d234d6d", size = 10191624, upload-time = "2026-08-12T08:36:31.408Z" },
1942
- { url = "https://files.pythonhosted.org/packages/8e/17/4cb450252bb8a38ffb98aa7f5f42bd35d300808d42e46a96849890993e84/docling_parse-7.12.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5c015e19e9be88ce001115a1913bf6addf4c2931c3556e9cf2a10b596bbe46d", size = 10577661, upload-time = "2026-08-12T08:36:33.227Z" },
1943
- { url = "https://files.pythonhosted.org/packages/f3/e2/8ca2efcd457a2a040e9dc1af73100c17d72c20cd7bf1b1d8b20e51abc771/docling_parse-7.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:24b29a5ca40071b3d5ea7494c22a5552f4d9d29bf93bdfc1925986d922feff5f", size = 11639305, upload-time = "2026-08-12T08:36:35.055Z" },
1944
- { url = "https://files.pythonhosted.org/packages/e5/4b/b59a91e8e63a855b54905aaba39c1f06d4f95cad5c0c160f9995a6257701/docling_parse-7.12.1-cp313-cp313-win_arm64.whl", hash = "sha256:4f73b41fda9c4fa6beb6c3d685071dd28a2c1f00e69f0133fbc15bda8c0f7ab7", size = 8964612, upload-time = "2026-08-12T08:36:36.772Z" },
1945
- { url = "https://files.pythonhosted.org/packages/04/57/97ec433850b8e7706943a8de0cf65774f043ae393a5d86703e7e8658d71e/docling_parse-7.12.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:447ced8771f7053f9f834efec363d578d92598119b95e83bed2551c185a7355f", size = 9668271, upload-time = "2026-08-12T08:36:38.58Z" },
1946
- { url = "https://files.pythonhosted.org/packages/f2/ce/6c213b6599ca8b0c93a8cf11077f2c38b2ed48a2d05e42e3c091b5245642/docling_parse-7.12.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e4c806e63f5e6dcf63643d3472b241e7786653bad82321c95b937b69942a5e", size = 10192440, upload-time = "2026-08-12T08:36:40.529Z" },
1947
- { url = "https://files.pythonhosted.org/packages/ea/a7/17cd8d4c691c025a9515bd0ab81c8de502988fa257ba2fdccdb973b5c53e/docling_parse-7.12.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fff030c85eb85fc6589bdabc64bdc58a0c82cd6e0870ff9cf55114be525f46f5", size = 10578105, upload-time = "2026-08-12T08:36:42.238Z" },
1948
- { url = "https://files.pythonhosted.org/packages/63/c5/0dfb8eb4ea12f7f361beb8c342c115774524f7cea0a1feeba273f572fb27/docling_parse-7.12.1-cp314-cp314-win_amd64.whl", hash = "sha256:8a3debe619e2303442139472ec39a21cdb4714b27d026cf0c34233411779c8c4", size = 12072065, upload-time = "2026-08-12T08:36:43.985Z" },
1949
- { url = "https://files.pythonhosted.org/packages/c7/45/7fdcf5c321ab3d0c2047edd844c75633d9c60abc043083f6dab95a1b1b39/docling_parse-7.12.1-cp314-cp314-win_arm64.whl", hash = "sha256:6488966275412d599aa2fcd0920cea38bb20ac937aeb5bd135ea5354c6dcb5b6", size = 9329032, upload-time = "2026-08-12T08:36:46.533Z" },
1935
+ { url = "https://files.pythonhosted.org/packages/68/95/45b9a5cfd04853bf2a8ebe54722096ee6969a19142cfa39f320dc3254322/docling_parse-7.13.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:21eb89636a9707c484f7d73dae0e56f64807869281716ccb511c55a5adf3121f", size = 9698711, upload-time = "2026-08-14T06:28:12.256Z" },
1936
+ { url = "https://files.pythonhosted.org/packages/0d/72/269de56bbb4eec9255d4f5b89a0fa0996b1fd697bfc15e3f959a53adc285/docling_parse-7.13.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a1f7d03e74e1fd6e8f11bff03c47b1300e259ea1b1ffd733166001d237baec9", size = 10223985, upload-time = "2026-08-14T06:28:14.875Z" },
1937
+ { url = "https://files.pythonhosted.org/packages/dd/4a/45a7ba9b8694ab552613cd4d93df1d60905023857cfee1a99289aa3f89c3/docling_parse-7.13.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f68c5dffee3e0596e0f8ee4efdb30ee52bec59b913170eaa082d0cc2f287c259", size = 10614327, upload-time = "2026-08-14T06:28:17.228Z" },
1938
+ { url = "https://files.pythonhosted.org/packages/6e/f7/4f18b540c6dc1f513abf38e9c7f9d1f25f664fed9af6bc52cb099ef09a78/docling_parse-7.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:f683f3ad7b428b18e236e0175dbff897619f9433d39aac6d16a859263ec4125b", size = 11673968, upload-time = "2026-08-14T06:28:19.568Z" },
1939
+ { url = "https://files.pythonhosted.org/packages/35/7a/f203bacb44f1e4113894b26479261dc400137e5675e670e0ffe2d9d75adb/docling_parse-7.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:a73f3ecc446aa8832396eeb49f64924304b7eb52c473ae9a610ec6b4a1b06e2f", size = 8992588, upload-time = "2026-08-14T06:28:23.477Z" },
1940
+ { url = "https://files.pythonhosted.org/packages/68/a6/427efea60890d2962005039260a61ecba4cd23a0e2a83b116e7064bc1c62/docling_parse-7.13.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9cc2cdf4aed0c83d690c733259c1a7a38e9690e2b42bae39b3f6ff1d289194ae", size = 9698752, upload-time = "2026-08-14T06:28:25.835Z" },
1941
+ { url = "https://files.pythonhosted.org/packages/2f/d9/16593f172dce343fb9b5fbb6711070dd898bd52d05afe7fb38182d0c2588/docling_parse-7.13.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:979978f903bb1b387429eb7e0cbc44eb877080c4f2129c8b637e24100bd75ff5", size = 10223995, upload-time = "2026-08-14T06:28:28.518Z" },
1942
+ { url = "https://files.pythonhosted.org/packages/1c/da/e4bc26a0345d0651779bfb04f5cd99552a3fac1fca2681d88b67a27348d9/docling_parse-7.13.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac73eb49b6194d40d58f01eba6e134bea857667f6aa99dc2371cf3d24d5fd817", size = 10614354, upload-time = "2026-08-14T06:28:30.871Z" },
1943
+ { url = "https://files.pythonhosted.org/packages/e2/b8/a40158593b3293a8364d62cf2866a29e71f0d909f46c2413e4c98f127142/docling_parse-7.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:f16952a2cc2a609f444bf0d6fe7ee1d9b35f1d38f26ebb7f208652a8c7999b71", size = 11673865, upload-time = "2026-08-14T06:28:33.354Z" },
1944
+ { url = "https://files.pythonhosted.org/packages/13/af/f255fcd2d2b5987c2e3b6dae5d42283266720c775f32e6a1503b5c6683f2/docling_parse-7.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:30c612b0378233d6dbc4b76a10a4fb1492c975a50121aa3a8f691b1dd6ba8298", size = 8992516, upload-time = "2026-08-14T06:28:35.64Z" },
1945
+ { url = "https://files.pythonhosted.org/packages/43/8f/452ea0ccdc577d7cdab49b21a97463650cf29447b381dc79866032f9a87b/docling_parse-7.13.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1404f4292303c53c8d7822957888edb3c2ffc9029f6289862150af09cd2263d1", size = 9699328, upload-time = "2026-08-14T06:28:38.109Z" },
1946
+ { url = "https://files.pythonhosted.org/packages/3e/ec/f23d35ccd988e8c3e2960bf9475713387e87fe1b56747fc5700f8e5e695b/docling_parse-7.13.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:764a4cfa366e430ded399d505e39f91cb1f7060dece48a83c49512b2acd57928", size = 10224649, upload-time = "2026-08-14T06:28:40.433Z" },
1947
+ { url = "https://files.pythonhosted.org/packages/92/d2/063dcaa311702a2500e4d063f08e7134d048c000813235e5e085d3d4a1e1/docling_parse-7.13.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbe720eab2ae5b38928872953acd4ac693c7c79ef340203285b7345dd4ba3a42", size = 10614598, upload-time = "2026-08-14T06:28:42.955Z" },
1948
+ { url = "https://files.pythonhosted.org/packages/d2/75/9c9bace0574c2aaf2b9332083446c563dd0356ca0651d74f2c41bbdd334e/docling_parse-7.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:9ff2657c8950225a894558a0ff9c8198af3ed813c4e945e5c1995b8892c17dce", size = 12107442, upload-time = "2026-08-14T06:28:45.362Z" },
1949
+ { url = "https://files.pythonhosted.org/packages/5c/09/ba429e3ed8566d5dc00b72064c2d223595ecd6666cd3b3a5b781cd1d9297/docling_parse-7.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:28c7881ee8fec08d119d661966f6cbf581b9da5896bddd4221732b6e17993121", size = 9359125, upload-time = "2026-08-14T06:28:47.667Z" },
1950
1950
  ]
1951
1951
 
1952
1952
  [[package]]
1953
1953
  name = "docling-slim"
1954
- version = "2.119.0"
1954
+ version = "2.120.1"
1955
1955
  source = { registry = "https://pypi.org/simple" }
1956
1956
  dependencies = [
1957
1957
  { name = "certifi" },
@@ -1963,9 +1963,9 @@ dependencies = [
1963
1963
  { name = "requests" },
1964
1964
  { name = "tqdm" },
1965
1965
  ]
1966
- sdist = { url = "https://files.pythonhosted.org/packages/08/8b/7eb40b83cb91ecd899faeaf421c81df20054053e3cc64cafbd6ce0c530cd/docling_slim-2.119.0.tar.gz", hash = "sha256:7b4ee3891e536403f07b6ab702bc757d6c3e4fe146475656d97cf911ac96db8f", size = 582133, upload-time = "2026-08-10T10:27:35.891Z" }
1966
+ sdist = { url = "https://files.pythonhosted.org/packages/f0/5b/3bd25d1832168ce15b788d3e995c7c0e2aa4bb3dd226aaa6adce44ef4d66/docling_slim-2.120.1.tar.gz", hash = "sha256:451622619c08fa75cb9fc7a4deb3c2f165be33503d46226f4c63024a863be64c", size = 588136, upload-time = "2026-08-14T11:49:56.896Z" }
1967
1967
  wheels = [
1968
- { url = "https://files.pythonhosted.org/packages/51/09/74f745d6178dbec12eb503261f87b0bb947fac5b122cea2e6d3c433ce7ae/docling_slim-2.119.0-py3-none-any.whl", hash = "sha256:ca385bc6b0ca99a4f0bba07feaa4c0fc4d5fa685a22184baa79de4bd87598323", size = 723087, upload-time = "2026-08-10T10:27:34.074Z" },
1968
+ { url = "https://files.pythonhosted.org/packages/96/dd/9f5bad579bfd712075ea4a56b7e35036cbe5bc9c39a2b668003d15a6b8a5/docling_slim-2.120.1-py3-none-any.whl", hash = "sha256:97e0275ff06865df4b9a4162d01674401e4046d85e012b923f6eb8fc53441732", size = 729536, upload-time = "2026-08-14T11:49:54.741Z" },
1969
1969
  ]
1970
1970
 
1971
1971
  [package.optional-dependencies]
@@ -2176,11 +2176,11 @@ wheels = [
2176
2176
 
2177
2177
  [[package]]
2178
2178
  name = "filelock"
2179
- version = "3.32.2"
2179
+ version = "3.32.3"
2180
2180
  source = { registry = "https://pypi.org/simple" }
2181
- sdist = { url = "https://files.pythonhosted.org/packages/f6/57/3ba6e6cb097f85b855b00163d169f35365f44277df044dcf96d55b8f62a3/filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8", size = 217172, upload-time = "2026-07-29T22:46:04.895Z" }
2181
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/64/a02e6765de08964ed371eca577870593245afc9dfac16d037de7c10d18e6/filelock-3.32.3.tar.gz", hash = "sha256:0ffa185a3540854c95caa7fa76b76cb219d907415e2c5dc9af25fd970563487f", size = 218135, upload-time = "2026-08-13T16:00:05.577Z" }
2182
2182
  wheels = [
2183
- { url = "https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82", size = 98830, upload-time = "2026-07-29T22:46:03.52Z" },
2183
+ { url = "https://files.pythonhosted.org/packages/a7/8e/50f46a9c0ce8d2861a394c1347caae037ea0431d2f67d7feb151cbc4649a/filelock-3.32.3-py3-none-any.whl", hash = "sha256:7f0ca4bcc0e181c60dbbd8aa9ab5b120ebb99e4e064e83636340056f833a1f09", size = 98901, upload-time = "2026-08-13T16:00:03.974Z" },
2184
2184
  ]
2185
2185
 
2186
2186
  [[package]]
@@ -4366,11 +4366,11 @@ wheels = [
4366
4366
 
4367
4367
  [[package]]
4368
4368
  name = "platformdirs"
4369
- version = "4.11.2"
4369
+ version = "4.11.3"
4370
4370
  source = { registry = "https://pypi.org/simple" }
4371
- sdist = { url = "https://files.pythonhosted.org/packages/e5/98/0bf930c4f97d0266b58a89e36c015f56232c52b5d2f207215d48cca9e8f7/platformdirs-4.11.2.tar.gz", hash = "sha256:3a2ae5fca3520a01ab1be8b45613537f52ddf5b5f6f53d88233892dfbf0cd82d", size = 32716, upload-time = "2026-08-10T15:48:06.092Z" }
4371
+ sdist = { url = "https://files.pythonhosted.org/packages/b8/d7/e7bfbc86e9f99ff7807e24de7703f032e9c9ba80bb355cf26e0e9bc5a75e/platformdirs-4.11.3.tar.gz", hash = "sha256:66a73d38a849810252df809a3d8bcbda8e26f6c189920e7535ad608a48dbb5ab", size = 33050, upload-time = "2026-08-13T22:43:27.52Z" }
4372
4372
  wheels = [
4373
- { url = "https://files.pythonhosted.org/packages/49/e2/4e6eee633809c376c024821b91ade709cbfd040ec53939ffbcc292aa7eee/platformdirs-4.11.2-py3-none-any.whl", hash = "sha256:7f89089b6ea71bda7962953edcf784b2e2d9d285b40ad88be2bb75c6e9d82ab4", size = 23361, upload-time = "2026-08-10T15:48:04.855Z" },
4373
+ { url = "https://files.pythonhosted.org/packages/19/a9/c34aebedd3a4c9afe5101b1b8713710b3fec18087c8a36c35d2f909861bd/platformdirs-4.11.3-py3-none-any.whl", hash = "sha256:5ed065d443751de711da036041a7a214122efc4a4de393b3f4137ba5576540e7", size = 23491, upload-time = "2026-08-13T22:43:26.121Z" },
4374
4374
  ]
4375
4375
 
4376
4376
  [[package]]
@@ -5201,11 +5201,11 @@ wheels = [
5201
5201
 
5202
5202
  [[package]]
5203
5203
  name = "pyphen"
5204
- version = "0.18.0"
5204
+ version = "0.18.1"
5205
5205
  source = { registry = "https://pypi.org/simple" }
5206
- sdist = { url = "https://files.pythonhosted.org/packages/ad/fb/dac486dca9e6a82437596614073e7236aed0e73a4b7913ccdefd325b236b/pyphen-0.18.0.tar.gz", hash = "sha256:bc8718e50d80c1bfb4d38a476fc708a6b5bf904549db130f06ca20376971393e", size = 2110506, upload-time = "2026-08-13T11:57:06.995Z" }
5206
+ sdist = { url = "https://files.pythonhosted.org/packages/94/47/8430452269cd28863d73b903d07d329d058cf762527ff211b3864ba61fc7/pyphen-0.18.1.tar.gz", hash = "sha256:dbae6fbbe4f01cb206108b43573d857c67107be9d0e38eb1b08d6fa2210634a7", size = 2116411, upload-time = "2026-08-14T11:30:12.083Z" }
5207
5207
  wheels = [
5208
- { url = "https://files.pythonhosted.org/packages/44/3d/fd5b56a0e27e81fe884bbf3361fb69ce8d47f55de09f73dcd388926f1cab/pyphen-0.18.0-py3-none-any.whl", hash = "sha256:92d96000b81b58d9388a63604000d3787f3f7dc5174deb2a58c528b77db3a720", size = 2116143, upload-time = "2026-08-13T11:57:04.756Z" },
5208
+ { url = "https://files.pythonhosted.org/packages/ec/1d/23801cf008f71575f0a4800463f349afa5f04b27fe783178a45cdc4d5edf/pyphen-0.18.1-py3-none-any.whl", hash = "sha256:0aa9051e15928cecadd4c632cea0258ba57215b2a197a39baa46abcdb0f47e84", size = 2116143, upload-time = "2026-08-14T11:30:10.428Z" },
5209
5209
  ]
5210
5210
 
5211
5211
  [[package]]
@@ -5810,27 +5810,27 @@ wheels = [
5810
5810
 
5811
5811
  [[package]]
5812
5812
  name = "ruff"
5813
- version = "0.16.2"
5814
- source = { registry = "https://pypi.org/simple" }
5815
- sdist = { url = "https://files.pythonhosted.org/packages/73/e1/4508a569211b35599016e84ba65c1a992b7a4004b4b6c4bea02a851cba1b/ruff-0.16.2.tar.gz", hash = "sha256:c3d7828d12e8927a6fc65fe38e2c2541b9e762d360a1786d752cb1b8883b3c9c", size = 4885811, upload-time = "2026-08-07T13:31:01.432Z" }
5816
- wheels = [
5817
- { url = "https://files.pythonhosted.org/packages/14/57/db19951540f98859c956b50bdb4d31089b4d91e9f15e2968e7d5193806d5/ruff-0.16.2-py3-none-linux_armv6l.whl", hash = "sha256:3c8de4cf2181f01d57946d87d777aa52916976fc09942aed89938fab5e013318", size = 10847925, upload-time = "2026-08-07T13:30:14.468Z" },
5818
- { url = "https://files.pythonhosted.org/packages/13/5a/995fe85a8470d3e391ac0f7fa8054bb454eaf33ee138196d6172ed1079c0/ruff-0.16.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a48cc05c6fbc811ca81b5d7ba95375affea6582d1b8024e455e41afbbf55344", size = 11072662, upload-time = "2026-08-07T13:30:18.143Z" },
5819
- { url = "https://files.pythonhosted.org/packages/32/53/370d767c61c71a971a4ace36703a7ecd8c393956349a7325d7fab2b56827/ruff-0.16.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a2c0d14fcbb26c91f0f867a6dc9bd71bbc30b1b6151829c884f23faeab2e5700", size = 10566771, upload-time = "2026-08-07T13:30:20.899Z" },
5820
- { url = "https://files.pythonhosted.org/packages/85/d6/9d96948caf5a632be62d62202d5ec914d6856f204fd79eb036e5915e79ea/ruff-0.16.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:335c621622c4650330be50842561c6586ac6971bb8ab5407fe34dcc9efb16bbe", size = 10975825, upload-time = "2026-08-07T13:30:23.517Z" },
5821
- { url = "https://files.pythonhosted.org/packages/3b/92/ea87129b3414acb0b5770563779c51804d37ac67675c7ba35447ddb14773/ruff-0.16.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e66910f2c37cc753f9ef6580c914a621b80c4fa3549d3e3521e29d0f5bfc3f", size = 10649437, upload-time = "2026-08-07T13:30:26.097Z" },
5822
- { url = "https://files.pythonhosted.org/packages/ac/43/f8f291dcd4af5bb7872b74fdfa41a7cd7c856ca1d4069670971cf1b9f5cb/ruff-0.16.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e36fbfba65510548156902bcf1350a979a958ce0347ce0f90d73894036b39f", size = 11446761, upload-time = "2026-08-07T13:30:28.752Z" },
5823
- { url = "https://files.pythonhosted.org/packages/71/4a/ef991fb2fcf516ab71f0808adcdd8da5e18c8cde447f4ceaf5f47a5132a5/ruff-0.16.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0eab35f80df8f134aae5d1630e751901321d317cc8e50dc39e36fa3ed34cd12", size = 12336364, upload-time = "2026-08-07T13:30:31.468Z" },
5824
- { url = "https://files.pythonhosted.org/packages/f3/24/f615e74f307e6ca0e56a482872477b856c70d530aa356abfb6dfe5ca8a80/ruff-0.16.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ea8c0594feb894e89c8c61ab9c103d38b0ea72dfde6c594107147ca31b1140", size = 11630720, upload-time = "2026-08-07T13:30:34.426Z" },
5825
- { url = "https://files.pythonhosted.org/packages/c5/d3/8ef50149e8412a77f7ab409efdef0e2b23803707a3863da4fc64cb23d459/ruff-0.16.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab3d62dde0b19facdd632008cc4827fc28ada7736c6bd35ab6f1050f0bfed53f", size = 11466130, upload-time = "2026-08-07T13:30:36.958Z" },
5826
- { url = "https://files.pythonhosted.org/packages/dd/a7/a19334985c4dea8c381981fa252cd854c7ee52dc4b1686dc16f4a911c702/ruff-0.16.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e43e1f5b8388da9eca1b9e88328d47a5cec794633ccf6f7484ac2dd15eee92c0", size = 11523634, upload-time = "2026-08-07T13:30:39.822Z" },
5827
- { url = "https://files.pythonhosted.org/packages/6e/6c/96d192b0e742412ceda08c0a50f9669b253dde9fd6a60ea1a10c9fa79a63/ruff-0.16.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c24788a980581e1d7ea3a0cbe4344c4fbeb0a6a9b1f4713aa46bb104f8294690", size = 10949807, upload-time = "2026-08-07T13:30:42.745Z" },
5828
- { url = "https://files.pythonhosted.org/packages/fa/51/e26599ceca11e79ee255c7df515995561edf87e9ca1893284e44d98f5a86/ruff-0.16.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:81806b08329130005dd4a8a8394a0c9da8c6f4cafb16ba438d2a2ee6a18bedf1", size = 10646891, upload-time = "2026-08-07T13:30:45.522Z" },
5829
- { url = "https://files.pythonhosted.org/packages/68/01/800c4b1f97bc8d7c6029e06b1f20473a3cf1e13c4933d8f3342add83fc55/ruff-0.16.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4ce4e02bad779bef557f541a1b31f20d6abeae1cc05ed1b1ac019d4ffd1044c8", size = 11162063, upload-time = "2026-08-07T13:30:48.131Z" },
5830
- { url = "https://files.pythonhosted.org/packages/e4/d0/1477ea50fc5a0d4b0b71d1d63d50770bdd794d90b43e37a7618e63ec9894/ruff-0.16.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e0422abdf70070255fc4073ce9dfc814cc03db577013761ddd09bc1e4a9a4fbd", size = 11556038, upload-time = "2026-08-07T13:30:50.686Z" },
5831
- { url = "https://files.pythonhosted.org/packages/b8/76/a7776f32048d991e16d4fa8ff91790b877342d3596cc3ed04acdbf1aaedc/ruff-0.16.2-py3-none-win32.whl", hash = "sha256:bf3a63d78fb39f4bf5ac8ae52051c5520505301abe19ba4e204c453b3f09bb0b", size = 10872850, upload-time = "2026-08-07T13:30:53.471Z" },
5832
- { url = "https://files.pythonhosted.org/packages/00/0d/929c800d920e61397d82a01b60bffc68da3052c17d31de59efaad2e4ed75/ruff-0.16.2-py3-none-win_amd64.whl", hash = "sha256:bcabe2f6d0fc7819f1431793005af4e4de7371927d037345bf941252b195b9fa", size = 12023338, upload-time = "2026-08-07T13:30:56.193Z" },
5833
- { url = "https://files.pythonhosted.org/packages/5b/6c/93e26c22c5f78ff87363e07da49c84955affbeb1098bd1936bf3b3f293bf/ruff-0.16.2-py3-none-win_arm64.whl", hash = "sha256:d614e95cedf38a2053fd351c55b103ba30d017d61688fdbfd40ee0412852a99f", size = 11374065, upload-time = "2026-08-07T13:30:58.775Z" },
5813
+ version = "0.16.3"
5814
+ source = { registry = "https://pypi.org/simple" }
5815
+ sdist = { url = "https://files.pythonhosted.org/packages/61/b3/3213589383f8f1b3938781bd1278713f6d18621a14992b3e81fefb8a5ef9/ruff-0.16.3.tar.gz", hash = "sha256:e76d33a347661a84b5be6d043d0347fdc745dfdcf825a8f4fed64b5e26eebdf2", size = 4891904, upload-time = "2026-08-13T15:17:13.381Z" }
5816
+ wheels = [
5817
+ { url = "https://files.pythonhosted.org/packages/bf/96/493770daebd68c0a67f1549fdf519f53be51fc435186c0585bcc272fd76c/ruff-0.16.3-py3-none-linux_armv6l.whl", hash = "sha256:0c5710e247a58a4521e66e124ba9a74655b414f61ba3a2e9e3811e11098f48f7", size = 10902799, upload-time = "2026-08-13T15:16:27.382Z" },
5818
+ { url = "https://files.pythonhosted.org/packages/5e/e6/2becf3942fddc29a29b8df47691d456fb1085391a694f74d84513251418c/ruff-0.16.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fe155130631a2471fd2e14a7a664a4dfbd7194b8229c3d7b2a40b21178639081", size = 11135539, upload-time = "2026-08-13T15:16:30.87Z" },
5819
+ { url = "https://files.pythonhosted.org/packages/3e/1e/4b8b72f0d006dbf19326aa99f9ca0ee2ff374187c4d301cf529a51aa06fe/ruff-0.16.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e2ed719e14aa64d895c2ee922594a90a43c861a93f0575a95ff8c47cdbd13eb9", size = 10475095, upload-time = "2026-08-13T15:16:33.259Z" },
5820
+ { url = "https://files.pythonhosted.org/packages/92/32/2201fa49ba1f6c101ee321e83f051ac7a4b8d07b0ef6b4d3f2772b302275/ruff-0.16.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e0b1da805eb043654645d74d5de1e5ce2edc686e40790d2b86f56d71cc06a84", size = 10668771, upload-time = "2026-08-13T15:16:35.65Z" },
5821
+ { url = "https://files.pythonhosted.org/packages/c3/66/4afc5c8363bd04d45effce1b7c8713ca037d7a6740b7451a2403a6e3a972/ruff-0.16.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a37bdea0bbe21780f590bf437d6412c8c4e1b6cd010f91a65c2c40c5e5f5f870", size = 10699568, upload-time = "2026-08-13T15:16:38.195Z" },
5822
+ { url = "https://files.pythonhosted.org/packages/53/fd/c67d246bf36bf1698551c56de39e95cd07f70e64433e0098e6267d77061b/ruff-0.16.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09571e6d1288ed9be475207a3ac04ada404f1cd898104be0f6ab8d7df438575b", size = 11499365, upload-time = "2026-08-13T15:16:40.623Z" },
5823
+ { url = "https://files.pythonhosted.org/packages/67/0b/00ecbceb99a263af7b12f6f05ac3c92bc47b905e91adc3f207a836e3bc01/ruff-0.16.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c18c5a101eb540010638cc1ff3c84944d3adb3df62b8d98ca8f22ba484d3413", size = 12311728, upload-time = "2026-08-13T15:16:43.564Z" },
5824
+ { url = "https://files.pythonhosted.org/packages/54/b2/b7b3bb54f4d3f7db504e476ad4ab8de530dceebe2c061384b2757ee419e8/ruff-0.16.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8457c44f15033c85ddbb77b15d451df9e24e4bd03b628396dd3610cedc3b8f82", size = 11699896, upload-time = "2026-08-13T15:16:46.209Z" },
5825
+ { url = "https://files.pythonhosted.org/packages/c7/30/4c468429ac195addc5ee1b717b6ab1b66632786737ca3b2ed3443fb0c26a/ruff-0.16.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:294b95c4ae0cda9388525c2047778aa758d6b8d4bb876fd4e9eaa3ebc92343eb", size = 11058736, upload-time = "2026-08-13T15:16:48.823Z" },
5826
+ { url = "https://files.pythonhosted.org/packages/43/67/7a113cdaddf24b64d7f75b1242a99d04c82fcef4f6921fdbb832beaffb5f/ruff-0.16.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:3d0c7c40c87c2a820509c31ba007968da6e1306468c067b2d82fbfdbcd0e8474", size = 11586911, upload-time = "2026-08-13T15:16:51.913Z" },
5827
+ { url = "https://files.pythonhosted.org/packages/f1/c1/2e66f24c0f3ead25a5e660111778685e505e5da353c82802bf49f0cbe7b9/ruff-0.16.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:9f738c0fdfa8eed0b2ce7fb27ee7258208a92a68d7949e62aa15164bc7b389da", size = 10954265, upload-time = "2026-08-13T15:16:54.763Z" },
5828
+ { url = "https://files.pythonhosted.org/packages/c2/ba/4cee23bf52cba9a058d3726de623624daf50ef9638868edd86f4126157f6/ruff-0.16.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fb785f0be25abe69d320415cd4f833b59e17ba7613d9ba6a958023b6bceb0a50", size = 10709886, upload-time = "2026-08-13T15:16:57.339Z" },
5829
+ { url = "https://files.pythonhosted.org/packages/82/df/7da7194fa5d9dc0a285f7e6fa5a4722e7c63faac0b45b614ded9314363a1/ruff-0.16.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c5536e3acfbf9563085aa2be7b13c629c3077e902afc5b941ac44024dbb9f506", size = 11210392, upload-time = "2026-08-13T15:17:00.171Z" },
5830
+ { url = "https://files.pythonhosted.org/packages/35/85/7795f6e817af050e7517bf3e7aa9b061cce70ef33d280aad902c956c1ecf/ruff-0.16.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a2d85c02f9b8e165d85e6779184d38c4132de12603dab59c51c28e22584f9e4d", size = 11626910, upload-time = "2026-08-13T15:17:03.299Z" },
5831
+ { url = "https://files.pythonhosted.org/packages/78/9b/475b927cf27a5cbbda3c7bafb69ed6ff77e1d7923d5d85f17c2749d7ae32/ruff-0.16.3-py3-none-win32.whl", hash = "sha256:388cdf2166642bd9b13d52b5932d3170f34f8abed7e8d9a855f1d84b83645a0a", size = 10931415, upload-time = "2026-08-13T15:17:05.726Z" },
5832
+ { url = "https://files.pythonhosted.org/packages/b2/99/e2a2bfc4fbf0a1e8a916bc9ebe6fe6c58cc34c28e0ffc6ce281d572d1c2e/ruff-0.16.3-py3-none-win_amd64.whl", hash = "sha256:e80a7d69ca2a6d1c4d352ec91458cdca6e56c83cdbcabd93e4abe1e53591d948", size = 11445993, upload-time = "2026-08-13T15:17:08.353Z" },
5833
+ { url = "https://files.pythonhosted.org/packages/69/3e/4132e539aed78c148854d4997a2685b0ed4dc4e87110b59ce528564e184e/ruff-0.16.3-py3-none-win_arm64.whl", hash = "sha256:b8ca152da82c1acc1fa8d5874b15951935f0eef46f10e6954c83859011b6178a", size = 11399302, upload-time = "2026-08-13T15:17:10.908Z" },
5834
5834
  ]
5835
5835
 
5836
5836
  [[package]]