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
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import Any
|
|
3
|
+
from uuid import UUID
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# pylint: disable=too-many-return-statements
|
|
9
|
+
def transform_value_for_evaluation(value: Any) -> Any:
|
|
10
|
+
"""
|
|
11
|
+
Transforms a value to its evaluation-ready form.
|
|
12
|
+
|
|
13
|
+
Handles various data types defensively to ensure compatibility with
|
|
14
|
+
the operators defined in task.conditional_dependencies.operators.py
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
value: The value to transform
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
The transformed value compatible with evaluation operators
|
|
21
|
+
"""
|
|
22
|
+
if value is None:
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
# Handle Pydantic models first (before checking for other attributes)
|
|
26
|
+
if isinstance(value, BaseModel):
|
|
27
|
+
return value.model_dump(mode="json")
|
|
28
|
+
|
|
29
|
+
# Handle enums (must come before other checks as enums might have other attributes)
|
|
30
|
+
if hasattr(value, "value") and not isinstance(value, BaseModel):
|
|
31
|
+
return value.value
|
|
32
|
+
|
|
33
|
+
# Handle date/time types
|
|
34
|
+
if isinstance(value, datetime):
|
|
35
|
+
return value.isoformat()
|
|
36
|
+
|
|
37
|
+
# Handle UUIDs
|
|
38
|
+
if isinstance(value, UUID):
|
|
39
|
+
return str(value)
|
|
40
|
+
|
|
41
|
+
# Handle bytes types - convert to strings for string operators
|
|
42
|
+
if isinstance(value, (bytes, bytearray)):
|
|
43
|
+
try:
|
|
44
|
+
return value.decode("utf-8")
|
|
45
|
+
except UnicodeDecodeError:
|
|
46
|
+
# If decode fails, use repr for a string representation
|
|
47
|
+
return repr(value)
|
|
48
|
+
|
|
49
|
+
# Handle complex numbers - convert to string as they can't be compared with < > etc
|
|
50
|
+
if isinstance(value, complex):
|
|
51
|
+
return str(value)
|
|
52
|
+
|
|
53
|
+
# Handle set/frozenset/tuple - convert to lists for list operators
|
|
54
|
+
# (operators.py list operations check isinstance(x, list))
|
|
55
|
+
if isinstance(value, (set, frozenset, tuple)):
|
|
56
|
+
return list(value)
|
|
57
|
+
|
|
58
|
+
# Return value as-is if no transformation needed
|
|
59
|
+
return value
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def extract_nested_field_value(data: Any, field_path: list[str]) -> Any:
|
|
63
|
+
"""
|
|
64
|
+
Extracts a value from a dictionary by following the path.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
data: The dictionary to extract from
|
|
68
|
+
field_path: The path to extract the value from
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
The extracted value
|
|
72
|
+
"""
|
|
73
|
+
current: Any = data
|
|
74
|
+
for part in field_path:
|
|
75
|
+
if current is None:
|
|
76
|
+
return None
|
|
77
|
+
if hasattr(current, part):
|
|
78
|
+
current = getattr(current, part)
|
|
79
|
+
elif isinstance(current, list) and part.isdigit():
|
|
80
|
+
if 0 <= int(part) < len(current):
|
|
81
|
+
current = current[int(part)]
|
|
82
|
+
else:
|
|
83
|
+
return None
|
|
84
|
+
elif isinstance(current, dict) and part in current:
|
|
85
|
+
current = current[part]
|
|
86
|
+
else:
|
|
87
|
+
# If we can't find the part, return None
|
|
88
|
+
return None
|
|
89
|
+
return current
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def set_nested_value(path: list[str], value: Any) -> dict[str, Any]:
|
|
93
|
+
"""
|
|
94
|
+
Returns a dictionary with a nested value set at the path.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
path: List of keys to traverse (e.g., ["policy", "key"])
|
|
98
|
+
value: The value to set at the end of the path
|
|
99
|
+
"""
|
|
100
|
+
result: dict[str, Any] = {}
|
|
101
|
+
final_key = path[-1]
|
|
102
|
+
current = result
|
|
103
|
+
|
|
104
|
+
for key in path[:-1]:
|
|
105
|
+
if key not in current:
|
|
106
|
+
current[key] = {}
|
|
107
|
+
current = current[key]
|
|
108
|
+
|
|
109
|
+
# Set the final value
|
|
110
|
+
current[final_key] = value
|
|
111
|
+
return result
|
|
@@ -3,7 +3,7 @@ from typing import Callable, List, Optional, Tuple
|
|
|
3
3
|
from celery.app.task import Task
|
|
4
4
|
from loguru import logger
|
|
5
5
|
from sqlalchemy.exc import OperationalError
|
|
6
|
-
from sqlalchemy.orm import Query, Session
|
|
6
|
+
from sqlalchemy.orm import Query, Session, selectinload
|
|
7
7
|
from tenacity import (
|
|
8
8
|
RetryCallState,
|
|
9
9
|
retry,
|
|
@@ -21,8 +21,12 @@ from fides.api.common_exceptions import (
|
|
|
21
21
|
)
|
|
22
22
|
from fides.api.graph.config import TERMINATOR_ADDRESS, CollectionAddress
|
|
23
23
|
from fides.api.models.connectionconfig import ConnectionConfig
|
|
24
|
+
from fides.api.models.policy import Policy
|
|
24
25
|
from fides.api.models.privacy_request import ExecutionLog, PrivacyRequest, RequestTask
|
|
25
|
-
from fides.api.models.worker_task import
|
|
26
|
+
from fides.api.models.worker_task import (
|
|
27
|
+
RESUMABLE_EXECUTION_LOG_STATUSES,
|
|
28
|
+
ExecutionLogStatus,
|
|
29
|
+
)
|
|
26
30
|
from fides.api.schemas.policy import ActionType, CurrentStep
|
|
27
31
|
from fides.api.schemas.privacy_request import PrivacyRequestStatus
|
|
28
32
|
from fides.api.task.graph_task import (
|
|
@@ -45,11 +49,23 @@ def get_privacy_request_and_task(
|
|
|
45
49
|
session: Session, privacy_request_id: str, privacy_request_task_id: str
|
|
46
50
|
) -> Tuple[PrivacyRequest, RequestTask]:
|
|
47
51
|
"""
|
|
48
|
-
Retrieves and validates a privacy request and its associated task
|
|
52
|
+
Retrieves and validates a privacy request and its associated task.
|
|
53
|
+
Eager loads policy.rules to avoid N+1 queries during manual task execution.
|
|
49
54
|
"""
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
# Eager load relationships to avoid N+1 queries during manual task execution:
|
|
57
|
+
# - policy.rules: accessed by get_policy_convenience_fields()
|
|
58
|
+
# - provided_identities: accessed by get_persisted_identity()
|
|
59
|
+
# - custom_fields: accessed by get_persisted_custom_privacy_request_fields()
|
|
60
|
+
privacy_request: Optional[PrivacyRequest] = (
|
|
61
|
+
session.query(PrivacyRequest)
|
|
62
|
+
.options(
|
|
63
|
+
selectinload(PrivacyRequest.policy).selectinload(Policy.rules), # type: ignore[attr-defined]
|
|
64
|
+
selectinload(PrivacyRequest.provided_identities), # type: ignore[attr-defined]
|
|
65
|
+
selectinload(PrivacyRequest.custom_fields), # type: ignore[attr-defined]
|
|
66
|
+
)
|
|
67
|
+
.filter(PrivacyRequest.id == privacy_request_id)
|
|
68
|
+
.first()
|
|
53
69
|
)
|
|
54
70
|
request_task: Optional[RequestTask] = RequestTask.get(
|
|
55
71
|
db=session, object_id=privacy_request_task_id
|
|
@@ -162,7 +178,7 @@ def can_run_task_body(
|
|
|
162
178
|
if request_task.is_root_task:
|
|
163
179
|
# Shouldn't be possible but adding as a catch-all
|
|
164
180
|
return False
|
|
165
|
-
if request_task.status
|
|
181
|
+
if request_task.status not in RESUMABLE_EXECUTION_LOG_STATUSES:
|
|
166
182
|
logger_method(request_task)(
|
|
167
183
|
"Skipping {} task {} with status {}.",
|
|
168
184
|
request_task.action_type,
|
|
@@ -274,15 +290,18 @@ def run_access_node(
|
|
|
274
290
|
|
|
275
291
|
try:
|
|
276
292
|
with self.get_new_session() as session:
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
293
|
+
(
|
|
294
|
+
privacy_request,
|
|
295
|
+
request_task,
|
|
296
|
+
upstream_results,
|
|
297
|
+
) = run_prerequisite_task_checks(
|
|
298
|
+
session, privacy_request_id, privacy_request_task_id
|
|
281
299
|
)
|
|
282
300
|
with logger.contextualize(
|
|
283
301
|
privacy_request_source=(
|
|
284
302
|
privacy_request.source.value if privacy_request.source else None
|
|
285
|
-
)
|
|
303
|
+
),
|
|
304
|
+
collection=request_task.collection_address,
|
|
286
305
|
):
|
|
287
306
|
log_task_starting(request_task)
|
|
288
307
|
|
|
@@ -343,7 +362,8 @@ def run_erasure_node(
|
|
|
343
362
|
with logger.contextualize(
|
|
344
363
|
privacy_request_source=(
|
|
345
364
|
privacy_request.source.value if privacy_request.source else None
|
|
346
|
-
)
|
|
365
|
+
),
|
|
366
|
+
collection=request_task.collection_address,
|
|
347
367
|
):
|
|
348
368
|
log_task_starting(request_task)
|
|
349
369
|
|
|
@@ -416,7 +436,8 @@ def run_consent_node(
|
|
|
416
436
|
with logger.contextualize(
|
|
417
437
|
privacy_request_source=(
|
|
418
438
|
privacy_request.source.value if privacy_request.source else None
|
|
419
|
-
)
|
|
439
|
+
),
|
|
440
|
+
collection=request_task.collection_address,
|
|
420
441
|
):
|
|
421
442
|
log_task_starting(request_task)
|
|
422
443
|
|
fides/api/task/filter_results.py
CHANGED
|
@@ -6,10 +6,43 @@ from loguru import logger
|
|
|
6
6
|
|
|
7
7
|
from fides.api.graph.config import CollectionAddress, FieldPath
|
|
8
8
|
from fides.api.graph.graph import DatasetGraph
|
|
9
|
+
from fides.api.service.storage.util import is_attachment_field
|
|
9
10
|
from fides.api.task.manual.manual_task_address import ManualTaskAddress
|
|
10
11
|
from fides.api.util.collection_util import Row
|
|
11
12
|
|
|
12
13
|
|
|
14
|
+
def should_skip_data_category_filtering(
|
|
15
|
+
node_address: str, results: List[Dict[str, Optional[Any]]]
|
|
16
|
+
) -> bool:
|
|
17
|
+
"""
|
|
18
|
+
Determine if results should skip data category filtering.
|
|
19
|
+
|
|
20
|
+
This includes:
|
|
21
|
+
1. Manual task data - controlled by field definitions, not data categories
|
|
22
|
+
2. Attachment data - should be preserved regardless of data categories (from polling or manual tasks)
|
|
23
|
+
|
|
24
|
+
:param node_address: The collection address being processed
|
|
25
|
+
:param results: The results data to check
|
|
26
|
+
:return: True if filtering should be skipped, False otherwise
|
|
27
|
+
"""
|
|
28
|
+
# Check if this is a manual task address
|
|
29
|
+
if ManualTaskAddress.is_manual_task_address(node_address):
|
|
30
|
+
return True
|
|
31
|
+
|
|
32
|
+
# Check if results contain attachment data
|
|
33
|
+
if not results:
|
|
34
|
+
return False
|
|
35
|
+
|
|
36
|
+
# Verify it looks like actual attachment data
|
|
37
|
+
for result in results:
|
|
38
|
+
if isinstance(result, dict) and any(
|
|
39
|
+
is_attachment_field(value) for value in result.values()
|
|
40
|
+
):
|
|
41
|
+
return True
|
|
42
|
+
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
|
|
13
46
|
def filter_data_categories(
|
|
14
47
|
access_request_results: Dict[str, List[Dict[str, Optional[Any]]]],
|
|
15
48
|
target_categories: Set[str],
|
|
@@ -38,8 +71,8 @@ def filter_data_categories(
|
|
|
38
71
|
if not results:
|
|
39
72
|
continue
|
|
40
73
|
|
|
41
|
-
# Skip
|
|
42
|
-
if
|
|
74
|
+
# Skip data that doesn't need filtering (manual tasks and attachment data)
|
|
75
|
+
if should_skip_data_category_filtering(node_address, results):
|
|
43
76
|
filtered_access_results[node_address].extend(results)
|
|
44
77
|
continue
|
|
45
78
|
|
fides/api/task/graph_runners.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
from typing import Any, Dict, List
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
2
|
|
|
3
|
-
from loguru import logger
|
|
4
3
|
from sqlalchemy.orm import Session
|
|
5
4
|
|
|
6
5
|
from fides.api.common_exceptions import PrivacyRequestExit
|
|
@@ -19,37 +18,8 @@ from fides.api.task.deprecated_graph_task import (
|
|
|
19
18
|
run_consent_request_deprecated,
|
|
20
19
|
run_erasure_request_deprecated,
|
|
21
20
|
)
|
|
21
|
+
from fides.api.task.scheduler_utils import use_dsr_3_0_scheduler
|
|
22
22
|
from fides.api.util.collection_util import Row
|
|
23
|
-
from fides.config import CONFIG
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def use_dsr_3_0_scheduler(
|
|
27
|
-
privacy_request: PrivacyRequest, action_type: ActionType
|
|
28
|
-
) -> bool:
|
|
29
|
-
"""Return whether we should use the DSR 3.0 scheduler.
|
|
30
|
-
|
|
31
|
-
Override if we have a partially processed Privacy Request that was already run on
|
|
32
|
-
DSR 2.0 so we can finish processing it on 2.0.
|
|
33
|
-
|
|
34
|
-
"""
|
|
35
|
-
use_dsr_3_0 = CONFIG.execution.use_dsr_3_0
|
|
36
|
-
|
|
37
|
-
prev_results: Dict[str, Optional[List[Row]]] = (
|
|
38
|
-
privacy_request.get_raw_access_results()
|
|
39
|
-
)
|
|
40
|
-
existing_tasks_count: int = privacy_request.get_tasks_by_action(action_type).count()
|
|
41
|
-
|
|
42
|
-
if prev_results and use_dsr_3_0 and not existing_tasks_count:
|
|
43
|
-
# If we've previously tried to process this Privacy Request using DSR 2.0, continue doing so
|
|
44
|
-
# for access and erasure requests
|
|
45
|
-
logger.info(
|
|
46
|
-
"Overriding scheduler to run privacy request {} using DSR 2.0 as it's "
|
|
47
|
-
"already partially processed",
|
|
48
|
-
privacy_request.id,
|
|
49
|
-
)
|
|
50
|
-
use_dsr_3_0 = False
|
|
51
|
-
|
|
52
|
-
return use_dsr_3_0
|
|
53
23
|
|
|
54
24
|
|
|
55
25
|
def access_runner(
|
fides/api/task/graph_task.py
CHANGED
|
@@ -13,6 +13,7 @@ from sqlalchemy.orm import Session
|
|
|
13
13
|
from fides.api.api.deps import get_autoclose_db_session as get_db
|
|
14
14
|
from fides.api.common_exceptions import (
|
|
15
15
|
ActionDisabled,
|
|
16
|
+
AwaitingAsyncProcessing,
|
|
16
17
|
AwaitingAsyncTask,
|
|
17
18
|
CollectionDisabled,
|
|
18
19
|
NotSupportedForCollection,
|
|
@@ -47,6 +48,7 @@ from fides.api.service.execution_context import collect_execution_log_messages
|
|
|
47
48
|
from fides.api.task.consolidate_query_matches import consolidate_query_matches
|
|
48
49
|
from fides.api.task.filter_element_match import filter_element_match
|
|
49
50
|
from fides.api.task.refine_target_path import FieldPathNodeInput
|
|
51
|
+
from fides.api.task.scheduler_utils import use_dsr_3_0_scheduler
|
|
50
52
|
from fides.api.task.task_resources import TaskResources
|
|
51
53
|
from fides.api.util.cache import get_cache
|
|
52
54
|
from fides.api.util.collection_util import (
|
|
@@ -60,7 +62,6 @@ from fides.api.util.collection_util import (
|
|
|
60
62
|
from fides.api.util.consent_util import (
|
|
61
63
|
add_errored_system_status_for_consent_reporting_on_preferences,
|
|
62
64
|
)
|
|
63
|
-
from fides.api.util.logger import Pii
|
|
64
65
|
from fides.api.util.logger_context_utils import LoggerContextKeys
|
|
65
66
|
from fides.api.util.memory_watchdog import MemoryLimitExceeded
|
|
66
67
|
from fides.api.util.saas_util import FIDESOPS_GROUPED_INPUTS
|
|
@@ -95,6 +96,7 @@ def retry(
|
|
|
95
96
|
If we exceed the number of TASK_RETRY_COUNT retries, we re-raise the exception to stop execution of the privacy request.
|
|
96
97
|
"""
|
|
97
98
|
|
|
99
|
+
# pylint: disable=too-many-return-statements
|
|
98
100
|
def decorator(func: Callable) -> Callable:
|
|
99
101
|
@wraps(func)
|
|
100
102
|
def result(*args: Any, **kwargs: Any) -> Any:
|
|
@@ -114,8 +116,18 @@ def retry(
|
|
|
114
116
|
self.log_start(action_type)
|
|
115
117
|
# Run access or erasure request
|
|
116
118
|
return func(*args, **kwargs)
|
|
119
|
+
except AwaitingAsyncProcessing as ex:
|
|
120
|
+
logger.warning(
|
|
121
|
+
"Request Task {} {} {} async processing in progress",
|
|
122
|
+
self.request_task.id if self.request_task.id else None,
|
|
123
|
+
method_name,
|
|
124
|
+
self.execution_node.address,
|
|
125
|
+
)
|
|
126
|
+
# Log the async processing status and exit without retrying.
|
|
127
|
+
self.log_async_processing(action_type, ex)
|
|
128
|
+
# Request Task put in "polling" status and exited, external system is processing
|
|
129
|
+
return None
|
|
117
130
|
except AwaitingAsyncTask as ex:
|
|
118
|
-
traceback.print_exc()
|
|
119
131
|
logger.warning(
|
|
120
132
|
"Request Task {} {} {} awaiting async continuation",
|
|
121
133
|
self.request_task.id if self.request_task.id else None,
|
|
@@ -416,9 +428,13 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
416
428
|
# created to keep these in sync.
|
|
417
429
|
# TODO remove conditional above alongside deprecating DSR 2.0
|
|
418
430
|
if self.request_task.id:
|
|
419
|
-
# Merge the
|
|
420
|
-
#
|
|
431
|
+
# Merge the request_task into the current session to make it persistent,
|
|
432
|
+
# then refresh its `async_type` to load the latest state from the
|
|
433
|
+
# database. This is crucial for async tasks where `async_type` might be
|
|
434
|
+
# updated by another process, and avoids overwriting local data like
|
|
435
|
+
# `access_data`.
|
|
421
436
|
request_task = db.merge(self.request_task)
|
|
437
|
+
db.refresh(request_task, attribute_names=["async_type"])
|
|
422
438
|
request_task.update_status(db, status)
|
|
423
439
|
self.request_task = request_task
|
|
424
440
|
|
|
@@ -453,6 +469,21 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
453
469
|
message, [], action_type, ExecutionLogStatus.awaiting_processing
|
|
454
470
|
)
|
|
455
471
|
|
|
472
|
+
def log_async_processing(
|
|
473
|
+
self,
|
|
474
|
+
action_type: ActionType,
|
|
475
|
+
ex: Optional[BaseException],
|
|
476
|
+
extra_message: Optional[str] = None,
|
|
477
|
+
) -> None:
|
|
478
|
+
"""On async processing activities - external system is actively processing, Fides is polling"""
|
|
479
|
+
logger.info("Polling for async results on node {}", self.key)
|
|
480
|
+
|
|
481
|
+
message = str(ex)
|
|
482
|
+
if extra_message:
|
|
483
|
+
message = f"{message}. {extra_message}"
|
|
484
|
+
|
|
485
|
+
self.update_status(message, [], action_type, ExecutionLogStatus.polling)
|
|
486
|
+
|
|
456
487
|
def log_skipped(self, action_type: ActionType, ex: str) -> None:
|
|
457
488
|
"""Log that a collection was skipped. For now, this is because a collection has been disabled."""
|
|
458
489
|
logger.info("Skipping node {}", self.key)
|
|
@@ -469,11 +500,11 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
469
500
|
) -> None:
|
|
470
501
|
"""On completion activities"""
|
|
471
502
|
if ex:
|
|
472
|
-
logger.
|
|
473
|
-
"Ending {}, {} with failure {}",
|
|
503
|
+
logger.error(
|
|
504
|
+
"Ending {}, {} with failure: {}",
|
|
474
505
|
self.resources.request.id,
|
|
475
506
|
self.key,
|
|
476
|
-
|
|
507
|
+
ex,
|
|
477
508
|
)
|
|
478
509
|
self.update_status(str(ex), [], action_type, ExecutionLogStatus.error)
|
|
479
510
|
# For DSR 3.0, Hooking into the GraphTask.log_end method to also mark the current
|
|
@@ -589,7 +620,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
589
620
|
# TODO Remove when we stop support for DSR 2.0
|
|
590
621
|
# Save data to build masking requests for DSR 2.0 in Redis.
|
|
591
622
|
# Results saved with matching array elements preserved
|
|
592
|
-
if not
|
|
623
|
+
if not use_dsr_3_0_scheduler(self.resources.request, ActionType.access):
|
|
593
624
|
self.resources.cache_results_with_placeholders(
|
|
594
625
|
f"access_request__{self.key}", placeholder_output
|
|
595
626
|
)
|
|
@@ -619,7 +650,8 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
619
650
|
|
|
620
651
|
# TODO Remove when we stop support for DSR 2.0
|
|
621
652
|
# Saves intermediate access results for DSR 2.0 in Redis
|
|
622
|
-
|
|
653
|
+
# Only cache for existing DSR 2.0 requests
|
|
654
|
+
if not use_dsr_3_0_scheduler(self.resources.request, ActionType.access):
|
|
623
655
|
self.resources.cache_object(f"access_request__{self.key}", output)
|
|
624
656
|
|
|
625
657
|
# Return filtered rows with non-matched array data removed.
|
|
@@ -692,7 +724,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
692
724
|
self.execution_node,
|
|
693
725
|
self.resources.policy,
|
|
694
726
|
self.resources.request,
|
|
695
|
-
self.
|
|
727
|
+
self.request_task,
|
|
696
728
|
formatted_input_data,
|
|
697
729
|
)
|
|
698
730
|
|
|
@@ -853,7 +885,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
853
885
|
privacy_request_id = self.resources.request.id
|
|
854
886
|
|
|
855
887
|
with get_db() as db:
|
|
856
|
-
|
|
857
888
|
privacy_preferences = db.query(PrivacyPreferenceHistory).filter(
|
|
858
889
|
PrivacyPreferenceHistory.privacy_request_id == privacy_request_id
|
|
859
890
|
)
|
|
@@ -974,7 +1005,6 @@ def build_affected_field_logs(
|
|
|
974
1005
|
policy_id = policy.id
|
|
975
1006
|
|
|
976
1007
|
with get_db() as db:
|
|
977
|
-
|
|
978
1008
|
rules = db.query(Rule).filter(Rule.policy_id == policy_id)
|
|
979
1009
|
|
|
980
1010
|
targeted_field_paths: Dict[FieldAddress, str] = {}
|
|
@@ -8,13 +8,21 @@ from fides.api.models.manual_task import ManualTask
|
|
|
8
8
|
from fides.api.models.manual_task.conditional_dependency import (
|
|
9
9
|
ManualTaskConditionalDependency,
|
|
10
10
|
)
|
|
11
|
+
from fides.api.models.privacy_request import PrivacyRequest
|
|
11
12
|
from fides.api.task.conditional_dependencies.evaluator import ConditionEvaluator
|
|
13
|
+
from fides.api.task.conditional_dependencies.privacy_request.privacy_request_data import (
|
|
14
|
+
PrivacyRequestDataTransformer,
|
|
15
|
+
)
|
|
12
16
|
from fides.api.task.conditional_dependencies.schemas import EvaluationResult
|
|
17
|
+
from fides.api.task.conditional_dependencies.util import extract_nested_field_value
|
|
13
18
|
from fides.api.util.collection_util import Row
|
|
14
19
|
|
|
15
20
|
|
|
16
21
|
def extract_conditional_dependency_data_from_inputs(
|
|
17
|
-
*inputs: list[Row],
|
|
22
|
+
*inputs: list[Row],
|
|
23
|
+
manual_task: ManualTask,
|
|
24
|
+
input_keys: list[CollectionAddress],
|
|
25
|
+
privacy_request: PrivacyRequest,
|
|
18
26
|
) -> dict[str, Any]:
|
|
19
27
|
"""
|
|
20
28
|
Extract data for conditional dependency field addresses from input data.
|
|
@@ -33,14 +41,35 @@ def extract_conditional_dependency_data_from_inputs(
|
|
|
33
41
|
|
|
34
42
|
conditional_data: dict[str, Any] = {}
|
|
35
43
|
|
|
36
|
-
# Get all conditional dependencies field addresses
|
|
44
|
+
# Get all task input conditional dependencies field addresses
|
|
37
45
|
field_addresses = [
|
|
38
46
|
dependency.field_address
|
|
39
47
|
for dependency in manual_task.conditional_dependencies
|
|
40
48
|
if dependency.field_address
|
|
49
|
+
and not dependency.field_address.startswith("privacy_request.")
|
|
41
50
|
]
|
|
42
51
|
|
|
43
|
-
#
|
|
52
|
+
# Get all privacy request conditional dependencies field addresses
|
|
53
|
+
privacy_request_field_addresses = {
|
|
54
|
+
dependency.field_address
|
|
55
|
+
for dependency in manual_task.conditional_dependencies
|
|
56
|
+
if dependency.field_address
|
|
57
|
+
and dependency.field_address.startswith("privacy_request.")
|
|
58
|
+
}
|
|
59
|
+
# If there are any privacy request conditional dependencies field addresses,
|
|
60
|
+
# transform the privacy request data into a dictionary structure for evaluation
|
|
61
|
+
if privacy_request_field_addresses:
|
|
62
|
+
privacy_request_data_transformer = PrivacyRequestDataTransformer(
|
|
63
|
+
privacy_request
|
|
64
|
+
)
|
|
65
|
+
conditional_privacy_request_data = (
|
|
66
|
+
privacy_request_data_transformer.to_evaluation_data(
|
|
67
|
+
privacy_request_field_addresses
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
conditional_data = {**conditional_privacy_request_data}
|
|
71
|
+
|
|
72
|
+
# if no field addresses, return conditional data which may contain privacy request data or be empty
|
|
44
73
|
# This will allow the manual task to be executed if there are no conditional dependencies
|
|
45
74
|
if not field_addresses:
|
|
46
75
|
return conditional_data
|
|
@@ -103,30 +132,6 @@ def parse_field_address(field_address: str) -> tuple[str, list[str]]:
|
|
|
103
132
|
return source_collection_key, field_path
|
|
104
133
|
|
|
105
134
|
|
|
106
|
-
def extract_nested_field_value(data: Any, field_path: list[str]) -> Any:
|
|
107
|
-
"""
|
|
108
|
-
Extract a nested field value by traversing the field path.
|
|
109
|
-
|
|
110
|
-
Args:
|
|
111
|
-
data: The data to extract from (usually a dict)
|
|
112
|
-
field_path: List of field names to traverse (e.g., ["profile", "preferences", "theme"])
|
|
113
|
-
|
|
114
|
-
Returns:
|
|
115
|
-
The value at the end of the field path, or None if not found
|
|
116
|
-
"""
|
|
117
|
-
if not field_path:
|
|
118
|
-
return data
|
|
119
|
-
|
|
120
|
-
current = data
|
|
121
|
-
for field_name in field_path:
|
|
122
|
-
if isinstance(current, dict) and field_name in current:
|
|
123
|
-
current = current[field_name]
|
|
124
|
-
else:
|
|
125
|
-
return None
|
|
126
|
-
|
|
127
|
-
return current
|
|
128
|
-
|
|
129
|
-
|
|
130
135
|
def set_nested_value(field_address: str, value: Any) -> dict[str, Any]:
|
|
131
136
|
"""
|
|
132
137
|
Set a field value in the conditional data structure.
|
|
@@ -181,7 +186,7 @@ def evaluate_conditional_dependencies(
|
|
|
181
186
|
"""
|
|
182
187
|
# Get the root condition for this manual task
|
|
183
188
|
root_condition = ManualTaskConditionalDependency.get_root_condition(
|
|
184
|
-
db, manual_task.id
|
|
189
|
+
db, manual_task_id=manual_task.id
|
|
185
190
|
)
|
|
186
191
|
|
|
187
192
|
if not root_condition:
|
|
@@ -158,7 +158,10 @@ class ManualTaskGraphTask(GraphTask):
|
|
|
158
158
|
|
|
159
159
|
# Extract conditional dependency data from inputs
|
|
160
160
|
conditional_data = extract_conditional_dependency_data_from_inputs(
|
|
161
|
-
*inputs,
|
|
161
|
+
*inputs,
|
|
162
|
+
manual_task=manual_task,
|
|
163
|
+
input_keys=self.execution_node.input_keys,
|
|
164
|
+
privacy_request=self.resources.request,
|
|
162
165
|
)
|
|
163
166
|
# Evaluate conditional dependencies
|
|
164
167
|
evaluation_result = evaluate_conditional_dependencies(
|