classifyre-cli 0.4.68__tar.gz → 0.4.70__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.68 → classifyre_cli-0.4.70}/.turbo/turbo-build.log +1 -1
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/PKG-INFO +1 -1
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/package.json +1 -1
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/pyproject.toml +5 -1
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/models/generated_input.py +261 -25
- classifyre_cli-0.4.70/src/sources/dropbox/__init__.py +3 -0
- classifyre_cli-0.4.70/src/sources/dropbox/source.py +677 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/elasticsearch/source.py +1 -0
- classifyre_cli-0.4.70/src/sources/kafka/rest.py +228 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/kafka/source.py +204 -44
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/meilisearch/source.py +4 -1
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/object_storage/base.py +10 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/opensearch/source.py +1 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/search_engine_base.py +91 -10
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/dependency_groups.py +7 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_dependency_groups.py +8 -0
- classifyre_cli-0.4.70/tests/test_dropbox_source.py +942 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_elasticsearch_source.py +98 -8
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_kafka_source.py +226 -6
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_meilisearch_source.py +3 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_opensearch_source.py +43 -7
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/uv.lock +35 -5
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/.gitignore +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/.python-version +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/README.md +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/main.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/scripts/generate_models.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/config.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/base.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/broken_links/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/broken_links/detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/config.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/extractor.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_base.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_factory.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_gliner2.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_image_classification.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_llm.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_object_detection.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_regex.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/runners/_text_classification.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/custom/trainer.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/dependencies.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/pii/detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/secrets/detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/threat/code_security_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/detectors/threat/yara_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/file_evaluation/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/file_evaluation/runner.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/main.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/models/generated_detectors.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/models/generated_single_asset_scan_results.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/outputs/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/outputs/base.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/outputs/console.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/outputs/factory.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/outputs/file.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/outputs/rest.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/pipeline/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/pipeline/content_provider.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/pipeline/detector_pipeline.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/pipeline/parsed_content_provider.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/pipeline/text_artifact.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/pipeline/worker_pool.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/asset_metadata.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/atlassian_common.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/azure_blob_storage/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/azure_blob_storage/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/base.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/confluence/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/confluence/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/databricks/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/databricks/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/delta_lake/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/delta_lake/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/dependencies.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/elasticsearch/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/email/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/email/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/google_cloud_storage/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/google_cloud_storage/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/google_workspace/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/google_workspace/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/hive/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/hive/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/iceberg/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/iceberg/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/jira/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/jira/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/kafka/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/lakehouse_base.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/local_folder/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/local_folder/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/meilisearch/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/microsoft_365/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/microsoft_365/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/mongodb/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/mongodb/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/mssql/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/mssql/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/mysql/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/mysql/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/neo4j/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/neo4j/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/notion/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/notion/client.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/notion/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/opensearch/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/oracle/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/oracle/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/postgresql/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/postgresql/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/powerbi/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/powerbi/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/s3_client.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/s3_compatible_storage/README.md +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/s3_compatible_storage/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/s3_compatible_storage/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/sandbox/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/sandbox/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/servicedesk/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/servicedesk/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/slack/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/slack/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/snowflake/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/snowflake/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/sqlite/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/sqlite/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/tableau/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/tableau/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/tabular_base.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/tabular_utils.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/wordpress/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/wordpress/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/youtube/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/sources/youtube/source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/telemetry.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/archive_extraction.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/content_extraction.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/embedded_images.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/file_metadata.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/file_parser.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/file_to_images.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/hashing.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/legacy_office.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/resources.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/transcription.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/uv_sync.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/validation.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/src/utils/video_processing.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/_lakehouse_fakes.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/conftest.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/conftest.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/conftest.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_gliner2_classification.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_invoice_extraction.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_llm_runner.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_pipeline_integration.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_regex_runner.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_runner_hardening.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/custom/test_transformer_runners.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/conftest.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/sample_invoice.pdf +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/test_pii_chunking.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/test_pii_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/pii/test_pii_severity.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/secrets/test_secrets_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_base_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_detector_catalog_commercial.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_detector_pipeline_types.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_detector_schema_examples.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_detector_types.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_phase2_detectors.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/test_registry.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/threat/test_code_security_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/detectors/threat/test_yara_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/integration/test_wordpress_links_assets.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/pipeline/test_detector_outcomes.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/pipeline/test_detector_pipeline.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/pipeline/test_worker_pool.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_assets_metadata_catalog.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_azure_blob_storage_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_base_source_attachment.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_base_source_sampling.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_config.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_confluence_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_custom_extractor.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_databricks_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_delta_lake_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_email_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_file_evaluation_runner.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_google_cloud_storage_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_google_workspace_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_hashing.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_hive_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_iceberg_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_jira_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_local_folder_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_main.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_microsoft_365_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_mongodb_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_mssql_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_mysql_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_neo4j_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_notion_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_oracle_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_outputs.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_postgresql_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_powerbi_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_s3_compatible_storage_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_sampling_automatic.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_sandbox_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_servicedesk_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_slack_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_snowflake_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_source_dependency_groups.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_source_strategy_conformance.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_sqlite_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_tableau_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_tabular_automatic_sampling.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_tabular_utils.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_uv_sync.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_wordpress_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_youtube_source.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/test_youtube_source_integration.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_archive_extraction.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_content_extraction.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_embedded_images.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_file_metadata.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_file_parser.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_file_to_images.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_legacy_office.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_transcription.py +0 -0
- {classifyre_cli-0.4.68 → classifyre_cli-0.4.70}/tests/utils/test_video_processing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "classifyre-cli"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.70"
|
|
4
4
|
description = "Classifyre CLI — scan and classify unstructured data sources"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -227,6 +227,9 @@ google-workspace = [
|
|
|
227
227
|
google-cloud-storage = [
|
|
228
228
|
"google-cloud-storage>=3.10.1,<4.0.0",
|
|
229
229
|
]
|
|
230
|
+
dropbox = [
|
|
231
|
+
"dropbox>=12.2.1,<13.0.0",
|
|
232
|
+
]
|
|
230
233
|
email = [
|
|
231
234
|
"imap-tools>=1.10.0,<2.0.0",
|
|
232
235
|
]
|
|
@@ -377,6 +380,7 @@ module = [
|
|
|
377
380
|
"confluent_kafka.*",
|
|
378
381
|
"boto3.*",
|
|
379
382
|
"botocore.*",
|
|
383
|
+
"dropbox.*",
|
|
380
384
|
]
|
|
381
385
|
ignore_missing_imports = true
|
|
382
386
|
|
|
@@ -54,6 +54,7 @@ class AssetType(StrEnum):
|
|
|
54
54
|
LOCAL_FOLDER = 'LOCAL_FOLDER'
|
|
55
55
|
MICROSOFT_365 = 'MICROSOFT_365'
|
|
56
56
|
GOOGLE_WORKSPACE = 'GOOGLE_WORKSPACE'
|
|
57
|
+
DROPBOX = 'DROPBOX'
|
|
57
58
|
SANDBOX = 'SANDBOX'
|
|
58
59
|
|
|
59
60
|
|
|
@@ -354,6 +355,7 @@ class Type(StrEnum):
|
|
|
354
355
|
LOCAL_FOLDER = 'LOCAL_FOLDER'
|
|
355
356
|
MICROSOFT_365 = 'MICROSOFT_365'
|
|
356
357
|
GOOGLE_WORKSPACE = 'GOOGLE_WORKSPACE'
|
|
358
|
+
DROPBOX = 'DROPBOX'
|
|
357
359
|
SANDBOX = 'SANDBOX'
|
|
358
360
|
|
|
359
361
|
|
|
@@ -3067,6 +3069,7 @@ class Type21(StrEnum):
|
|
|
3067
3069
|
LOCAL_FOLDER = 'LOCAL_FOLDER'
|
|
3068
3070
|
MICROSOFT_365 = 'MICROSOFT_365'
|
|
3069
3071
|
GOOGLE_WORKSPACE = 'GOOGLE_WORKSPACE'
|
|
3072
|
+
DROPBOX = 'DROPBOX'
|
|
3070
3073
|
SANDBOX = 'SANDBOX'
|
|
3071
3074
|
|
|
3072
3075
|
|
|
@@ -3333,7 +3336,7 @@ class NotionInput(CoreInput):
|
|
|
3333
3336
|
|
|
3334
3337
|
class KafkaSecurityProtocol(StrEnum):
|
|
3335
3338
|
"""
|
|
3336
|
-
Kafka client security protocol
|
|
3339
|
+
Kafka client security protocol. Leave unset to derive it from the authentication mode (SASL → SASL_SSL, Client Certificate → SSL, No Authentication → PLAINTEXT); set it only to override, e.g. SASL_PLAINTEXT for a SASL broker without TLS.
|
|
3337
3340
|
"""
|
|
3338
3341
|
|
|
3339
3342
|
PLAINTEXT = 'PLAINTEXT'
|
|
@@ -3398,19 +3401,21 @@ class NoAuthentication(BaseModel):
|
|
|
3398
3401
|
extra='forbid',
|
|
3399
3402
|
)
|
|
3400
3403
|
auth_mode: Literal['NONE']
|
|
3401
|
-
|
|
3402
|
-
..., description='
|
|
3404
|
+
host: str = Field(
|
|
3405
|
+
..., description='Kafka broker host name or IP (e.g. kafka.example.com)'
|
|
3403
3406
|
)
|
|
3407
|
+
port: int = Field(..., description='Kafka broker port', ge=1, le=65535)
|
|
3404
3408
|
|
|
3405
3409
|
|
|
3406
|
-
class
|
|
3410
|
+
class SASLUsernamePassword(BaseModel):
|
|
3407
3411
|
model_config = ConfigDict(
|
|
3408
3412
|
extra='forbid',
|
|
3409
3413
|
)
|
|
3410
3414
|
auth_mode: Literal['SASL']
|
|
3411
|
-
|
|
3412
|
-
..., description='
|
|
3415
|
+
host: str = Field(
|
|
3416
|
+
..., description='Kafka broker host name or IP (e.g. kafka.example.com)'
|
|
3413
3417
|
)
|
|
3418
|
+
port: int = Field(..., description='Kafka broker port', ge=1, le=65535)
|
|
3414
3419
|
|
|
3415
3420
|
|
|
3416
3421
|
class ClientCertificateMTLS(BaseModel):
|
|
@@ -3418,9 +3423,26 @@ class ClientCertificateMTLS(BaseModel):
|
|
|
3418
3423
|
extra='forbid',
|
|
3419
3424
|
)
|
|
3420
3425
|
auth_mode: Literal['CLIENT_CERT']
|
|
3421
|
-
|
|
3422
|
-
..., description='
|
|
3426
|
+
host: str = Field(
|
|
3427
|
+
..., description='Kafka broker host name or IP (e.g. kafka.example.com)'
|
|
3423
3428
|
)
|
|
3429
|
+
port: int = Field(..., description='Kafka broker port', ge=1, le=65535)
|
|
3430
|
+
|
|
3431
|
+
|
|
3432
|
+
class KafkaRESTProxyUsernamePassword(BaseModel):
|
|
3433
|
+
"""
|
|
3434
|
+
Connect over the Kafka REST Proxy HTTP API (Confluent REST Proxy, Karapace) instead of the native broker protocol.
|
|
3435
|
+
"""
|
|
3436
|
+
|
|
3437
|
+
model_config = ConfigDict(
|
|
3438
|
+
extra='forbid',
|
|
3439
|
+
)
|
|
3440
|
+
auth_mode: Literal['REST']
|
|
3441
|
+
host: str = Field(
|
|
3442
|
+
...,
|
|
3443
|
+
description='Kafka REST proxy host name or IP (e.g. kafka-rest.example.com)',
|
|
3444
|
+
)
|
|
3445
|
+
port: int = Field(..., description='Kafka REST proxy port', ge=1, le=65535)
|
|
3424
3446
|
|
|
3425
3447
|
|
|
3426
3448
|
class NoAuthentication1(BaseModel):
|
|
@@ -3429,9 +3451,9 @@ class NoAuthentication1(BaseModel):
|
|
|
3429
3451
|
)
|
|
3430
3452
|
|
|
3431
3453
|
|
|
3432
|
-
class
|
|
3454
|
+
class SASLUsernamePassword1(BaseModel):
|
|
3433
3455
|
"""
|
|
3434
|
-
SASL
|
|
3456
|
+
SASL credentials. Set the SASL mechanism under connection options (PLAIN by default).
|
|
3435
3457
|
"""
|
|
3436
3458
|
|
|
3437
3459
|
model_config = ConfigDict(
|
|
@@ -3439,24 +3461,42 @@ class SASL1(BaseModel):
|
|
|
3439
3461
|
)
|
|
3440
3462
|
sasl_username: str = Field(..., description='SASL username')
|
|
3441
3463
|
sasl_password: str = Field(..., description='SASL password')
|
|
3464
|
+
ssl_ca: str | None = Field(
|
|
3465
|
+
None,
|
|
3466
|
+
description="PEM-encoded CA certificate used to verify the broker's TLS certificate. Required for private or self-signed CAs; leave empty to trust the system CA bundle.",
|
|
3467
|
+
)
|
|
3442
3468
|
|
|
3443
3469
|
|
|
3444
3470
|
class ClientCertificateMTLS1(BaseModel):
|
|
3445
3471
|
"""
|
|
3446
|
-
mTLS client certificate
|
|
3472
|
+
mTLS credentials: the client certificate and its private key, plus the CA certificate when the broker uses a private CA.
|
|
3447
3473
|
"""
|
|
3448
3474
|
|
|
3449
3475
|
model_config = ConfigDict(
|
|
3450
3476
|
extra='forbid',
|
|
3451
3477
|
)
|
|
3452
|
-
ssl_certfile: str = Field(
|
|
3453
|
-
..., description='PEM-encoded client certificate (access cert)'
|
|
3454
|
-
)
|
|
3478
|
+
ssl_certfile: str = Field(..., description='PEM-encoded client access certificate')
|
|
3455
3479
|
ssl_keyfile: str = Field(
|
|
3456
|
-
..., description='PEM-encoded client
|
|
3480
|
+
..., description='PEM-encoded client access key (private key)'
|
|
3481
|
+
)
|
|
3482
|
+
ssl_ca: str | None = Field(
|
|
3483
|
+
None,
|
|
3484
|
+
description="PEM-encoded CA certificate used to verify the broker's TLS certificate. Required for private or self-signed CAs; leave empty to trust the system CA bundle.",
|
|
3457
3485
|
)
|
|
3458
3486
|
|
|
3459
3487
|
|
|
3488
|
+
class KafkaRESTProxyUsernamePassword1(BaseModel):
|
|
3489
|
+
"""
|
|
3490
|
+
HTTP basic auth credentials for the REST proxy.
|
|
3491
|
+
"""
|
|
3492
|
+
|
|
3493
|
+
model_config = ConfigDict(
|
|
3494
|
+
extra='forbid',
|
|
3495
|
+
)
|
|
3496
|
+
username: str = Field(..., description='REST proxy username')
|
|
3497
|
+
password: str = Field(..., description='REST proxy password')
|
|
3498
|
+
|
|
3499
|
+
|
|
3460
3500
|
class KafkaOptionalConnection(BaseModel):
|
|
3461
3501
|
"""
|
|
3462
3502
|
Kafka client connection and security options.
|
|
@@ -3465,11 +3505,11 @@ class KafkaOptionalConnection(BaseModel):
|
|
|
3465
3505
|
model_config = ConfigDict(
|
|
3466
3506
|
extra='forbid',
|
|
3467
3507
|
)
|
|
3468
|
-
security_protocol: KafkaSecurityProtocol | None =
|
|
3508
|
+
security_protocol: KafkaSecurityProtocol | None = None
|
|
3469
3509
|
sasl_mechanism: KafkaSaslMechanism | None = 'PLAIN'
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
description=
|
|
3510
|
+
rest_use_tls: bool | None = Field(
|
|
3511
|
+
True,
|
|
3512
|
+
description='REST proxy only: call the proxy over HTTPS. Turn off for a plain-HTTP proxy (e.g. a local Karapace).',
|
|
3473
3513
|
)
|
|
3474
3514
|
request_timeout_ms: int | None = Field(
|
|
3475
3515
|
30000, description='Client request timeout in milliseconds', ge=1000
|
|
@@ -3508,12 +3548,19 @@ class KafkaInput(CoreInput):
|
|
|
3508
3548
|
type: Literal['KAFKA'] | None = Field(
|
|
3509
3549
|
None, description='Type of the asset or source'
|
|
3510
3550
|
)
|
|
3511
|
-
required:
|
|
3512
|
-
|
|
3513
|
-
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
)
|
|
3551
|
+
required: (
|
|
3552
|
+
NoAuthentication
|
|
3553
|
+
| SASLUsernamePassword
|
|
3554
|
+
| ClientCertificateMTLS
|
|
3555
|
+
| KafkaRESTProxyUsernamePassword
|
|
3556
|
+
) = Field(..., title='KafkaRequired')
|
|
3557
|
+
masked: (
|
|
3558
|
+
NoAuthentication1
|
|
3559
|
+
| SASLUsernamePassword1
|
|
3560
|
+
| ClientCertificateMTLS1
|
|
3561
|
+
| KafkaRESTProxyUsernamePassword1
|
|
3562
|
+
| None
|
|
3563
|
+
) = Field(None, title='KafkaMasked')
|
|
3517
3564
|
optional: KafkaOptional | None = None
|
|
3518
3565
|
detectors: list[Detector] | None = Field(
|
|
3519
3566
|
None, description='Detectors to run on ingested content'
|
|
@@ -4174,6 +4221,193 @@ class GoogleWorkspaceInput(CoreInput):
|
|
|
4174
4221
|
)
|
|
4175
4222
|
|
|
4176
4223
|
|
|
4224
|
+
class DropboxRequiredAccessToken(BaseModel):
|
|
4225
|
+
"""
|
|
4226
|
+
Access token issued from the Dropbox App Console. Simplest to set up; short-lived tokens expire after 4 hours.
|
|
4227
|
+
"""
|
|
4228
|
+
|
|
4229
|
+
model_config = ConfigDict(
|
|
4230
|
+
extra='forbid',
|
|
4231
|
+
)
|
|
4232
|
+
auth_method: Literal['access_token']
|
|
4233
|
+
|
|
4234
|
+
|
|
4235
|
+
class DropboxRequiredOAuth(BaseModel):
|
|
4236
|
+
"""
|
|
4237
|
+
OAuth 2.0 app credentials with a refresh token. Recommended for unattended scans — the client mints a fresh access token on every run.
|
|
4238
|
+
"""
|
|
4239
|
+
|
|
4240
|
+
model_config = ConfigDict(
|
|
4241
|
+
extra='forbid',
|
|
4242
|
+
)
|
|
4243
|
+
auth_method: Literal['oauth']
|
|
4244
|
+
app_key: str = Field(
|
|
4245
|
+
...,
|
|
4246
|
+
description='Dropbox app key (client ID) of the OAuth app that issued the refresh token',
|
|
4247
|
+
)
|
|
4248
|
+
|
|
4249
|
+
|
|
4250
|
+
class DropboxMaskedAccessToken(BaseModel):
|
|
4251
|
+
model_config = ConfigDict(
|
|
4252
|
+
extra='forbid',
|
|
4253
|
+
)
|
|
4254
|
+
access_token: str = Field(
|
|
4255
|
+
..., description='Dropbox OAuth 2.0 access token (sl.… for short-lived tokens)'
|
|
4256
|
+
)
|
|
4257
|
+
|
|
4258
|
+
|
|
4259
|
+
class DropboxMaskedOAuth(BaseModel):
|
|
4260
|
+
model_config = ConfigDict(
|
|
4261
|
+
extra='forbid',
|
|
4262
|
+
)
|
|
4263
|
+
app_secret: str = Field(
|
|
4264
|
+
...,
|
|
4265
|
+
description='Dropbox app secret of the OAuth app that issued the refresh token',
|
|
4266
|
+
)
|
|
4267
|
+
refresh_token: str = Field(
|
|
4268
|
+
...,
|
|
4269
|
+
description='Dropbox OAuth 2.0 refresh token (obtained with token_access_type=offline)',
|
|
4270
|
+
)
|
|
4271
|
+
|
|
4272
|
+
|
|
4273
|
+
class DropboxOptionalScope(BaseModel):
|
|
4274
|
+
"""
|
|
4275
|
+
Folder selection and content filtering.
|
|
4276
|
+
"""
|
|
4277
|
+
|
|
4278
|
+
model_config = ConfigDict(
|
|
4279
|
+
extra='forbid',
|
|
4280
|
+
)
|
|
4281
|
+
folder_path: str | None = Field(
|
|
4282
|
+
None,
|
|
4283
|
+
description='Folder to scan, for example /Finance/Exports. Leave empty to scan the whole account root.',
|
|
4284
|
+
)
|
|
4285
|
+
recursive: bool | None = Field(
|
|
4286
|
+
True, description='Descend into subfolders of the selected folder'
|
|
4287
|
+
)
|
|
4288
|
+
include_extensions: list[str] | None = Field(
|
|
4289
|
+
None,
|
|
4290
|
+
description='Optional extension allowlist (for example, .pdf, .csv, .docx)',
|
|
4291
|
+
)
|
|
4292
|
+
exclude_extensions: list[str] | None = Field(
|
|
4293
|
+
None, description='Optional extension denylist'
|
|
4294
|
+
)
|
|
4295
|
+
include_mounted_folders: bool | None = Field(
|
|
4296
|
+
True, description='Include shared folders mounted into the account'
|
|
4297
|
+
)
|
|
4298
|
+
include_empty_objects: bool | None = Field(
|
|
4299
|
+
False, description='Include zero-byte files in extraction results'
|
|
4300
|
+
)
|
|
4301
|
+
include_object_metadata: bool | None = Field(
|
|
4302
|
+
True,
|
|
4303
|
+
description='Attach Dropbox metadata (content hash, size, revision, timestamps) to asset checksums',
|
|
4304
|
+
)
|
|
4305
|
+
include_content_preview: bool | None = Field(
|
|
4306
|
+
True,
|
|
4307
|
+
description='Download file bytes to infer MIME and extract detector-ready text previews',
|
|
4308
|
+
)
|
|
4309
|
+
export_non_downloadable: bool | None = Field(
|
|
4310
|
+
True,
|
|
4311
|
+
description='Export files that have no direct download (Dropbox Paper docs) to Markdown so their text can be scanned',
|
|
4312
|
+
)
|
|
4313
|
+
|
|
4314
|
+
|
|
4315
|
+
class DropboxOptionalConnection(BaseModel):
|
|
4316
|
+
"""
|
|
4317
|
+
Network and pagination controls for Dropbox API requests.
|
|
4318
|
+
"""
|
|
4319
|
+
|
|
4320
|
+
model_config = ConfigDict(
|
|
4321
|
+
extra='forbid',
|
|
4322
|
+
)
|
|
4323
|
+
max_entries_per_page: int | None = Field(
|
|
4324
|
+
500, description='Maximum entries requested per list_folder call', ge=1, le=2000
|
|
4325
|
+
)
|
|
4326
|
+
max_object_bytes: int | None = Field(
|
|
4327
|
+
5242880,
|
|
4328
|
+
description='Maximum bytes downloaded per file for MIME detection and text extraction',
|
|
4329
|
+
ge=1024,
|
|
4330
|
+
le=52428800,
|
|
4331
|
+
)
|
|
4332
|
+
request_timeout_seconds: float | None = Field(
|
|
4333
|
+
60,
|
|
4334
|
+
description='Network timeout in seconds for list/download operations',
|
|
4335
|
+
ge=1.0,
|
|
4336
|
+
le=300.0,
|
|
4337
|
+
)
|
|
4338
|
+
max_retries: int | None = Field(
|
|
4339
|
+
4,
|
|
4340
|
+
description='Maximum retries on transient Dropbox errors (5xx and rate limits)',
|
|
4341
|
+
ge=0,
|
|
4342
|
+
le=10,
|
|
4343
|
+
)
|
|
4344
|
+
|
|
4345
|
+
|
|
4346
|
+
class DropboxOptionalTeam(BaseModel):
|
|
4347
|
+
"""
|
|
4348
|
+
Dropbox Business team scanning. The credential shape is the same as for an individual account, but the Dropbox app must be created with a team access type ('Team member file access' plus 'Team information'). Leave disabled for individual accounts.
|
|
4349
|
+
"""
|
|
4350
|
+
|
|
4351
|
+
model_config = ConfigDict(
|
|
4352
|
+
extra='forbid',
|
|
4353
|
+
)
|
|
4354
|
+
enabled: bool | None = Field(
|
|
4355
|
+
False,
|
|
4356
|
+
description='Scan the whole Dropbox Business team instead of a single account',
|
|
4357
|
+
)
|
|
4358
|
+
member_emails: list[str] | None = Field(
|
|
4359
|
+
None, description='Only scan these team members (empty = every active member)'
|
|
4360
|
+
)
|
|
4361
|
+
include_member_folders: bool | None = Field(
|
|
4362
|
+
True, description="Scan each selected member's own Dropbox folder"
|
|
4363
|
+
)
|
|
4364
|
+
include_team_space: bool | None = Field(
|
|
4365
|
+
True, description='Scan the shared team folders in the team space'
|
|
4366
|
+
)
|
|
4367
|
+
include_suspended_members: bool | None = Field(
|
|
4368
|
+
False, description='Also scan members whose account is suspended'
|
|
4369
|
+
)
|
|
4370
|
+
as_admin: bool | None = Field(
|
|
4371
|
+
False,
|
|
4372
|
+
description="Traverse team-owned folders with a team administrator's privileges instead of acting as each member. Reaches content a member cannot list themselves and does not mark files as viewed by them. Requires at least one team admin on the team.",
|
|
4373
|
+
)
|
|
4374
|
+
|
|
4375
|
+
|
|
4376
|
+
class DropboxOptional(BaseModel):
|
|
4377
|
+
model_config = ConfigDict(
|
|
4378
|
+
extra='forbid',
|
|
4379
|
+
)
|
|
4380
|
+
scope: DropboxOptionalScope | None = None
|
|
4381
|
+
team: DropboxOptionalTeam | None = None
|
|
4382
|
+
connection: DropboxOptionalConnection | None = None
|
|
4383
|
+
|
|
4384
|
+
|
|
4385
|
+
class DropboxInput(CoreInput):
|
|
4386
|
+
type: Literal['DROPBOX'] | None = Field(
|
|
4387
|
+
None, description='Type of the asset or source'
|
|
4388
|
+
)
|
|
4389
|
+
required: DropboxRequiredAccessToken | DropboxRequiredOAuth = Field(
|
|
4390
|
+
..., title='DropboxRequired'
|
|
4391
|
+
)
|
|
4392
|
+
masked: DropboxMaskedAccessToken | DropboxMaskedOAuth = Field(
|
|
4393
|
+
..., title='DropboxMasked'
|
|
4394
|
+
)
|
|
4395
|
+
optional: DropboxOptional | None = None
|
|
4396
|
+
detectors: list[Detector] | None = Field(
|
|
4397
|
+
None, description='Detectors to run on ingested content'
|
|
4398
|
+
)
|
|
4399
|
+
custom_detectors: list[CustomDetectorSelection] | None = Field(
|
|
4400
|
+
None,
|
|
4401
|
+
description='Reusable custom detector IDs selected from the custom detector catalog.',
|
|
4402
|
+
)
|
|
4403
|
+
sampling: SamplingConfig
|
|
4404
|
+
resources: ResourceOverrides | None = None
|
|
4405
|
+
cleanup_removed_detector_findings: bool | None = Field(
|
|
4406
|
+
True,
|
|
4407
|
+
description='When enabled (default), findings produced by detectors that are no longer configured on this source (removed or disabled) are automatically resolved at the start of the next run, keeping the findings list in step with the current detector set.',
|
|
4408
|
+
)
|
|
4409
|
+
|
|
4410
|
+
|
|
4177
4411
|
class YouTubeInput(CoreInput):
|
|
4178
4412
|
type: Literal['YOUTUBE'] | None = Field(
|
|
4179
4413
|
None, description='Type of the asset or source'
|
|
@@ -4291,6 +4525,7 @@ class SourceInput(
|
|
|
4291
4525
|
| MeilisearchInput
|
|
4292
4526
|
| Microsoft365Input
|
|
4293
4527
|
| GoogleWorkspaceInput
|
|
4528
|
+
| DropboxInput
|
|
4294
4529
|
]
|
|
4295
4530
|
):
|
|
4296
4531
|
root: (
|
|
@@ -4327,6 +4562,7 @@ class SourceInput(
|
|
|
4327
4562
|
| MeilisearchInput
|
|
4328
4563
|
| Microsoft365Input
|
|
4329
4564
|
| GoogleWorkspaceInput
|
|
4565
|
+
| DropboxInput
|
|
4330
4566
|
) = Field(
|
|
4331
4567
|
...,
|
|
4332
4568
|
description='Merged configuration schema with all source types and common definitions',
|