classifyre-cli 0.4.107__tar.gz → 0.4.109__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.109/.turbo/turbo-build.log +3 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/PKG-INFO +1 -1
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/package.json +1 -1
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/pyproject.toml +1 -1
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/file_evaluation/runner.py +7 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/main.py +25 -10
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_custom_detector_examples_runtime.py +6 -4
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_file_evaluation_runner.py +8 -0
- classifyre_cli-0.4.109/tests/test_main.py +78 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/uv.lock +44 -58
- classifyre_cli-0.4.107/.turbo/turbo-build.log +0 -3
- classifyre_cli-0.4.107/tests/test_main.py +0 -36
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/.gitignore +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/.python-version +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/README.md +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/main.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/scripts/generate_models.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/config.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/broken_links/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/broken_links/detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/config.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/extractor.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_factory.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_gliner2.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_image_classification.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_llm.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_object_detection.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_regex.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_text_classification.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/custom/trainer.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/dependencies.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/engine_version.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/pii/detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/secrets/detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/threat/code_security_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/threat/yara_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/file_evaluation/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/models/generated_detectors.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/models/generated_input.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/models/generated_single_asset_scan_results.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/outputs/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/outputs/base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/outputs/console.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/outputs/factory.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/outputs/file.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/outputs/rest.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/content_provider.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/detector_pipeline.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/parsed_content_provider.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/payload_window.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/scan_cache.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/text_artifact.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/pipeline/worker_pool.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/asset_metadata.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/atlassian_common.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/azure_blob_storage/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/azure_blob_storage/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/confluence/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/confluence/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/databricks/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/databricks/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/delta_lake/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/delta_lake/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/dependencies.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/dropbox/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/dropbox/auth.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/dropbox/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/elasticsearch/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/elasticsearch/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/email/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/email/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/git/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/git/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/google_cloud_storage/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/google_cloud_storage/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/google_workspace/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/google_workspace/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/hive/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/hive/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/hugging_face/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/hugging_face/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/iceberg/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/iceberg/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/jira/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/jira/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/kafka/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/kafka/rest.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/kafka/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/lakehouse_base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/local_folder/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/local_folder/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/meilisearch/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/meilisearch/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/microsoft_365/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/microsoft_365/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/mongodb/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/mongodb/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/mssql/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/mssql/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/mysql/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/mysql/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/neo4j/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/neo4j/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/notion/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/notion/client.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/notion/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/object_storage/base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/opensearch/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/opensearch/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/oracle/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/oracle/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/postgresql/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/postgresql/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/powerbi/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/powerbi/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/reddit/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/reddit/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/s3_client.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/s3_compatible_storage/README.md +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/s3_compatible_storage/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/s3_compatible_storage/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/sandbox/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/sandbox/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/search_engine_base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/servicedesk/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/servicedesk/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/slack/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/slack/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/snowflake/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/snowflake/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/sqlite/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/sqlite/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/tableau/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/tableau/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/tabular_base.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/tabular_utils.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/wordpress/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/wordpress/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/youtube/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/sources/youtube/source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/telemetry.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/archive_extraction.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/content_extraction.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/dependency_groups.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/embedded_files.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/external_video.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/file_metadata.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/file_parser.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/file_to_images.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/hashing.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/legacy_office.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/payload.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/range_reader.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/resources.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/transcription.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/uv_sync.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/validation.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/utils/video_processing.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/_lakehouse_fakes.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/conftest.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/conftest.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/conftest.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_gliner2_classification.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_invoice_extraction.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_llm_runner.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_pipeline_integration.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_regex_runner.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_runner_hardening.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/custom/test_transformer_runners.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/conftest.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/sample_invoice.pdf +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/test_pii_chunking.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/test_pii_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/test_pii_regional_entities.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/pii/test_pii_severity.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/secrets/test_secrets_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_base_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_detector_catalog_commercial.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_detector_pipeline_types.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_detector_schema_examples.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_detector_types.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_phase2_detectors.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/test_registry.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/threat/test_code_security_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/detectors/threat/test_yara_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/integration/test_wordpress_links_assets.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/pipeline/test_detector_outcomes.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/pipeline/test_detector_pipeline.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/pipeline/test_worker_pool.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_arrow_ipc_payloads.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_assets_metadata_catalog.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_azure_blob_storage_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_base_source_attachment.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_base_source_sampling.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_byte_valued_fields.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_config.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_confluence_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_custom_extractor.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_databricks_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_delta_lake_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_dependency_groups.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_dropbox_auth_command.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_dropbox_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_elasticsearch_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_email_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_git_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_google_cloud_storage_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_google_workspace_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_hashing.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_hive_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_hugging_face_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_iceberg_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_jira_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_kafka_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_local_folder_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_meilisearch_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_microsoft_365_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_mongodb_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_mssql_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_mysql_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_neo4j_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_notion_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_object_storage_download_efficiency.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_opensearch_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_oracle_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_outputs.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_payload_window.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_payload_window_parquet.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_postgresql_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_powerbi_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_range_reading.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_reddit_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_s3_compatible_storage_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_sampling_automatic.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_sandbox_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_scan_cache.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_servicedesk_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_slack_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_snowflake_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_source_dependency_groups.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_source_strategy_conformance.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_sqlite_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_tableau_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_tabular_automatic_sampling.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_tabular_utils.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_uv_sync.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_wordpress_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_youtube_source.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/test_youtube_source_integration.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_archive_extraction.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_content_extraction.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_embedded_files.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_file_metadata.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_file_parser.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_file_to_images.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_legacy_office.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_payload.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_transcription.py +0 -0
- {classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/tests/utils/test_video_processing.py +0 -0
|
@@ -24,8 +24,14 @@ class FileEvaluationRunner:
|
|
|
24
24
|
# output so callers can distinguish "misconfigured detector" from
|
|
25
25
|
# "no findings".
|
|
26
26
|
self.detector_errors: list[str] = []
|
|
27
|
+
self._detectors: list[Any] | None = None
|
|
27
28
|
|
|
28
29
|
def _build_detectors(self) -> list[Any]:
|
|
30
|
+
# A detector test commonly contains a positive and a counterexample.
|
|
31
|
+
# Keep heavyweight GLiNER/HuggingFace models alive across both files.
|
|
32
|
+
if self._detectors is not None:
|
|
33
|
+
return self._detectors
|
|
34
|
+
|
|
29
35
|
from ..detectors import get_detector
|
|
30
36
|
from ..detectors.config import parse_detector_config
|
|
31
37
|
|
|
@@ -50,6 +56,7 @@ class FileEvaluationRunner:
|
|
|
50
56
|
logger.error(f"Failed to initialize detector {detector_type}: {e}")
|
|
51
57
|
self.detector_errors.append(f"{detector_type}: {e}")
|
|
52
58
|
|
|
59
|
+
self._detectors = detectors
|
|
53
60
|
return detectors
|
|
54
61
|
|
|
55
62
|
@staticmethod
|
|
@@ -658,7 +658,7 @@ def run_train_command(args: argparse.Namespace) -> None:
|
|
|
658
658
|
|
|
659
659
|
|
|
660
660
|
def run_evaluate_file_command(args: argparse.Namespace) -> None:
|
|
661
|
-
"""Evaluate detector configs against one
|
|
661
|
+
"""Evaluate detector configs against one file or a directory of samples."""
|
|
662
662
|
from .file_evaluation import FileEvaluationRunner
|
|
663
663
|
|
|
664
664
|
file_path_str: str | None = args.recipe
|
|
@@ -689,15 +689,30 @@ def run_evaluate_file_command(args: argparse.Namespace) -> None:
|
|
|
689
689
|
|
|
690
690
|
try:
|
|
691
691
|
runner = FileEvaluationRunner(detectors)
|
|
692
|
-
|
|
693
|
-
if
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
692
|
+
output: dict[str, Any]
|
|
693
|
+
if file_path.is_dir():
|
|
694
|
+
evaluations: list[dict[str, Any]] = []
|
|
695
|
+
for sample_path in sorted(p for p in file_path.iterdir() if p.is_file()):
|
|
696
|
+
parsed, findings = runner.run(sample_path)
|
|
697
|
+
item: dict[str, Any] = {
|
|
698
|
+
"name": sample_path.name,
|
|
699
|
+
"mime_type": parsed.mime_type,
|
|
700
|
+
"findings": [f.model_dump(mode="json") for f in findings],
|
|
701
|
+
}
|
|
702
|
+
if parsed.parse_error:
|
|
703
|
+
item["parse_error"] = parsed.parse_error
|
|
704
|
+
evaluations.append(item)
|
|
705
|
+
output = {"evaluations": evaluations}
|
|
706
|
+
else:
|
|
707
|
+
parsed, findings = runner.run(file_path)
|
|
708
|
+
if parsed.parse_error:
|
|
709
|
+
logger.warning("File parse warning: %s", parsed.parse_error)
|
|
710
|
+
output = {
|
|
711
|
+
"mime_type": parsed.mime_type,
|
|
712
|
+
"findings": [f.model_dump(mode="json") for f in findings],
|
|
713
|
+
}
|
|
714
|
+
if parsed.parse_error:
|
|
715
|
+
output["parse_error"] = parsed.parse_error
|
|
701
716
|
if runner.detector_errors:
|
|
702
717
|
output["detector_errors"] = runner.detector_errors
|
|
703
718
|
print(json.dumps(_sanitize_for_json(output), ensure_ascii=False))
|
|
@@ -13,14 +13,16 @@ from src.detectors.custom.runners import GLiNER2Runner, RegexRunner
|
|
|
13
13
|
from src.models.generated_detectors import (
|
|
14
14
|
CustomDetectorConfig,
|
|
15
15
|
ImageClassificationPipelineSchema,
|
|
16
|
+
LLMPipelineSchema,
|
|
16
17
|
ObjectDetectionPipelineSchema,
|
|
17
18
|
TextClassificationPipelineSchema,
|
|
18
19
|
)
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
_EXTERNAL_RUNTIME_SCHEMA_TYPES = (
|
|
21
22
|
TextClassificationPipelineSchema,
|
|
22
23
|
ImageClassificationPipelineSchema,
|
|
23
24
|
ObjectDetectionPipelineSchema,
|
|
25
|
+
LLMPipelineSchema,
|
|
24
26
|
)
|
|
25
27
|
|
|
26
28
|
|
|
@@ -135,12 +137,12 @@ async def test_regex_example_invoice_pii_detects_iban(custom_examples: list[dict
|
|
|
135
137
|
async def test_gliner2_example_all_examples_load_and_detect(custom_examples: list[dict]):
|
|
136
138
|
"""All GLINER2/REGEX examples must parse and run detect() without crashing.
|
|
137
139
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
Examples that need model downloads or injected provider credentials are skipped here.
|
|
141
|
+
Their runners have focused coverage in the custom runner test modules.
|
|
140
142
|
"""
|
|
141
143
|
for example in custom_examples:
|
|
142
144
|
config = CustomDetectorConfig.model_validate(example["config"])
|
|
143
|
-
if isinstance(config.pipeline_schema,
|
|
145
|
+
if isinstance(config.pipeline_schema, _EXTERNAL_RUNTIME_SCHEMA_TYPES):
|
|
144
146
|
continue
|
|
145
147
|
|
|
146
148
|
detector = CustomDetector(config)
|
|
@@ -46,6 +46,14 @@ def _runner_with(detector: _RecordingDetector) -> FileEvaluationRunner:
|
|
|
46
46
|
return runner
|
|
47
47
|
|
|
48
48
|
|
|
49
|
+
def test_detector_initialization_is_cached_across_batch_files() -> None:
|
|
50
|
+
runner = FileEvaluationRunner([{"type": "NOT_A_DETECTOR", "enabled": True, "config": {}}])
|
|
51
|
+
|
|
52
|
+
assert runner._build_detectors() == []
|
|
53
|
+
assert runner._build_detectors() == []
|
|
54
|
+
assert len(runner.detector_errors) == 1
|
|
55
|
+
|
|
56
|
+
|
|
49
57
|
def _write_png(path: Path) -> None:
|
|
50
58
|
pytest.importorskip("PIL")
|
|
51
59
|
from PIL import Image
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import json
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from unittest.mock import AsyncMock
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from src.main import _emit_text_chunks_with_retry, run_evaluate_file_command
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.mark.asyncio
|
|
14
|
+
async def test_emit_text_chunks_retries_before_succeeding(
|
|
15
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
16
|
+
) -> None:
|
|
17
|
+
sink = type("Sink", (), {})()
|
|
18
|
+
sink.emit_text_chunks = AsyncMock(side_effect=[RuntimeError("temporary outage"), None])
|
|
19
|
+
sleep = AsyncMock()
|
|
20
|
+
monkeypatch.setattr("src.main.asyncio.sleep", sleep)
|
|
21
|
+
|
|
22
|
+
await _emit_text_chunks_with_retry(sink, "asset-1", object(), attempts=3)
|
|
23
|
+
|
|
24
|
+
assert sink.emit_text_chunks.await_count == 2
|
|
25
|
+
sleep.assert_awaited_once_with(0.25)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.mark.asyncio
|
|
29
|
+
async def test_emit_text_chunks_propagates_exhausted_retries(
|
|
30
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
31
|
+
) -> None:
|
|
32
|
+
sink = type("Sink", (), {})()
|
|
33
|
+
sink.emit_text_chunks = AsyncMock(side_effect=RuntimeError("API unavailable"))
|
|
34
|
+
monkeypatch.setattr("src.main.asyncio.sleep", AsyncMock())
|
|
35
|
+
|
|
36
|
+
with pytest.raises(RuntimeError, match="API unavailable"):
|
|
37
|
+
await _emit_text_chunks_with_retry(sink, "asset-1", object(), attempts=3)
|
|
38
|
+
|
|
39
|
+
assert sink.emit_text_chunks.await_count == 3
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_evaluate_file_directory_returns_one_result_per_sample(
|
|
43
|
+
tmp_path: Path,
|
|
44
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
45
|
+
capsys: pytest.CaptureFixture[str],
|
|
46
|
+
) -> None:
|
|
47
|
+
(tmp_path / "input-001.txt").write_text("counter")
|
|
48
|
+
(tmp_path / "input-000.txt").write_text("positive")
|
|
49
|
+
|
|
50
|
+
calls: list[str] = []
|
|
51
|
+
|
|
52
|
+
class FakeParsed:
|
|
53
|
+
mime_type = "text/plain"
|
|
54
|
+
parse_error = None
|
|
55
|
+
|
|
56
|
+
class FakeFinding:
|
|
57
|
+
def model_dump(self, **_kwargs: object) -> dict[str, str]:
|
|
58
|
+
return {"finding_type": "match"}
|
|
59
|
+
|
|
60
|
+
class FakeRunner:
|
|
61
|
+
def __init__(self, _detectors: list[dict[str, object]]) -> None:
|
|
62
|
+
self.detector_errors: list[str] = []
|
|
63
|
+
|
|
64
|
+
def run(self, sample_path: Path) -> tuple[FakeParsed, list[FakeFinding]]:
|
|
65
|
+
calls.append(sample_path.name)
|
|
66
|
+
findings = [FakeFinding()] if sample_path.name == "input-000.txt" else []
|
|
67
|
+
return FakeParsed(), findings
|
|
68
|
+
|
|
69
|
+
monkeypatch.setattr("src.file_evaluation.FileEvaluationRunner", FakeRunner)
|
|
70
|
+
run_evaluate_file_command(
|
|
71
|
+
argparse.Namespace(recipe=str(tmp_path), detectors_file=None),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
output = json.loads(capsys.readouterr().out)
|
|
75
|
+
assert calls == ["input-000.txt", "input-001.txt"]
|
|
76
|
+
assert [item["name"] for item in output["evaluations"]] == calls
|
|
77
|
+
assert len(output["evaluations"][0]["findings"]) == 1
|
|
78
|
+
assert output["evaluations"][1]["findings"] == []
|
|
@@ -562,30 +562,30 @@ wheels = [
|
|
|
562
562
|
|
|
563
563
|
[[package]]
|
|
564
564
|
name = "boto3"
|
|
565
|
-
version = "1.43.
|
|
565
|
+
version = "1.43.69"
|
|
566
566
|
source = { registry = "https://pypi.org/simple" }
|
|
567
567
|
dependencies = [
|
|
568
568
|
{ name = "botocore" },
|
|
569
569
|
{ name = "jmespath" },
|
|
570
570
|
{ name = "s3transfer" },
|
|
571
571
|
]
|
|
572
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
572
|
+
sdist = { url = "https://files.pythonhosted.org/packages/45/8f/315e908f5abaab5deb77196117f66c1badc9093b03dc152b0b8231b0112b/boto3-1.43.69.tar.gz", hash = "sha256:76297a0b415849c63575ae08a4f1661b2dc8ee0100f104b86f98aa69b47fa2c7", size = 112666, upload-time = "2026-08-11T19:24:26.281Z" }
|
|
573
573
|
wheels = [
|
|
574
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
574
|
+
{ url = "https://files.pythonhosted.org/packages/7a/57/67ebb743ab0556c14db656e91e49024f3e1b0585f1a15c2d025176fb3c1e/boto3-1.43.69-py3-none-any.whl", hash = "sha256:4eb494d05b2bd08a7eee61b8ac4c34745c99e9bbce435c91f8d15d372dd8c2db", size = 140024, upload-time = "2026-08-11T19:24:25.022Z" },
|
|
575
575
|
]
|
|
576
576
|
|
|
577
577
|
[[package]]
|
|
578
578
|
name = "botocore"
|
|
579
|
-
version = "1.43.
|
|
579
|
+
version = "1.43.69"
|
|
580
580
|
source = { registry = "https://pypi.org/simple" }
|
|
581
581
|
dependencies = [
|
|
582
582
|
{ name = "jmespath" },
|
|
583
583
|
{ name = "python-dateutil" },
|
|
584
584
|
{ name = "urllib3" },
|
|
585
585
|
]
|
|
586
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
586
|
+
sdist = { url = "https://files.pythonhosted.org/packages/84/da/726b23443ebc77078387fbf330ef7240bc6a96553e566e45a647cd8f714c/botocore-1.43.69.tar.gz", hash = "sha256:5caa46b740d9a886137146ffbb69edb691f702bfe74c64e85621947ae00181fd", size = 15911844, upload-time = "2026-08-11T19:24:20.778Z" }
|
|
587
587
|
wheels = [
|
|
588
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
588
|
+
{ url = "https://files.pythonhosted.org/packages/64/ef/a1effbe4ffabadc38ea9425c54601262eaac8cbb5b6089f8f76536d3c8b1/botocore-1.43.69-py3-none-any.whl", hash = "sha256:b1f0e01c53d6b84ee9c184ebf3636c3b3aef85e0ae8498c74afb8734ff224f87", size = 15596589, upload-time = "2026-08-11T19:24:18.283Z" },
|
|
589
589
|
]
|
|
590
590
|
|
|
591
591
|
[[package]]
|
|
@@ -853,7 +853,7 @@ wheels = [
|
|
|
853
853
|
|
|
854
854
|
[[package]]
|
|
855
855
|
name = "classifyre-cli"
|
|
856
|
-
version = "0.4.
|
|
856
|
+
version = "0.4.109"
|
|
857
857
|
source = { editable = "." }
|
|
858
858
|
dependencies = [
|
|
859
859
|
{ name = "beautifulsoup4" },
|
|
@@ -1392,7 +1392,7 @@ youtube = [
|
|
|
1392
1392
|
|
|
1393
1393
|
[[package]]
|
|
1394
1394
|
name = "classifyre-schemas"
|
|
1395
|
-
version = "0.4.
|
|
1395
|
+
version = "0.4.109"
|
|
1396
1396
|
source = { editable = "../../packages/schemas" }
|
|
1397
1397
|
dependencies = [
|
|
1398
1398
|
{ name = "fastjsonschema" },
|
|
@@ -1852,7 +1852,7 @@ wheels = [
|
|
|
1852
1852
|
|
|
1853
1853
|
[[package]]
|
|
1854
1854
|
name = "docling-parse"
|
|
1855
|
-
version = "7.12.
|
|
1855
|
+
version = "7.12.1"
|
|
1856
1856
|
source = { registry = "https://pypi.org/simple" }
|
|
1857
1857
|
dependencies = [
|
|
1858
1858
|
{ name = "docling-core" },
|
|
@@ -1860,23 +1860,23 @@ dependencies = [
|
|
|
1860
1860
|
{ name = "pydantic" },
|
|
1861
1861
|
{ name = "pywin32", marker = "sys_platform == 'win32'" },
|
|
1862
1862
|
]
|
|
1863
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1863
|
+
sdist = { url = "https://files.pythonhosted.org/packages/82/00/ab56de324d844cf5862f46f5c95dc18c5ee52dbb83d794c274c8e520373d/docling_parse-7.12.1.tar.gz", hash = "sha256:25c8759b19292ad8cf31e1b133980c30f0fd8800b510c02c56a3af5dbb989232", size = 6828762, upload-time = "2026-08-12T08:36:48.18Z" }
|
|
1864
1864
|
wheels = [
|
|
1865
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1866
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1867
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1868
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1869
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1870
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1871
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1872
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1873
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1874
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1875
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1876
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1877
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1878
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1879
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1865
|
+
{ url = "https://files.pythonhosted.org/packages/ba/ff/4d4464e3e74dd54a47e0c811779a378f1f0b22b74adb2874bcc38885a3b5/docling_parse-7.12.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ff5ac71bc2a702cbc7bd4fd7c2fcbf6af483c982af4bae36fb727a9db169a849", size = 9667688, upload-time = "2026-08-12T08:36:20.274Z" },
|
|
1866
|
+
{ url = "https://files.pythonhosted.org/packages/6a/41/24b6303e0e5e79c3ea8d2daea0cdcbe95a3d71a0b1715bd5345ac7a3ba5a/docling_parse-7.12.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3c91f46776ba2aa3c31667747f4f39e91f8c1b58e391663c5e44d7bb416a3f6", size = 10191724, upload-time = "2026-08-12T08:36:22.102Z" },
|
|
1867
|
+
{ url = "https://files.pythonhosted.org/packages/53/31/951fc8740f2ab6ab1fb9a1d223269d082eedf8a4b1dcbee42da81a395efc/docling_parse-7.12.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:33fc4afd8b46a2c760a8ca4558b4d744d6c9d207318581f3234fec3df91ca85f", size = 10577523, upload-time = "2026-08-12T08:36:23.821Z" },
|
|
1868
|
+
{ url = "https://files.pythonhosted.org/packages/37/b9/0c17dfa3571705f4bdd698d929c4003cfc249d117c7317ae82a294cc18a3/docling_parse-7.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:344c7f1da55be7fc992045fb5ff07b411e589b1da62a8f943842ac7ac986245a", size = 11639307, upload-time = "2026-08-12T08:36:25.954Z" },
|
|
1869
|
+
{ url = "https://files.pythonhosted.org/packages/30/5b/5f589310d243b006d145c8e4cd0d9770accf2048ba6ad08d7608ac1f6e58/docling_parse-7.12.1-cp312-cp312-win_arm64.whl", hash = "sha256:cfddd1f3a3631e87d4c965b4ffd0dc95e249b046af0a6b8916e129285fb0e80c", size = 8964784, upload-time = "2026-08-12T08:36:27.94Z" },
|
|
1870
|
+
{ url = "https://files.pythonhosted.org/packages/0d/35/510104ef0f0f01e985fb4eeb9269aaec964e80dda4b64077d19099923782/docling_parse-7.12.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:b3a740f373f00c87555cdbbf996b726df1e99a9de5d95a24484f71d1f7394077", size = 9667627, upload-time = "2026-08-12T08:36:29.713Z" },
|
|
1871
|
+
{ url = "https://files.pythonhosted.org/packages/48/7b/6bab4aba25c7356f6afff8e067e6e2ced71767db7f0b1698537e27ff8853/docling_parse-7.12.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61a2f203a8e4ce5cd27fba2b6de4474eb11b5e6e1e17116e0dd349376d234d6d", size = 10191624, upload-time = "2026-08-12T08:36:31.408Z" },
|
|
1872
|
+
{ url = "https://files.pythonhosted.org/packages/8e/17/4cb450252bb8a38ffb98aa7f5f42bd35d300808d42e46a96849890993e84/docling_parse-7.12.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5c015e19e9be88ce001115a1913bf6addf4c2931c3556e9cf2a10b596bbe46d", size = 10577661, upload-time = "2026-08-12T08:36:33.227Z" },
|
|
1873
|
+
{ url = "https://files.pythonhosted.org/packages/f3/e2/8ca2efcd457a2a040e9dc1af73100c17d72c20cd7bf1b1d8b20e51abc771/docling_parse-7.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:24b29a5ca40071b3d5ea7494c22a5552f4d9d29bf93bdfc1925986d922feff5f", size = 11639305, upload-time = "2026-08-12T08:36:35.055Z" },
|
|
1874
|
+
{ url = "https://files.pythonhosted.org/packages/e5/4b/b59a91e8e63a855b54905aaba39c1f06d4f95cad5c0c160f9995a6257701/docling_parse-7.12.1-cp313-cp313-win_arm64.whl", hash = "sha256:4f73b41fda9c4fa6beb6c3d685071dd28a2c1f00e69f0133fbc15bda8c0f7ab7", size = 8964612, upload-time = "2026-08-12T08:36:36.772Z" },
|
|
1875
|
+
{ url = "https://files.pythonhosted.org/packages/04/57/97ec433850b8e7706943a8de0cf65774f043ae393a5d86703e7e8658d71e/docling_parse-7.12.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:447ced8771f7053f9f834efec363d578d92598119b95e83bed2551c185a7355f", size = 9668271, upload-time = "2026-08-12T08:36:38.58Z" },
|
|
1876
|
+
{ url = "https://files.pythonhosted.org/packages/f2/ce/6c213b6599ca8b0c93a8cf11077f2c38b2ed48a2d05e42e3c091b5245642/docling_parse-7.12.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e4c806e63f5e6dcf63643d3472b241e7786653bad82321c95b937b69942a5e", size = 10192440, upload-time = "2026-08-12T08:36:40.529Z" },
|
|
1877
|
+
{ url = "https://files.pythonhosted.org/packages/ea/a7/17cd8d4c691c025a9515bd0ab81c8de502988fa257ba2fdccdb973b5c53e/docling_parse-7.12.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fff030c85eb85fc6589bdabc64bdc58a0c82cd6e0870ff9cf55114be525f46f5", size = 10578105, upload-time = "2026-08-12T08:36:42.238Z" },
|
|
1878
|
+
{ url = "https://files.pythonhosted.org/packages/63/c5/0dfb8eb4ea12f7f361beb8c342c115774524f7cea0a1feeba273f572fb27/docling_parse-7.12.1-cp314-cp314-win_amd64.whl", hash = "sha256:8a3debe619e2303442139472ec39a21cdb4714b27d026cf0c34233411779c8c4", size = 12072065, upload-time = "2026-08-12T08:36:43.985Z" },
|
|
1879
|
+
{ url = "https://files.pythonhosted.org/packages/c7/45/7fdcf5c321ab3d0c2047edd844c75633d9c60abc043083f6dab95a1b1b39/docling_parse-7.12.1-cp314-cp314-win_arm64.whl", hash = "sha256:6488966275412d599aa2fcd0920cea38bb20ac937aeb5bd135ea5354c6dcb5b6", size = 9329032, upload-time = "2026-08-12T08:36:46.533Z" },
|
|
1880
1880
|
]
|
|
1881
1881
|
|
|
1882
1882
|
[[package]]
|
|
@@ -2947,7 +2947,7 @@ wheels = [
|
|
|
2947
2947
|
|
|
2948
2948
|
[[package]]
|
|
2949
2949
|
name = "litellm"
|
|
2950
|
-
version = "1.96.
|
|
2950
|
+
version = "1.96.2"
|
|
2951
2951
|
source = { registry = "https://pypi.org/simple" }
|
|
2952
2952
|
dependencies = [
|
|
2953
2953
|
{ name = "aiohttp" },
|
|
@@ -2964,29 +2964,15 @@ dependencies = [
|
|
|
2964
2964
|
{ name = "tiktoken" },
|
|
2965
2965
|
{ name = "tokenizers" },
|
|
2966
2966
|
]
|
|
2967
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2968
|
-
wheels = [
|
|
2969
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2970
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2971
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2972
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2973
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2974
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2975
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2976
|
-
{ url = "https://files.pythonhosted.org/packages/2b/1e/ac71d20d3c5df942d8877b834e5db190b77395317f436e59c77e5c8b0ef3/litellm-1.96.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:baf13fd3176a569b2924e2c4bb4e82da03a11e1a7cf4144ea2d92a1b40d87c17", size = 25933352, upload-time = "2026-08-09T01:36:17.98Z" },
|
|
2977
|
-
{ url = "https://files.pythonhosted.org/packages/ed/1e/76c666f9ba4e0a20d8b3fca8f0af369f97d2e2c2a4874b10b4f344c6bed7/litellm-1.96.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26d2ae2a5f8a839b757cfb7744ffa0c95f225c583984b99352887fcf4e5456ef", size = 25643356, upload-time = "2026-08-09T01:36:20.535Z" },
|
|
2978
|
-
{ url = "https://files.pythonhosted.org/packages/56/fc/48cdbdb1fc6d0ec573bb9b1c04fe81528d84886e1cde0100d4c38e0238f1/litellm-1.96.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:887fd96224c2197897b1df309e9e8d984196a3d18472f908a6aa5a371e569b25", size = 26580407, upload-time = "2026-08-09T01:36:23.345Z" },
|
|
2979
|
-
{ url = "https://files.pythonhosted.org/packages/cc/48/c1bddb7e7c328816a0136d94afa455279b825d13e1507b669da2e2be78b8/litellm-1.96.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a75d7718fc72e526501d568c01f50278206106d1db7d77e6c34973e0877a77f", size = 26444531, upload-time = "2026-08-09T01:36:26.24Z" },
|
|
2980
|
-
{ url = "https://files.pythonhosted.org/packages/c7/63/0f4109c7e19bb78735e87f9fcca565750d49a71b022941ba89366f764cd5/litellm-1.96.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:217191eeb91561372e1f079f2925a15753f1c41955256e09e11787d7c1dca94b", size = 26653932, upload-time = "2026-08-09T01:36:28.81Z" },
|
|
2981
|
-
{ url = "https://files.pythonhosted.org/packages/65/9e/812d87aee7db46f9cde44ce96aec25de90f1c4f356def2bb7f6d1ec0a011/litellm-1.96.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b1cc10ba307cb31e9a799bfcdcfed4cb0a558c5cfb867a970cc6159d6ec649bc", size = 26861204, upload-time = "2026-08-09T01:36:31.467Z" },
|
|
2982
|
-
{ url = "https://files.pythonhosted.org/packages/61/80/0d276c052f54386a491571792818d7e24e3bcf2a1fae45f431cdb4b8c15f/litellm-1.96.0-cp313-cp313-win_amd64.whl", hash = "sha256:d64c7746768aa2df6a85d63bb6ea0a092488584131ed5e0d49e52e4088e60d20", size = 25054138, upload-time = "2026-08-09T01:36:34.391Z" },
|
|
2983
|
-
{ url = "https://files.pythonhosted.org/packages/1c/05/96a800df42d6734f912786d99e77e573f5360ba08f7a68292d067cc291cd/litellm-1.96.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:7a86e14eb6c275f8588f3d364d91cbd935f5eebada28593a08b9106f68bc7681", size = 25935008, upload-time = "2026-08-09T01:36:37.043Z" },
|
|
2984
|
-
{ url = "https://files.pythonhosted.org/packages/42/8f/bff76ef3d44863d0ace55c3ed01e18a481cc93c2fc4a7c6837e6f6655482/litellm-1.96.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e3c39a0313aadbd771439e9c31b0878eb04992ce29b1b51d0003eccd91feb71d", size = 25643765, upload-time = "2026-08-09T01:36:39.721Z" },
|
|
2985
|
-
{ url = "https://files.pythonhosted.org/packages/d0/4f/215578f922c301643852309d82b459d699e6a86aae1872fde60c4e33366a/litellm-1.96.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:10c8f4dcf50ba88e3958f0d2c4483f0934622c03b1c5adce14e57d7fd597f3d3", size = 26578304, upload-time = "2026-08-09T01:36:42.887Z" },
|
|
2986
|
-
{ url = "https://files.pythonhosted.org/packages/f8/9c/aa4bf7cc574eac46ec22d80a9e4c895fa438b3b32c54465a092b2b90714b/litellm-1.96.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:63f98de57415d8f96f3f07d011b11947d3358b5934a66676ae7ec98244613f08", size = 26444536, upload-time = "2026-08-09T01:36:45.408Z" },
|
|
2987
|
-
{ url = "https://files.pythonhosted.org/packages/34/09/62bb156ffb051bb4ed28a14549c649147d8e231cbef9bad5935aa9a8ae02/litellm-1.96.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0b03e44a3cd0c03421e5afc024e4d6c88ed6f7ed51b7b566cc4eb41652fa629a", size = 26650611, upload-time = "2026-08-09T01:36:48.047Z" },
|
|
2988
|
-
{ url = "https://files.pythonhosted.org/packages/86/7b/3f5ed4d2a5e23aee7c130fca3a6f81bf1c305922e16135f2c476ee8747f0/litellm-1.96.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:340f893e9bfc4bd283565a7fe9f159840c8641763d533d381580359bfbfc4fe8", size = 26861612, upload-time = "2026-08-09T01:36:51.017Z" },
|
|
2989
|
-
{ url = "https://files.pythonhosted.org/packages/1a/17/3ec96e43009c91c7cec8ddf6dc830ce2dd03a3f7c5f853267f894daf44ed/litellm-1.96.0-cp314-cp314-win_amd64.whl", hash = "sha256:7ba695d5ea090923fa2338b20c249a504e19bb492d1e61a5a55235c9e8b49931", size = 25056208, upload-time = "2026-08-09T01:36:53.744Z" },
|
|
2967
|
+
sdist = { url = "https://files.pythonhosted.org/packages/79/fe/d03be8a6be6914fabacef29457a2b3d02128c52c448cc6f3019b8e63488b/litellm-1.96.2.tar.gz", hash = "sha256:80d477ae092b05ce023b5084542cb3cb75999b52b1dd2e4d834fb348effc9399", size = 17682558, upload-time = "2026-08-11T21:12:24.117Z" }
|
|
2968
|
+
wheels = [
|
|
2969
|
+
{ url = "https://files.pythonhosted.org/packages/46/85/653d0095a163cc9a1f2f1aa629cf4493c57c3abe13bd806290fc5d57458b/litellm-1.96.2-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:0aa667c6fc58b20ff04fe5efaac5cf48b1e224bac32dbf22ced2e5ee695bc4ba", size = 24102871, upload-time = "2026-08-11T21:12:06.152Z" },
|
|
2970
|
+
{ url = "https://files.pythonhosted.org/packages/29/a1/1322630271fbb291e97b54eb46baa8c4f512130a620a8428c7460b4ef414/litellm-1.96.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e5d96d16b37a043e482a134a71b0c1df4e700603fc14df22e4bd27dc9e38f5c4", size = 23760722, upload-time = "2026-08-11T21:12:09.257Z" },
|
|
2971
|
+
{ url = "https://files.pythonhosted.org/packages/17/0e/e0e2734194072a438298e94dbc3c37879d335fdf50881ce8995daa6878d1/litellm-1.96.2-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1a42d68b903f6b605bd7744e9700b16a725f897c5edcc448e491cec14cd5a9db", size = 23898969, upload-time = "2026-08-11T21:12:11.68Z" },
|
|
2972
|
+
{ url = "https://files.pythonhosted.org/packages/b5/84/993c40c116c699383741fd27da515c71b395609859148ea32720925eaeaf/litellm-1.96.2-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:76e9c72cb6757bb7c35cd23e3e4fc028910795910ae92491076bd50f7b61f205", size = 24264588, upload-time = "2026-08-11T21:12:14.18Z" },
|
|
2973
|
+
{ url = "https://files.pythonhosted.org/packages/d8/02/21dc260ae3fd72b23544abce23ad5f3d563e3d39a4f617bba6d98f4b9c31/litellm-1.96.2-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1f304b8854e385946469d2dcf8ef88e24357120671caeaddea11b085b0302308", size = 23973160, upload-time = "2026-08-11T21:12:16.616Z" },
|
|
2974
|
+
{ url = "https://files.pythonhosted.org/packages/64/5d/e79f86b43f07aff7f796faf3c6d1025f6ab9da43f72b7c555a26811af191/litellm-1.96.2-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8c21a57a0f3507176492a4f65361a4302af1a0723c97e96961c7ed0e96934832", size = 24360615, upload-time = "2026-08-11T21:12:18.947Z" },
|
|
2975
|
+
{ url = "https://files.pythonhosted.org/packages/3e/6a/c2e3058fd3766eebe5685c688d9e85adb9749e946580f46214a651661522/litellm-1.96.2-cp310-abi3-win_amd64.whl", hash = "sha256:0168e49cffecb0b45a0d044ecb7e5f7f6fc9e14d974b50f54edfa9d8e0db9c1d", size = 24154302, upload-time = "2026-08-11T21:12:21.221Z" },
|
|
2990
2976
|
]
|
|
2991
2977
|
|
|
2992
2978
|
[[package]]
|
|
@@ -3111,11 +3097,11 @@ wheels = [
|
|
|
3111
3097
|
|
|
3112
3098
|
[[package]]
|
|
3113
3099
|
name = "mail-parser"
|
|
3114
|
-
version = "4.6.
|
|
3100
|
+
version = "4.6.1"
|
|
3115
3101
|
source = { registry = "https://pypi.org/simple" }
|
|
3116
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
3102
|
+
sdist = { url = "https://files.pythonhosted.org/packages/0e/43/82f02f29f2091e426b609e42ff2b0c9da32dc78c32ddd2c3cde61bc947b6/mail_parser-4.6.1.tar.gz", hash = "sha256:7381853eccb551c83090c90f3ef16e433e8c9b320acbe27145a13c0d2fca480f", size = 2869128, upload-time = "2026-08-12T07:25:00.912Z" }
|
|
3117
3103
|
wheels = [
|
|
3118
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
3104
|
+
{ url = "https://files.pythonhosted.org/packages/e6/02/bd1768a316a302c622913c4ffd37f9aa660f0a5907f5d2c4b151f9352871/mail_parser-4.6.1-py3-none-any.whl", hash = "sha256:f688394e26e3f838fee33039bda5b8ea1876622c81ff0c5f0db5a817379ff62c", size = 39279, upload-time = "2026-08-12T07:24:59.797Z" },
|
|
3119
3105
|
]
|
|
3120
3106
|
|
|
3121
3107
|
[[package]]
|
|
@@ -3132,11 +3118,11 @@ wheels = [
|
|
|
3132
3118
|
|
|
3133
3119
|
[[package]]
|
|
3134
3120
|
name = "marko"
|
|
3135
|
-
version = "2.2.
|
|
3121
|
+
version = "2.2.4"
|
|
3136
3122
|
source = { registry = "https://pypi.org/simple" }
|
|
3137
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
3123
|
+
sdist = { url = "https://files.pythonhosted.org/packages/82/6d/671a18bb386adca6311bca6c2fe6bec873947ee501cc5f8f509ec06bdde0/marko-2.2.4.tar.gz", hash = "sha256:c042c66f835425673123d7536b39b4660de3b68e30078c70fd26245b31170683", size = 151013, upload-time = "2026-08-12T03:20:11.772Z" }
|
|
3138
3124
|
wheels = [
|
|
3139
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
3125
|
+
{ url = "https://files.pythonhosted.org/packages/d3/78/751d49c8bdfa0b30147c99235516433af6b63eca367ff28593c7346a0494/marko-2.2.4-py3-none-any.whl", hash = "sha256:d80510506edba096ec49d4720a09645fa0bb78e7b7b88697f20032fc19730aa9", size = 46753, upload-time = "2026-08-12T03:20:10.811Z" },
|
|
3140
3126
|
]
|
|
3141
3127
|
|
|
3142
3128
|
[[package]]
|
|
@@ -3906,7 +3892,7 @@ wheels = [
|
|
|
3906
3892
|
|
|
3907
3893
|
[[package]]
|
|
3908
3894
|
name = "openai"
|
|
3909
|
-
version = "2.
|
|
3895
|
+
version = "2.54.0"
|
|
3910
3896
|
source = { registry = "https://pypi.org/simple" }
|
|
3911
3897
|
dependencies = [
|
|
3912
3898
|
{ name = "anyio" },
|
|
@@ -3918,9 +3904,9 @@ dependencies = [
|
|
|
3918
3904
|
{ name = "tqdm" },
|
|
3919
3905
|
{ name = "typing-extensions" },
|
|
3920
3906
|
]
|
|
3921
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
3907
|
+
sdist = { url = "https://files.pythonhosted.org/packages/50/9a/8c75e8c8a5b407a0586faeb2afac91674ff955c191ecc1d6d3b6669f6788/openai-2.54.0.tar.gz", hash = "sha256:e3e6f8bc1ba30ddf381ace1a14340eed381cb984a1a59bd0f34b5be3b5d49cfa", size = 1100285, upload-time = "2026-08-11T18:46:59.035Z" }
|
|
3922
3908
|
wheels = [
|
|
3923
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
3909
|
+
{ url = "https://files.pythonhosted.org/packages/64/a8/bb76c7356de8ad57f59d5ff993d434df0607f07f08bcc9c9a5c275e399c0/openai-2.54.0-py3-none-any.whl", hash = "sha256:89089789197ccdb87f173a03145ed1598d00795220c93e96cf712b1cbf5e5f2b", size = 1660351, upload-time = "2026-08-11T18:46:56.684Z" },
|
|
3924
3910
|
]
|
|
3925
3911
|
|
|
3926
3912
|
[[package]]
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from unittest.mock import AsyncMock
|
|
4
|
-
|
|
5
|
-
import pytest
|
|
6
|
-
|
|
7
|
-
from src.main import _emit_text_chunks_with_retry
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@pytest.mark.asyncio
|
|
11
|
-
async def test_emit_text_chunks_retries_before_succeeding(
|
|
12
|
-
monkeypatch: pytest.MonkeyPatch,
|
|
13
|
-
) -> None:
|
|
14
|
-
sink = type("Sink", (), {})()
|
|
15
|
-
sink.emit_text_chunks = AsyncMock(side_effect=[RuntimeError("temporary outage"), None])
|
|
16
|
-
sleep = AsyncMock()
|
|
17
|
-
monkeypatch.setattr("src.main.asyncio.sleep", sleep)
|
|
18
|
-
|
|
19
|
-
await _emit_text_chunks_with_retry(sink, "asset-1", object(), attempts=3)
|
|
20
|
-
|
|
21
|
-
assert sink.emit_text_chunks.await_count == 2
|
|
22
|
-
sleep.assert_awaited_once_with(0.25)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@pytest.mark.asyncio
|
|
26
|
-
async def test_emit_text_chunks_propagates_exhausted_retries(
|
|
27
|
-
monkeypatch: pytest.MonkeyPatch,
|
|
28
|
-
) -> None:
|
|
29
|
-
sink = type("Sink", (), {})()
|
|
30
|
-
sink.emit_text_chunks = AsyncMock(side_effect=RuntimeError("API unavailable"))
|
|
31
|
-
monkeypatch.setattr("src.main.asyncio.sleep", AsyncMock())
|
|
32
|
-
|
|
33
|
-
with pytest.raises(RuntimeError, match="API unavailable"):
|
|
34
|
-
await _emit_text_chunks_with_retry(sink, "asset-1", object(), attempts=3)
|
|
35
|
-
|
|
36
|
-
assert sink.emit_text_chunks.await_count == 3
|
|
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.107 → classifyre_cli-0.4.109}/src/detectors/custom/runners/_object_detection.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
|
{classifyre_cli-0.4.107 → classifyre_cli-0.4.109}/src/detectors/threat/code_security_detector.py
RENAMED
|
File without changes
|
|
File without changes
|