skyflow-flowvault-python 1.0.0__tar.gz → 1.1.0__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.
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/PKG-INFO +601 -11
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/README.md +599 -10
- skyflow_flowvault_python-1.1.0/common/generated/rest/__init__.py +240 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/authentication/client.py +23 -23
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/authentication/raw_client.py +65 -31
- skyflow_flowvault_python-1.1.0/common/generated/rest/client.py +423 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/client_wrapper.py +1 -1
- skyflow_flowvault_python-1.1.0/common/generated/rest/errors/__init__.py +42 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/__init__.py +49 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/client.py +515 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/raw_client.py +634 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/types/__init__.py +47 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/types/deidentify_file_request_v2data_format.py +32 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/types/deidentify_file_request_v2data_source.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/types/reidentify_file_request_v2data_format.py +7 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/files_v2/types/reidentify_file_request_v2data_source.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/guardrails_v2/client.py +165 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/guardrails_v2/raw_client.py +232 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/strings_v2/client.py +344 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/strings_v2/raw_client.py +424 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/token_exchange/__init__.py +4 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/token_exchange/client.py +161 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/token_exchange/raw_client.py +251 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/__init__.py +188 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/audio_v2.py +51 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/audio_v2bleep.py +57 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/audio_v2output_transcription.py +10 -0
- skyflow_flowvault_python-1.0.0/common/generated/rest/types/v_1_get_auth_token_response.py → skyflow_flowvault_python-1.1.0/common/generated/rest/types/deidentify_file_response_v2.py +8 -9
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/deidentify_string_response_v2.py +41 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/deidentify_string_response_v2detected_entity.py +53 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/deidentify_string_response_v2entity_location.py +65 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect.py +72 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_config_v2.py +79 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_config_v2vault_type.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_custom_types.py +76 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_custom_types_deidentification_type.py +7 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_custom_types_include_prefix.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_entity.py +78 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_entity_deidentification_type.py +7 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_entity_entity_type.py +80 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_entity_include_prefix.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_guardrails_response_v2.py +48 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_guardrails_response_v2validation.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_object_entity.py +43 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_object_entity_deidentification_type.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_object_entity_entity_type.py +7 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_return_entities.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_runs_response_v2.py +56 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_runs_response_v2output_type.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/detect_runs_response_v2status.py +7 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/document_v2.py +24 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/document_v2pdf.py +53 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/document_v2pdf_processing_mode.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/entity_transformation.py +28 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/file_mapping.py +69 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/file_output.py +52 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/file_output_processed_file_extension.py +32 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/file_output_processed_file_type.py +17 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/get_auth_token_response.py +37 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/get_sts_token_response.py +46 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/image_v2.py +54 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/image_v2masking_method.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/media.py +28 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/metrics.py +61 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/redaction_level.py +73 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/redaction_level_entity_name.py +80 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/redaction_level_redaction_type.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/reidentify_file_response_v2.py +51 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/reidentify_file_response_v2output_type.py +5 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/reidentify_file_response_v2status.py +7 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/reidentify_string_response_v2.py +35 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/types/transformation_shift_dates.py +41 -0
- skyflow_flowvault_python-1.1.0/common/generated/rest/version.py +6 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/service_account/_utils.py +2 -2
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/_skyflow_messages.py +80 -5
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/_utils.py +1 -1
- skyflow_flowvault_python-1.1.0/common/utils/enums/detect.py +180 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/logger/_logger.py +11 -12
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/validations/_validations.py +2 -2
- skyflow_flowvault_python-1.1.0/common/vault/data/__init__.py +10 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_delete_files_request.py +3 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_delete_files_response.py +9 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_get_tokens_request.py +3 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_get_tokens_response.py +9 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_query_request.py +3 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_query_response.py +9 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_upload_files_request.py +3 -0
- skyflow_flowvault_python-1.1.0/common/vault/data/_base_upload_files_response.py +9 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/__init__.py +73 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_constants.py +36 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_controller.py +228 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_errors.py +61 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_file_flow.py +21 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_file_output_writer.py +89 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_mappers.py +331 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_models.py +336 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_polling.py +56 -0
- skyflow_flowvault_python-1.1.0/common/vault/detect/_validations.py +91 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/setup.py +2 -1
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/client/skyflow.py +2 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/__init__.py +24 -1
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/_default_clients.py +32 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/client.py +19 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/__init__.py +127 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/client_wrapper.py +148 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/datetime_utils.py +70 -0
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/core/force_multipart.py +4 -2
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/http_client.py +940 -0
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/core/http_response.py +10 -2
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/http_sse/__init__.py +42 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/http_sse/_api.py +455 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/http_sse/_decoders.py +74 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/http_sse/_exceptions.py +7 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/http_sse/_models.py +17 -0
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/core/jsonable_encoder.py +33 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/logging.py +107 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/core/parse_error.py +36 -0
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/core/pydantic_utilities.py +249 -18
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/core/request_options.py +6 -1
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/core/serialization.py +79 -8
- {skyflow_flowvault_python-1.0.0/common → skyflow_flowvault_python-1.1.0/skyflow}/generated/rest/environment.py +2 -2
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/errors/bad_request_error.py +11 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/errors/internal_server_error.py +11 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/errors/not_found_error.py +11 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/errors/unauthorized_error.py +11 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/files/__init__.py +4 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/files/client.py +270 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/files/raw_client.py +541 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/query/__init__.py +4 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/raw_client.py +86 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/tokens/__init__.py +4 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/__init__.py +21 -0
- skyflow_flowvault_python-1.0.0/common/generated/rest/types/protobuf_any.py → skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/error_response.py +3 -4
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/error_response_error.py +28 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_delete_record.py +56 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_delete_response.py +23 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_delete_response_object.py +59 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_upload_column.py +36 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_upload_record.py +44 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_upload_response.py +23 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/file_upload_response_object.py +59 -0
- skyflow_flowvault_python-1.1.0/skyflow/generated/rest/types/http_code.py +6 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/_skyflow_messages.py +47 -0
- skyflow_flowvault_python-1.1.0/skyflow/utils/_version.py +1 -0
- skyflow_flowvault_python-1.1.0/skyflow/utils/enums/__init__.py +22 -0
- skyflow_flowvault_python-1.1.0/skyflow/utils/enums/_deidentify_source_type.py +6 -0
- skyflow_flowvault_python-1.1.0/skyflow/utils/enums/_file_upload_status.py +7 -0
- skyflow_flowvault_python-1.1.0/skyflow/utils/enums/_reidentify_source_type.py +6 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/validations/__init__.py +4 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/validations/_validations.py +78 -1
- skyflow_flowvault_python-1.1.0/skyflow/vault/client/client.py +163 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/controller/_vault.py +385 -21
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/__init__.py +23 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_delete_files_column_result.py +10 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_delete_files_options.py +8 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_delete_files_request.py +9 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_delete_files_request_record.py +9 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_delete_files_response.py +6 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_delete_files_response_record.py +15 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_get_tokens_options.py +8 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_get_tokens_request.py +9 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_get_tokens_request_record.py +4 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_get_tokens_response.py +6 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_get_tokens_response_record.py +15 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_query_options.py +8 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_query_request.py +6 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_query_response.py +14 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_query_response_metadata.py +9 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_query_response_record.py +9 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_column_result.py +11 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_options.py +8 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_request.py +9 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_request_column.py +11 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_request_record.py +10 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_response.py +6 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/data/_upload_files_response_record.py +15 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/detect/__init__.py +37 -0
- skyflow_flowvault_python-1.1.0/skyflow/vault/detect/_redaction_level.py +14 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow_flowvault_python.egg-info/PKG-INFO +601 -11
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow_flowvault_python.egg-info/SOURCES.txt +135 -3
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow_flowvault_python.egg-info/requires.txt +1 -0
- skyflow_flowvault_python-1.0.0/common/generated/rest/__init__.py +0 -24
- skyflow_flowvault_python-1.0.0/common/generated/rest/client.py +0 -153
- skyflow_flowvault_python-1.0.0/common/generated/rest/core/__init__.py +0 -52
- skyflow_flowvault_python-1.0.0/common/generated/rest/core/client_wrapper.py +0 -86
- skyflow_flowvault_python-1.0.0/common/generated/rest/core/datetime_utils.py +0 -28
- skyflow_flowvault_python-1.0.0/common/generated/rest/core/http_client.py +0 -543
- skyflow_flowvault_python-1.0.0/common/generated/rest/errors/__init__.py +0 -9
- skyflow_flowvault_python-1.0.0/common/generated/rest/errors/bad_request_error.py +0 -14
- skyflow_flowvault_python-1.0.0/common/generated/rest/errors/not_found_error.py +0 -14
- skyflow_flowvault_python-1.0.0/common/generated/rest/errors/unauthorized_error.py +0 -14
- skyflow_flowvault_python-1.0.0/common/generated/rest/types/__init__.py +0 -9
- skyflow_flowvault_python-1.0.0/common/generated/rest/types/googlerpc_status.py +0 -22
- skyflow_flowvault_python-1.0.0/common/generated/rest/version.py +0 -6
- skyflow_flowvault_python-1.0.0/common/vault/data/__init__.py +0 -2
- skyflow_flowvault_python-1.0.0/skyflow/utils/_version.py +0 -1
- skyflow_flowvault_python-1.0.0/skyflow/utils/enums/__init__.py +0 -3
- skyflow_flowvault_python-1.0.0/skyflow/vault/client/client.py +0 -102
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/MANIFEST.in +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/.coveragerc +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/client/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/client/base_skyflow.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/client/utils/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/client/utils/_utils.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/errors/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/errors/_skyflow_error.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/_default_clients.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/authentication/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/core/api_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/datetime_utils.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/core/file.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/force_multipart.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_client.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_response.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_sse/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_sse/_api.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_sse/_decoders.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_sse/_exceptions.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/http_sse/_models.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/jsonable_encoder.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/logging.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/parse_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/pydantic_utilities.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/core/query_encoder.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/core/remove_none_from_dict.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/request_options.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/core/serialization.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/environment.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/errors/bad_request_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/errors/internal_server_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/errors/not_found_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/errors/unauthorized_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow/generated/rest/query → skyflow_flowvault_python-1.1.0/common/generated/rest/guardrails_v2}/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/generated/rest/py.typed +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/raw_client.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow/generated/rest/tokens → skyflow_flowvault_python-1.1.0/common/generated/rest/strings_v2}/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/types/error_response.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/types/error_response_error.py +0 -0
- {skyflow_flowvault_python-1.0.0/skyflow → skyflow_flowvault_python-1.1.0/common}/generated/rest/types/http_code.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/service_account/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/service_account/client/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/service_account/client/auth_client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/_helpers.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/constants.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/content_types.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/detect_entities.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/detect_output_transcriptions.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/env.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/log_level.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/masking_method.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/redaction_type.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/request_method.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/token_mode.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/enums/token_type.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/logger/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/logger/_log_helpers.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/utils/validations/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/vault/base_vault_client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/vault/base_vault_controller.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/vault/data/_base_insert_request.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/common/vault/data/_base_insert_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/setup.cfg +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/client/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/client/_http_config_builder.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/error/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/core/api_error.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/core/file.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/core/query_encoder.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/core/remove_none_from_dict.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/errors/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/errors/forbidden_error.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/errors/too_many_requests_error.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/py.typed +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/query/client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/query/raw_client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/records/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/records/client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/records/raw_client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/records/types/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/records/types/update_request_update_type.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/tokens/client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/tokens/raw_client.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/column_redactions.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/delete_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/delete_response_object.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/detokenize_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/detokenize_response_object.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/execute_query_record_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/execute_query_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/execute_query_response_metadata.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/get_request_data.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/get_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/get_tokens_from_values_request_object.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/get_tokens_from_values_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/google_protobuf_value.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/insert_record_data.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/insert_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/record_response_object.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/token_group_redactions.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/tokenize_response_object.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/unique_value.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/update_record_data.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/update_record_data_update_type.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/update_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/upsert.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/types/upsert_update_type.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/generated/rest/version.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/service_account/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/_http_config.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/_response_parsing.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/_retry.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/_utils.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/enums/_custom_header_key.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/enums/_env_urls.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/utils/enums/_upsert_type.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/client/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/controller/__init__.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_column_redactions.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_delete_options.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_delete_request.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_delete_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_delete_response_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_detokenize_options.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_detokenize_request.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_detokenize_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_detokenize_response_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_detokenize_response_record_metadata.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_get_options.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_get_request.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_get_request_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_get_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_get_response_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_insert_options.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_insert_request.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_insert_request_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_insert_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_insert_response_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_request_context.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_token.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_token_group_redactions.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_update_options.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_update_request.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_update_request_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_update_response.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_update_response_record.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow/vault/data/_upsert_options.py +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow_flowvault_python.egg-info/dependency_links.txt +0 -0
- {skyflow_flowvault_python-1.0.0 → skyflow_flowvault_python-1.1.0}/skyflow_flowvault_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skyflow-flowvault-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Skyflow SDK for the Python programming language (v3 / flowservice API)
|
|
5
5
|
Home-page: https://github.com/skyflowapi/skyflow-python/
|
|
6
6
|
Author: Skyflow
|
|
@@ -13,6 +13,7 @@ Requires-Dist: typing-extensions>=4.0.0
|
|
|
13
13
|
Requires-Dist: PyJWT<3,>=2.12
|
|
14
14
|
Requires-Dist: cryptography>=44.0.2
|
|
15
15
|
Requires-Dist: httpx>=0.21.2
|
|
16
|
+
Requires-Dist: python-dotenv<2,>=1.1.0
|
|
16
17
|
Provides-Extra: dev
|
|
17
18
|
Requires-Dist: codespell>=2.4.1; extra == "dev"
|
|
18
19
|
Requires-Dist: ruff>=0.9.0; extra == "dev"
|
|
@@ -31,7 +32,7 @@ Dynamic: summary
|
|
|
31
32
|
|
|
32
33
|
# Skyflow FlowVault Python SDK
|
|
33
34
|
|
|
34
|
-
The `flowvault` module is a Skyflow Python SDK for vault operations. It shares its client, credentials, and configuration with the [skyvault SDK](../skyvault/README.md) (both depend on the `common` module) but exposes a different, narrower surface: **unary** vault operations — insert, get, update, delete, and
|
|
35
|
+
The `flowvault` module is a Skyflow Python SDK for vault operations. It shares its client, credentials, and configuration with the [skyvault SDK](../skyvault/README.md) (both depend on the `common` module) but exposes a different, narrower surface: **unary** vault operations — insert, get, update, delete, detokenize, query, get tokens, upload files, and delete files — plus **[Detect](#detect)** (de-identify and re-identify text and files, and guardrails).
|
|
35
36
|
|
|
36
37
|
> Meant for **FlowVault** vaults.
|
|
37
38
|
|
|
@@ -69,7 +70,20 @@ The `flowvault` module is a Skyflow Python SDK for vault operations. It shares i
|
|
|
69
70
|
- [Get](#get)
|
|
70
71
|
- [Update](#update)
|
|
71
72
|
- [Delete](#delete)
|
|
73
|
+
- [Query](#query)
|
|
74
|
+
- [Get Tokens](#get-tokens)
|
|
75
|
+
- [Upload Files](#upload-files)
|
|
76
|
+
- [Delete Files](#delete-files)
|
|
72
77
|
- [Custom Request Headers](#custom-request-headers)
|
|
78
|
+
- [Detect](#detect)
|
|
79
|
+
- [Before you start](#before-you-start)
|
|
80
|
+
- [deidentify_string](#deidentify_string)
|
|
81
|
+
- [Detect configuration](#detect-configuration)
|
|
82
|
+
- [deidentify_file](#deidentify_file)
|
|
83
|
+
- [get_run](#get_run)
|
|
84
|
+
- [reidentify_string](#reidentify_string)
|
|
85
|
+
- [reidentify_file](#reidentify_file)
|
|
86
|
+
- [check_guardrails](#check_guardrails)
|
|
73
87
|
- [Error Handling](#error-handling)
|
|
74
88
|
- [Two layers of errors](#two-layers-of-errors)
|
|
75
89
|
- [Per-record success and failure](#per-record-success-and-failure)
|
|
@@ -81,7 +95,7 @@ The `flowvault` module is a Skyflow Python SDK for vault operations. It shares i
|
|
|
81
95
|
# Overview
|
|
82
96
|
|
|
83
97
|
- Authenticate using a Skyflow service account, an API key, or a bearer token — see [Authenticate](#authenticate).
|
|
84
|
-
- Perform
|
|
98
|
+
- Perform Vault API operations — insert, get, update, delete, detokenize, query, get tokens, upload files, and delete files. See [VaultController — Unary operations](#vaultcontroller--unary-operations).
|
|
85
99
|
- **Per-record reporting, not all-or-nothing.** A call succeeds as a call even when individual records fail; every response reports the outcome of each individual record or token. See [Error Handling](#error-handling).
|
|
86
100
|
|
|
87
101
|
# Install
|
|
@@ -389,11 +403,11 @@ The SDK logs at `LogLevel.ERROR` by default. Levels rank `DEBUG` < `INFO` < `WAR
|
|
|
389
403
|
|
|
390
404
|
## Schema vs. schemaless vaults
|
|
391
405
|
|
|
392
|
-
Which operations make sense depends on whether the vault is **structured** (has a schema — tables and columns) or **schemaless** (stores standalone tokens with no table structure): the record operations (`insert`, `get`, `update`, `delete`) address a table's columns and so need a structured vault, while `detokenize`
|
|
406
|
+
Which operations make sense depends on whether the vault is **structured** (has a schema — tables and columns) or **schemaless** (stores standalone tokens with no table structure): the record and file operations (`insert`, `get`, `update`, `delete`, `query`, `upload_files`, `delete_files`) address a table's columns and so need a structured vault, while the token operations (`detokenize`, `get_tokens`) need only the token and work against either kind. See [Vault type support](#vault-type-support) for the per-operation breakdown.
|
|
393
407
|
|
|
394
408
|
# VaultController — Unary operations
|
|
395
409
|
|
|
396
|
-
`VaultController` is returned by `skyflow_client.vault(...)` and exposes these vault operations. Each
|
|
410
|
+
`VaultController` is returned by `skyflow_client.vault(...)` and exposes these vault operations. Each is a single method call that hands the result straight back (`upload_files` orchestrates the signed-URL upload across a couple of calls internally):
|
|
397
411
|
|
|
398
412
|
| Method | Parameters | Returns | Description |
|
|
399
413
|
|--------|-----------|---------|-------------|
|
|
@@ -402,12 +416,16 @@ Which operations make sense depends on whether the vault is **structured** (has
|
|
|
402
416
|
| `get(request)` | `GetRequest`, optional `GetOptions` | `GetResponse` | Read records by skyflow ID or unique value, optionally with a redaction override per column |
|
|
403
417
|
| `update(request)` | `UpdateRequest`, optional `UpdateOptions` | `UpdateResponse` | Update records by skyflow ID |
|
|
404
418
|
| `delete(request)` | `DeleteRequest`, optional `DeleteOptions` | `DeleteResponse` | Delete records by skyflow ID or unique value |
|
|
419
|
+
| `query(request)` | `QueryRequest`, optional `QueryOptions` | `QueryResponse` | Run a read-only SQL `SELECT`; returns up to 25 rows |
|
|
420
|
+
| `get_tokens(request)` | `GetTokensRequest`, optional `GetTokensOptions` | `GetTokensResponse` | Look up existing tokens for values (deterministic token groups) |
|
|
421
|
+
| `upload_files(request)` | `UploadFilesRequest`, optional `UploadFilesOptions` | `UploadFilesResponse` | Upload files to file columns (the SDK fetches signed URLs and uploads the bytes) |
|
|
422
|
+
| `delete_files(request)` | `DeleteFilesRequest`, optional `DeleteFilesOptions` | `DeleteFilesResponse` | Delete files from file columns by skyflow ID or unique value |
|
|
405
423
|
|
|
406
|
-
Each method also accepts an optional options object (`InsertOptions`, `DetokenizeOptions`, `GetOptions`, `UpdateOptions`, `DeleteOptions`) — see [Custom Request Headers](#custom-request-headers).
|
|
424
|
+
Each method also accepts an optional options object (`InsertOptions`, `DetokenizeOptions`, `GetOptions`, `UpdateOptions`, `DeleteOptions`, `QueryOptions`, `GetTokensOptions`, `UploadFilesOptions`, `DeleteFilesOptions`) — see [Custom Request Headers](#custom-request-headers).
|
|
407
425
|
|
|
408
426
|
## Vault type support
|
|
409
427
|
|
|
410
|
-
The same distinction as [Schema vs. schemaless vaults](#schema-vs-schemaless-vaults) applies.
|
|
428
|
+
The same distinction as [Schema vs. schemaless vaults](#schema-vs-schemaless-vaults) applies. Most operations address records inside a table, so they only make sense against a structured vault; the token-centric ones work against either kind:
|
|
411
429
|
|
|
412
430
|
| Operation | Supported on |
|
|
413
431
|
|---|---|
|
|
@@ -416,6 +434,10 @@ The same distinction as [Schema vs. schemaless vaults](#schema-vs-schemaless-vau
|
|
|
416
434
|
| `update` | Structured vaults — updates a table's records by skyflow ID. |
|
|
417
435
|
| `delete` | Structured vaults — deletes a table's records. |
|
|
418
436
|
| `detokenize` | Both — detokenizing only needs the token itself, not a table, so it works regardless of which kind of vault the token came from. |
|
|
437
|
+
| `query` | Structured vaults — runs a SQL `SELECT` over a table. |
|
|
438
|
+
| `get_tokens` | Both — looks up a token for a value within a token group, not a table. |
|
|
439
|
+
| `upload_files` | Structured vaults — uploads into a table's file columns. |
|
|
440
|
+
| `delete_files` | Structured vaults — deletes files from a table's file columns. |
|
|
419
441
|
|
|
420
442
|
# Insert
|
|
421
443
|
|
|
@@ -524,7 +546,7 @@ from skyflow.vault.data import DetokenizeRequest, TokenGroupRedactions
|
|
|
524
546
|
vault = skyflow_client.vault('<VAULT_ID>') # skyflow_client from Quickstart
|
|
525
547
|
|
|
526
548
|
request = DetokenizeRequest(
|
|
527
|
-
tokens=['5479-4229-4622-1393', '
|
|
549
|
+
tokens=['5479-4229-4622-1393', '<TOKEN_1>'],
|
|
528
550
|
token_group_redactions=[TokenGroupRedactions(token_group_name='card_number_cg', redaction='MASKED')],
|
|
529
551
|
)
|
|
530
552
|
response = vault.detokenize(request)
|
|
@@ -547,7 +569,7 @@ Sample response:
|
|
|
547
569
|
"request_id": null
|
|
548
570
|
},
|
|
549
571
|
{
|
|
550
|
-
"token": "
|
|
572
|
+
"token": "<TOKEN_1>",
|
|
551
573
|
"value": null,
|
|
552
574
|
"token_group_name": null,
|
|
553
575
|
"metadata": null,
|
|
@@ -681,7 +703,7 @@ Sample response:
|
|
|
681
703
|
"table_name": "table1",
|
|
682
704
|
"skyflow_id": "9fac9201-7b8a-4446-93f8-5244e1213bd1",
|
|
683
705
|
"tokens": {
|
|
684
|
-
"cardholder_name": [ { "token": "
|
|
706
|
+
"cardholder_name": [ { "token": "<TOKEN_2>", "token_group_name": "deterministic_string", "path": null } ]
|
|
685
707
|
},
|
|
686
708
|
"data": { "cardholder_name": "Jane Doe" },
|
|
687
709
|
"hashed_data": null,
|
|
@@ -749,6 +771,213 @@ for record in response.records:
|
|
|
749
771
|
print(record.skyflow_id, 'failed', record.http_code, record.error)
|
|
750
772
|
```
|
|
751
773
|
|
|
774
|
+
# Query
|
|
775
|
+
|
|
776
|
+
Run a read-only SQL `SELECT` against the vault in a single API call.
|
|
777
|
+
|
|
778
|
+
> **Vault type supported:** structured (schema) vaults. See [Vault type support](#vault-type-support).
|
|
779
|
+
|
|
780
|
+
**Note:**
|
|
781
|
+
|
|
782
|
+
- `query` is required and must be a non-empty string. Only `SELECT` is supported.
|
|
783
|
+
- A call returns at most 25 records; page through more with the SQL `OFFSET` keyword.
|
|
784
|
+
- Returned values may be masked per your vault's policies; they are never tokens or file URLs.
|
|
785
|
+
- Unlike the other operations, `query` has **no per-record results** — any failure is thrown as a `SkyflowError`, and `request_id` is always populated.
|
|
786
|
+
|
|
787
|
+
```python
|
|
788
|
+
from skyflow.vault.data import QueryRequest
|
|
789
|
+
|
|
790
|
+
vault = skyflow_client.vault('<VAULT_ID>') # skyflow_client from Quickstart
|
|
791
|
+
|
|
792
|
+
request = QueryRequest(query="SELECT name, email FROM table1 WHERE name = 'john doe' LIMIT 25")
|
|
793
|
+
response = vault.query(request)
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
There is no async variant: `query` returns its `QueryResponse` directly.
|
|
797
|
+
|
|
798
|
+
Sample response:
|
|
799
|
+
|
|
800
|
+
```json
|
|
801
|
+
{
|
|
802
|
+
"records": [
|
|
803
|
+
{ "data": { "skyflow_id": "9fac9201-7b8a-4446-93f8-5244e1213bd1", "name": "john doe", "email": "john@example.com" } }
|
|
804
|
+
],
|
|
805
|
+
"metadata": { "columns": ["skyflow_id", "name", "email"] },
|
|
806
|
+
"request_id": "a1b2c3d4-..."
|
|
807
|
+
}
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
`QueryResponse` carries `.records` (a list of `QueryResponseRecord`, each with `.data` — a dict of column to value), `.metadata` (`QueryResponseMetadata` with `.columns`), and `.request_id` (always populated).
|
|
811
|
+
|
|
812
|
+
```python
|
|
813
|
+
for record in response.records:
|
|
814
|
+
print(record.data)
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
# Get Tokens
|
|
818
|
+
|
|
819
|
+
Look up the existing token for one or more values — one result per value — in a single API call.
|
|
820
|
+
|
|
821
|
+
> **Vault type supported:** both. See [Vault type support](#vault-type-support).
|
|
822
|
+
|
|
823
|
+
**Note:**
|
|
824
|
+
|
|
825
|
+
- `records` is required and must be a non-empty list of `GetTokensRequestRecord`.
|
|
826
|
+
- Each record needs a non-null `value` and a non-blank `token_group_name`. Only **deterministic** token groups are supported.
|
|
827
|
+
- One result is returned per input value, in request order; duplicate inputs are not collapsed.
|
|
828
|
+
|
|
829
|
+
```python
|
|
830
|
+
from skyflow.vault.data import GetTokensRequest, GetTokensRequestRecord
|
|
831
|
+
|
|
832
|
+
vault = skyflow_client.vault('<VAULT_ID>') # skyflow_client from Quickstart
|
|
833
|
+
|
|
834
|
+
request = GetTokensRequest(records=[
|
|
835
|
+
GetTokensRequestRecord(value='john@example.com', token_group_name='email_cg'),
|
|
836
|
+
GetTokensRequestRecord(value='jane@example.com', token_group_name='email_cg'),
|
|
837
|
+
])
|
|
838
|
+
response = vault.get_tokens(request)
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
There is no async variant: `get_tokens` returns its `GetTokensResponse` directly.
|
|
842
|
+
|
|
843
|
+
Sample response:
|
|
844
|
+
|
|
845
|
+
```json
|
|
846
|
+
{
|
|
847
|
+
"records": [
|
|
848
|
+
{ "value": "john@example.com", "token_group_name": "email_cg", "token": "1R9kNnLOPM", "http_code": 200, "error": null, "request_id": null },
|
|
849
|
+
{ "value": "unknown@example.com", "token_group_name": "email_cg", "token": null, "http_code": 404, "error": "Token not found.", "request_id": "a1b2c3d4-..." }
|
|
850
|
+
]
|
|
851
|
+
}
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
Accessors on each `GetTokensResponseRecord`: `.value`, `.token_group_name`, `.token`, `.http_code`, `.error`, `.request_id`.
|
|
855
|
+
|
|
856
|
+
```python
|
|
857
|
+
for record in response.records:
|
|
858
|
+
if record.error is None:
|
|
859
|
+
print(record.value, '->', record.token)
|
|
860
|
+
else:
|
|
861
|
+
print(record.value, 'failed', record.http_code, record.error)
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
# Upload Files
|
|
865
|
+
|
|
866
|
+
Upload one or more files to file columns. The SDK **orchestrates** this in two steps: it requests a signed upload URL per column, then uploads each file's bytes to its URL — you just supply the files.
|
|
867
|
+
|
|
868
|
+
> **Vault type supported:** structured (schema) vaults. See [Vault type support](#vault-type-support).
|
|
869
|
+
|
|
870
|
+
**Note:**
|
|
871
|
+
|
|
872
|
+
- `records` is required and must be a non-empty list of `UploadFilesRequestRecord`; each needs a `table_name` and a non-empty `columns` list.
|
|
873
|
+
- Each `UploadFilesRequestColumn` needs a `column` name and **exactly one** file source — `file_path`, `base64`, or `file_object`. `base64` additionally requires `file_name`. The upload's content type is inferred from the file name.
|
|
874
|
+
- Omit `skyflow_id` to create a new record (CREATE permission); set it to upload into an existing record (UPDATE permission).
|
|
875
|
+
- `file_name` is derived from `file_path`/`file_object` when omitted; if still unset, the server generates one.
|
|
876
|
+
- Within a call, files are uploaded **concurrently** (a small bounded thread pool) and each file is **streamed** from disk, so large or many-file records stay within the signed-URL window with flat memory. The final virus-scan status (`fileStatus`) is asynchronous — read it later with `get()`.
|
|
877
|
+
|
|
878
|
+
```python
|
|
879
|
+
from skyflow.vault.data import UploadFilesRequest, UploadFilesRequestRecord, UploadFilesRequestColumn
|
|
880
|
+
|
|
881
|
+
vault = skyflow_client.vault('<VAULT_ID>') # skyflow_client from Quickstart
|
|
882
|
+
|
|
883
|
+
request = UploadFilesRequest(records=[
|
|
884
|
+
UploadFilesRequestRecord(table_name='onboarding', columns=[
|
|
885
|
+
UploadFilesRequestColumn(column='resumePDF', file_path='/path/to/resume.pdf'),
|
|
886
|
+
UploadFilesRequestColumn(column='photoID', base64='<BASE64_CONTENT>', file_name='photo.jpg'),
|
|
887
|
+
]),
|
|
888
|
+
])
|
|
889
|
+
response = vault.upload_files(request)
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
Sample response (partial success):
|
|
893
|
+
|
|
894
|
+
```json
|
|
895
|
+
{
|
|
896
|
+
"records": [
|
|
897
|
+
{
|
|
898
|
+
"skyflow_id": "2a62a1fd-...",
|
|
899
|
+
"table_name": "onboarding",
|
|
900
|
+
"columns": [
|
|
901
|
+
{ "column": "resumePDF", "file_name": "resume.pdf", "upload_status": "UPLOADED", "error": null },
|
|
902
|
+
{ "column": "photoID", "file_name": "photo.jpg", "upload_status": "FAILED", "error": "PUT failed: 403" }
|
|
903
|
+
],
|
|
904
|
+
"http_code": 200,
|
|
905
|
+
"error": null,
|
|
906
|
+
"request_id": null
|
|
907
|
+
}
|
|
908
|
+
]
|
|
909
|
+
}
|
|
910
|
+
```
|
|
911
|
+
|
|
912
|
+
Accessors on each `UploadFilesResponseRecord`: `.skyflow_id`, `.table_name`, `.columns`, `.http_code`, `.error`, `.request_id`. Each entry in `.columns` is an `UploadFilesColumnResult` with `.column`, `.file_name`, `.upload_status` (`"UPLOADED"`, `"FAILED"`, or `"SKIPPED"`), and `.error`.
|
|
913
|
+
|
|
914
|
+
```python
|
|
915
|
+
for record in response.records:
|
|
916
|
+
for column in (record.columns or []):
|
|
917
|
+
print(column.column, column.upload_status, column.error)
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
# Delete Files
|
|
921
|
+
|
|
922
|
+
Delete files from file columns of existing records — and remove the stored objects — in a single API call.
|
|
923
|
+
|
|
924
|
+
> **Vault type supported:** structured (schema) vaults. See [Vault type support](#vault-type-support).
|
|
925
|
+
|
|
926
|
+
**Note:**
|
|
927
|
+
|
|
928
|
+
- `records` is required and must be a non-empty list of `DeleteFilesRequestRecord`; each needs a `table_name` and a non-empty `columns` list of file-column names.
|
|
929
|
+
- Each record sets **exactly one** of `skyflow_id` or `unique_values` — both, or neither, fails validation.
|
|
930
|
+
- `unique_values` takes the same shape as in [Get](#get): a list of dicts, each holding the unique column-name/value pairs that identify a record; each may resolve to more than one record.
|
|
931
|
+
|
|
932
|
+
```python
|
|
933
|
+
from skyflow.vault.data import DeleteFilesRequest, DeleteFilesRequestRecord
|
|
934
|
+
|
|
935
|
+
vault = skyflow_client.vault('<VAULT_ID>') # skyflow_client from Quickstart
|
|
936
|
+
|
|
937
|
+
request = DeleteFilesRequest(records=[
|
|
938
|
+
DeleteFilesRequestRecord(table_name='onboarding', columns=['resumePDF'], skyflow_id='9fac9201-...'),
|
|
939
|
+
DeleteFilesRequestRecord(table_name='onboarding', columns=['photoID'], unique_values=[{'email': 'jane.doe@example.com'}]),
|
|
940
|
+
])
|
|
941
|
+
response = vault.delete_files(request)
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
There is no async variant: `delete_files` returns its `DeleteFilesResponse` directly.
|
|
945
|
+
|
|
946
|
+
Sample response (partial success):
|
|
947
|
+
|
|
948
|
+
```json
|
|
949
|
+
{
|
|
950
|
+
"records": [
|
|
951
|
+
{
|
|
952
|
+
"skyflow_id": "9fac9201-...",
|
|
953
|
+
"table_name": "onboarding",
|
|
954
|
+
"columns": [ { "column": "resumePDF", "status": "DELETED" } ],
|
|
955
|
+
"http_code": 200,
|
|
956
|
+
"error": null,
|
|
957
|
+
"request_id": null
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
"skyflow_id": "invalid-id",
|
|
961
|
+
"table_name": "onboarding",
|
|
962
|
+
"columns": null,
|
|
963
|
+
"http_code": 404,
|
|
964
|
+
"error": "Invalid request. skyflowID invalid-id is invalid.",
|
|
965
|
+
"request_id": "a1b2c3d4-..."
|
|
966
|
+
}
|
|
967
|
+
]
|
|
968
|
+
}
|
|
969
|
+
```
|
|
970
|
+
|
|
971
|
+
Accessors on each `DeleteFilesResponseRecord`: `.skyflow_id`, `.table_name`, `.columns`, `.http_code`, `.error`, `.request_id`. On a successful record `.columns` is a list of `DeleteFilesColumnResult` (`.column`, `.status` — `"DELETED"`); on a failed record `.columns` is `None`.
|
|
972
|
+
|
|
973
|
+
```python
|
|
974
|
+
for record in response.records:
|
|
975
|
+
if record.error is None:
|
|
976
|
+
print(record.skyflow_id, 'deleted', [c.column for c in record.columns])
|
|
977
|
+
else:
|
|
978
|
+
print(record.skyflow_id, 'failed', record.http_code, record.error)
|
|
979
|
+
```
|
|
980
|
+
|
|
752
981
|
# Custom Request Headers
|
|
753
982
|
|
|
754
983
|
To include custom HTTP headers on an outgoing request, pass an **interceptor** via that operation's options object. The interceptor is a callable that receives a `RequestContext` and can add headers to it. The headers available are defined by the `CustomHeaderKey` enum:
|
|
@@ -779,6 +1008,367 @@ The same pattern applies to every operation, via its corresponding options class
|
|
|
779
1008
|
| `get` | `GetOptions` |
|
|
780
1009
|
| `update` | `UpdateOptions` |
|
|
781
1010
|
| `delete` | `DeleteOptions` |
|
|
1011
|
+
| `query` | `QueryOptions` |
|
|
1012
|
+
| `get_tokens` | `GetTokensOptions` |
|
|
1013
|
+
| `upload_files` | `UploadFilesOptions` |
|
|
1014
|
+
| `delete_files` | `DeleteFilesOptions` |
|
|
1015
|
+
|
|
1016
|
+
# Detect
|
|
1017
|
+
|
|
1018
|
+
Skyflow Detect finds and de-identifies sensitive data in strings and files, re-identifies tokens on demand, and screens text against guardrails. The flowvault SDK exposes the Detect API through `DetectController`, returned by `skyflow_client.detect()` and `skyflow_client.detect('<VAULT_ID>')`. Every request is scoped to that vault, and the controller shares the same credentials, timeouts and retries as `vault()`; the `vault_id` is filled in from the vault config for every method.
|
|
1019
|
+
|
|
1020
|
+
Detect configurations are created in Studio or through the management API — the SDK does not create, update or delete them. Import request/response models from `skyflow.vault.detect` and enums from `skyflow.utils.enums`.
|
|
1021
|
+
|
|
1022
|
+
| Method | Request | Response | Description |
|
|
1023
|
+
|--------|---------|----------|-------------|
|
|
1024
|
+
| `deidentify_string(request)` | `DeidentifyStringRequest` | `DeidentifyStringResponse` | Detect and replace sensitive data in a string |
|
|
1025
|
+
| `deidentify_file(request)` | `DeidentifyFileRequest` | `DeidentifyFileResponse` | Submit a file for de-identification, optionally polling the run to completion |
|
|
1026
|
+
| `reidentify_string(request)` | `ReidentifyStringRequest` | `ReidentifyStringResponse` | Replace tokens in a string with their original or redacted values |
|
|
1027
|
+
| `reidentify_file(request)` | `ReidentifyFileRequest` | `ReidentifyFileResponse` | Replace tokens in a file with their original or redacted values |
|
|
1028
|
+
| `get_run(request)` | `GetRunRequest` | `GetRunResponse` | Retrieve the status and outputs of a Detect file run |
|
|
1029
|
+
| `check_guardrails(request)` | `CheckGuardrailsRequest` | `CheckGuardrailsResponse` | Screen text for toxicity and denied topics |
|
|
1030
|
+
|
|
1031
|
+
```python
|
|
1032
|
+
detect = skyflow_client.detect()
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
## Before you start
|
|
1036
|
+
|
|
1037
|
+
- **Role.** The service account needs the Detect Invoker, Detect Manager or Vault Owner role on the vault. Detect Invoker can de-identify data and write vault tokens into the vault; Detect Manager adds the ability to create, update and delete Detect configurations. Re-identifying values stored as `VAULT_TOKEN` is governed like detokenization: the caller also needs a policy granting the Detokenization action on the destination, unless it is a Vault Owner.
|
|
1038
|
+
- **Configuration.** Pass `configuration_id` (the id of a stored Detect configuration) or an inline `configuration` (a `DetectConfiguration`). Both are optional: with neither set the SDK sends only the vault id and the run uses the vault's default Detect settings; sending both is rejected by the API with HTTP 400. Create and manage stored configurations — and copy their ids — in Studio (vault → **Detect**) or through the management API; the SDK does not create them.
|
|
1039
|
+
- **Destination for vault tokens.** An entity de-identified with `VAULT_TOKEN` stores its value in the token group named by `destination`. That token group must already exist in the vault; Detect writes into it but does not create it. Create token groups, and the named redaction patterns that re-identification applies, in the vault schema in Studio.
|
|
1040
|
+
- **API reference.** Every Detect request, response and configuration class is listed in the [API Reference](../docs/api_reference.md).
|
|
1041
|
+
|
|
1042
|
+
## deidentify_string
|
|
1043
|
+
|
|
1044
|
+
Synchronous. Detects and de-identifies sensitive data in a string. Build the request with `DeidentifyStringRequest`, passing the text and, optionally, one configuration source.
|
|
1045
|
+
|
|
1046
|
+
```python
|
|
1047
|
+
from skyflow.vault.detect import DeidentifyStringRequest
|
|
1048
|
+
|
|
1049
|
+
response = skyflow_client.detect().deidentify_string(
|
|
1050
|
+
DeidentifyStringRequest(
|
|
1051
|
+
text='My name is John Doe, and my email is johndoe@acme.com.',
|
|
1052
|
+
configuration_id='<CONFIGURATION_ID>',
|
|
1053
|
+
)
|
|
1054
|
+
)
|
|
1055
|
+
|
|
1056
|
+
print(response.processed_text)
|
|
1057
|
+
# My name is [NAME_1], and my email is [EMAIL_ADDRESS_1].
|
|
1058
|
+
for entity in response.entities:
|
|
1059
|
+
print(entity.entity_type, entity.token, entity.location.start_index, entity.entity_scores)
|
|
1060
|
+
print(response.metrics.word_count)
|
|
1061
|
+
```
|
|
1062
|
+
|
|
1063
|
+
An inline configuration is built from `DetectConfiguration` / `Detect` / `Entity` (see [Detect configuration](#detect-configuration)):
|
|
1064
|
+
|
|
1065
|
+
```python
|
|
1066
|
+
from skyflow.vault.detect import DeidentifyStringRequest, DetectConfiguration, Detect, Entity
|
|
1067
|
+
from skyflow.utils.enums import EntityType, DeidentificationType, ReturnEntitiesType
|
|
1068
|
+
|
|
1069
|
+
response = skyflow_client.detect().deidentify_string(
|
|
1070
|
+
DeidentifyStringRequest(
|
|
1071
|
+
text='My name is John Doe, and my email is johndoe@acme.com.',
|
|
1072
|
+
configuration=DetectConfiguration(
|
|
1073
|
+
detect=Detect(
|
|
1074
|
+
entities=[
|
|
1075
|
+
Entity(entity_type=EntityType.NAME, deidentification_type=DeidentificationType.VAULT_TOKEN, destination='<TOKEN_GROUP_NAME>'),
|
|
1076
|
+
Entity(entity_type=EntityType.ALL, deidentification_type=DeidentificationType.ENTITY_UNIQUE_COUNTER),
|
|
1077
|
+
],
|
|
1078
|
+
skip=['Skyflow'],
|
|
1079
|
+
return_entities=ReturnEntitiesType.EXCLUDE_SENSITIVE_DATA,
|
|
1080
|
+
),
|
|
1081
|
+
),
|
|
1082
|
+
)
|
|
1083
|
+
)
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
Returns a `DeidentifyStringResponse` with `processed_text`, `entities` (each a `DetectedEntity` with `token`, `value`, `location`, `entity_type`, `entity_scores`; never `None`) and `metrics`. `value` is populated only when the configuration sets `return_entities` to `ReturnEntitiesType.ALL`; the default `EXCLUDE_SENSITIVE_DATA` returns an empty `value`, so raw sensitive data does not come back unless you ask for it.
|
|
1087
|
+
|
|
1088
|
+
## Detect configuration
|
|
1089
|
+
|
|
1090
|
+
`DetectConfiguration` is the inline form of a stored configuration and accepts the same options. `detect` applies to string and file inputs; `file_mapping` and `media` apply to file inputs only.
|
|
1091
|
+
|
|
1092
|
+
| Class | Fields | Notes |
|
|
1093
|
+
|-------|--------|-------|
|
|
1094
|
+
| `Detect` | `entities`, `object_entities`, `restrict`, `skip`, `custom_types`, `return_entities` | `restrict` / `skip` are regexes always / never treated as sensitive. `return_entities` is `EXCLUDE_SENSITIVE_DATA` (server default), `ALL` or `NONE`. |
|
|
1095
|
+
| `Entity` | `entity_type`, `deidentification_type`, `destination`, `transformation`, `include_prefix`, `prefix_override` | `entity_type` defaults to `ALL`. `deidentification_type` is `ENTITY_UNIQUE_COUNTER` (server default), `ENTITY_ONLY`, `MASK` or `VAULT_TOKEN`. `destination` (a token group name) is used only with `VAULT_TOKEN`. `include_prefix` (`IncludePrefix.YES` / `IncludePrefix.NO`) and `prefix_override` also apply only to `VAULT_TOKEN`: `include_prefix=IncludePrefix.NO` stores a raw token that **cannot be re-identified** (a data-loss trap), and `prefix_override` replaces the entity-type label in the token with a custom one. |
|
|
1096
|
+
| `Transformation` / `ShiftDates` | `shift_dates`; `min_days`, `max_days` | Shifts detected dates by a random number of days within the range. |
|
|
1097
|
+
| `CustomType` | `label`, `match`, `deidentification_type`, `destination`, `include_prefix`, `prefix_override` | A regex-defined entity type; `label` is reported as the entity type of its matches. `deidentification_type`, `destination`, `include_prefix` and `prefix_override` behave exactly as on `Entity`. |
|
|
1098
|
+
| `ObjectEntity` | `entity_type`, `deidentification_type` | Visual objects in images: `FACE`, `LICENSE_PLATE`, `LOGO`, `SIGNATURE` or `ALL`, handled with `REDACT` or `UNREDACT`. File inputs only. |
|
|
1099
|
+
| `FileMapping` | `source`, `destination`, `output_file_name_suffix`, `entities_destination`, `object_entities_destination` | Where the processed file and entity files are written. File inputs only. |
|
|
1100
|
+
| `Media` | `audio`, `document`, `image` | Media-type options. File inputs only. |
|
|
1101
|
+
| `Audio` / `Bleep` | `output_processed_audio`, `output_transcription`, `bleep`; `start_padding`, `stop_padding`, `frequency`, `gain` | `output_transcription` is `NONE`, `TRANSCRIPTION`, `MEDICAL_TRANSCRIPTION`, `DIARIZED_TRANSCRIPTION` or `MEDICAL_DIARIZED_TRANSCRIPTION`. `Bleep` paddings are in seconds, frequency in Hz. |
|
|
1102
|
+
| `Document` / `Pdf` | `pdf`; `processing_mode`, `density`, `max_resolution` | `processing_mode` is `NONE`, `OCR` or `TEXT_LAYER`. `density` is the rendering DPI. |
|
|
1103
|
+
| `Image` | `output_processed_image`, `output_ocr_text`, `masking_method` | `masking_method` is `NONE`, `BLUR` or `BLACKBOX`. |
|
|
1104
|
+
|
|
1105
|
+
```python
|
|
1106
|
+
from skyflow.vault.detect import (
|
|
1107
|
+
DetectConfiguration, Detect, Entity, Transformation, ShiftDates,
|
|
1108
|
+
CustomType, ObjectEntity, Media, Image, Document, Pdf, Audio, Bleep,
|
|
1109
|
+
)
|
|
1110
|
+
from skyflow.utils.enums import (
|
|
1111
|
+
EntityType, DeidentificationType, ObjectEntityType, ObjectDeidentificationType,
|
|
1112
|
+
MaskingMethod, PdfProcessingMode, OutputTranscriptionType,
|
|
1113
|
+
)
|
|
1114
|
+
|
|
1115
|
+
configuration = DetectConfiguration(
|
|
1116
|
+
detect=Detect(
|
|
1117
|
+
entities=[
|
|
1118
|
+
Entity(
|
|
1119
|
+
entity_type=EntityType.DOB,
|
|
1120
|
+
deidentification_type=DeidentificationType.ENTITY_UNIQUE_COUNTER,
|
|
1121
|
+
transformation=Transformation(shift_dates=ShiftDates(min_days=10, max_days=30)),
|
|
1122
|
+
),
|
|
1123
|
+
Entity(entity_type=EntityType.ALL),
|
|
1124
|
+
],
|
|
1125
|
+
object_entities=[
|
|
1126
|
+
ObjectEntity(entity_type=ObjectEntityType.FACE, deidentification_type=ObjectDeidentificationType.REDACT),
|
|
1127
|
+
],
|
|
1128
|
+
custom_types=[CustomType(label='EMPLOYEE_ID', match=['EMP-[0-9]{6}'])],
|
|
1129
|
+
restrict=['[0-9]{3}-[0-9]{2}-[0-9]{4}'],
|
|
1130
|
+
),
|
|
1131
|
+
media=Media(
|
|
1132
|
+
image=Image(masking_method=MaskingMethod.BLUR, output_ocr_text=True),
|
|
1133
|
+
document=Document(pdf=Pdf(processing_mode=PdfProcessingMode.OCR)),
|
|
1134
|
+
audio=Audio(output_transcription=OutputTranscriptionType.TRANSCRIPTION, bleep=Bleep(start_padding=0.5, stop_padding=0.5)),
|
|
1135
|
+
),
|
|
1136
|
+
)
|
|
1137
|
+
```
|
|
1138
|
+
|
|
1139
|
+
## deidentify_file
|
|
1140
|
+
|
|
1141
|
+
De-identifies a file. The API is asynchronous: the submit call returns a run id and the result is retrieved from the run. Build the request with `DeidentifyFileRequest`.
|
|
1142
|
+
|
|
1143
|
+
Supply the file in exactly one of three ways: `file_path`, `file`, or `value` plus a `DeidentifySourceType` `data_source` (`BASE64` or `PRESIGNED_URL`). flowvault does **not** support a Skyflow ID as a file source — its `DeidentifySourceType` has only `BASE64` and `PRESIGNED_URL`. A local `file` / `file_path` is read when the request is sent, base64-encoded, and its `data_format` inferred from the extension. Passing more than one of them, or none, fails client-side validation before any network call. `configuration_id` / `configuration` follow the same rules as for strings (see [Before you start](#before-you-start)).
|
|
1144
|
+
|
|
1145
|
+
- **Submit only** (default): one call, returns `run_id`. `status` is `None` and nothing is written to disk — retrieve the result later with [`get_run`](#get_run).
|
|
1146
|
+
- **Submit and poll**: pass `poll_options`. The SDK polls with exponential backoff (1, 2, 4, 8, 16, then 32 seconds) until the run is `SUCCESS`, `FAILED` or `UNKNOWN`, or until `wait_time` (default 60 s, max 300) or `max_attempts` (default and max 23) is used up. If the budget runs out the response carries the run id with `IN_PROGRESS` or `QUEUED`, so you can resume with `get_run`. `output_directory` is valid only with `poll_options`; setting it without them fails client-side validation.
|
|
1147
|
+
|
|
1148
|
+
```python
|
|
1149
|
+
from skyflow.vault.detect import DeidentifyFileRequest, PollOptions
|
|
1150
|
+
from skyflow.utils.enums import DetectRunStatus
|
|
1151
|
+
|
|
1152
|
+
# Submit only
|
|
1153
|
+
submitted = skyflow_client.detect().deidentify_file(
|
|
1154
|
+
DeidentifyFileRequest(file_path='/data/intake/patient-notes.pdf', configuration_id='<CONFIGURATION_ID>')
|
|
1155
|
+
)
|
|
1156
|
+
run_id = submitted.run_id # status is None; nothing written to disk
|
|
1157
|
+
|
|
1158
|
+
# Submit and poll
|
|
1159
|
+
response = skyflow_client.detect().deidentify_file(
|
|
1160
|
+
DeidentifyFileRequest(
|
|
1161
|
+
file_path='/data/intake/patient-notes.pdf',
|
|
1162
|
+
configuration_id='<CONFIGURATION_ID>',
|
|
1163
|
+
poll_options=PollOptions(wait_time=120),
|
|
1164
|
+
output_directory='/data/processed',
|
|
1165
|
+
)
|
|
1166
|
+
)
|
|
1167
|
+
|
|
1168
|
+
if response.status == DetectRunStatus.SUCCESS:
|
|
1169
|
+
for output in response.output:
|
|
1170
|
+
print(output.processed_file_type, output.processed_file_extension)
|
|
1171
|
+
print(response.metrics.pages)
|
|
1172
|
+
elif response.status == DetectRunStatus.FAILED:
|
|
1173
|
+
print(response.message)
|
|
1174
|
+
else: # IN_PROGRESS or QUEUED: budget ran out, resume with get_run(run_id)
|
|
1175
|
+
print(response.run_id)
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
**Where the outputs go.** On `SUCCESS`, when the request was built from a local `file` / `file_path` and the run returned base64 outputs, the SDK writes them to disk. With `output_directory='/data/processed'` the example above writes:
|
|
1179
|
+
|
|
1180
|
+
- `/data/processed/processed-patient-notes.pdf` — the redacted file
|
|
1181
|
+
- `/data/processed/processed-entities-patient-notes.json` — the detected entities
|
|
1182
|
+
- `/data/processed/processed-object-entities-patient-notes.json` — object entities, when the run produced them
|
|
1183
|
+
|
|
1184
|
+
`output_directory` is created if it does not exist. **If you poll a local file and omit `output_directory`, these files are written to the current working directory** — often your project root or a server's working directory — so set `output_directory` explicitly. A request built from a `PRESIGNED_URL` value has no local name to derive from, and presigned-URL outputs are not fetched, so in that case read `response.output` and write the files yourself.
|
|
1185
|
+
|
|
1186
|
+
**Supported formats and limits.** `data_format` accepts every `DeidentifyFileDataFormat`: `bmp`, `csv`, `dcm`, `doc`, `docx`, `gif`, `jpeg`, `jpg`, `json`, `jsonl`, `mp3`, `pdf`, `png`, `ppt`, `pptx`, `tif`, `tiff`, `txt`, `wav`, `xls`, `xlsx`, `xml`, `zip`. The `VAULT_TOKEN` de-identification type is supported only for `txt`, `csv`, `json`, `jsonl`, `xml`, `docx`, `xlsx` and `pptx`.
|
|
1187
|
+
|
|
1188
|
+
**Polling blocks the calling thread** — each lookup is a synchronous `get_run` followed by a sleep. For concurrency, submit without `poll_options` and poll `get_run` yourself on a scheduler, or run the blocking call on a worker thread you own.
|
|
1189
|
+
|
|
1190
|
+
A file at a presigned URL is referenced through `data_source` + `value`:
|
|
1191
|
+
|
|
1192
|
+
```python
|
|
1193
|
+
from skyflow.vault.detect import DeidentifyFileRequest
|
|
1194
|
+
from skyflow.utils.enums import DeidentifySourceType, DeidentifyFileDataFormat
|
|
1195
|
+
|
|
1196
|
+
skyflow_client.detect().deidentify_file(
|
|
1197
|
+
DeidentifyFileRequest(
|
|
1198
|
+
data_source=DeidentifySourceType.PRESIGNED_URL,
|
|
1199
|
+
value='<PRESIGNED_URL>',
|
|
1200
|
+
data_format=DeidentifyFileDataFormat.PDF,
|
|
1201
|
+
configuration_id='<CONFIGURATION_ID>',
|
|
1202
|
+
)
|
|
1203
|
+
)
|
|
1204
|
+
```
|
|
1205
|
+
|
|
1206
|
+
Returns a `DeidentifyFileResponse` with `run_id`, `status` (a `DetectRunStatus`, `None` when not polled), `output_type`, `output` (a list of `FileOutput` with `processed_file`, `processed_file_type`, `processed_file_extension`), `metrics` and `message`.
|
|
1207
|
+
|
|
1208
|
+
## get_run
|
|
1209
|
+
|
|
1210
|
+
Retrieves the status and, once complete, the outputs of a Detect file run. Build the request with `GetRunRequest`, initialized with the `run_id` returned from a prior `deidentify_file` call. `output` is empty and `output_type` / `metrics` are `None` until the run completes.
|
|
1211
|
+
|
|
1212
|
+
```python
|
|
1213
|
+
from skyflow.vault.detect import GetRunRequest
|
|
1214
|
+
from skyflow.utils.enums import DetectRunStatus
|
|
1215
|
+
|
|
1216
|
+
run = skyflow_client.detect().get_run(GetRunRequest(run_id='<RUN_ID>'))
|
|
1217
|
+
|
|
1218
|
+
if run.status == DetectRunStatus.SUCCESS:
|
|
1219
|
+
for output in run.output:
|
|
1220
|
+
print(output.processed_file_type, output.processed_file_extension)
|
|
1221
|
+
elif run.status == DetectRunStatus.FAILED:
|
|
1222
|
+
print(run.message)
|
|
1223
|
+
else: # QUEUED, IN_PROGRESS, UNKNOWN: poll again later
|
|
1224
|
+
print(run.status)
|
|
1225
|
+
```
|
|
1226
|
+
|
|
1227
|
+
Returns a `GetRunResponse` with the same fields as `DeidentifyFileResponse`.
|
|
1228
|
+
|
|
1229
|
+
## reidentify_string
|
|
1230
|
+
|
|
1231
|
+
Synchronous. Re-identification looks tokens up in the vault, so it applies only to values de-identified with `VAULT_TOKEN`. Placeholders produced by `ENTITY_UNIQUE_COUNTER`, `ENTITY_ONLY` or `MASK` are not stored and cannot be re-identified.
|
|
1232
|
+
|
|
1233
|
+
Build the request with `ReidentifyStringRequest`: the tokenized text and an optional list of `RedactionLevel` rules. On flowvault vaults each rule targets a `token_group_name` and applies a named `redaction_pattern` configured in the vault. Without rules every token is replaced by its original value.
|
|
1234
|
+
|
|
1235
|
+
Only text that actually contains vault tokens can be re-identified, so the example below is a round trip: first de-identify with `VAULT_TOKEN` to mint tokens, then re-identify the `processed_text` that comes back. A vault token is an opaque value like `a1b2c3d4-...` (optionally prefixed, e.g. `[NAME_a1b2c3d4-...]`), not the `[NAME_1]` counter placeholder produced by `ENTITY_UNIQUE_COUNTER`.
|
|
1236
|
+
|
|
1237
|
+
```python
|
|
1238
|
+
from skyflow.vault.detect import (
|
|
1239
|
+
DeidentifyStringRequest, DetectConfiguration, Detect, Entity,
|
|
1240
|
+
ReidentifyStringRequest, RedactionLevel,
|
|
1241
|
+
)
|
|
1242
|
+
from skyflow.utils.enums import EntityType, DeidentificationType
|
|
1243
|
+
|
|
1244
|
+
# 1. De-identify with VAULT_TOKEN so the value is stored and can be re-identified later.
|
|
1245
|
+
deidentified = skyflow_client.detect().deidentify_string(
|
|
1246
|
+
DeidentifyStringRequest(
|
|
1247
|
+
text='My name is John Doe.',
|
|
1248
|
+
configuration=DetectConfiguration(detect=Detect(entities=[
|
|
1249
|
+
Entity(entity_type=EntityType.NAME, deidentification_type=DeidentificationType.VAULT_TOKEN, destination='<TOKEN_GROUP_NAME>'),
|
|
1250
|
+
])),
|
|
1251
|
+
)
|
|
1252
|
+
)
|
|
1253
|
+
# deidentified.processed_text now holds a vault token, e.g. 'My name is a1b2c3d4-...'
|
|
1254
|
+
|
|
1255
|
+
# 2. Re-identify those tokens.
|
|
1256
|
+
response = skyflow_client.detect().reidentify_string(
|
|
1257
|
+
ReidentifyStringRequest(
|
|
1258
|
+
text=deidentified.processed_text,
|
|
1259
|
+
redaction_level=[
|
|
1260
|
+
RedactionLevel(token_group_name='<TOKEN_GROUP_NAME>', redaction_pattern='<REDACTION_PATTERN>'),
|
|
1261
|
+
],
|
|
1262
|
+
)
|
|
1263
|
+
)
|
|
1264
|
+
print(response.processed_text)
|
|
1265
|
+
# My name is John Doe.
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
> The flowvault `RedactionLevel` has only `token_group_name` and `redaction_pattern`; the skyvault SDK's has `entity_name` and `redaction_type` instead. Token groups and redaction patterns are configured in the vault.
|
|
1269
|
+
|
|
1270
|
+
Returns a `ReidentifyStringResponse` with `processed_text` and `metrics`.
|
|
1271
|
+
|
|
1272
|
+
## reidentify_file
|
|
1273
|
+
|
|
1274
|
+
Synchronous — the re-identified file comes back in the response, not through a run id. Build the request with `ReidentifyFileRequest`: a `data_source` (`ReidentifySourceType.BASE64` or `PRESIGNED_URL`; re-identification does not accept a skyflow id as the source), the matching `value`, an optional `data_format` (a `ReidentifyFileDataFormat`), and the same `RedactionLevel` rules as `reidentify_string`. `data_format` is limited to the formats that support `VAULT_TOKEN`: `txt`, `csv`, `json`, `jsonl`, `xml`, `docx`, `xlsx` and `pptx`.
|
|
1275
|
+
|
|
1276
|
+
```python
|
|
1277
|
+
import base64
|
|
1278
|
+
from skyflow.vault.detect import ReidentifyFileRequest, RedactionLevel
|
|
1279
|
+
from skyflow.utils.enums import ReidentifySourceType, ReidentifyFileDataFormat, DetectRunStatus
|
|
1280
|
+
|
|
1281
|
+
data_format = ReidentifyFileDataFormat.TXT
|
|
1282
|
+
with open('/data/redacted/notes.txt', 'rb') as handle:
|
|
1283
|
+
encoded = base64.b64encode(handle.read()).decode('utf-8')
|
|
1284
|
+
|
|
1285
|
+
response = skyflow_client.detect().reidentify_file(
|
|
1286
|
+
ReidentifyFileRequest(
|
|
1287
|
+
data_source=ReidentifySourceType.BASE64,
|
|
1288
|
+
value=encoded,
|
|
1289
|
+
data_format=data_format,
|
|
1290
|
+
redaction_level=[RedactionLevel(token_group_name='<TOKEN_GROUP_NAME>', redaction_pattern='<REDACTION_PATTERN>')],
|
|
1291
|
+
)
|
|
1292
|
+
)
|
|
1293
|
+
|
|
1294
|
+
if response.status == DetectRunStatus.SUCCESS:
|
|
1295
|
+
for index, output in enumerate(response.output):
|
|
1296
|
+
# Branch on output_type: base64 bytes are decoded, a presigned URL is downloaded.
|
|
1297
|
+
if response.output_type == ReidentifySourceType.BASE64:
|
|
1298
|
+
with open(f'reidentified-{index}.{data_format.value}', 'wb') as out:
|
|
1299
|
+
out.write(base64.b64decode(output.processed_file))
|
|
1300
|
+
else: # ReidentifySourceType.PRESIGNED_URL — processed_file is a URL to fetch
|
|
1301
|
+
print('download re-identified file from', output.processed_file)
|
|
1302
|
+
```
|
|
1303
|
+
|
|
1304
|
+
Returns a `ReidentifyFileResponse` with `status`, `output_type` (a `ReidentifySourceType`), `output` (a list of `ReidentifyFileOutput`) and `metrics`.
|
|
1305
|
+
|
|
1306
|
+
## check_guardrails
|
|
1307
|
+
|
|
1308
|
+
Synchronous. Screens text for toxicity and a list of denied topics — a natural pre-LLM check. Build the request with `CheckGuardrailsRequest`. `check_toxicity` and `deny_topics` are optional; the SDK sends each only when set and fills in no default. **When `check_toxicity` is omitted, the server still checks toxicity by default.** The response is passed through as the API returns it.
|
|
1309
|
+
|
|
1310
|
+
```python
|
|
1311
|
+
from skyflow.vault.detect import CheckGuardrailsRequest
|
|
1312
|
+
from skyflow.utils.enums import GuardrailsValidation
|
|
1313
|
+
|
|
1314
|
+
response = skyflow_client.detect().check_guardrails(
|
|
1315
|
+
CheckGuardrailsRequest(text='<USER_PROMPT>', check_toxicity=True, deny_topics=['politics', 'medical advice'])
|
|
1316
|
+
)
|
|
1317
|
+
|
|
1318
|
+
if response.validation == GuardrailsValidation.FAILED:
|
|
1319
|
+
print('blocked', response.toxic, response.denied_topic)
|
|
1320
|
+
```
|
|
1321
|
+
|
|
1322
|
+
Returns a `CheckGuardrailsResponse` with `text`, `validation` (`GuardrailsValidation.PASSED` or `FAILED`), `toxic` and `denied_topic`.
|
|
1323
|
+
|
|
1324
|
+
All Detect methods raise `skyflow.error.SkyflowError` on validation failure, credential failure, or an API error — see [Error Handling](#error-handling). Client-side validation fails before any network call.
|
|
1325
|
+
|
|
1326
|
+
## Response examples and common errors
|
|
1327
|
+
|
|
1328
|
+
Enum-typed fields (`status`, `output_type`, `validation`, …) are shown below by their string values.
|
|
1329
|
+
|
|
1330
|
+
`deidentify_string`:
|
|
1331
|
+
|
|
1332
|
+
```json
|
|
1333
|
+
{
|
|
1334
|
+
"processed_text": "My name is [NAME_1], and my email is [EMAIL_ADDRESS_1].",
|
|
1335
|
+
"entities": [
|
|
1336
|
+
{ "token": "[NAME_1]", "value": "", "location": { "start_index": 11, "end_index": 19, "start_index_processed": 11, "end_index_processed": 19 }, "entity_type": "NAME", "entity_scores": { "NAME": 0.99 } }
|
|
1337
|
+
],
|
|
1338
|
+
"metrics": { "word_count": 10, "character_count": 54 }
|
|
1339
|
+
}
|
|
1340
|
+
```
|
|
1341
|
+
|
|
1342
|
+
`deidentify_file` (polled) / `get_run`:
|
|
1343
|
+
|
|
1344
|
+
```json
|
|
1345
|
+
{
|
|
1346
|
+
"run_id": "run_a1b2c3d4",
|
|
1347
|
+
"status": "SUCCESS",
|
|
1348
|
+
"output_type": "BASE64",
|
|
1349
|
+
"output": [ { "processed_file": "<base64>", "processed_file_type": "application/pdf", "processed_file_extension": "pdf" } ],
|
|
1350
|
+
"metrics": { "pages": 3 },
|
|
1351
|
+
"message": null
|
|
1352
|
+
}
|
|
1353
|
+
```
|
|
1354
|
+
|
|
1355
|
+
`reidentify_string`:
|
|
1356
|
+
|
|
1357
|
+
```json
|
|
1358
|
+
{ "processed_text": "My name is John Doe.", "metrics": { "word_count": 5 } }
|
|
1359
|
+
```
|
|
1360
|
+
|
|
1361
|
+
`check_guardrails`:
|
|
1362
|
+
|
|
1363
|
+
```json
|
|
1364
|
+
{ "text": "<input text>", "validation": "FAILED", "toxic": true, "denied_topic": false }
|
|
1365
|
+
```
|
|
1366
|
+
|
|
1367
|
+
Common Detect errors (all raised as `SkyflowError`):
|
|
1368
|
+
|
|
1369
|
+
- **HTTP 400 — both configuration sources set.** Passing `configuration_id` and `configuration` in the same request is rejected; pass at most one.
|
|
1370
|
+
- **Missing token group.** A `VAULT_TOKEN` entity whose `destination` token group does not exist in the vault fails — create the token group first.
|
|
1371
|
+
- **Unsupported format with `VAULT_TOKEN`.** `VAULT_TOKEN` is only valid for `txt`, `csv`, `json`, `jsonl`, `xml`, `docx`, `xlsx` and `pptx`; other `data_format` values are rejected.
|
|
782
1372
|
|
|
783
1373
|
# Error Handling
|
|
784
1374
|
|
|
@@ -805,7 +1395,7 @@ Every response exposes `.records`. The records list has one entry per submitted
|
|
|
805
1395
|
| `.error` | always | Error message for this item, populated only on failure — `None` means this item succeeded. |
|
|
806
1396
|
| `.request_id` | always | The `x-request-id` of the call this item was part of, populated only on failure (`None` on success) — quote it in support escalations. |
|
|
807
1397
|
|
|
808
|
-
The success payload sits alongside those attributes on the same object: `.skyflow_id`/`.tokens`/`.data`/`.hashed_data` for record-shaped operations (`insert`, `get`, `update`), `.value`/`.token_group_name`/`.metadata` for detokenize, `.skyflow_id` alone for delete.
|
|
1398
|
+
The success payload sits alongside those attributes on the same object: `.skyflow_id`/`.tokens`/`.data`/`.hashed_data` for record-shaped operations (`insert`, `get`, `update`), `.value`/`.token_group_name`/`.metadata` for detokenize, `.value`/`.token_group_name`/`.token` for `get_tokens`, `.skyflow_id`/`.table_name`/`.columns` for `upload_files` and `delete_files`, and `.skyflow_id` alone for delete. (`query` is the exception — it has no per-record results; any failure is raised as a `SkyflowError`.)
|
|
809
1399
|
|
|
810
1400
|
A response has just `.records`, in submitted order, with `.http_code`, `.error`, and `.request_id` on each entry alongside that operation's payload.
|
|
811
1401
|
|