classifyre-cli 0.4.136__tar.gz → 0.4.138__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.138/.turbo/turbo-build.log +3 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/PKG-INFO +5 -8
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/README.md +4 -7
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/package.json +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/pyproject.toml +3 -3
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/augmentation/session.py +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/models/generated_input.py +6 -6
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/files.py +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/sdk.py +6 -6
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/outputs/rest.py +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/worker_pool.py +2 -2
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/custom/source.py +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/git/source.py +2 -2
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/local_folder/source.py +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/legacy_office.py +5 -5
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/resources.py +1 -1
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/torch_runtime.py +2 -2
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/uv.lock +449 -383
- classifyre_cli-0.4.136/.turbo/turbo-build.log +0 -3
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/.gitignore +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/.python-version +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/main.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/scripts/generate_models.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/scripts/generate_runtime_packages.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/scripts/generate_sdk_completions.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/augmentation/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/augmentation/contract.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/augmentation/preview.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/augmentation/runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/augmentation/sdk.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/config.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/broken_links/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/broken_links/detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/config.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/extractor.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_factory.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_gliner2.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_image_classification.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_llm.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_object_detection.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_regex.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_tag.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/runners/_text_classification.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/custom/trainer.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/dependencies.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/engine_version.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/pii/detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/secrets/detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/threat/code_security_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/detectors/threat/yara_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/file_evaluation/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/file_evaluation/runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/graph/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/graph/edges.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/main.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/models/generated_detectors.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/models/generated_single_asset_scan_results.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/child.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/cli.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/contract.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/execute.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/groups.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/outputs.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/packages.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/protocol.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/redact.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/scaffold.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/notebook/serialize.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/outputs/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/outputs/base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/outputs/console.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/outputs/factory.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/outputs/file.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/content_provider.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/detector_pipeline.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/parsed_content_provider.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/payload_window.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/scan_cache.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/pipeline/text_artifact.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/asset_metadata.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/atlassian_common.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/azure_blob_storage/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/azure_blob_storage/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/confluence/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/confluence/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/custom/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/custom/env.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/custom/runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/databricks/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/databricks/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/delta_lake/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/delta_lake/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/dependencies.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/dropbox/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/dropbox/auth.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/dropbox/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/elasticsearch/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/elasticsearch/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/email/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/email/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/git/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/google_cloud_storage/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/google_cloud_storage/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/google_workspace/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/google_workspace/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/hive/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/hive/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/hugging_face/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/hugging_face/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/iceberg/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/iceberg/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/jira/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/jira/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/kafka/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/kafka/rest.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/kafka/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/lakehouse_base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/local_folder/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/meilisearch/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/meilisearch/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/microsoft_365/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/microsoft_365/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/mongodb/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/mongodb/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/mssql/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/mssql/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/mysql/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/mysql/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/neo4j/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/neo4j/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/notion/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/notion/client.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/notion/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/object_storage/base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/opensearch/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/opensearch/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/oracle/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/oracle/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/postgresql/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/postgresql/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/powerbi/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/powerbi/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/reddit/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/reddit/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/s3_client.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/s3_compatible_storage/README.md +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/s3_compatible_storage/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/s3_compatible_storage/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/sandbox/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/sandbox/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/search_engine_base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/servicedesk/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/servicedesk/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/slack/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/slack/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/snowflake/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/snowflake/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/sqlite/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/sqlite/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/tableau/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/tableau/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/tabular_base.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/tabular_utils.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/wordpress/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/wordpress/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/youtube/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/sources/youtube/source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/telemetry.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/archive_extraction.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/content_extraction.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/dependency_groups.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/embedded_files.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/external_video.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/file_metadata.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/file_parser.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/file_to_images.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/hashing.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/payload.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/range_reader.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/source_files.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/sql_lineage.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/transcription.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/urn.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/uv_sync.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/validation.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/src/utils/video_processing.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/_lakehouse_fakes.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/conftest.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/broken_links/test_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/conftest.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/content/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/conftest.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_gliner2_classification.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_invoice_extraction.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_llm_runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_pipeline_integration.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_regex_runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_runner_hardening.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/custom/test_transformer_runners.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/conftest.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/sample_invoice.pdf +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/test_pii_chunking.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/test_pii_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/test_pii_detector_extended.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/test_pii_regional_entities.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/pii/test_pii_severity.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/secrets/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/secrets/test_secrets_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/secrets/test_secrets_detector_extended.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_base_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_custom_detector_examples_runtime.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_detector_catalog_commercial.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_detector_pipeline_types.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_detector_schema_examples.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_detector_types.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_phase2_detectors.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_registry.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/test_tag_runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/threat/__init__.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/threat/test_code_security_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/detectors/threat/test_yara_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/integration/test_wordpress_broken_links_detector.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/integration/test_wordpress_links_assets.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/pipeline/test_detector_outcomes.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/pipeline/test_detector_pipeline.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/pipeline/test_worker_pool.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_arrow_ipc_payloads.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_assets_metadata_catalog.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_contract.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_edges.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_patch.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_scan_cache.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_sdk.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_session.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_augmentation_tags_end_to_end.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_azure_blob_storage_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_base_source_attachment.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_base_source_sampling.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_byte_valued_fields.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_config.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_confluence_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_custom_extractor.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_custom_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_custom_source_relationships.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_custom_source_tags_end_to_end.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_databricks_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_delta_lake_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_dependency_groups.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_detector_scope.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_dropbox_auth_command.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_dropbox_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_elasticsearch_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_email_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_file_evaluation_runner.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_git_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_google_cloud_storage_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_google_workspace_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_graph_edges.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_hashing.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_hive_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_hugging_face_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_iceberg_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_jira_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_kafka_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_lineage_loss_reporting.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_local_folder_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_main.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_meilisearch_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_microsoft_365_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_mongodb_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_mssql_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_mysql_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_neo4j_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_asset_tags.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_execute.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_files.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_groups.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_packages.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_serialize.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notebook_templates.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_notion_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_object_storage_download_efficiency.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_opensearch_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_oracle_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_outputs.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_payload_window.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_payload_window_parquet.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_postgresql_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_powerbi_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_range_reading.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_recipe_normalizer.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_reddit_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_rest_backpressure.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_runtime_packages.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_s3_compatible_storage_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_sampling_automatic.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_sandbox_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_scan_cache.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_sdk_completions.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_servicedesk_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_slack_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_snowflake_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_source_dependency_groups.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_source_strategy_conformance.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_sqlite_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_tableau_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_tabular_automatic_sampling.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_tabular_lineage.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_tabular_utils.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_torch_runtime.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_urn.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_uv_sync.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_wordpress_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_youtube_source.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/test_youtube_source_integration.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_archive_extraction.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_content_extraction.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_embedded_files.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_file_metadata.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_file_parser.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_file_to_images.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_legacy_office.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_payload.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_transcription.py +0 -0
- {classifyre_cli-0.4.136 → classifyre_cli-0.4.138}/tests/utils/test_video_processing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: classifyre-cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.138
|
|
4
4
|
Summary: Classifyre CLI — scan and classify unstructured data sources
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: data,ingestion,metadata,pii,secrets,unstructured
|
|
@@ -43,14 +43,11 @@ docx|xlsx|pptx` and feeds the result through the normal OOXML extractors. Withou
|
|
|
43
43
|
it those files scan as *"no content available"* — a silent coverage gap, not an
|
|
44
44
|
error.
|
|
45
45
|
|
|
46
|
-
- **Kubernetes**: installed in the
|
|
47
|
-
works out of the box.
|
|
48
|
-
- **
|
|
46
|
+
- **Kubernetes and the all-in-one Docker image**: installed in the image
|
|
47
|
+
(`libreoffice-*-nogui`), so this works out of the box.
|
|
48
|
+
- **Local dev**: install it yourself — `brew install --cask libreoffice`
|
|
49
49
|
(macOS), `apt install libreoffice-writer libreoffice-calc libreoffice-impress`
|
|
50
|
-
(Debian/Ubuntu), or libreoffice.org on Windows.
|
|
51
|
-
does not bundle LibreOffice: it is ~550 MB even stripped, and slimming the
|
|
52
|
-
upstream bundle breaks its code signature, which Apple Silicon punishes by
|
|
53
|
-
killing the process on launch.
|
|
50
|
+
(Debian/Ubuntu), or libreoffice.org on Windows.
|
|
54
51
|
- **Non-standard install**: set `CLASSIFYRE_SOFFICE_PATH` to the binary. The CLI
|
|
55
52
|
checks that first, then `PATH`, then the standard macOS, Windows, and
|
|
56
53
|
Linux-tarball install locations.
|
|
@@ -26,14 +26,11 @@ docx|xlsx|pptx` and feeds the result through the normal OOXML extractors. Withou
|
|
|
26
26
|
it those files scan as *"no content available"* — a silent coverage gap, not an
|
|
27
27
|
error.
|
|
28
28
|
|
|
29
|
-
- **Kubernetes**: installed in the
|
|
30
|
-
works out of the box.
|
|
31
|
-
- **
|
|
29
|
+
- **Kubernetes and the all-in-one Docker image**: installed in the image
|
|
30
|
+
(`libreoffice-*-nogui`), so this works out of the box.
|
|
31
|
+
- **Local dev**: install it yourself — `brew install --cask libreoffice`
|
|
32
32
|
(macOS), `apt install libreoffice-writer libreoffice-calc libreoffice-impress`
|
|
33
|
-
(Debian/Ubuntu), or libreoffice.org on Windows.
|
|
34
|
-
does not bundle LibreOffice: it is ~550 MB even stripped, and slimming the
|
|
35
|
-
upstream bundle breaks its code signature, which Apple Silicon punishes by
|
|
36
|
-
killing the process on launch.
|
|
33
|
+
(Debian/Ubuntu), or libreoffice.org on Windows.
|
|
37
34
|
- **Non-standard install**: set `CLASSIFYRE_SOFFICE_PATH` to the binary. The CLI
|
|
38
35
|
checks that first, then `PATH`, then the standard macOS, Windows, and
|
|
39
36
|
Linux-tarball install locations.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "classifyre-cli"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.138"
|
|
4
4
|
description = "Classifyre CLI — scan and classify unstructured data sources"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -474,10 +474,10 @@ package = true
|
|
|
474
474
|
# distribution declared by our video and OCR groups. Installing both would
|
|
475
475
|
# overwrite the same cv2 namespace and add GUI libraries to CPU-only containers.
|
|
476
476
|
exclude-dependencies = ["opencv-python"]
|
|
477
|
-
# Every platform we ship
|
|
477
|
+
# Every platform we ship must resolve to versions with
|
|
478
478
|
# usable wheels. Without this, uv happily locks versions that are missing a
|
|
479
479
|
# platform — e.g. deltalake 1.6.1 published no win_amd64 wheel, which broke the
|
|
480
|
-
# Windows
|
|
480
|
+
# Windows venv bake ("can't be installed because it doesn't have a
|
|
481
481
|
# source distribution or wheel for the current platform").
|
|
482
482
|
required-environments = [
|
|
483
483
|
"sys_platform == 'win32' and platform_machine == 'AMD64'",
|
|
@@ -223,7 +223,7 @@ class AugmentationSession:
|
|
|
223
223
|
if not path.is_dir():
|
|
224
224
|
raise ChildProcessError(
|
|
225
225
|
f"Local folder {entry.get('name')!r} points at {path}, which is not "
|
|
226
|
-
"a directory.
|
|
226
|
+
"a directory. The folder must be mounted where the scan runs."
|
|
227
227
|
)
|
|
228
228
|
|
|
229
229
|
async def _slot(self, index: int) -> _ChildSlot:
|
|
@@ -1031,7 +1031,7 @@ class LocalFolderRequired(BaseModel):
|
|
|
1031
1031
|
)
|
|
1032
1032
|
path: str = Field(
|
|
1033
1033
|
...,
|
|
1034
|
-
description="Absolute path of the folder to scan, as seen by the machine that runs the scan.
|
|
1034
|
+
description="Absolute path of the folder to scan, as seen by the machine that runs the scan — not as your browser sees it. With the all-in-one Docker image, bind-mount the directory and use the container-side path (`-v ~/invoices:/data/invoices:ro` → /data/invoices). In Kubernetes the scan runs in a pod, so the folder must be mounted into CLI jobs first via the chart's `api.localFolders` — then use the `mountPath` you gave it there (for example /mnt/corpora/invoices).",
|
|
1035
1035
|
)
|
|
1036
1036
|
|
|
1037
1037
|
|
|
@@ -1063,7 +1063,7 @@ class SandboxOptional(BaseModel):
|
|
|
1063
1063
|
|
|
1064
1064
|
class LocalFolderMasked(BaseModel):
|
|
1065
1065
|
"""
|
|
1066
|
-
A folder scan reads the filesystem it runs on with that process's own permissions — the
|
|
1066
|
+
A folder scan reads the filesystem it runs on with that process's own permissions — the container's, or the CLI job pod's. No credentials are required.
|
|
1067
1067
|
"""
|
|
1068
1068
|
|
|
1069
1069
|
model_config = ConfigDict(
|
|
@@ -4654,7 +4654,7 @@ class NotebookPackage(BaseModel):
|
|
|
4654
4654
|
|
|
4655
4655
|
class NotebookLocalFolder(BaseModel):
|
|
4656
4656
|
"""
|
|
4657
|
-
A folder the notebook can read on the machine that runs the scan:
|
|
4657
|
+
A folder the notebook can read on the machine that runs the scan: a bind-mounted path in the all-in-one Docker image, or one mounted into CLI jobs by the chart's `api.localFolders` in Kubernetes.
|
|
4658
4658
|
"""
|
|
4659
4659
|
|
|
4660
4660
|
model_config = ConfigDict(
|
|
@@ -4667,7 +4667,7 @@ class NotebookLocalFolder(BaseModel):
|
|
|
4667
4667
|
)
|
|
4668
4668
|
path: str = Field(
|
|
4669
4669
|
...,
|
|
4670
|
-
description='Absolute path to the folder, as seen by the machine that runs the scan — for example /
|
|
4670
|
+
description='Absolute path to the folder, as seen by the machine that runs the scan — for example /data/dumps for a directory bind-mounted into the container, or /mnt/corpora/dumps for a folder mounted by the chart.',
|
|
4671
4671
|
max_length=4096,
|
|
4672
4672
|
min_length=1,
|
|
4673
4673
|
)
|
|
@@ -4777,7 +4777,7 @@ class AugmentationConfig(BaseModel):
|
|
|
4777
4777
|
)
|
|
4778
4778
|
local_folders: list[NotebookLocalFolder] | None = Field(
|
|
4779
4779
|
[],
|
|
4780
|
-
description='
|
|
4780
|
+
description='Folders the notebook reads with ctx.folder("name"). Not available in Kubernetes deployments, where files are uploaded to the source instead.',
|
|
4781
4781
|
max_length=10,
|
|
4782
4782
|
validate_default=True,
|
|
4783
4783
|
)
|
|
@@ -5709,7 +5709,7 @@ class CustomOptional(BaseModel):
|
|
|
5709
5709
|
)
|
|
5710
5710
|
local_folders: list[NotebookLocalFolder] | None = Field(
|
|
5711
5711
|
[],
|
|
5712
|
-
description='
|
|
5712
|
+
description='Folders the notebook reads with ctx.folder("name"). Not available in Kubernetes deployments, where files are uploaded to the source instead. This is a convenience, not a sandbox: the notebook process runs as you and can open any path you can.',
|
|
5713
5713
|
max_length=10,
|
|
5714
5714
|
validate_default=True,
|
|
5715
5715
|
)
|
|
@@ -59,7 +59,7 @@ class ParsedContent:
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
def local_folders(recipe: dict[str, Any]) -> dict[str, str]:
|
|
62
|
-
"""The
|
|
62
|
+
"""The folders a source declared, as ``{name: path}``.
|
|
63
63
|
|
|
64
64
|
Read straight from the recipe rather than handed over separately: unlike an
|
|
65
65
|
uploaded file there is nothing to fetch, only a path the notebook may open.
|
|
@@ -16,8 +16,8 @@ the only place the distinction can come from.
|
|
|
16
16
|
.eml or a Parquet file is not connector logic, every other source in the system
|
|
17
17
|
already delegates it to the same parser, and a notebook that had to reimplement
|
|
18
18
|
it would get it wrong. It arrives with the files it operates on: ``ctx.files``
|
|
19
|
-
for what was uploaded to the source, ``ctx.folder(...)`` for a folder
|
|
20
|
-
|
|
19
|
+
for what was uploaded to the source, ``ctx.folder(...)`` for a folder mounted
|
|
20
|
+
into the machine that runs the scan.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
from __future__ import annotations
|
|
@@ -331,10 +331,10 @@ class Context:
|
|
|
331
331
|
def folders(self) -> dict[str, Path]:
|
|
332
332
|
"""Folders this source was configured with, by name.
|
|
333
333
|
|
|
334
|
-
The paths are resolved on whatever machine runs the scan:
|
|
335
|
-
|
|
336
|
-
folder has to be mounted
|
|
337
|
-
``api.localFolders``); an unmounted path simply will not exist.
|
|
334
|
+
The paths are resolved on whatever machine runs the scan: inside the
|
|
335
|
+
all-in-one container, or an ephemeral CLI job pod in Kubernetes. Either
|
|
336
|
+
way the folder has to be mounted there first (a bind mount, or the
|
|
337
|
+
chart's ``api.localFolders``); an unmounted path simply will not exist.
|
|
338
338
|
"""
|
|
339
339
|
return dict(self._folders)
|
|
340
340
|
|
|
@@ -20,7 +20,7 @@ logger = logging.getLogger(__name__)
|
|
|
20
20
|
# The API has no user authentication, so the ingest endpoints are restricted to
|
|
21
21
|
# callers holding this shared secret; the API injects it into every CLI job's
|
|
22
22
|
# environment (Kubernetes job env, or inherited from the parent process on
|
|
23
|
-
#
|
|
23
|
+
# all-in-one image). Absent locally, where the API leaves the restriction disabled.
|
|
24
24
|
INTERNAL_KEY_HEADER = "X-Classifyre-Internal-Key"
|
|
25
25
|
|
|
26
26
|
|
|
@@ -45,7 +45,7 @@ def _init_worker_threads(threads_per_worker: int) -> None:
|
|
|
45
45
|
threads = max(1, threads_per_worker)
|
|
46
46
|
for var in ("OMP_NUM_THREADS", "MKL_NUM_THREADS", "OPENBLAS_NUM_THREADS"):
|
|
47
47
|
os.environ.setdefault(var, str(threads))
|
|
48
|
-
# Detector work is background work: on a shared host
|
|
48
|
+
# Detector work is background work: on a shared host the pool
|
|
49
49
|
# must yield to the UI, so deprioritize workers where the OS allows it.
|
|
50
50
|
if hasattr(os, "nice"):
|
|
51
51
|
try:
|
|
@@ -235,7 +235,7 @@ class DetectorWorkerPool:
|
|
|
235
235
|
|
|
236
236
|
ctx = multiprocessing.get_context(mp_start_method)
|
|
237
237
|
# CLASSIFYRE_WORKER_THREADS caps BLAS/torch threads per worker; the
|
|
238
|
-
#
|
|
238
|
+
# the all-in-one image sets it so workers*threads stays below the core count
|
|
239
239
|
# instead of saturating the machine. Unset (K8s/dev) keeps the
|
|
240
240
|
# divide-the-cores behavior.
|
|
241
241
|
threads_env = os.environ.get("CLASSIFYRE_WORKER_THREADS", "")
|
|
@@ -233,7 +233,7 @@ class CustomSource(BaseSource):
|
|
|
233
233
|
if not path.is_dir():
|
|
234
234
|
raise CustomSourceError(
|
|
235
235
|
f"Local folder {folder.name!r} points at {path}, which is not a directory. "
|
|
236
|
-
"
|
|
236
|
+
"The folder must be mounted where the scan runs."
|
|
237
237
|
)
|
|
238
238
|
|
|
239
239
|
def _materialize_uploaded_files(self) -> Path | None:
|
|
@@ -10,7 +10,7 @@ Two properties drive the design:
|
|
|
10
10
|
directory with its own ``HOME`` and its own git configuration, and deletes all of
|
|
11
11
|
it when the run ends — normally, on abort, and on failure. There is no clone
|
|
12
12
|
cache and no credential cache, so one job can never see another job's objects or
|
|
13
|
-
another job's secrets. In Kubernetes the pod dies anyway;
|
|
13
|
+
another job's secrets. In Kubernetes the pod dies anyway; in a long-lived container, where
|
|
14
14
|
the process is long-lived and scans many sources, that guarantee has to be made
|
|
15
15
|
by this module.
|
|
16
16
|
|
|
@@ -573,7 +573,7 @@ class GitSource(ObjectStorageSourceBase):
|
|
|
573
573
|
def _git_binary() -> str:
|
|
574
574
|
"""The git executable to use.
|
|
575
575
|
|
|
576
|
-
``CLASSIFYRE_GIT_BINARY`` lets a packaged
|
|
576
|
+
``CLASSIFYRE_GIT_BINARY`` lets a packaged build point at the git
|
|
577
577
|
it ships rather than whatever the user happens to have installed — an
|
|
578
578
|
operational concern, so it is an environment variable rather than a
|
|
579
579
|
field on the source.
|
|
@@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class LocalFolderSource(ObjectStorageSourceBase):
|
|
19
|
-
"""Scans a folder on the
|
|
19
|
+
"""Scans a folder on the filesystem the scan process runs on.
|
|
20
20
|
|
|
21
21
|
Reuses the object-storage pipeline: each file becomes an ObjectRef whose key
|
|
22
22
|
is the path relative to the scanned root, so sampling, MIME resolution, text
|
|
@@ -8,7 +8,7 @@ is fed back through the existing docx/xlsx/pptx extraction paths:
|
|
|
8
8
|
|
|
9
9
|
The CLI container image ships LibreOffice (the ``libreoffice-*-nogui`` Debian
|
|
10
10
|
packages, which install ``/usr/bin/soffice``), so conversion works out of the box
|
|
11
|
-
under Kubernetes.
|
|
11
|
+
under Kubernetes, and in the all-in-one Docker image. A packaged distribution may deliberately NOT bundle it — ~550 MB even
|
|
12
12
|
stripped, and slimming the upstream bundle breaks its code signature — so there
|
|
13
13
|
it is a system dependency the user installs.
|
|
14
14
|
|
|
@@ -55,7 +55,7 @@ LEGACY_OFFICE_MIME_TYPES = frozenset(_CONVERSION_TARGETS)
|
|
|
55
55
|
|
|
56
56
|
_SOFFICE_TIMEOUT_SECONDS = 120
|
|
57
57
|
|
|
58
|
-
# How to actually get LibreOffice, per platform.
|
|
58
|
+
# How to actually get LibreOffice, per platform. A distribution that does not bundle
|
|
59
59
|
# it, so this message is the entire remediation path a user gets — a generic
|
|
60
60
|
# "install LibreOffice" would leave them guessing which package to install.
|
|
61
61
|
_INSTALL_HINTS: dict[str, str] = {
|
|
@@ -85,14 +85,14 @@ def soffice_missing_error() -> str:
|
|
|
85
85
|
)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
# Explicit override, checked before anything else.
|
|
88
|
+
# Explicit override, checked before anything else. A packaged distribution rebuilds a
|
|
89
89
|
# minimal PATH for the processes it spawns, so an installation it discovered
|
|
90
90
|
# itself is handed down through this variable rather than through PATH.
|
|
91
91
|
SOFFICE_PATH_ENV = "CLASSIFYRE_SOFFICE_PATH"
|
|
92
92
|
|
|
93
93
|
# Install locations to check when PATH comes up empty, keyed by sys.platform.
|
|
94
94
|
# macOS and Windows always need these: their installers drop the binary inside an
|
|
95
|
-
# app bundle / Program Files without touching PATH, and
|
|
95
|
+
# app bundle / Program Files without touching PATH, and a packaged distribution
|
|
96
96
|
# rebuilds a minimal PATH that cannot see either. Linux only needs them for an
|
|
97
97
|
# upstream tarball install — the distro packages (including the
|
|
98
98
|
# libreoffice-*-nogui ones in the CLI image) all land on /usr/bin/soffice.
|
|
@@ -119,7 +119,7 @@ def find_soffice() -> str | None:
|
|
|
119
119
|
|
|
120
120
|
Resolution order, most explicit first:
|
|
121
121
|
|
|
122
|
-
1. ``CLASSIFYRE_SOFFICE_PATH`` — an operator
|
|
122
|
+
1. ``CLASSIFYRE_SOFFICE_PATH`` — an operator-supplied absolute path.
|
|
123
123
|
2. ``PATH`` — the CLI container, Linux hosts, and dev shells.
|
|
124
124
|
3. Platform install locations — macOS/Windows only (see the table above).
|
|
125
125
|
|
|
@@ -63,7 +63,7 @@ def get_effective_memory_mb() -> int:
|
|
|
63
63
|
pass
|
|
64
64
|
|
|
65
65
|
# macOS (and other POSIX without /proc): total physical memory via sysconf.
|
|
66
|
-
# Without this
|
|
66
|
+
# Without this a single-host install fell through to the 4096 MB guess, which
|
|
67
67
|
# oversized the pool on small laptops and undersized it on big ones.
|
|
68
68
|
try:
|
|
69
69
|
pages = os.sysconf("SC_PHYS_PAGES")
|
|
@@ -5,9 +5,9 @@ generates C++ and shells out to a compiler *at scan time*. That is a poor fit
|
|
|
5
5
|
for how this CLI is deployed, in two independent ways:
|
|
6
6
|
|
|
7
7
|
1. It needs a working C++ toolchain on the machine running the scan. Neither
|
|
8
|
-
|
|
8
|
+
a packaged bundle nor a slim container image promises one.
|
|
9
9
|
2. Inductor builds the compiler command line without quoting its paths, so any
|
|
10
|
-
path containing a space breaks it.
|
|
10
|
+
path containing a space breaks it. A venv living under
|
|
11
11
|
``~/Library/Application Support/…``, which produces exactly that:
|
|
12
12
|
|
|
13
13
|
clang++: error: no such file or directory:
|