ethyca-fides 2.69.1rc0__py2.py3-none-any.whl → 2.76.0rc2__py2.py3-none-any.whl
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.
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/METADATA +9 -6
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/RECORD +488 -361
- fides/_version.py +3 -3
- fides/api/alembic/alembic.ini +5 -1
- fides/api/alembic/migrations/env.py +7 -1
- fides/api/alembic/migrations/versions/0eef0016cf06_adding_oauth2_config_for_.py +69 -0
- fides/api/alembic/migrations/versions/303287c70600_migrate_resource_type_from_enum_to_.py +99 -0
- fides/api/alembic/migrations/versions/30369bb8ae01_add_webmonitorgroupjob_model.py +67 -0
- fides/api/alembic/migrations/versions/3efe14d4469a_adds_new_experience_configs_for_vendor_.py +79 -0
- fides/api/alembic/migrations/versions/4bfbeff34611_add_polling_status.py +68 -0
- fides/api/alembic/migrations/versions/4d8c0fcc5771_adding_default_system_groups.py +78 -0
- fides/api/alembic/migrations/versions/5fa78b1f324d_add_event_audit_table.py +82 -0
- fides/api/alembic/migrations/versions/65a1bc82ae09_adds_experience_config_for_delete_.py +53 -0
- fides/api/alembic/migrations/versions/67d0e389b003_update_consentstatus_enum.py +47 -0
- fides/api/alembic/migrations/versions/795f46f656c0_migrate_field_type_from_enum_to_string.py +61 -0
- fides/api/alembic/migrations/versions/7db29f9cd77b_create_new_sub_request_table.py +95 -0
- fides/api/alembic/migrations/versions/918aefc950c9_create_digest_conditional_dependencies.py +125 -0
- fides/api/alembic/migrations/versions/9caf76161e55_make_user_assigned_data_uses_nullable_.py +64 -0
- fides/api/alembic/migrations/versions/9e0dcbf67b9f_add_digest_config.py +84 -0
- fides/api/alembic/migrations/versions/a55e12c2c2df_add_tagging_instructions_to_data_.py +29 -0
- fides/api/alembic/migrations/versions/a8e0c016afd_add_classification_benchmark_table.py +126 -0
- fides/api/alembic/migrations/versions/b97e92b038d2_add_digest_execution_model.py +117 -0
- fides/api/alembic/migrations/versions/b9bfa12c167b_add_not_applicable_to_asset_consentstatus.py +46 -0
- fides/api/alembic/migrations/versions/c09e76282dd1_add_privacy_request_duplication_cols.py +64 -0
- fides/api/alembic/migrations/versions/cd8649be3a2b_add_classifications_and_user_assigned_.py +74 -0
- fides/api/alembic/migrations/versions/e2cda8d6abc3_add_dismissed_in_activity_view_to_.py +29 -0
- fides/api/alembic/migrations/versions/f108fa05c579_adds_optional_duration_field_to_assets.py +28 -0
- fides/api/alembic/migrations/versions/f36ce1bde293_add_system_groups.py +132 -0
- fides/api/alembic/migrations/versions/fd7571bef683_adds_new_fields_to_messagingconfig_for_.py +31 -0
- fides/api/alembic/migrations/versions/xx_2025_10_17_1603_5093e92e2a5a_add_consent_data_v3_to_the_database.py +72 -0
- fides/api/alembic/migrations/versions/xx_2025_10_27_1834_67f0f2f4748e_adding_identity_definition_model.py +45 -0
- fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
- fides/api/alembic/migrations/versions/xx_2025_11_05_0200_f1a2b3c4d5e6_create_staged_resource_error_table.py +82 -0
- fides/api/alembic/migrations/versions/xx_2025_11_07_1709_56fe6fad2d89_add_notice_display_order.py +47 -0
- fides/api/alembic/migrations/versions/xx_2025_11_10_1200_a1b2c3d4e5f6_add_test_datastore_to_connectiontype.py +53 -0
- fides/api/alembic/migrations/versions/xx_2025_11_11_1317_7d82c8fc4c34_store_saas_template_datasets.py +68 -0
- fides/api/alembic/migrations/versions/xx_2025_11_12_1430_b2c3d4e5f6a7_add_default_identity_definitions.py +81 -0
- fides/api/alembic/migrations/versions/xx_2025_11_25_1854_3ff6449c099e_add_index_on_providedidentity_privacy_.py +50 -0
- fides/api/api/v1/api.py +2 -0
- fides/api/api/v1/endpoints/admin.py +39 -0
- fides/api/api/v1/endpoints/connection_endpoints.py +191 -47
- fides/api/api/v1/endpoints/connector_template_endpoints.py +167 -0
- fides/api/api/v1/endpoints/generic_overrides.py +90 -15
- fides/api/api/v1/endpoints/messaging_endpoints.py +164 -34
- fides/api/api/v1/endpoints/pre_approval_webhook_endpoints.py +5 -5
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +231 -46
- fides/api/api/v1/endpoints/saas_config_endpoints.py +63 -92
- fides/api/api/v1/endpoints/storage_endpoints.py +5 -1
- fides/api/api/v1/endpoints/system.py +157 -100
- fides/api/api/v1/endpoints/user_endpoints.py +17 -4
- fides/api/app_setup.py +1 -3
- fides/api/common_exceptions.py +8 -0
- fides/api/db/base.py +8 -0
- fides/api/db/crud.py +30 -2
- fides/api/db/database.py +261 -4
- fides/api/db/safe_crud.py +377 -0
- fides/api/db/seed.py +35 -1
- fides/api/email_templates/get_email_template.py +3 -0
- fides/api/email_templates/template_names.py +1 -0
- fides/api/email_templates/templates/external_user_welcome.html +9 -5
- fides/api/email_templates/templates/manual_task_digest.html +316 -0
- fides/api/main.py +2 -0
- fides/api/migrations/post_upgrade_index_creation.py +20 -0
- fides/api/models/asset.py +17 -1
- fides/api/models/attachment.py +1 -0
- fides/api/models/conditional_dependency/__init__.py +0 -0
- fides/api/models/conditional_dependency/conditional_dependency_base.py +311 -0
- fides/api/models/connection_oauth_credentials.py +57 -0
- fides/api/models/connectionconfig.py +11 -1
- fides/api/models/detection_discovery/__init__.py +4 -0
- fides/api/models/detection_discovery/classification_benchmark.py +140 -0
- fides/api/models/detection_discovery/core.py +78 -3
- fides/api/models/detection_discovery/monitor_task.py +3 -1
- fides/api/models/detection_discovery/staged_resource_error.py +25 -0
- fides/api/models/detection_discovery/web_monitor.py +61 -0
- fides/api/models/digest/__init__.py +16 -0
- fides/api/models/digest/conditional_dependencies.py +275 -0
- fides/api/models/digest/digest_config.py +110 -0
- fides/api/models/digest/digest_execution.py +142 -0
- fides/api/models/event_audit.py +85 -0
- fides/api/models/experience_notices.py +6 -1
- fides/api/models/fides_user.py +9 -0
- fides/api/models/identity_definition.py +66 -0
- fides/api/models/location_regulation_selections.py +22 -0
- fides/api/models/manual_task/conditional_dependency.py +29 -87
- fides/api/models/manual_webhook.py +17 -6
- fides/api/models/messaging.py +30 -10
- fides/api/models/messaging_template.py +14 -0
- fides/api/models/policy.py +27 -0
- fides/api/models/privacy_experience.py +41 -0
- fides/api/models/privacy_notice.py +196 -13
- fides/api/models/privacy_preference.py +2 -0
- fides/api/models/privacy_request/duplicate_group.py +84 -0
- fides/api/models/privacy_request/privacy_request.py +154 -8
- fides/api/models/privacy_request/provided_identity.py +22 -1
- fides/api/models/privacy_request/request_task.py +98 -1
- fides/api/models/privacy_request/webhook.py +3 -1
- fides/api/models/saas_template_dataset.py +63 -0
- fides/api/models/sql_models.py +161 -7
- fides/api/models/system_group.py +85 -0
- fides/api/models/taxonomy.py +91 -9
- fides/api/models/v3/__init__.py +0 -0
- fides/api/models/v3/privacy_preferences.py +85 -0
- fides/api/models/worker_task.py +8 -0
- fides/api/oauth/roles.py +4 -0
- fides/api/schemas/application_config.py +32 -1
- fides/api/schemas/connection_configuration/connection_config.py +1 -30
- fides/api/schemas/connection_configuration/connection_oauth_config.py +42 -0
- fides/api/schemas/connection_configuration/connection_secrets_mongodb.py +15 -3
- fides/api/schemas/connection_configuration/connection_secrets_mssql.py +5 -0
- fides/api/schemas/messaging/messaging.py +49 -66
- fides/api/schemas/messaging/messaging_secrets_docs_only.py +1 -1
- fides/api/schemas/messaging/shared_schemas.py +102 -0
- fides/api/schemas/oauth.py +2 -1
- fides/api/schemas/privacy_center_config.py +29 -5
- fides/api/schemas/privacy_request.py +44 -7
- fides/api/schemas/saas/async_polling_configuration.py +81 -0
- fides/api/schemas/saas/connector_template.py +14 -0
- fides/api/schemas/saas/saas_config.py +12 -20
- fides/api/schemas/system.py +8 -0
- fides/api/schemas/taxonomy_extensions.py +8 -0
- fides/api/schemas/user.py +2 -2
- fides/api/service/async_dsr/handlers/__init__.py +0 -0
- fides/api/service/async_dsr/handlers/polling_attachment_handler.py +155 -0
- fides/api/service/async_dsr/handlers/polling_request_handler.py +88 -0
- fides/api/service/async_dsr/handlers/polling_response_handler.py +261 -0
- fides/api/service/async_dsr/handlers/polling_sub_request_handler.py +123 -0
- fides/api/service/async_dsr/strategies/__init__.py +0 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy.py +52 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_callback.py +199 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_factory.py +72 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +691 -0
- fides/api/service/async_dsr/utils.py +130 -0
- fides/api/service/connectors/base_erasure_email_connector.py +7 -0
- fides/api/service/connectors/bigquery_connector.py +34 -16
- fides/api/service/connectors/fides/fides_client.py +63 -1
- fides/api/service/connectors/http_connector.py +48 -12
- fides/api/service/connectors/microsoft_sql_server_connector.py +6 -1
- fides/api/service/connectors/mongodb_connector.py +74 -9
- fides/api/service/connectors/query_configs/saas_query_config.py +160 -79
- fides/api/service/connectors/saas/connector_registry_service.py +42 -135
- fides/api/service/connectors/saas_connector.py +116 -76
- fides/api/service/connectors/sql_connector.py +14 -4
- fides/api/service/deps.py +25 -2
- fides/api/service/messaging/message_dispatch_service.py +98 -20
- fides/api/service/messaging/messaging_crud_service.py +5 -9
- fides/api/service/privacy_request/attachment_handling.py +9 -2
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +17 -9
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +41 -30
- fides/api/service/privacy_request/dsr_package/templates/clickme.html +68 -0
- fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +30 -27
- fides/api/service/privacy_request/duplication_detection.py +439 -0
- fides/api/service/privacy_request/email_batch_service.py +2 -1
- fides/api/service/privacy_request/request_runner_service.py +92 -91
- fides/api/service/privacy_request/request_service.py +74 -90
- fides/api/service/saas_request/saas_request_override_factory.py +71 -1
- fides/api/service/storage/streaming/schemas.py +27 -19
- fides/api/service/storage/streaming/smart_open_client.py +2 -2
- fides/api/service/storage/streaming/smart_open_streaming_storage.py +238 -147
- fides/api/service/storage/util.py +20 -106
- fides/api/service/strategy.py +6 -3
- fides/api/task/conditional_dependencies/privacy_request/__init__.py +0 -0
- fides/api/task/conditional_dependencies/privacy_request/convenience_fields.py +155 -0
- fides/api/task/conditional_dependencies/privacy_request/privacy_request_data.py +140 -0
- fides/api/task/conditional_dependencies/privacy_request/schemas.py +212 -0
- fides/api/task/conditional_dependencies/sql_schemas.py +301 -0
- fides/api/task/conditional_dependencies/sql_translator.py +757 -0
- fides/api/task/conditional_dependencies/util.py +111 -0
- fides/api/task/execute_request_tasks.py +34 -13
- fides/api/task/filter_results.py +35 -2
- fides/api/task/graph_runners.py +2 -32
- fides/api/task/graph_task.py +42 -12
- fides/api/task/manual/manual_task_conditional_evaluation.py +33 -28
- fides/api/task/manual/manual_task_graph_task.py +4 -1
- fides/api/task/manual/manual_task_utils.py +68 -26
- fides/api/task/scheduler_utils.py +39 -0
- fides/api/tasks/__init__.py +15 -1
- fides/api/util/cache.py +5 -1
- fides/api/util/connection_util.py +101 -218
- fides/api/util/event_audit_util.py +230 -0
- fides/api/util/filter_utils.py +0 -3
- fides/api/util/fuzzy_search_utils.py +7 -1
- fides/api/util/lock.py +13 -3
- fides/api/util/logger.py +58 -4
- fides/api/util/logger_context_utils.py +3 -1
- fides/api/util/masking_util.py +31 -0
- fides/api/util/memory_watchdog.py +118 -0
- fides/api/util/rate_limit.py +25 -7
- fides/api/util/saas_config_updater.py +76 -0
- fides/api/util/saas_util.py +28 -1
- fides/api/worker/__init__.py +6 -0
- fides/common/api/scope_registry.py +6 -7
- fides/common/api/v1/urn_registry.py +15 -3
- fides/config/__init__.py +11 -2
- fides/config/celery_settings.py +42 -0
- fides/config/config_proxy.py +10 -0
- fides/config/duplicate_detection_settings.py +31 -0
- fides/config/execution_settings.py +6 -6
- fides/config/security_settings.py +4 -1
- fides/config/utils.py +5 -0
- fides/data/language/languages.yml +2 -0
- fides/service/connection/__init__.py +0 -0
- fides/service/connection/connection_service.py +651 -0
- fides/service/dataset/dataset_service.py +39 -0
- fides/service/event_audit_service.py +109 -0
- fides/service/messaging/aws_ses_service.py +2 -4
- fides/service/messaging/messaging_service.py +75 -74
- fides/service/privacy_request/privacy_request_service.py +345 -100
- fides/service/system/__init__.py +0 -0
- fides/service/system/system_service.py +153 -0
- fides/service/taxonomy/handlers/legacy_handler.py +3 -3
- fides/service/taxonomy/taxonomy_service.py +64 -18
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-688fa865621531cc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1115-7fd171dac1eb0e51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1276.deb10ae2643f8463.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1438-8a33b3834d6e43f3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6148-59a59d5c5925344f.js → 1533-84e250d1f26e6d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1821-c1daa160f492aacf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1840-359ee056e4cf6629.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1975.78e719130cfe3fd6.js → 1975.bef017bc80e2012c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2040-70972e15960d9afe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2121.321b0fd3932164d4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2397-3434603a97f3f5d6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2921-49ed0ed897832958.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3150-da5406b80d25fe6d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3214-90ce0a366b0f461a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3377-02bf9780fd383d94.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3655-5e1ba5dd68b5ec48.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3729-31ff8ba51491bf21.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-cff30ca0844fe2b1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3931-8bedde156fe83564.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-582d9970d89deefe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4093-7e47408c28de5375.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4259.d1507e0db19cbed7.js → 4259.05038c9b78467244.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/431-e01ee730c8ad9ece.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4322-f6aeff6880726c83.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4339-04a715ab07122744.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4496-ccbce2459174e0d6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/454-d5c2c84f1a14e4f1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4589-c1d83c6a8dab4d30.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4809-a8f4a108a42f53ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4903-19c0bc07a956dfa8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4910-d990773601f794c1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5185-96423702fba70ced.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5258-4e308cca01d59367.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5487-5c3501754bf027ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/549-1bdc3e6f3264c020.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5505-43b9c39491b88e08.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5698.2135391a128cc373.js +164 -0
- fides/ui-build/static/admin/_next/static/chunks/5783-016dfcee8e49bf61.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5826-4db99ea4e5077911.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/590-be447cacf12419dd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6084-91badbc6569a0efb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6344-026cb323c1d49926.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6362-ba0e12f2fc4cad94.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6853-882889659769d7b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6882-bb1b469d7d7f5335.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-0dcf22a9aabe39c5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7170-46db82bb5b55e856.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7218-2ace8c82e3e7eb74.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7245-1cdafb35f289861b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7630-7f75ab7b8df42eb3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7654-2e9a8be02e41769a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8212-348ddd2b6933db70.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5596-bb601cbf40e47a0f.js → 9195-da717d324917b049.js} +3 -3
- fides/ui-build/static/admin/_next/static/chunks/9450-b7b7bb1d755ecf57.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9676.9fd9552ef744c717.js → 9676.1f395eeb9cc34968.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9826-1078e46f3ac0b688.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9911-ece086f2230e34f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-471a6b18e712f050.js → 404-800be6996aaa999c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-fcdad91f6f66292b.js → _app-de4b578c904df772.js} +57 -220
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-f12020b82dd4bd1a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-a911b7990371704d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-ad585b79953c2753.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-406170eaae4329c6.js → add-vendors-bb263d394ca1c8fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-6907c368d8611c44.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-f80cf2d3966816fd.js → [id]-c32f381af358149b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-e74cb5ea87f15b40.js → new-6efb3c069d8b47dd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-1975c529905eea9b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-b378576cba255609.js → [id]-b05331178928ab52.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2ca1de7b88094ab0.js → new-516834e930bb0d0d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-985717f2565f9d9d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-226efa1dcd41437f.js → properties-2be773e08498e40c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-850afb74f4192e87.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-b63d1e395d879b86.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-5b28f0f674ea87bd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-04cfe2cfba7b7cd8.js → [projectUrn]-676177e2f3c9c2a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-794906929efb8e1d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-3ccbf7c0d06507b9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-1ea0b24d306b1e67.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-d4861a4a218bb65a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore-4498881c26f1458d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure/[monitorId]-66bd265044daf97d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure-c9c79fa8576a4f77.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-60cacc3232c2eead.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-437bd64a3016de36.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website-5b3e0009d442bc3f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8349248c2da970a6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6919a1d6cadaa46b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-8f736b078e9842da.js → [resourceUrn]-1a50d421897d3da1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-eb814e3c22807871.js → detection-49509414a15e8393.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6875b7783fcfda2f.js → [resourceUrn]-1a1bb80b586d0c0f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-172dbd7740e212ca.js → discovery-49de61df1e8e7fba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c2719f5cff20c0f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-dfd71c1e9c458b89.js → [...subfieldNames]-415015aebab60436.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-7cdc42ec5493b83d.js → [collectionName]-5accb09715b5122d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-aebecca1d8ec5f98.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-9551a82ddec9f909.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-72f8fe47beef0f09.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-3a8aa3f633528e88.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-87512616f35ec6da.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-2f1bf4eac7aa55fd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-1f4335dca5c09860.js → fides-js-docs-5235760b3e508d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-8d67cd2872cb682a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-7a631df29cd0e31a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-ea3bc43cdaf273de.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-5d8632bba1b81cd4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/[id]-92e01822ecde8fb8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/new-1256cf6d3f6794e0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-0daac00911d27617.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/[key]-2d976fe5e8ba0a3a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/new-7766ba497b863740.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-f2880d2ed4734270.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/[id]-669f585c3458faff.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/add-template-c79e7724e4bc3899.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-891654e8dc13965c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications-40c8148244c5d347.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-1e86f3e28bd23ed6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-9b7bd8c38f02c091.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-b18a53a940cf9e19.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-6d028d7450e77578.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-8399083ee2cd8cc2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-0a910125cdb2b3b8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-acc90b6f7fe915cb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-bbc42026f2685438.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-c08ca6ad21c99799.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-77c2db582f8823bc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-e784c05d056b2371.js → [id]-74ccea4868408e3d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-0a7a2db148a7561a.js → add-property-7d9f09bfe9d44dfc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-da734840e4f9d04b.js → properties-cd77bc30672bb1fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-cc3bd9540132d5ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-7ce7d720107ab4b5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-68eaac2d79133679.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-6c4904c157477285.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-ae789892343c24f5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13ee1b331ced0846.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-ee4e43692336a330.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-ca51d794abfcbf25.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ecd1dc5db8e81409.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-df06f7e2f668c540.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-da0c77bd510c6c51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-950b0c115bf673d8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-2e635dcd11b78224.js → locations-7e36cb4756973a9d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a0e5ed486d24ccf3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-3cdebafb6870d3ad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-7c02e469d8c5bd74.js → regulations-159aad34f1021320.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-dbd1a64090ad0946.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-7d042497a57a3788.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-21f1172e73dfc9f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-e553161e6338ee48.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-92f52c43f522a350.js → new-efc4af017723e57a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-64452dfae2c5e614.js → [id]-b152319d67372ee4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dba8692491f7935e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/webpack-09ca52bc7beb0b43.js +1 -0
- fides/ui-build/static/admin/_next/static/css/012b10627a654d5c.css +1 -0
- fides/ui-build/static/admin/_next/static/css/05d05fc31d09638b.css +1 -0
- fides/ui-build/static/admin/_next/static/css/0fd6e0884cfcc5f3.css +1 -0
- fides/ui-build/static/admin/_next/static/css/14ba79c49597d37a.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{34a7eb08b86ddb57.css → 3d6582469f7d56e0.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/3d66bb57ddcb0978.css +1 -0
- fides/ui-build/static/admin/_next/static/css/4861ca3e088f2d05.css +1 -0
- fides/ui-build/static/admin/_next/static/css/a1800714b486e230.css +1 -0
- fides/ui-build/static/admin/_next/static/css/a1e4be9466578ef1.css +1 -0
- fides/ui-build/static/admin/_next/static/css/af32fcac7a177a0e.css +1 -0
- fides/ui-build/static/admin/_next/static/css/cb417f0587918f85.css +1 -0
- fides/ui-build/static/admin/_next/static/css/dd15c278b964de80.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{5f393dea1c0d031c.css → f89607996ad54f4b.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/f9a2a44d3d34c904.css +1 -0
- fides/ui-build/static/admin/_next/static/l2vgGUHB04Fi4oEVlVMrc/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/infrastructure/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/infrastructure.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- fides/ui-build/static/admin/lib/fides.js +3 -3
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/new-privacy-requests.html +1 -0
- fides/ui-build/static/admin/notifications/digests/[id].html +1 -0
- fides/ui-build/static/admin/notifications/digests/new.html +1 -0
- fides/ui-build/static/admin/notifications/digests.html +1 -0
- fides/ui-build/static/admin/notifications/providers/[key].html +1 -0
- fides/ui-build/static/admin/notifications/providers/new.html +1 -0
- fides/ui-build/static/admin/notifications/providers.html +1 -0
- fides/ui-build/static/admin/notifications/templates/[id].html +1 -0
- fides/ui-build/static/admin/notifications/templates/add-template.html +1 -0
- fides/ui-build/static/admin/notifications/templates.html +1 -0
- fides/ui-build/static/admin/notifications.html +1 -0
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/sandbox/privacy-notices.html +1 -0
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -0
- fides/ui-build/static/admin/settings/custom-fields/new.html +1 -0
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/api/service/async_dsr/async_dsr_service.py +0 -75
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +0 -66
- fides/ui-build/static/admin/_next/static/OmXHlY9MvjoZH9jDkAytl/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-79646e64f26d62fa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1345-5e1c5b66e25c566e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-0ca16d288fad916d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2150-930ffaf2c4718edc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/255-1bc0cbef7a59cdc6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-52328140bc420d0f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3550-d04125c828d591a1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3620-602eb74dc896d556.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3729-c17ac8031a4c4fd1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3847-230bf61b053bc706.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-ef5194cdb228beb6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-f78dec02f0d959ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3923-bb2417b8dcade7a4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-4af0a912e249d30f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4164-355644b916ae0094.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-86ad2beeb93c95c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4608-be8cba73f5d7c326.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4786-61154adf88e448e1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4808-dd4157aa72648068.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4831-fd99c0b3784de128.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4844-46324c3d848b8b6a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-b0de22a8521686ab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5487-02d00bad7c6830e0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/549-38ea1d91ee2addaa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6084-c153669d5567e242.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6419-d0c00d661b01f8fa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6853-b17673391117c976.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-5296188c19d7d0ac.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7476-45c5088baa8b66af.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-7ed6c6117775dffe.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/787-a8c7eab617e2fceb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-65674011d455af4d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-9e1ca1a4030707c5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8002-24af20d679efc04e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9046-712156d461165f56.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9729-fcf6ff4e3534e4a8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9826-dbae8dee941a7fac.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9951-a88367a129b724ba.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-ace203dfacacbdc4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-920fb469e0dda1d2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-bd0d82078e67cac3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-7207ab23bdb36ce8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-9dda4de5ec580279.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-0d4844d0b808e6e4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-28b192e2c074b0f3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-3e8bdefe714254ec.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-2c29ff7a01198f30.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-5f2d7b24804f861f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-8eb581024bc0172f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-30108b00ac769fc3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-e1ba213fb666b3f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-6d133580045abdda.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9a81d42a474e1e48.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-b6ae7adb8ef0b525.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c7390e046b2e2b7f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e12b11ba15bc3fc1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-e32fccc4ca520d2b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-7c59a6abf6ba6207.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-927b7e476c4b47d0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-cbe100d50df34285.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cce20440b177050b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-6cd8708106331b8d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4c3c413a2668df53.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-95402b5001c07ef2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-3c6dc2f6e6bae960.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-4a6d4023a7791be8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-76b204c9b98d656f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-bc0e2adf6e0d3ac7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-86ffcc1ad3fa912e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-ec04f595465bdf69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-41d309754ff0c1de.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-cab1f78cec7808f9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-eb6058221403b156.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-48500551fd6a7602.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-0f25a76dd18c5e20.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-ad6ad3e5bd72765d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-6032d82f0fc2893d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-d83e5bd52a638234.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-baf31c3e4b081046.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-6903f42a0412bfa6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-a82f3df840d5c1b5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-d06fb16487705b9d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-9495e2eb506606c7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-93a978443bf299db.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-9ecb803099082bf4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-16fdd91a81074dd1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-4cdd6001e7cb9aee.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-1914de830ce5cfc4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-f547f1f33c12faf3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-2ecc073f41628f62.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-20b1193ed76c56b0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-6e15332935f6b538.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-fbc8761ef4d55516.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-4d7827fc9c46b6b8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-9cec020f89544426.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-678e89d68dbcd94f.js +0 -1
- fides/ui-build/static/admin/_next/static/css/073713cd1eddda79.css +0 -1
- fides/ui-build/static/admin/_next/static/css/23cf870196941c9a.css +0 -1
- fides/ui-build/static/admin/_next/static/css/304c6f148886a8d4.css +0 -1
- fides/ui-build/static/admin/_next/static/css/650df9c348000a26.css +0 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +0 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +0 -1
- fides/ui-build/static/admin/messaging/[id].html +0 -1
- fides/ui-build/static/admin/messaging/add-template.html +0 -1
- fides/ui-build/static/admin/messaging.html +0 -1
- fides/ui-build/static/admin/poc/table-migration.html +0 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +0 -1
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-de704de849960f01.js → resources-81d1b50585468fb0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{OmXHlY9MvjoZH9jDkAytl → l2vgGUHB04Fi4oEVlVMrc}/_ssgManifest.js +0 -0
|
@@ -10,7 +10,7 @@ from fides.api.util.storage_util import format_size
|
|
|
10
10
|
|
|
11
11
|
# This is the max file size for downloading the content of an attachment.
|
|
12
12
|
# This is an industry standard used by companies like Google and Microsoft.
|
|
13
|
-
LARGE_FILE_THRESHOLD =
|
|
13
|
+
LARGE_FILE_THRESHOLD = 2 * 1024 * 1024 * 1024 # 2 GB
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class AllowedFileType(EnumType):
|
|
@@ -172,6 +172,7 @@ def generate_attachment_url_from_storage_path(
|
|
|
172
172
|
1. Using resolve_attachment_storage_path() to calculate the actual storage path
|
|
173
173
|
2. Handling different directory structures (attachments vs data/dataset/collection)
|
|
174
174
|
3. Generating proper relative paths from HTML template locations to attachment files
|
|
175
|
+
4. URL-encoding filenames for proper HTML link functionality
|
|
175
176
|
|
|
176
177
|
Used by:
|
|
177
178
|
- _process_attachment_list() in this file
|
|
@@ -191,17 +192,21 @@ def generate_attachment_url_from_storage_path(
|
|
|
191
192
|
# Calculate the actual storage path
|
|
192
193
|
storage_path = resolve_attachment_storage_path(unique_filename, base_path)
|
|
193
194
|
|
|
195
|
+
# URL-encode the filename for proper HTML link functionality
|
|
196
|
+
# Always encode when streaming is enabled to ensure consistency
|
|
197
|
+
encoded_filename = quote(unique_filename, safe="")
|
|
198
|
+
|
|
194
199
|
# Generate relative path from HTML template directory to storage path
|
|
195
200
|
if html_directory == "attachments" and base_path == "attachments":
|
|
196
201
|
# From attachments/index.html to attachments/filename.pdf (same directory)
|
|
197
|
-
return
|
|
202
|
+
return encoded_filename
|
|
198
203
|
if html_directory.startswith("data/") and base_path.startswith("data/"):
|
|
199
204
|
# From data/dataset/collection/index.html to data/dataset/collection/attachments/filename.pdf
|
|
200
205
|
# Both are in data/ structure, so go to attachments subdirectory
|
|
201
|
-
return f"attachments/{
|
|
206
|
+
return f"attachments/{encoded_filename}"
|
|
202
207
|
# For other cases, calculate relative path
|
|
203
208
|
# This is a simplified approach - in practice, you might need more sophisticated path resolution
|
|
204
|
-
return f"../{storage_path}"
|
|
209
|
+
return f"../{storage_path.replace(unique_filename, encoded_filename)}"
|
|
205
210
|
return download_url
|
|
206
211
|
|
|
207
212
|
|
|
@@ -539,31 +544,9 @@ def _process_attachment_list(
|
|
|
539
544
|
return processed_attachments_list
|
|
540
545
|
|
|
541
546
|
|
|
542
|
-
def
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
This function provides a consistent way to extract storage keys from
|
|
547
|
-
attachment dictionaries across different components.
|
|
548
|
-
|
|
549
|
-
Args:
|
|
550
|
-
attachment: The attachment dictionary
|
|
551
|
-
|
|
552
|
-
Returns:
|
|
553
|
-
The storage key (URL or filename) for the attachment
|
|
554
|
-
"""
|
|
555
|
-
if original_url := attachment.get("original_download_url"):
|
|
556
|
-
return original_url
|
|
557
|
-
|
|
558
|
-
if download_url := attachment.get("download_url"):
|
|
559
|
-
return download_url
|
|
560
|
-
|
|
561
|
-
file_name = attachment.get("file_name")
|
|
562
|
-
return file_name if file_name is not None else ""
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
def resolve_base_path_from_context(
|
|
566
|
-
attachment: dict[str, Any], default_base_path: str = "attachments"
|
|
547
|
+
def resolve_path_from_context(
|
|
548
|
+
attachment: dict[str, Any],
|
|
549
|
+
default_path: str = "attachments",
|
|
567
550
|
) -> str:
|
|
568
551
|
"""
|
|
569
552
|
Resolve the base path for an attachment based on its context.
|
|
@@ -573,93 +556,24 @@ def resolve_base_path_from_context(
|
|
|
573
556
|
|
|
574
557
|
Args:
|
|
575
558
|
attachment: The attachment dictionary
|
|
576
|
-
|
|
559
|
+
default_path: Default path if no context is found
|
|
577
560
|
|
|
578
561
|
Returns:
|
|
579
|
-
The resolved
|
|
562
|
+
The resolved path for the attachment
|
|
580
563
|
"""
|
|
581
564
|
if not attachment.get("_context"):
|
|
582
|
-
return
|
|
565
|
+
return default_path
|
|
583
566
|
|
|
584
567
|
context = attachment["_context"]
|
|
585
568
|
context_type = context.get("type")
|
|
586
569
|
|
|
587
|
-
if context_type
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
return f"data/{
|
|
570
|
+
if context_type in ["direct", "nested"]:
|
|
571
|
+
dataset = context.get("dataset", "")
|
|
572
|
+
collection = context.get("collection", "")
|
|
573
|
+
return f"data/{dataset}/{collection}/attachments"
|
|
591
574
|
if context_type == "top_level":
|
|
592
575
|
return "attachments"
|
|
593
|
-
# Handle old context format
|
|
594
576
|
if context.get("key") and context.get("item_id"):
|
|
595
577
|
return f"{context['key']}/{context['item_id']}/attachments"
|
|
596
|
-
# Fallback for unknown context types
|
|
597
|
-
return "unknown/unknown/attachments"
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
def resolve_directory_from_context(
|
|
601
|
-
attachment: dict[str, Any], default_directory: str = "attachments"
|
|
602
|
-
) -> str:
|
|
603
|
-
"""
|
|
604
|
-
Resolve the directory path for an attachment based on its context.
|
|
605
|
-
|
|
606
|
-
This function provides consistent directory resolution logic for DSR report builder.
|
|
607
|
-
|
|
608
|
-
Args:
|
|
609
|
-
attachment: The attachment dictionary
|
|
610
|
-
default_directory: Default directory if no context is found
|
|
611
|
-
|
|
612
|
-
Returns:
|
|
613
|
-
The resolved directory path for the attachment
|
|
614
|
-
"""
|
|
615
|
-
if not attachment.get("_context"):
|
|
616
|
-
return default_directory
|
|
617
|
-
|
|
618
|
-
context = attachment["_context"]
|
|
619
|
-
context_type = context.get("type")
|
|
620
|
-
|
|
621
|
-
if context_type == "direct":
|
|
622
|
-
return f"data/{context['dataset']}/{context['collection']}"
|
|
623
|
-
if context_type == "nested":
|
|
624
|
-
return f"data/{context['dataset']}/{context['collection']}"
|
|
625
|
-
if context_type == "top_level":
|
|
626
|
-
return "attachments"
|
|
627
|
-
if context.get("key") and context.get("item_id"):
|
|
628
|
-
return f"{context['key']}/{context['item_id']}"
|
|
629
|
-
|
|
630
|
-
return default_directory
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
def convert_processed_attachments_to_attachment_processing_info(
|
|
634
|
-
processed_attachments_list: list[dict[str, Any]], validate_attachment_func: Callable
|
|
635
|
-
) -> list[Any]:
|
|
636
|
-
"""
|
|
637
|
-
Convert processed attachments list to AttachmentProcessingInfo objects.
|
|
638
|
-
|
|
639
|
-
This is a shared utility function to avoid duplication between different
|
|
640
|
-
attachment collection methods.
|
|
641
|
-
|
|
642
|
-
Args:
|
|
643
|
-
processed_attachments_list: List of processed attachment dictionaries
|
|
644
|
-
validate_attachment_func: Function to validate individual attachments
|
|
645
|
-
Signature: validate_attachment_func(attachment_with_context) -> AttachmentProcessingInfo | None
|
|
646
|
-
|
|
647
|
-
Returns:
|
|
648
|
-
List of validated AttachmentProcessingInfo objects
|
|
649
|
-
"""
|
|
650
|
-
validated_attachments = []
|
|
651
|
-
|
|
652
|
-
for processed_attachment in processed_attachments_list:
|
|
653
|
-
attachment_data = processed_attachment["attachment"]
|
|
654
|
-
|
|
655
|
-
# Add context information to the attachment data
|
|
656
|
-
attachment_with_context = attachment_data.copy()
|
|
657
|
-
attachment_with_context["_context"] = processed_attachment["context"]
|
|
658
|
-
|
|
659
|
-
# Validate and convert to AttachmentProcessingInfo
|
|
660
|
-
if validate_attachment_func is not None:
|
|
661
|
-
validated = validate_attachment_func(attachment_with_context)
|
|
662
|
-
if validated:
|
|
663
|
-
validated_attachments.append(validated)
|
|
664
578
|
|
|
665
|
-
return
|
|
579
|
+
return default_path
|
fides/api/service/strategy.py
CHANGED
|
@@ -41,13 +41,13 @@ class Strategy(ABC, Generic[C]):
|
|
|
41
41
|
"""Abstract base class for strategies"""
|
|
42
42
|
|
|
43
43
|
name: str
|
|
44
|
-
configuration_model: Type[C]
|
|
44
|
+
configuration_model: Optional[Type[C]] = None
|
|
45
45
|
|
|
46
46
|
@classmethod
|
|
47
47
|
def get_strategy(
|
|
48
48
|
cls: Type[T],
|
|
49
49
|
strategy_name: str,
|
|
50
|
-
configuration: Dict[str, Any],
|
|
50
|
+
configuration: Optional[Dict[str, Any]] = None,
|
|
51
51
|
) -> T:
|
|
52
52
|
"""
|
|
53
53
|
Returns the strategy given the name and configuration.
|
|
@@ -64,7 +64,10 @@ class Strategy(ABC, Generic[C]):
|
|
|
64
64
|
f"Strategy '{strategy_name}' does not exist. Valid strategies are [{valid_strategies}]"
|
|
65
65
|
)
|
|
66
66
|
try:
|
|
67
|
-
|
|
67
|
+
if strategy_class.configuration_model:
|
|
68
|
+
strategy_config = strategy_class.configuration_model(**configuration)
|
|
69
|
+
else:
|
|
70
|
+
return strategy_class() # type: ignore
|
|
68
71
|
except ValidationError as e:
|
|
69
72
|
raise FidesopsValidationError(message=str(e))
|
|
70
73
|
return strategy_class(strategy_config) # type: ignore
|
|
File without changes
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
|
|
3
|
+
from fides.api.models.location_regulation_selections import get_location_by_id
|
|
4
|
+
from fides.api.models.policy import Policy
|
|
5
|
+
from fides.api.schemas.policy import ActionType
|
|
6
|
+
from fides.api.task.conditional_dependencies.privacy_request.schemas import (
|
|
7
|
+
ConditionalDependencyFieldInfo,
|
|
8
|
+
ConditionalDependencyFieldType,
|
|
9
|
+
PrivacyRequestConvenienceFields,
|
|
10
|
+
PrivacyRequestLocationConvenienceFields,
|
|
11
|
+
PrivacyRequestPolicyConvenienceFields,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def build_convenience_field_list() -> list[ConditionalDependencyFieldInfo]:
|
|
16
|
+
"""Builds a list of ConditionalDependencyFieldInfo objects for convenience fields."""
|
|
17
|
+
return [
|
|
18
|
+
# Policy convenience fields
|
|
19
|
+
ConditionalDependencyFieldInfo(
|
|
20
|
+
field_path=PrivacyRequestConvenienceFields.rule_action_types.value,
|
|
21
|
+
field_type=ConditionalDependencyFieldType.array,
|
|
22
|
+
description="List of action types from policy rules (e.g., ['access', 'erasure']). Use with list_contains operator.",
|
|
23
|
+
is_convenience_field=True,
|
|
24
|
+
),
|
|
25
|
+
ConditionalDependencyFieldInfo(
|
|
26
|
+
field_path=PrivacyRequestConvenienceFields.has_access_rule.value,
|
|
27
|
+
field_type=ConditionalDependencyFieldType.boolean,
|
|
28
|
+
description="Whether the policy has at least one rule with action_type 'access'.",
|
|
29
|
+
is_convenience_field=True,
|
|
30
|
+
),
|
|
31
|
+
ConditionalDependencyFieldInfo(
|
|
32
|
+
field_path=PrivacyRequestConvenienceFields.has_erasure_rule.value,
|
|
33
|
+
field_type=ConditionalDependencyFieldType.boolean,
|
|
34
|
+
description="Whether the policy has at least one rule with action_type 'erasure'.",
|
|
35
|
+
is_convenience_field=True,
|
|
36
|
+
),
|
|
37
|
+
ConditionalDependencyFieldInfo(
|
|
38
|
+
field_path=PrivacyRequestConvenienceFields.has_consent_rule.value,
|
|
39
|
+
field_type=ConditionalDependencyFieldType.boolean,
|
|
40
|
+
description="Whether the policy has at least one rule with action_type 'consent'.",
|
|
41
|
+
is_convenience_field=True,
|
|
42
|
+
),
|
|
43
|
+
ConditionalDependencyFieldInfo(
|
|
44
|
+
field_path=PrivacyRequestConvenienceFields.has_update_rule.value,
|
|
45
|
+
field_type=ConditionalDependencyFieldType.boolean,
|
|
46
|
+
description="Whether the policy has at least one rule with action_type 'update'.",
|
|
47
|
+
is_convenience_field=True,
|
|
48
|
+
),
|
|
49
|
+
ConditionalDependencyFieldInfo(
|
|
50
|
+
field_path=PrivacyRequestConvenienceFields.rule_count.value,
|
|
51
|
+
field_type=ConditionalDependencyFieldType.integer,
|
|
52
|
+
description="Number of rules in the policy.",
|
|
53
|
+
is_convenience_field=True,
|
|
54
|
+
),
|
|
55
|
+
ConditionalDependencyFieldInfo(
|
|
56
|
+
field_path=PrivacyRequestConvenienceFields.rule_names.value,
|
|
57
|
+
field_type=ConditionalDependencyFieldType.array,
|
|
58
|
+
description="List of rule names from the policy. Use with list_contains operator.",
|
|
59
|
+
is_convenience_field=True,
|
|
60
|
+
),
|
|
61
|
+
ConditionalDependencyFieldInfo(
|
|
62
|
+
field_path=PrivacyRequestConvenienceFields.has_storage_destination.value,
|
|
63
|
+
field_type=ConditionalDependencyFieldType.boolean,
|
|
64
|
+
description="Whether any rule in the policy has a storage destination configured.",
|
|
65
|
+
is_convenience_field=True,
|
|
66
|
+
),
|
|
67
|
+
# Location hierarchy convenience fields
|
|
68
|
+
ConditionalDependencyFieldInfo(
|
|
69
|
+
field_path=PrivacyRequestConvenienceFields.location_country.value,
|
|
70
|
+
field_type=ConditionalDependencyFieldType.string,
|
|
71
|
+
description="The country code for the location (e.g., 'us' for 'us_ca', 'fr' for France). Use with eq operator to check if a location is in a specific country.",
|
|
72
|
+
is_convenience_field=True,
|
|
73
|
+
),
|
|
74
|
+
ConditionalDependencyFieldInfo(
|
|
75
|
+
field_path=PrivacyRequestConvenienceFields.location_groups.value,
|
|
76
|
+
field_type=ConditionalDependencyFieldType.array,
|
|
77
|
+
description="List of location groups this location belongs to (e.g., ['us'] for US states, ['eea'] for EU countries). Use with list_contains operator.",
|
|
78
|
+
is_convenience_field=True,
|
|
79
|
+
),
|
|
80
|
+
ConditionalDependencyFieldInfo(
|
|
81
|
+
field_path=PrivacyRequestConvenienceFields.location_regulations.value,
|
|
82
|
+
field_type=ConditionalDependencyFieldType.array,
|
|
83
|
+
description="List of regulations applicable to this location (e.g., ['ccpa'] for California, ['gdpr'] for EU). Use with list_contains operator.",
|
|
84
|
+
is_convenience_field=True,
|
|
85
|
+
),
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def get_policy_convenience_fields(
|
|
90
|
+
policy: Policy,
|
|
91
|
+
) -> dict[str, Any]:
|
|
92
|
+
"""Gets convenience fields for a policy."""
|
|
93
|
+
extra_fields: dict[str, Any] = {}
|
|
94
|
+
extra_fields["id"] = policy.id
|
|
95
|
+
|
|
96
|
+
# Get rules for convenience field derivation
|
|
97
|
+
rules = policy.rules if hasattr(policy, "rules") and policy.rules else []
|
|
98
|
+
action_types = policy.get_all_action_types()
|
|
99
|
+
|
|
100
|
+
# Add convenience fields for rules
|
|
101
|
+
extra_fields[PrivacyRequestPolicyConvenienceFields.rule_action_types.value] = [
|
|
102
|
+
action_type.value for action_type in action_types if action_type
|
|
103
|
+
]
|
|
104
|
+
for action_type in ActionType:
|
|
105
|
+
extra_fields[f"has_{action_type.value}_rule"] = action_type in action_types
|
|
106
|
+
extra_fields[PrivacyRequestPolicyConvenienceFields.rule_count.value] = (
|
|
107
|
+
len(rules) if rules else 0
|
|
108
|
+
)
|
|
109
|
+
extra_fields[PrivacyRequestPolicyConvenienceFields.rule_names.value] = [
|
|
110
|
+
rule.name for rule in rules if hasattr(rule, "name") and rule.name
|
|
111
|
+
]
|
|
112
|
+
extra_fields[
|
|
113
|
+
PrivacyRequestPolicyConvenienceFields.has_storage_destination.value
|
|
114
|
+
] = any(
|
|
115
|
+
hasattr(rule, "storage_destination") and rule.storage_destination is not None
|
|
116
|
+
for rule in rules
|
|
117
|
+
)
|
|
118
|
+
return extra_fields
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def get_location_convenience_fields(location: Optional[str]) -> dict[str, Any]:
|
|
122
|
+
"""Gets convenience fields for a location to support hierarchy-based conditions."""
|
|
123
|
+
extra_fields: dict[str, Any] = {
|
|
124
|
+
PrivacyRequestLocationConvenienceFields.location_country.value: None,
|
|
125
|
+
PrivacyRequestLocationConvenienceFields.location_groups.value: [],
|
|
126
|
+
PrivacyRequestLocationConvenienceFields.location_regulations.value: [],
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if not location:
|
|
130
|
+
return extra_fields
|
|
131
|
+
|
|
132
|
+
location_data = get_location_by_id(location)
|
|
133
|
+
if not location_data:
|
|
134
|
+
return extra_fields
|
|
135
|
+
|
|
136
|
+
# If location has parent groups, the first one is typically the country
|
|
137
|
+
# (e.g., us_ca belongs to [us])
|
|
138
|
+
belongs_to = location_data.belongs_to or []
|
|
139
|
+
extra_fields[PrivacyRequestLocationConvenienceFields.location_groups.value] = (
|
|
140
|
+
belongs_to
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
# Set location_country to the first parent if the location is a subdivision
|
|
144
|
+
# This helps with conditions like "is this a US state?"
|
|
145
|
+
if belongs_to and not location_data.is_country:
|
|
146
|
+
extra_fields[PrivacyRequestLocationConvenienceFields.location_country.value] = (
|
|
147
|
+
belongs_to[0]
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
# Add regulations applicable to this location
|
|
151
|
+
extra_fields[PrivacyRequestLocationConvenienceFields.location_regulations.value] = (
|
|
152
|
+
location_data.regulation or []
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
return extra_fields
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic.v1.utils import deep_update
|
|
4
|
+
|
|
5
|
+
from fides.api.models.policy import Policy
|
|
6
|
+
from fides.api.models.privacy_request import PrivacyRequest
|
|
7
|
+
from fides.api.schemas.policy import Policy as PolicySchema
|
|
8
|
+
from fides.api.task.conditional_dependencies.privacy_request.convenience_fields import (
|
|
9
|
+
get_location_convenience_fields,
|
|
10
|
+
get_policy_convenience_fields,
|
|
11
|
+
)
|
|
12
|
+
from fides.api.task.conditional_dependencies.privacy_request.schemas import (
|
|
13
|
+
PrivacyRequestLocationConvenienceFields,
|
|
14
|
+
)
|
|
15
|
+
from fides.api.task.conditional_dependencies.util import (
|
|
16
|
+
extract_nested_field_value,
|
|
17
|
+
set_nested_value,
|
|
18
|
+
transform_value_for_evaluation,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class PrivacyRequestDataTransformer:
|
|
23
|
+
"""
|
|
24
|
+
Transforms a PrivacyRequest ORM object into a dictionary structure for condition evaluation.
|
|
25
|
+
|
|
26
|
+
- This class extracts the fields referenced in conditions and builds a minimal nested structure
|
|
27
|
+
for evaluation. Privacy request fields must be prefixed with the "privacy_request" namespace.
|
|
28
|
+
- This class is used to get the privacy request data for condition evaluation.
|
|
29
|
+
- The task.conditional_dependencies.evaluator expects the data to be in a nested dictionary structure
|
|
30
|
+
and uses the operators defined in the task.conditional_dependencies.operators.py which have defined
|
|
31
|
+
data type compatibility.
|
|
32
|
+
|
|
33
|
+
Note: Privacy request relationships are eager loaded in the execute_request_tasks.py file.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self, privacy_request: PrivacyRequest):
|
|
37
|
+
self.privacy_request = privacy_request
|
|
38
|
+
self.policy_data = self._transform_policy_object(privacy_request.policy)
|
|
39
|
+
self.identity_data = self.privacy_request.get_persisted_identity()
|
|
40
|
+
self.custom_privacy_request_fields_data = (
|
|
41
|
+
self.privacy_request.get_persisted_custom_privacy_request_fields()
|
|
42
|
+
)
|
|
43
|
+
self.location_convenience_fields = get_location_convenience_fields(
|
|
44
|
+
privacy_request.location
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def to_evaluation_data(self, field_addresses: set[str]) -> dict[str, Any]:
|
|
48
|
+
"""
|
|
49
|
+
Transforms the PrivacyRequest into an evaluation-ready dictionary structure.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
field_addresses: Set of field addresses referenced in conditions
|
|
53
|
+
"""
|
|
54
|
+
if not field_addresses:
|
|
55
|
+
return {}
|
|
56
|
+
|
|
57
|
+
result: dict[str, Any] = {"privacy_request": {}}
|
|
58
|
+
field_paths: set[str] = {addr.replace(":", ".") for addr in field_addresses}
|
|
59
|
+
|
|
60
|
+
# Extract each field dynamically based on its path
|
|
61
|
+
for field_path in field_paths:
|
|
62
|
+
value = self._extract_value_by_path(field_path)
|
|
63
|
+
privacy_request_data: Optional[dict[str, Any]] = set_nested_value(
|
|
64
|
+
field_path.split("."), value
|
|
65
|
+
)
|
|
66
|
+
if privacy_request_data:
|
|
67
|
+
result = deep_update(result, privacy_request_data)
|
|
68
|
+
|
|
69
|
+
return result
|
|
70
|
+
|
|
71
|
+
def _extract_value_by_path(self, field_address: str) -> Any:
|
|
72
|
+
"""
|
|
73
|
+
Extracts a value from PrivacyRequest by following the field address path.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
field_address: The field address path (e.g., "privacy_request.location", "privacy_request.policy.rules")
|
|
77
|
+
|
|
78
|
+
"""
|
|
79
|
+
# first part will always be privacy_request
|
|
80
|
+
parts: list[str] = field_address.split(".")[1:]
|
|
81
|
+
current: Any = self.privacy_request
|
|
82
|
+
is_labeled_field = False
|
|
83
|
+
|
|
84
|
+
# Handle location convenience fields - these are derived fields, not direct attributes
|
|
85
|
+
# Check if we're accessing a location convenience field before trying to extract from privacy_request
|
|
86
|
+
|
|
87
|
+
if len(parts) == 1 and parts[0] in [
|
|
88
|
+
e.value for e in PrivacyRequestLocationConvenienceFields
|
|
89
|
+
]:
|
|
90
|
+
return self.location_convenience_fields.get(parts[0])
|
|
91
|
+
|
|
92
|
+
# Route to the appropriate data source based on the first path component
|
|
93
|
+
if parts[0] == "policy":
|
|
94
|
+
current = self.policy_data
|
|
95
|
+
parts.pop(0)
|
|
96
|
+
elif parts[0] == "identity":
|
|
97
|
+
current = self.identity_data
|
|
98
|
+
# Identity fields may contain LabeledIdentity objects with label/value structure
|
|
99
|
+
is_labeled_field = True
|
|
100
|
+
parts.pop(0)
|
|
101
|
+
elif parts[0] == "custom_privacy_request_fields":
|
|
102
|
+
current = self.custom_privacy_request_fields_data
|
|
103
|
+
# Custom fields are stored as {"label": ..., "value": ...} dicts
|
|
104
|
+
is_labeled_field = True
|
|
105
|
+
parts.pop(0)
|
|
106
|
+
|
|
107
|
+
current = extract_nested_field_value(current, parts)
|
|
108
|
+
|
|
109
|
+
# If we started with an Identity object and didn't extract any field from it
|
|
110
|
+
# (current is still the identity object), return None
|
|
111
|
+
# Otherwise, transform the value (which could be a BaseModel like LabeledIdentity)
|
|
112
|
+
if current is self.identity_data:
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
# Transform the value first (converts LabeledIdentity to dict, handles other types)
|
|
116
|
+
current = transform_value_for_evaluation(current)
|
|
117
|
+
|
|
118
|
+
# For labeled fields (custom privacy request fields and identity fields with labels),
|
|
119
|
+
# extract just the value from the {"label": ..., "value": ...} structure
|
|
120
|
+
if is_labeled_field and isinstance(current, dict) and "value" in current:
|
|
121
|
+
current = current["value"]
|
|
122
|
+
|
|
123
|
+
return current
|
|
124
|
+
|
|
125
|
+
def _transform_policy_object(self, policy: Policy) -> dict[str, Any]:
|
|
126
|
+
"""
|
|
127
|
+
Transforms a Policy ORM object to a dictionary using existing Pydantic schema
|
|
128
|
+
and adds convenience fields.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
policy: The Policy ORM object
|
|
132
|
+
"""
|
|
133
|
+
if not policy:
|
|
134
|
+
return {}
|
|
135
|
+
extra_fields = get_policy_convenience_fields(policy)
|
|
136
|
+
|
|
137
|
+
# Convert Policy ORM object to dictionary using Pydantic schema
|
|
138
|
+
policy_dict = PolicySchema.model_validate(policy).model_dump()
|
|
139
|
+
policy_dict.update(extra_fields)
|
|
140
|
+
return policy_dict
|