classifyre-cli 0.4.115__tar.gz → 0.4.116__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 (289) hide show
  1. classifyre_cli-0.4.116/.turbo/turbo-build.log +3 -0
  2. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/PKG-INFO +1 -1
  3. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/package.json +1 -1
  4. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/pyproject.toml +1 -1
  5. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/main.py +14 -4
  6. classifyre_cli-0.4.116/src/utils/torch_runtime.py +60 -0
  7. classifyre_cli-0.4.116/tests/test_torch_runtime.py +80 -0
  8. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/uv.lock +217 -198
  9. classifyre_cli-0.4.115/.turbo/turbo-build.log +0 -3
  10. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/.gitignore +0 -0
  11. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/.python-version +0 -0
  12. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/README.md +0 -0
  13. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/main.py +0 -0
  14. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/scripts/generate_models.py +0 -0
  15. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/__init__.py +0 -0
  16. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/config.py +0 -0
  17. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/__init__.py +0 -0
  18. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/base.py +0 -0
  19. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/broken_links/__init__.py +0 -0
  20. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/broken_links/detector.py +0 -0
  21. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/config.py +0 -0
  22. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/content/__init__.py +0 -0
  23. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/__init__.py +0 -0
  24. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/detector.py +0 -0
  25. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/extractor.py +0 -0
  26. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/__init__.py +0 -0
  27. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_base.py +0 -0
  28. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_factory.py +0 -0
  29. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_gliner2.py +0 -0
  30. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_image_classification.py +0 -0
  31. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_llm.py +0 -0
  32. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_object_detection.py +0 -0
  33. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_regex.py +0 -0
  34. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_text_classification.py +0 -0
  35. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/trainer.py +0 -0
  36. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/dependencies.py +0 -0
  37. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/engine_version.py +0 -0
  38. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/pii/__init__.py +0 -0
  39. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/pii/detector.py +0 -0
  40. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/secrets/__init__.py +0 -0
  41. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/secrets/detector.py +0 -0
  42. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/threat/__init__.py +0 -0
  43. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/threat/code_security_detector.py +0 -0
  44. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/threat/yara_detector.py +0 -0
  45. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/file_evaluation/__init__.py +0 -0
  46. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/file_evaluation/runner.py +0 -0
  47. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/models/generated_detectors.py +0 -0
  48. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/models/generated_input.py +0 -0
  49. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/models/generated_single_asset_scan_results.py +0 -0
  50. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/__init__.py +0 -0
  51. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/base.py +0 -0
  52. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/console.py +0 -0
  53. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/factory.py +0 -0
  54. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/file.py +0 -0
  55. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/rest.py +0 -0
  56. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/__init__.py +0 -0
  57. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/content_provider.py +0 -0
  58. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/detector_pipeline.py +0 -0
  59. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/parsed_content_provider.py +0 -0
  60. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/payload_window.py +0 -0
  61. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/scan_cache.py +0 -0
  62. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/text_artifact.py +0 -0
  63. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/worker_pool.py +0 -0
  64. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/__init__.py +0 -0
  65. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/asset_metadata.py +0 -0
  66. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/atlassian_common.py +0 -0
  67. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/azure_blob_storage/__init__.py +0 -0
  68. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/azure_blob_storage/source.py +0 -0
  69. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/base.py +0 -0
  70. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/confluence/__init__.py +0 -0
  71. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/confluence/source.py +0 -0
  72. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/databricks/__init__.py +0 -0
  73. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/databricks/source.py +0 -0
  74. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/delta_lake/__init__.py +0 -0
  75. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/delta_lake/source.py +0 -0
  76. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dependencies.py +0 -0
  77. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dropbox/__init__.py +0 -0
  78. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dropbox/auth.py +0 -0
  79. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dropbox/source.py +0 -0
  80. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/elasticsearch/__init__.py +0 -0
  81. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/elasticsearch/source.py +0 -0
  82. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/email/__init__.py +0 -0
  83. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/email/source.py +0 -0
  84. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/git/__init__.py +0 -0
  85. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/git/source.py +0 -0
  86. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_cloud_storage/__init__.py +0 -0
  87. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_cloud_storage/source.py +0 -0
  88. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_workspace/__init__.py +0 -0
  89. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_workspace/source.py +0 -0
  90. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hive/__init__.py +0 -0
  91. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hive/source.py +0 -0
  92. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hugging_face/__init__.py +0 -0
  93. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hugging_face/source.py +0 -0
  94. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/iceberg/__init__.py +0 -0
  95. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/iceberg/source.py +0 -0
  96. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/jira/__init__.py +0 -0
  97. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/jira/source.py +0 -0
  98. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/kafka/__init__.py +0 -0
  99. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/kafka/rest.py +0 -0
  100. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/kafka/source.py +0 -0
  101. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/lakehouse_base.py +0 -0
  102. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/local_folder/__init__.py +0 -0
  103. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/local_folder/source.py +0 -0
  104. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/meilisearch/__init__.py +0 -0
  105. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/meilisearch/source.py +0 -0
  106. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/microsoft_365/__init__.py +0 -0
  107. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/microsoft_365/source.py +0 -0
  108. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mongodb/__init__.py +0 -0
  109. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mongodb/source.py +0 -0
  110. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mssql/__init__.py +0 -0
  111. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mssql/source.py +0 -0
  112. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mysql/__init__.py +0 -0
  113. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mysql/source.py +0 -0
  114. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/neo4j/__init__.py +0 -0
  115. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/neo4j/source.py +0 -0
  116. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/notion/__init__.py +0 -0
  117. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/notion/client.py +0 -0
  118. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/notion/source.py +0 -0
  119. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/object_storage/base.py +0 -0
  120. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/opensearch/__init__.py +0 -0
  121. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/opensearch/source.py +0 -0
  122. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/oracle/__init__.py +0 -0
  123. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/oracle/source.py +0 -0
  124. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/postgresql/__init__.py +0 -0
  125. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/postgresql/source.py +0 -0
  126. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/powerbi/__init__.py +0 -0
  127. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/powerbi/source.py +0 -0
  128. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/recipe_normalizer.py +0 -0
  129. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/reddit/__init__.py +0 -0
  130. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/reddit/source.py +0 -0
  131. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_client.py +0 -0
  132. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_compatible_storage/README.md +0 -0
  133. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_compatible_storage/__init__.py +0 -0
  134. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_compatible_storage/source.py +0 -0
  135. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sandbox/__init__.py +0 -0
  136. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sandbox/source.py +0 -0
  137. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/search_engine_base.py +0 -0
  138. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/servicedesk/__init__.py +0 -0
  139. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/servicedesk/source.py +0 -0
  140. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/slack/__init__.py +0 -0
  141. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/slack/source.py +0 -0
  142. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/snowflake/__init__.py +0 -0
  143. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/snowflake/source.py +0 -0
  144. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sqlite/__init__.py +0 -0
  145. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sqlite/source.py +0 -0
  146. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tableau/__init__.py +0 -0
  147. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tableau/source.py +0 -0
  148. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tabular_base.py +0 -0
  149. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tabular_utils.py +0 -0
  150. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/wordpress/__init__.py +0 -0
  151. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/wordpress/source.py +0 -0
  152. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/youtube/__init__.py +0 -0
  153. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/youtube/source.py +0 -0
  154. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/telemetry.py +0 -0
  155. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/__init__.py +0 -0
  156. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/archive_extraction.py +0 -0
  157. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/content_extraction.py +0 -0
  158. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/dependency_groups.py +0 -0
  159. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/embedded_files.py +0 -0
  160. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/external_video.py +0 -0
  161. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/file_metadata.py +0 -0
  162. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/file_parser.py +0 -0
  163. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/file_to_images.py +0 -0
  164. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/hashing.py +0 -0
  165. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/legacy_office.py +0 -0
  166. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/payload.py +0 -0
  167. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/range_reader.py +0 -0
  168. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/resources.py +0 -0
  169. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/transcription.py +0 -0
  170. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/uv_sync.py +0 -0
  171. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/validation.py +0 -0
  172. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/video_processing.py +0 -0
  173. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/__init__.py +0 -0
  174. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/_lakehouse_fakes.py +0 -0
  175. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/conftest.py +0 -0
  176. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/__init__.py +0 -0
  177. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
  178. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/conftest.py +0 -0
  179. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/content/__init__.py +0 -0
  180. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/__init__.py +0 -0
  181. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/conftest.py +0 -0
  182. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_gliner2_classification.py +0 -0
  183. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_invoice_extraction.py +0 -0
  184. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_llm_runner.py +0 -0
  185. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_pipeline_integration.py +0 -0
  186. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_regex_runner.py +0 -0
  187. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_runner_hardening.py +0 -0
  188. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_transformer_runners.py +0 -0
  189. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/__init__.py +0 -0
  190. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/conftest.py +0 -0
  191. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/sample_invoice.pdf +0 -0
  192. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_chunking.py +0 -0
  193. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_detector.py +0 -0
  194. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
  195. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_regional_entities.py +0 -0
  196. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_severity.py +0 -0
  197. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/secrets/__init__.py +0 -0
  198. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/secrets/test_secrets_detector.py +0 -0
  199. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
  200. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_base_detector.py +0 -0
  201. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
  202. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_catalog_commercial.py +0 -0
  203. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_pipeline_types.py +0 -0
  204. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_schema_examples.py +0 -0
  205. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_types.py +0 -0
  206. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_phase2_detectors.py +0 -0
  207. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_registry.py +0 -0
  208. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/threat/__init__.py +0 -0
  209. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/threat/test_code_security_detector.py +0 -0
  210. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/threat/test_yara_detector.py +0 -0
  211. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
  212. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/integration/test_wordpress_links_assets.py +0 -0
  213. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/pipeline/test_detector_outcomes.py +0 -0
  214. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/pipeline/test_detector_pipeline.py +0 -0
  215. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/pipeline/test_worker_pool.py +0 -0
  216. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_arrow_ipc_payloads.py +0 -0
  217. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_assets_metadata_catalog.py +0 -0
  218. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_azure_blob_storage_source.py +0 -0
  219. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_base_source_attachment.py +0 -0
  220. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_base_source_sampling.py +0 -0
  221. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_byte_valued_fields.py +0 -0
  222. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_config.py +0 -0
  223. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_confluence_source.py +0 -0
  224. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_custom_extractor.py +0 -0
  225. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_databricks_source.py +0 -0
  226. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_delta_lake_source.py +0 -0
  227. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_dependency_groups.py +0 -0
  228. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_dropbox_auth_command.py +0 -0
  229. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_dropbox_source.py +0 -0
  230. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_elasticsearch_source.py +0 -0
  231. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_email_source.py +0 -0
  232. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_file_evaluation_runner.py +0 -0
  233. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_git_source.py +0 -0
  234. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_google_cloud_storage_source.py +0 -0
  235. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_google_workspace_source.py +0 -0
  236. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_hashing.py +0 -0
  237. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_hive_source.py +0 -0
  238. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_hugging_face_source.py +0 -0
  239. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_iceberg_source.py +0 -0
  240. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_jira_source.py +0 -0
  241. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_kafka_source.py +0 -0
  242. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_local_folder_source.py +0 -0
  243. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_main.py +0 -0
  244. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_meilisearch_source.py +0 -0
  245. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_microsoft_365_source.py +0 -0
  246. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_mongodb_source.py +0 -0
  247. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_mssql_source.py +0 -0
  248. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_mysql_source.py +0 -0
  249. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_neo4j_source.py +0 -0
  250. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_notion_source.py +0 -0
  251. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_object_storage_download_efficiency.py +0 -0
  252. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_opensearch_source.py +0 -0
  253. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_oracle_source.py +0 -0
  254. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_outputs.py +0 -0
  255. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_payload_window.py +0 -0
  256. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_payload_window_parquet.py +0 -0
  257. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_postgresql_source.py +0 -0
  258. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_powerbi_source.py +0 -0
  259. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_range_reading.py +0 -0
  260. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_recipe_normalizer.py +0 -0
  261. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_reddit_source.py +0 -0
  262. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_rest_backpressure.py +0 -0
  263. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_s3_compatible_storage_source.py +0 -0
  264. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_sampling_automatic.py +0 -0
  265. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_sandbox_source.py +0 -0
  266. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_scan_cache.py +0 -0
  267. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_servicedesk_source.py +0 -0
  268. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_slack_source.py +0 -0
  269. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_snowflake_source.py +0 -0
  270. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_source_dependency_groups.py +0 -0
  271. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_source_strategy_conformance.py +0 -0
  272. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_sqlite_source.py +0 -0
  273. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_tableau_source.py +0 -0
  274. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_tabular_automatic_sampling.py +0 -0
  275. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_tabular_utils.py +0 -0
  276. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_uv_sync.py +0 -0
  277. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_wordpress_source.py +0 -0
  278. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_youtube_source.py +0 -0
  279. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_youtube_source_integration.py +0 -0
  280. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_archive_extraction.py +0 -0
  281. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_content_extraction.py +0 -0
  282. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_embedded_files.py +0 -0
  283. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_file_metadata.py +0 -0
  284. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_file_parser.py +0 -0
  285. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_file_to_images.py +0 -0
  286. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_legacy_office.py +0 -0
  287. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_payload.py +0 -0
  288. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_transcription.py +0 -0
  289. {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_video_processing.py +0 -0
@@ -0,0 +1,3 @@
1
+ $ uv sync
2
+ Resolved 309 packages in 395ms
3
+ Checked 51 packages in 4ms
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: classifyre-cli
3
- Version: 0.4.115
3
+ Version: 0.4.116
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.115",
3
+ "version": "0.4.116",
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.115"
3
+ version = "0.4.116"
4
4
  description = "Classifyre CLI — scan and classify unstructured data sources"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -8,10 +8,20 @@ import sys
8
8
  from pathlib import Path
9
9
  from typing import Any, cast
10
10
 
11
- from .outputs import create_output_sink
12
- from .sources import get_source, list_available_sources
13
- from .sources.dropbox.auth import add_dropbox_auth_arguments, run_dropbox_auth_command
14
- from .utils.validation import validate_input, validate_test_connection
11
+ # Must run before anything that imports torch (docling does, transitively via
12
+ # the source and parser modules below): torch reads this configuration at
13
+ # import time, so a later call would have no effect. See torch_runtime.
14
+ from .utils.torch_runtime import configure_torch_runtime
15
+
16
+ configure_torch_runtime()
17
+
18
+ from .outputs import create_output_sink # noqa: E402
19
+ from .sources import get_source, list_available_sources # noqa: E402
20
+ from .sources.dropbox.auth import ( # noqa: E402
21
+ add_dropbox_auth_arguments,
22
+ run_dropbox_auth_command,
23
+ )
24
+ from .utils.validation import validate_input, validate_test_connection # noqa: E402
15
25
 
16
26
  logger = logging.getLogger(__name__)
17
27
  _SURROGATE_RE = re.compile(r"[\ud800-\udfff]")
@@ -0,0 +1,60 @@
1
+ """Torch runtime configuration applied before torch is ever imported.
2
+
3
+ Docling's OCR models run under torch, and torch.compile's inductor backend
4
+ generates C++ and shells out to a compiler *at scan time*. That is a poor fit
5
+ for how this CLI is deployed, in two independent ways:
6
+
7
+ 1. It needs a working C++ toolchain on the machine running the scan. Neither
8
+ the desktop bundle nor a slim container image promises one.
9
+ 2. Inductor builds the compiler command line without quoting its paths, so any
10
+ path containing a space breaks it. The desktop venv lives under
11
+ ``~/Library/Application Support/…``, which produces exactly that:
12
+
13
+ clang++: error: no such file or directory:
14
+ 'Support/Classifyre/python-runtime/…/torch/lib'
15
+
16
+ Observed on a real desktop install: 167 compile errors and 33 OCR
17
+ extractions that returned no text at all, silently costing coverage on
18
+ every image and scanned document in the corpus.
19
+
20
+ Docling falls back to eager execution when compilation fails, so the failure is
21
+ not always fatal — it is just expensive. Measured on one 600x200 PNG with warm
22
+ models: **58.5s compiling and failing, 24.9s with compilation disabled**, for
23
+ identical extracted text. The compile step is pure loss here.
24
+
25
+ So it is off by default. An explicitly set ``TORCH_COMPILE_DISABLE`` is always
26
+ honoured, so a deployment that has a toolchain, space-free paths, and a
27
+ measured reason to want inductor can turn it back on.
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ import logging
33
+ import os
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ # torch 2.13 reads TORCH_COMPILE_DISABLE. The older TORCHDYNAMO_DISABLE is
38
+ # still widely cited but no longer flips torch._dynamo.config.disable, so
39
+ # setting that one instead would look correct and do nothing.
40
+ _DISABLE_ENV = "TORCH_COMPILE_DISABLE"
41
+
42
+
43
+ def configure_torch_runtime(env: dict[str, str] | None = None) -> bool:
44
+ """Disable torch.compile unless the environment already decided.
45
+
46
+ Must be called before torch (or anything importing it, such as docling) is
47
+ imported: torch reads this variable at import time.
48
+
49
+ :returns: True when this call disabled compilation, False when the
50
+ environment already set a value and was left alone.
51
+ """
52
+ target = env if env is not None else os.environ
53
+
54
+ existing = target.get(_DISABLE_ENV)
55
+ if existing is not None and existing.strip() != "":
56
+ logger.debug("Leaving %s=%s as configured by the environment", _DISABLE_ENV, existing)
57
+ return False
58
+
59
+ target[_DISABLE_ENV] = "1"
60
+ return True
@@ -0,0 +1,80 @@
1
+ """torch.compile must be off before torch is imported.
2
+
3
+ The failure this prevents is quiet rather than loud: docling falls back to
4
+ eager execution when inductor cannot compile, so scans keep running and only
5
+ the clock and the coverage suffer. On a desktop install that meant 167 compile
6
+ errors and 33 OCR extractions returning no text, and a measured 58.5s versus
7
+ 24.9s on one image for identical output.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import subprocess
13
+ import sys
14
+ from pathlib import Path
15
+
16
+ from src.utils.torch_runtime import configure_torch_runtime
17
+
18
+ REPO_CLI_ROOT = Path(__file__).resolve().parents[1]
19
+
20
+
21
+ def test_disables_compilation_when_unset() -> None:
22
+ env: dict[str, str] = {}
23
+
24
+ assert configure_torch_runtime(env) is True
25
+ assert env["TORCH_COMPILE_DISABLE"] == "1"
26
+
27
+
28
+ def test_uses_the_variable_this_torch_actually_reads() -> None:
29
+ """TORCHDYNAMO_DISABLE is the widely-cited name and does nothing in 2.13.
30
+
31
+ Setting the wrong variable looks correct in review and in the environment
32
+ dump, and silently leaves compilation on.
33
+ """
34
+ env: dict[str, str] = {}
35
+ configure_torch_runtime(env)
36
+
37
+ assert "TORCH_COMPILE_DISABLE" in env
38
+ assert "TORCHDYNAMO_DISABLE" not in env
39
+
40
+
41
+ def test_an_explicit_setting_is_left_alone() -> None:
42
+ """A deployment with a toolchain and space-free paths may want inductor."""
43
+ for configured in ("0", "1", "false"):
44
+ env = {"TORCH_COMPILE_DISABLE": configured}
45
+
46
+ assert configure_torch_runtime(env) is False
47
+ assert env["TORCH_COMPILE_DISABLE"] == configured
48
+
49
+
50
+ def test_an_empty_value_is_treated_as_unset() -> None:
51
+ env = {"TORCH_COMPILE_DISABLE": " "}
52
+
53
+ assert configure_torch_runtime(env) is True
54
+ assert env["TORCH_COMPILE_DISABLE"] == "1"
55
+
56
+
57
+ def test_applied_before_torch_is_imported_by_the_cli() -> None:
58
+ """Ordering is the whole point: torch reads this at import time.
59
+
60
+ Importing src.main must leave the variable set, and must do so without
61
+ torch having been imported first — asserted by checking the flag rather
62
+ than trusting the import order to stay put in the file.
63
+ """
64
+ script = (
65
+ "import os, sys; "
66
+ "os.environ.pop('TORCH_COMPILE_DISABLE', None); "
67
+ "import src.main; "
68
+ "print(os.environ.get('TORCH_COMPILE_DISABLE'))"
69
+ )
70
+ result = subprocess.run(
71
+ [sys.executable, "-c", script],
72
+ cwd=REPO_CLI_ROOT,
73
+ capture_output=True,
74
+ text=True,
75
+ timeout=300,
76
+ check=False,
77
+ )
78
+
79
+ assert result.returncode == 0, result.stderr[-2000:]
80
+ assert result.stdout.strip().endswith("1"), result.stdout