classifyre-cli 0.4.93__tar.gz → 0.4.94__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.93 → classifyre_cli-0.4.94}/.turbo/turbo-build.log +1 -1
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/PKG-INFO +1 -1
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/package.json +1 -1
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/pyproject.toml +1 -1
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/file_parser.py +30 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_file_parser.py +20 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/uv.lock +8 -8
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/.gitignore +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/.python-version +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/README.md +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/main.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/scripts/generate_models.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/config.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/broken_links/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/broken_links/detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/config.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/extractor.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_factory.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_gliner2.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_image_classification.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_llm.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_object_detection.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_regex.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_text_classification.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/trainer.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/dependencies.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/engine_version.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/pii/detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/secrets/detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/threat/code_security_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/threat/yara_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/file_evaluation/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/file_evaluation/runner.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/main.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/models/generated_detectors.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/models/generated_input.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/models/generated_single_asset_scan_results.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/outputs/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/outputs/base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/outputs/console.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/outputs/factory.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/outputs/file.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/outputs/rest.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/content_provider.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/detector_pipeline.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/parsed_content_provider.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/payload_window.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/scan_cache.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/text_artifact.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/pipeline/worker_pool.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/asset_metadata.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/atlassian_common.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/azure_blob_storage/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/azure_blob_storage/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/confluence/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/confluence/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/databricks/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/databricks/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/delta_lake/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/delta_lake/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/dependencies.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/dropbox/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/dropbox/auth.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/dropbox/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/elasticsearch/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/elasticsearch/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/email/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/email/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/git/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/git/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/google_cloud_storage/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/google_cloud_storage/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/google_workspace/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/google_workspace/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/hive/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/hive/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/hugging_face/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/hugging_face/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/iceberg/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/iceberg/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/jira/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/jira/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/kafka/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/kafka/rest.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/kafka/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/lakehouse_base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/local_folder/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/local_folder/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/meilisearch/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/meilisearch/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/microsoft_365/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/microsoft_365/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/mongodb/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/mongodb/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/mssql/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/mssql/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/mysql/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/mysql/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/neo4j/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/neo4j/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/notion/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/notion/client.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/notion/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/object_storage/base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/opensearch/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/opensearch/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/oracle/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/oracle/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/postgresql/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/postgresql/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/powerbi/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/powerbi/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/reddit/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/reddit/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/s3_client.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/s3_compatible_storage/README.md +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/s3_compatible_storage/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/s3_compatible_storage/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/sandbox/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/sandbox/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/search_engine_base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/servicedesk/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/servicedesk/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/slack/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/slack/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/snowflake/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/snowflake/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/sqlite/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/sqlite/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/tableau/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/tableau/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/tabular_base.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/tabular_utils.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/wordpress/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/wordpress/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/youtube/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/youtube/source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/telemetry.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/archive_extraction.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/content_extraction.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/dependency_groups.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/embedded_files.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/external_video.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/file_metadata.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/file_to_images.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/hashing.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/legacy_office.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/payload.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/range_reader.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/resources.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/transcription.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/uv_sync.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/validation.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/utils/video_processing.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/_lakehouse_fakes.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/conftest.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/conftest.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/conftest.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_gliner2_classification.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_invoice_extraction.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_llm_runner.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_pipeline_integration.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_regex_runner.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_runner_hardening.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/custom/test_transformer_runners.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/conftest.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/sample_invoice.pdf +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/test_pii_chunking.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/test_pii_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/test_pii_regional_entities.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/pii/test_pii_severity.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/secrets/test_secrets_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_base_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_detector_catalog_commercial.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_detector_pipeline_types.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_detector_schema_examples.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_detector_types.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_phase2_detectors.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/test_registry.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/threat/test_code_security_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/detectors/threat/test_yara_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/integration/test_wordpress_links_assets.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/pipeline/test_detector_outcomes.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/pipeline/test_detector_pipeline.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/pipeline/test_worker_pool.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_arrow_ipc_payloads.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_assets_metadata_catalog.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_azure_blob_storage_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_base_source_attachment.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_base_source_sampling.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_byte_valued_fields.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_config.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_confluence_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_custom_extractor.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_databricks_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_delta_lake_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_dependency_groups.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_dropbox_auth_command.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_dropbox_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_elasticsearch_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_email_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_file_evaluation_runner.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_git_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_google_cloud_storage_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_google_workspace_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_hashing.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_hive_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_hugging_face_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_iceberg_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_jira_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_kafka_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_local_folder_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_main.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_meilisearch_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_microsoft_365_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_mongodb_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_mssql_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_mysql_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_neo4j_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_notion_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_object_storage_download_efficiency.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_opensearch_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_oracle_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_outputs.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_payload_window.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_payload_window_parquet.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_postgresql_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_powerbi_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_range_reading.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_reddit_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_s3_compatible_storage_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_sampling_automatic.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_sandbox_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_scan_cache.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_servicedesk_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_slack_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_snowflake_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_source_dependency_groups.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_source_strategy_conformance.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_sqlite_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_tableau_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_tabular_automatic_sampling.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_tabular_utils.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_uv_sync.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_wordpress_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_youtube_source.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/test_youtube_source_integration.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_archive_extraction.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_content_extraction.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_embedded_files.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_file_metadata.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_file_to_images.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_legacy_office.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_payload.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_transcription.py +0 -0
- {classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/tests/utils/test_video_processing.py +0 -0
|
@@ -732,6 +732,28 @@ def _refine_zip_mime(source: BinarySource) -> str:
|
|
|
732
732
|
return "application/zip"
|
|
733
733
|
|
|
734
734
|
|
|
735
|
+
def _null_bytes_look_interleaved(sample: bytes, unit: int) -> bool:
|
|
736
|
+
"""
|
|
737
|
+
Whether the null bytes sit where a fixed-width encoding would put them.
|
|
738
|
+
|
|
739
|
+
This is the structural signal that separates real UTF-16/32 from binary
|
|
740
|
+
that merely happens to contain a null. Text in a fixed-width encoding pads
|
|
741
|
+
every character to `unit` bytes, so for any script whose code points fit in
|
|
742
|
+
the low byte the padding lands at the SAME offset within every unit, and it
|
|
743
|
+
is common: roughly half the bytes for UTF-16 Latin text, three quarters for
|
|
744
|
+
UTF-32. Binary with an incidental null shows neither property.
|
|
745
|
+
"""
|
|
746
|
+
if len(sample) < unit * 2:
|
|
747
|
+
return False
|
|
748
|
+
nulls = sample.count(0)
|
|
749
|
+
# Well under what padding produces, so the nulls are incidental.
|
|
750
|
+
if nulls * unit < len(sample) * 0.5:
|
|
751
|
+
return False
|
|
752
|
+
offsets = {i % unit for i, byte in enumerate(sample) if byte == 0}
|
|
753
|
+
# Padding occupies fixed positions; scattered nulls are not padding.
|
|
754
|
+
return len(offsets) < unit
|
|
755
|
+
|
|
756
|
+
|
|
735
757
|
def _is_null_byte_unicode_text(file_bytes: bytes) -> bool:
|
|
736
758
|
"""UTF-16/32 text interleaves null bytes with every character — still text."""
|
|
737
759
|
# \xff\xfe prefixes both UTF-16 LE and UTF-32 LE BOMs.
|
|
@@ -752,6 +774,14 @@ def _is_null_byte_unicode_text(file_bytes: bytes) -> bool:
|
|
|
752
774
|
decoded = sample.decode(encoding)
|
|
753
775
|
if not decoded:
|
|
754
776
|
return False
|
|
777
|
+
# Printability alone is not enough either, and this is where short
|
|
778
|
+
# binary payloads got through: chardet calls b"\x00\x01\x02\x03binary"
|
|
779
|
+
# utf-16-le with 0.95 confidence, it decodes to CJK code points, and
|
|
780
|
+
# every one of those is `isprintable()`. So the payload was reported as
|
|
781
|
+
# text/plain and the parser tried to read it as text. Require the nulls
|
|
782
|
+
# to sit where an encoding's padding would actually put them.
|
|
783
|
+
if not _null_bytes_look_interleaved(sample, unit):
|
|
784
|
+
return False
|
|
755
785
|
printable = sum(1 for ch in decoded if ch.isprintable() or ch.isspace())
|
|
756
786
|
return printable / len(decoded) >= 0.9
|
|
757
787
|
except Exception:
|
|
@@ -80,6 +80,26 @@ class TestDetectMimeType:
|
|
|
80
80
|
result = detect_mime_type(b"")
|
|
81
81
|
assert result == "application/octet-stream"
|
|
82
82
|
|
|
83
|
+
def test_utf16_text_with_bom_is_text(self) -> None:
|
|
84
|
+
payload = "hello world this is plain utf16 text".encode("utf-16")
|
|
85
|
+
assert detect_mime_type(payload) == "text/plain"
|
|
86
|
+
|
|
87
|
+
def test_utf16_text_without_bom_is_text(self) -> None:
|
|
88
|
+
# No BOM, so this reaches the heuristic rather than the prefix check.
|
|
89
|
+
payload = "hello world this is plain utf16 text".encode("utf-16-le")
|
|
90
|
+
assert detect_mime_type(payload) == "text/plain"
|
|
91
|
+
|
|
92
|
+
def test_binary_is_not_mistaken_for_utf16(self) -> None:
|
|
93
|
+
# chardet calls this utf-16-le with 0.95 confidence and it decodes to
|
|
94
|
+
# CJK code points, every one of which is `isprintable()` — so a
|
|
95
|
+
# printability check alone accepted it as text. Real UTF-16 pads every
|
|
96
|
+
# character to a fixed width, putting its nulls at a consistent offset
|
|
97
|
+
# and in quantity; incidental nulls in binary do neither.
|
|
98
|
+
assert detect_mime_type(b"\x00\x01\x02\x03binary") == "application/octet-stream"
|
|
99
|
+
assert detect_mime_type(b"\x00\x01\x02\x03\x04\x05\x06\x07more binary") == (
|
|
100
|
+
"application/octet-stream"
|
|
101
|
+
)
|
|
102
|
+
|
|
83
103
|
|
|
84
104
|
# ---------------------------------------------------------------------------
|
|
85
105
|
# extract_text
|
|
@@ -830,7 +830,7 @@ wheels = [
|
|
|
830
830
|
|
|
831
831
|
[[package]]
|
|
832
832
|
name = "classifyre-cli"
|
|
833
|
-
version = "0.4.
|
|
833
|
+
version = "0.4.94"
|
|
834
834
|
source = { editable = "." }
|
|
835
835
|
dependencies = [
|
|
836
836
|
{ name = "beautifulsoup4" },
|
|
@@ -1369,7 +1369,7 @@ youtube = [
|
|
|
1369
1369
|
|
|
1370
1370
|
[[package]]
|
|
1371
1371
|
name = "classifyre-schemas"
|
|
1372
|
-
version = "0.4.
|
|
1372
|
+
version = "0.4.94"
|
|
1373
1373
|
source = { editable = "../../packages/schemas" }
|
|
1374
1374
|
dependencies = [
|
|
1375
1375
|
{ name = "fastjsonschema" },
|
|
@@ -2520,7 +2520,7 @@ http2 = [
|
|
|
2520
2520
|
|
|
2521
2521
|
[[package]]
|
|
2522
2522
|
name = "huggingface-hub"
|
|
2523
|
-
version = "1.26.
|
|
2523
|
+
version = "1.26.1"
|
|
2524
2524
|
source = { registry = "https://pypi.org/simple" }
|
|
2525
2525
|
dependencies = [
|
|
2526
2526
|
{ name = "click" },
|
|
@@ -2533,9 +2533,9 @@ dependencies = [
|
|
|
2533
2533
|
{ name = "tqdm" },
|
|
2534
2534
|
{ name = "typing-extensions" },
|
|
2535
2535
|
]
|
|
2536
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2536
|
+
sdist = { url = "https://files.pythonhosted.org/packages/89/64/bfe23dab749cb2342e1e13b61c9e684ce46b4d189c7d433cd26f76f52baf/huggingface_hub-1.26.1.tar.gz", hash = "sha256:7c28860777594ac679233f571552d0e46df34ed4e4239e844190fad3ca05e4cd", size = 936700, upload-time = "2026-08-06T09:42:24.859Z" }
|
|
2537
2537
|
wheels = [
|
|
2538
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2538
|
+
{ url = "https://files.pythonhosted.org/packages/b4/a7/b519cd01e57b685c5f3e9db02cb1bd7aaade35fb6554e0d36bee6d6aae28/huggingface_hub-1.26.1-py3-none-any.whl", hash = "sha256:d8676e4ec96c1e481a22a93232bd86d73bbac643fb767399aefaeaa503890fb0", size = 780754, upload-time = "2026-08-06T09:42:22.497Z" },
|
|
2539
2539
|
]
|
|
2540
2540
|
|
|
2541
2541
|
[[package]]
|
|
@@ -2558,11 +2558,11 @@ wheels = [
|
|
|
2558
2558
|
|
|
2559
2559
|
[[package]]
|
|
2560
2560
|
name = "imap-tools"
|
|
2561
|
-
version = "1.
|
|
2561
|
+
version = "1.15.0"
|
|
2562
2562
|
source = { registry = "https://pypi.org/simple" }
|
|
2563
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2563
|
+
sdist = { url = "https://files.pythonhosted.org/packages/59/4e/acf9a7d59932548bc749fe0f5ae852e6da00b640303ed72786f697944b69/imap_tools-1.15.0.tar.gz", hash = "sha256:a90f948549ab000d96caf17c90e63b114f8788ba4a0d3f9274a96c0e108c3805", size = 48497, upload-time = "2026-08-06T10:25:26.567Z" }
|
|
2564
2564
|
wheels = [
|
|
2565
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2565
|
+
{ url = "https://files.pythonhosted.org/packages/50/eb/a4ad6ec962af2806c3484adb1869c24a04d8ef8c2034f2dd2b0f48459b0a/imap_tools-1.15.0-py3-none-any.whl", hash = "sha256:7bb0003c8bf124b80968c7bef786e4577d8365e9afb6551dc15b13161b688bdc", size = 36512, upload-time = "2026-08-06T10:25:24.377Z" },
|
|
2566
2566
|
]
|
|
2567
2567
|
|
|
2568
2568
|
[[package]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_object_detection.py
RENAMED
|
File without changes
|
|
File without changes
|
{classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/custom/runners/_text_classification.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/detectors/threat/code_security_detector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/models/generated_single_asset_scan_results.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/google_cloud_storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{classifyre_cli-0.4.93 → classifyre_cli-0.4.94}/src/sources/s3_compatible_storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|