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.
- classifyre_cli-0.4.116/.turbo/turbo-build.log +3 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/PKG-INFO +1 -1
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/package.json +1 -1
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/pyproject.toml +1 -1
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/main.py +14 -4
- classifyre_cli-0.4.116/src/utils/torch_runtime.py +60 -0
- classifyre_cli-0.4.116/tests/test_torch_runtime.py +80 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/uv.lock +217 -198
- classifyre_cli-0.4.115/.turbo/turbo-build.log +0 -3
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/.gitignore +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/.python-version +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/README.md +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/main.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/scripts/generate_models.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/config.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/broken_links/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/broken_links/detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/config.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/extractor.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_factory.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_gliner2.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_image_classification.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_llm.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_object_detection.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_regex.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/runners/_text_classification.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/custom/trainer.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/dependencies.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/engine_version.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/pii/detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/secrets/detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/threat/code_security_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/detectors/threat/yara_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/file_evaluation/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/file_evaluation/runner.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/models/generated_detectors.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/models/generated_input.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/models/generated_single_asset_scan_results.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/console.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/factory.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/file.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/outputs/rest.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/content_provider.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/detector_pipeline.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/parsed_content_provider.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/payload_window.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/scan_cache.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/text_artifact.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/pipeline/worker_pool.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/asset_metadata.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/atlassian_common.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/azure_blob_storage/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/azure_blob_storage/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/confluence/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/confluence/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/databricks/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/databricks/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/delta_lake/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/delta_lake/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dependencies.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dropbox/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dropbox/auth.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/dropbox/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/elasticsearch/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/elasticsearch/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/email/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/email/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/git/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/git/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_cloud_storage/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_cloud_storage/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_workspace/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/google_workspace/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hive/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hive/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hugging_face/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/hugging_face/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/iceberg/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/iceberg/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/jira/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/jira/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/kafka/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/kafka/rest.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/kafka/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/lakehouse_base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/local_folder/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/local_folder/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/meilisearch/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/meilisearch/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/microsoft_365/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/microsoft_365/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mongodb/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mongodb/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mssql/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mssql/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mysql/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/mysql/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/neo4j/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/neo4j/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/notion/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/notion/client.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/notion/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/object_storage/base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/opensearch/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/opensearch/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/oracle/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/oracle/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/postgresql/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/postgresql/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/powerbi/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/powerbi/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/reddit/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/reddit/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_client.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_compatible_storage/README.md +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_compatible_storage/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/s3_compatible_storage/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sandbox/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sandbox/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/search_engine_base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/servicedesk/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/servicedesk/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/slack/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/slack/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/snowflake/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/snowflake/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sqlite/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/sqlite/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tableau/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tableau/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tabular_base.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/tabular_utils.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/wordpress/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/wordpress/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/youtube/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/sources/youtube/source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/telemetry.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/archive_extraction.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/content_extraction.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/dependency_groups.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/embedded_files.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/external_video.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/file_metadata.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/file_parser.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/file_to_images.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/hashing.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/legacy_office.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/payload.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/range_reader.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/resources.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/transcription.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/uv_sync.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/validation.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/src/utils/video_processing.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/_lakehouse_fakes.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/conftest.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/conftest.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/conftest.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_gliner2_classification.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_invoice_extraction.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_llm_runner.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_pipeline_integration.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_regex_runner.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_runner_hardening.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/custom/test_transformer_runners.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/conftest.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/sample_invoice.pdf +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_chunking.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_regional_entities.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/pii/test_pii_severity.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/secrets/test_secrets_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_base_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_catalog_commercial.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_pipeline_types.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_schema_examples.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_detector_types.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_phase2_detectors.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/test_registry.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/threat/test_code_security_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/detectors/threat/test_yara_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/integration/test_wordpress_links_assets.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/pipeline/test_detector_outcomes.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/pipeline/test_detector_pipeline.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/pipeline/test_worker_pool.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_arrow_ipc_payloads.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_assets_metadata_catalog.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_azure_blob_storage_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_base_source_attachment.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_base_source_sampling.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_byte_valued_fields.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_config.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_confluence_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_custom_extractor.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_databricks_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_delta_lake_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_dependency_groups.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_dropbox_auth_command.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_dropbox_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_elasticsearch_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_email_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_file_evaluation_runner.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_git_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_google_cloud_storage_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_google_workspace_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_hashing.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_hive_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_hugging_face_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_iceberg_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_jira_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_kafka_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_local_folder_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_main.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_meilisearch_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_microsoft_365_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_mongodb_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_mssql_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_mysql_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_neo4j_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_notion_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_object_storage_download_efficiency.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_opensearch_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_oracle_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_outputs.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_payload_window.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_payload_window_parquet.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_postgresql_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_powerbi_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_range_reading.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_reddit_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_rest_backpressure.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_s3_compatible_storage_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_sampling_automatic.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_sandbox_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_scan_cache.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_servicedesk_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_slack_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_snowflake_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_source_dependency_groups.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_source_strategy_conformance.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_sqlite_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_tableau_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_tabular_automatic_sampling.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_tabular_utils.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_uv_sync.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_wordpress_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_youtube_source.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/test_youtube_source_integration.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_archive_extraction.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_content_extraction.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_embedded_files.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_file_metadata.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_file_parser.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_file_to_images.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_legacy_office.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_payload.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_transcription.py +0 -0
- {classifyre_cli-0.4.115 → classifyre_cli-0.4.116}/tests/utils/test_video_processing.py +0 -0
|
@@ -8,10 +8,20 @@ import sys
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from typing import Any, cast
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
from .utils.
|
|
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
|