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
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
import time
|
|
3
3
|
from copy import deepcopy
|
|
4
4
|
from datetime import datetime, timedelta
|
|
5
|
-
from typing import Any, Optional
|
|
5
|
+
from typing import Any, Optional
|
|
6
6
|
|
|
7
|
-
import
|
|
7
|
+
import sqlalchemy.exc
|
|
8
8
|
from loguru import logger
|
|
9
|
+
|
|
10
|
+
# pylint: disable=no-name-in-module
|
|
11
|
+
from psycopg2.errors import InternalError_ # type: ignore[import-untyped]
|
|
9
12
|
from pydantic import ValidationError as PydanticValidationError
|
|
10
|
-
from sqlalchemy.orm import Query, Session
|
|
13
|
+
from sqlalchemy.orm import Query, Session, selectinload
|
|
11
14
|
|
|
12
15
|
from fides.api import common_exceptions
|
|
13
16
|
from fides.api.common_exceptions import (
|
|
@@ -22,7 +25,6 @@ from fides.api.common_exceptions import (
|
|
|
22
25
|
ValidationError,
|
|
23
26
|
)
|
|
24
27
|
from fides.api.db.session import get_db_session
|
|
25
|
-
from fides.api.graph.config import CollectionAddress
|
|
26
28
|
from fides.api.graph.graph import DatasetGraph
|
|
27
29
|
from fides.api.models.attachment import Attachment, AttachmentReferenceType
|
|
28
30
|
from fides.api.models.audit_log import AuditLog, AuditLogAction
|
|
@@ -53,7 +55,7 @@ from fides.api.schemas.policy import ActionType, CurrentStep
|
|
|
53
55
|
from fides.api.schemas.privacy_request import PrivacyRequestStatus
|
|
54
56
|
from fides.api.schemas.redis_cache import Identity
|
|
55
57
|
from fides.api.schemas.storage.storage import StorageType
|
|
56
|
-
from fides.api.service.connectors import
|
|
58
|
+
from fides.api.service.connectors import get_connector
|
|
57
59
|
from fides.api.service.connectors.consent_email_connector import (
|
|
58
60
|
CONSENT_EMAIL_CONNECTOR_TYPES,
|
|
59
61
|
)
|
|
@@ -69,6 +71,7 @@ from fides.api.service.privacy_request.attachment_handling import (
|
|
|
69
71
|
get_attachments_content,
|
|
70
72
|
process_attachments_for_upload,
|
|
71
73
|
)
|
|
74
|
+
from fides.api.service.privacy_request.duplication_detection import check_for_duplicates
|
|
72
75
|
from fides.api.service.storage.storage_uploader_service import upload
|
|
73
76
|
from fides.api.task.filter_results import filter_data_categories
|
|
74
77
|
from fides.api.task.graph_runners import access_runner, consent_runner, erasure_runner
|
|
@@ -85,11 +88,7 @@ from fides.api.util.collection_util import Row
|
|
|
85
88
|
from fides.api.util.logger import Pii, _log_exception, _log_warning
|
|
86
89
|
from fides.api.util.logger_context_utils import LoggerContextKeys, log_context
|
|
87
90
|
from fides.api.util.memory_watchdog import memory_limiter
|
|
88
|
-
from fides.common.api.v1.urn_registry import
|
|
89
|
-
PRIVACY_CENTER_DSR_PACKAGE,
|
|
90
|
-
PRIVACY_REQUEST_TRANSFER_TO_PARENT,
|
|
91
|
-
V1_URL_PREFIX,
|
|
92
|
-
)
|
|
91
|
+
from fides.common.api.v1.urn_registry import PRIVACY_CENTER_DSR_PACKAGE
|
|
93
92
|
from fides.config import CONFIG
|
|
94
93
|
from fides.config.config_proxy import ConfigProxy
|
|
95
94
|
|
|
@@ -261,14 +260,14 @@ def upload_access_results(
|
|
|
261
260
|
"Error uploading subject access data for rule {} on policy {}: {}",
|
|
262
261
|
rule.key,
|
|
263
262
|
policy.key,
|
|
264
|
-
|
|
263
|
+
str(exc),
|
|
265
264
|
)
|
|
266
265
|
privacy_request.add_error_execution_log(
|
|
267
266
|
session,
|
|
268
267
|
connection_key=None,
|
|
269
268
|
dataset_name="Access package upload",
|
|
270
269
|
collection_name=None,
|
|
271
|
-
message="Access package upload failed for privacy request
|
|
270
|
+
message=f"Access package upload failed for privacy request: {str(exc)}",
|
|
272
271
|
action_type=ActionType.access,
|
|
273
272
|
)
|
|
274
273
|
privacy_request.status = PrivacyRequestStatus.error
|
|
@@ -276,6 +275,11 @@ def upload_access_results(
|
|
|
276
275
|
return download_urls
|
|
277
276
|
|
|
278
277
|
|
|
278
|
+
@log_context(
|
|
279
|
+
capture_args={
|
|
280
|
+
"privacy_request_id": LoggerContextKeys.privacy_request_id,
|
|
281
|
+
}
|
|
282
|
+
)
|
|
279
283
|
def save_access_results(
|
|
280
284
|
session: Session,
|
|
281
285
|
privacy_request: PrivacyRequest,
|
|
@@ -284,12 +288,34 @@ def save_access_results(
|
|
|
284
288
|
) -> None:
|
|
285
289
|
"""Save the results we uploaded to the user for later retrieval"""
|
|
286
290
|
# Save the results we uploaded to the user for later retrieval
|
|
287
|
-
privacy_request.save_filtered_access_results(session, rule_filtered_results)
|
|
288
291
|
# Saving access request URL's on the privacy request in case DSR 3.0
|
|
289
292
|
# exits processing before the email is sent
|
|
290
293
|
privacy_request.access_result_urls = {"access_result_urls": download_urls}
|
|
291
294
|
privacy_request.save(session)
|
|
292
295
|
|
|
296
|
+
# Try to save the backup results, but don't fail the DSR if this fails
|
|
297
|
+
try:
|
|
298
|
+
privacy_request.save_filtered_access_results(session, rule_filtered_results)
|
|
299
|
+
logger.info("Successfully saved backup filtered access results to database")
|
|
300
|
+
except (
|
|
301
|
+
InternalError_, # invalid memory alloc request size 1073741824
|
|
302
|
+
sqlalchemy.exc.StatementError, # SQL statement errors
|
|
303
|
+
# Python memory errors
|
|
304
|
+
MemoryError, # system out of memory
|
|
305
|
+
OverflowError, # numeric overflow during serialization
|
|
306
|
+
) as exc:
|
|
307
|
+
logger.warning(
|
|
308
|
+
"Failed to save backup of DSR results to database after successful S3 upload. "
|
|
309
|
+
"DSR will continue processing. Error: {}",
|
|
310
|
+
str(exc),
|
|
311
|
+
)
|
|
312
|
+
except Exception as exc:
|
|
313
|
+
logger.error(
|
|
314
|
+
"Failed to save backup of DSR results to database after successful S3 upload. "
|
|
315
|
+
"DSR will continue processing. Unexpected Error: {}",
|
|
316
|
+
str(exc),
|
|
317
|
+
)
|
|
318
|
+
|
|
293
319
|
|
|
294
320
|
@log_context(
|
|
295
321
|
capture_args={
|
|
@@ -307,8 +333,11 @@ def upload_and_save_access_results( # pylint: disable=R0912
|
|
|
307
333
|
) -> list[str]:
|
|
308
334
|
"""Process the data uploads after the access portion of the privacy request has completed"""
|
|
309
335
|
download_urls: list[str] = []
|
|
310
|
-
# Remove manual webhook attachments from the list of attachments
|
|
311
|
-
# This is done because
|
|
336
|
+
# Remove manual webhook attachments and request task attachments from the list of attachments
|
|
337
|
+
# This is done because:
|
|
338
|
+
# - manual webhook attachments are already included in the manual_data
|
|
339
|
+
# - manual task submission attachments are already included in the manual_data
|
|
340
|
+
# - request task attachments (from async polling) are already embedded in the dataset results
|
|
312
341
|
loaded_attachments = [
|
|
313
342
|
attachment
|
|
314
343
|
for attachment in privacy_request.attachments
|
|
@@ -317,6 +346,7 @@ def upload_and_save_access_results( # pylint: disable=R0912
|
|
|
317
346
|
in [
|
|
318
347
|
AttachmentReferenceType.access_manual_webhook,
|
|
319
348
|
AttachmentReferenceType.manual_task_submission,
|
|
349
|
+
AttachmentReferenceType.request_task,
|
|
320
350
|
]
|
|
321
351
|
for ref in attachment.references
|
|
322
352
|
)
|
|
@@ -397,7 +427,11 @@ def run_privacy_request(
|
|
|
397
427
|
logger.info("Resuming privacy request from checkpoint: '{}'", from_step)
|
|
398
428
|
|
|
399
429
|
with self.get_new_session() as session:
|
|
400
|
-
privacy_request =
|
|
430
|
+
privacy_request = (
|
|
431
|
+
PrivacyRequest.query_without_large_columns(session)
|
|
432
|
+
.filter(PrivacyRequest.id == privacy_request_id)
|
|
433
|
+
.first()
|
|
434
|
+
)
|
|
401
435
|
if not privacy_request:
|
|
402
436
|
raise common_exceptions.PrivacyRequestNotFound(
|
|
403
437
|
f"Privacy request with id {privacy_request_id} not found"
|
|
@@ -417,6 +451,10 @@ def run_privacy_request(
|
|
|
417
451
|
logger.info("Terminating privacy request: request deleted.")
|
|
418
452
|
return
|
|
419
453
|
|
|
454
|
+
check_for_duplicates(db=session, privacy_request=privacy_request)
|
|
455
|
+
if privacy_request.status == PrivacyRequestStatus.duplicate:
|
|
456
|
+
return
|
|
457
|
+
|
|
420
458
|
logger.info("Dispatching privacy request")
|
|
421
459
|
privacy_request.start_processing(session)
|
|
422
460
|
|
|
@@ -460,7 +498,15 @@ def run_privacy_request(
|
|
|
460
498
|
)
|
|
461
499
|
|
|
462
500
|
try:
|
|
463
|
-
|
|
501
|
+
# Eager load connection_config and ctl_dataset to avoid N+1 queries
|
|
502
|
+
datasets = (
|
|
503
|
+
session.query(DatasetConfig)
|
|
504
|
+
.options(
|
|
505
|
+
selectinload(DatasetConfig.connection_config),
|
|
506
|
+
selectinload(DatasetConfig.ctl_dataset),
|
|
507
|
+
)
|
|
508
|
+
.all()
|
|
509
|
+
)
|
|
464
510
|
dataset_graphs = [
|
|
465
511
|
dataset_config.get_graph()
|
|
466
512
|
for dataset_config in datasets
|
|
@@ -487,7 +533,12 @@ def run_privacy_request(
|
|
|
487
533
|
key: value["value"] if isinstance(value, dict) else value
|
|
488
534
|
for key, value in privacy_request.get_cached_identity_data().items()
|
|
489
535
|
}
|
|
490
|
-
|
|
536
|
+
# Eager load datasets relationship to avoid N+1 queries in filter_fides_connector_datasets
|
|
537
|
+
connection_configs = (
|
|
538
|
+
session.query(ConnectionConfig)
|
|
539
|
+
.options(selectinload(ConnectionConfig.datasets))
|
|
540
|
+
.all()
|
|
541
|
+
)
|
|
491
542
|
fides_connector_datasets: set[str] = filter_fides_connector_datasets(
|
|
492
543
|
connection_configs
|
|
493
544
|
)
|
|
@@ -782,10 +833,28 @@ def run_privacy_request(
|
|
|
782
833
|
privacy_request.property_id,
|
|
783
834
|
privacy_request.id,
|
|
784
835
|
)
|
|
836
|
+
# Add success log for completion email
|
|
837
|
+
privacy_request.add_success_execution_log(
|
|
838
|
+
session,
|
|
839
|
+
connection_key=None,
|
|
840
|
+
dataset_name="Privacy request completion email",
|
|
841
|
+
collection_name=None,
|
|
842
|
+
message="Privacy request completion email sent successfully.",
|
|
843
|
+
action_type=privacy_request.policy.get_action_type(), # type: ignore
|
|
844
|
+
)
|
|
785
845
|
except (
|
|
786
846
|
IdentityNotFoundException,
|
|
787
847
|
MessageDispatchException,
|
|
788
848
|
) as e:
|
|
849
|
+
# Add error log for completion email failure
|
|
850
|
+
privacy_request.add_error_execution_log(
|
|
851
|
+
session,
|
|
852
|
+
connection_key=None,
|
|
853
|
+
dataset_name="Privacy request completion email",
|
|
854
|
+
collection_name=None,
|
|
855
|
+
message=f"Privacy request completion email failed: {str(e)}",
|
|
856
|
+
action_type=privacy_request.policy.get_action_type(), # type: ignore
|
|
857
|
+
)
|
|
789
858
|
privacy_request.error_processing(db=session)
|
|
790
859
|
# If dev mode, log traceback
|
|
791
860
|
_log_exception(e, CONFIG.dev_mode)
|
|
@@ -887,7 +956,11 @@ def mark_paused_privacy_request_as_expired(privacy_request_id: str) -> None:
|
|
|
887
956
|
"""Mark "paused" PrivacyRequest as "errored" after its associated identity data in the redis cache has expired."""
|
|
888
957
|
SessionLocal = get_db_session(CONFIG)
|
|
889
958
|
db = SessionLocal()
|
|
890
|
-
privacy_request =
|
|
959
|
+
privacy_request = (
|
|
960
|
+
PrivacyRequest.query_without_large_columns(db)
|
|
961
|
+
.filter(PrivacyRequest.id == privacy_request_id)
|
|
962
|
+
.first()
|
|
963
|
+
)
|
|
891
964
|
if not privacy_request:
|
|
892
965
|
logger.info(
|
|
893
966
|
"Attempted to mark as expired. No privacy request with id '{}' found.",
|
|
@@ -904,78 +977,6 @@ def mark_paused_privacy_request_as_expired(privacy_request_id: str) -> None:
|
|
|
904
977
|
db.close()
|
|
905
978
|
|
|
906
979
|
|
|
907
|
-
def _retrieve_child_results( # pylint: disable=R0911
|
|
908
|
-
fides_connector: Tuple[str, ConnectionConfig],
|
|
909
|
-
rule_key: str,
|
|
910
|
-
access_result: dict[str, list[Row]],
|
|
911
|
-
) -> Optional[list[dict[str, Optional[list[Row]]]]]:
|
|
912
|
-
"""Get child access request results to add to upload."""
|
|
913
|
-
try:
|
|
914
|
-
connector = FidesConnector(fides_connector[1])
|
|
915
|
-
except Exception as e:
|
|
916
|
-
logger.error(
|
|
917
|
-
"Error create client for child server {}: {}", fides_connector[0], e
|
|
918
|
-
)
|
|
919
|
-
return None
|
|
920
|
-
|
|
921
|
-
results = []
|
|
922
|
-
|
|
923
|
-
for key, rows in access_result.items():
|
|
924
|
-
address = CollectionAddress.from_string(key)
|
|
925
|
-
privacy_request_id = None
|
|
926
|
-
if address.dataset == fides_connector[0]:
|
|
927
|
-
if not rows:
|
|
928
|
-
logger.info("No rows found for result entry {}", key)
|
|
929
|
-
continue
|
|
930
|
-
privacy_request_id = rows[0]["id"]
|
|
931
|
-
|
|
932
|
-
if not privacy_request_id:
|
|
933
|
-
logger.error(
|
|
934
|
-
"No privacy request found for connector key {}", fides_connector[0]
|
|
935
|
-
)
|
|
936
|
-
continue
|
|
937
|
-
|
|
938
|
-
try:
|
|
939
|
-
client = connector.create_client()
|
|
940
|
-
except requests.exceptions.HTTPError as e:
|
|
941
|
-
logger.error(
|
|
942
|
-
"Error logger into to child server for privacy request {}: {}",
|
|
943
|
-
privacy_request_id,
|
|
944
|
-
e,
|
|
945
|
-
)
|
|
946
|
-
continue
|
|
947
|
-
|
|
948
|
-
try:
|
|
949
|
-
request = client.authenticated_request(
|
|
950
|
-
method="get",
|
|
951
|
-
path=f"{V1_URL_PREFIX}{PRIVACY_REQUEST_TRANSFER_TO_PARENT.format(privacy_request_id=privacy_request_id, rule_key=rule_key)}",
|
|
952
|
-
headers={"Authorization": f"Bearer {client.token}"},
|
|
953
|
-
)
|
|
954
|
-
response = client.session.send(request)
|
|
955
|
-
except requests.exceptions.HTTPError as e:
|
|
956
|
-
logger.error(
|
|
957
|
-
"Error retrieving data from child server for privacy request {}: {}",
|
|
958
|
-
privacy_request_id,
|
|
959
|
-
e,
|
|
960
|
-
)
|
|
961
|
-
continue
|
|
962
|
-
|
|
963
|
-
if response.status_code != 200:
|
|
964
|
-
logger.error(
|
|
965
|
-
"Error retrieving data from child server for privacy request {}: {}",
|
|
966
|
-
privacy_request_id,
|
|
967
|
-
response.json(),
|
|
968
|
-
)
|
|
969
|
-
continue
|
|
970
|
-
|
|
971
|
-
results.append(response.json())
|
|
972
|
-
|
|
973
|
-
if not results:
|
|
974
|
-
return None
|
|
975
|
-
|
|
976
|
-
return results
|
|
977
|
-
|
|
978
|
-
|
|
979
980
|
def get_consent_email_connection_configs(db: Session) -> Query:
|
|
980
981
|
"""Return enabled consent email connection configs."""
|
|
981
982
|
return db.query(ConnectionConfig).filter(
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
-
from asyncio import sleep
|
|
5
4
|
from datetime import datetime, timedelta
|
|
6
5
|
from typing import Any, Dict, List, Optional, Set
|
|
7
6
|
|
|
@@ -11,7 +10,7 @@ from sqlalchemy import text
|
|
|
11
10
|
from sqlalchemy.orm import Session
|
|
12
11
|
from sqlalchemy.sql.elements import TextClause
|
|
13
12
|
|
|
14
|
-
from fides.api.common_exceptions import PrivacyRequestError
|
|
13
|
+
from fides.api.common_exceptions import PrivacyRequestError
|
|
15
14
|
from fides.api.models.privacy_request import (
|
|
16
15
|
EXITED_EXECUTION_LOG_STATUSES,
|
|
17
16
|
PrivacyRequest,
|
|
@@ -21,10 +20,7 @@ from fides.api.models.privacy_request.request_task import AsyncTaskType
|
|
|
21
20
|
from fides.api.models.worker_task import ExecutionLogStatus
|
|
22
21
|
from fides.api.schemas.drp_privacy_request import DrpPrivacyRequestCreate
|
|
23
22
|
from fides.api.schemas.policy import ActionType
|
|
24
|
-
from fides.api.schemas.privacy_request import
|
|
25
|
-
PrivacyRequestResponse,
|
|
26
|
-
PrivacyRequestStatus,
|
|
27
|
-
)
|
|
23
|
+
from fides.api.schemas.privacy_request import PrivacyRequestStatus
|
|
28
24
|
from fides.api.schemas.redis_cache import Identity
|
|
29
25
|
from fides.api.tasks import DSR_QUEUE_NAME, DatabaseTask, celery_app
|
|
30
26
|
from fides.api.tasks.scheduled.scheduler import scheduler
|
|
@@ -38,13 +34,17 @@ from fides.api.util.cache import (
|
|
|
38
34
|
reset_privacy_request_retry_count,
|
|
39
35
|
)
|
|
40
36
|
from fides.api.util.lock import redis_lock
|
|
41
|
-
from fides.common.api.v1.urn_registry import PRIVACY_REQUESTS, V1_URL_PREFIX
|
|
42
37
|
from fides.config import CONFIG
|
|
43
38
|
|
|
44
39
|
PRIVACY_REQUEST_STATUS_CHANGE_POLL = "privacy_request_status_change_poll"
|
|
45
40
|
DSR_DATA_REMOVAL = "dsr_data_removal"
|
|
46
41
|
INTERRUPTED_TASK_REQUEUE_POLL = "interrupted_task_requeue_poll"
|
|
42
|
+
REQUEUE_INTERRUPTED_TASKS_LOCK = "requeue_interrupted_tasks_lock"
|
|
47
43
|
ASYNC_TASKS_STATUS_POLLING = "async_tasks_status_polling"
|
|
44
|
+
ASYNC_TASKS_STATUS_POLLING_LOCK = "async_tasks_status_polling_lock"
|
|
45
|
+
ASYNC_TASKS_STATUS_POLLING_LOCK_TIMEOUT = (
|
|
46
|
+
300 # Starting timeout is shorter because the task goes directly to the workers.
|
|
47
|
+
)
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def build_required_privacy_request_kwargs(
|
|
@@ -93,62 +93,6 @@ def get_async_client() -> AsyncClient:
|
|
|
93
93
|
return AsyncClient()
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
async def poll_server_for_completion(
|
|
97
|
-
privacy_request_id: str,
|
|
98
|
-
server_url: str,
|
|
99
|
-
token: str,
|
|
100
|
-
*,
|
|
101
|
-
poll_interval_seconds: int = 30,
|
|
102
|
-
timeout_seconds: int = 1800, # 30 minutes
|
|
103
|
-
client: AsyncClient | None = None,
|
|
104
|
-
) -> PrivacyRequestResponse:
|
|
105
|
-
"""Poll a server for privacy request completion.
|
|
106
|
-
|
|
107
|
-
Requests will report complete with if they have a status of canceled, complete,
|
|
108
|
-
denied, or error. By default the polling will time out if not completed in 30
|
|
109
|
-
minutes, time can be overridden by setting the timeout_seconds.
|
|
110
|
-
"""
|
|
111
|
-
url = (
|
|
112
|
-
f"{server_url}{V1_URL_PREFIX}{PRIVACY_REQUESTS}?request_id={privacy_request_id}"
|
|
113
|
-
)
|
|
114
|
-
start_time = datetime.now()
|
|
115
|
-
elapsed_time = 0.0
|
|
116
|
-
while elapsed_time < timeout_seconds:
|
|
117
|
-
if client:
|
|
118
|
-
response = await client.get(
|
|
119
|
-
url, headers={"Authorization": f"Bearer {token}"}
|
|
120
|
-
)
|
|
121
|
-
else:
|
|
122
|
-
async_client = get_async_client()
|
|
123
|
-
response = await async_client.get(
|
|
124
|
-
url, headers={"Authorization": f"Bearer {token}"}
|
|
125
|
-
)
|
|
126
|
-
response.raise_for_status()
|
|
127
|
-
|
|
128
|
-
# Privacy requests are returned paginated. Since this is searching for a specific
|
|
129
|
-
# privacy request there should only be one value present in items.
|
|
130
|
-
items = response.json()["items"]
|
|
131
|
-
if not items:
|
|
132
|
-
raise PrivacyRequestNotFound(
|
|
133
|
-
f"No privacy request found with id '{privacy_request_id}'"
|
|
134
|
-
)
|
|
135
|
-
status = PrivacyRequestResponse(**items[0])
|
|
136
|
-
if status.status and status.status in (
|
|
137
|
-
PrivacyRequestStatus.complete,
|
|
138
|
-
PrivacyRequestStatus.canceled,
|
|
139
|
-
PrivacyRequestStatus.error,
|
|
140
|
-
PrivacyRequestStatus.denied,
|
|
141
|
-
):
|
|
142
|
-
return status
|
|
143
|
-
|
|
144
|
-
await sleep(poll_interval_seconds)
|
|
145
|
-
time_delta = datetime.now() - start_time
|
|
146
|
-
elapsed_time = time_delta.seconds
|
|
147
|
-
raise TimeoutError(
|
|
148
|
-
f"Timeout of {timeout_seconds} seconds has been exceeded while waiting for privacy request {privacy_request_id}"
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
|
|
152
96
|
def initiate_poll_for_exited_privacy_request_tasks() -> None:
|
|
153
97
|
"""Initiates scheduler to check if a Privacy Request's status needs to be flipped when all
|
|
154
98
|
Request Tasks have had a chance to run"""
|
|
@@ -189,8 +133,9 @@ def poll_for_exited_privacy_request_tasks(self: DatabaseTask) -> Set[str]:
|
|
|
189
133
|
# Privacy Requests that didn't need approval are "In Processing".
|
|
190
134
|
# Privacy Requests in these states should be examined to see if all of its Request Tasks have had a chance
|
|
191
135
|
# to complete.
|
|
136
|
+
# Use query_without_large_columns to prevent OOM errors when processing many privacy requests
|
|
192
137
|
in_progress_privacy_requests = (
|
|
193
|
-
|
|
138
|
+
PrivacyRequest.query_without_large_columns(db)
|
|
194
139
|
.filter(
|
|
195
140
|
PrivacyRequest.status.in_(
|
|
196
141
|
[
|
|
@@ -340,7 +285,7 @@ def remove_saved_dsr_data(self: DatabaseTask) -> None:
|
|
|
340
285
|
def initiate_interrupted_task_requeue_poll() -> None:
|
|
341
286
|
"""Initiates scheduler to check for and requeue interrupted tasks"""
|
|
342
287
|
|
|
343
|
-
if CONFIG.test_mode
|
|
288
|
+
if CONFIG.test_mode:
|
|
344
289
|
return
|
|
345
290
|
|
|
346
291
|
assert (
|
|
@@ -359,7 +304,7 @@ def initiate_interrupted_task_requeue_poll() -> None:
|
|
|
359
304
|
)
|
|
360
305
|
|
|
361
306
|
|
|
362
|
-
def
|
|
307
|
+
def initiate_polling_task_requeue() -> None:
|
|
363
308
|
"""Initiates scheduler to check for and requeue pending polling async tasks"""
|
|
364
309
|
if CONFIG.test_mode:
|
|
365
310
|
return
|
|
@@ -370,13 +315,13 @@ def initiate_async_tasks_status_polling() -> None:
|
|
|
370
315
|
|
|
371
316
|
logger.info("Initiating scheduler for async tasks status polling")
|
|
372
317
|
scheduler.add_job(
|
|
373
|
-
func=
|
|
318
|
+
func=requeue_polling_tasks,
|
|
374
319
|
trigger="interval",
|
|
375
320
|
kwargs={},
|
|
376
321
|
id=ASYNC_TASKS_STATUS_POLLING,
|
|
377
322
|
coalesce=True,
|
|
378
323
|
replace_existing=True,
|
|
379
|
-
seconds=CONFIG.execution.
|
|
324
|
+
seconds=CONFIG.execution.async_polling_interval_hours * 3600,
|
|
380
325
|
)
|
|
381
326
|
|
|
382
327
|
|
|
@@ -394,9 +339,6 @@ def get_cached_task_id(entity_id: str) -> Optional[str]:
|
|
|
394
339
|
raise
|
|
395
340
|
|
|
396
341
|
|
|
397
|
-
REQUEUE_INTERRUPTED_TASKS_LOCK = "requeue_interrupted_tasks_lock"
|
|
398
|
-
|
|
399
|
-
|
|
400
342
|
def _get_task_ids_from_dsr_queue(
|
|
401
343
|
redis_client: FidesopsRedis, chunk_size: int = 100
|
|
402
344
|
) -> Set[str]:
|
|
@@ -539,6 +481,27 @@ def _get_request_task_ids_in_progress(
|
|
|
539
481
|
return [task[0] for task in request_tasks_in_progress]
|
|
540
482
|
|
|
541
483
|
|
|
484
|
+
def _has_polling_tasks(db: Session, privacy_request_id: str) -> bool:
|
|
485
|
+
"""
|
|
486
|
+
Check if a privacy request has any polling async tasks.
|
|
487
|
+
|
|
488
|
+
Args:
|
|
489
|
+
db: Database session
|
|
490
|
+
privacy_request_id: The ID of the privacy request to check
|
|
491
|
+
|
|
492
|
+
Returns:
|
|
493
|
+
bool: True if the privacy request has polling tasks, False otherwise
|
|
494
|
+
"""
|
|
495
|
+
return db.query(
|
|
496
|
+
db.query(RequestTask)
|
|
497
|
+
.filter(
|
|
498
|
+
RequestTask.privacy_request_id == privacy_request_id,
|
|
499
|
+
RequestTask.async_type == AsyncTaskType.polling,
|
|
500
|
+
)
|
|
501
|
+
.exists()
|
|
502
|
+
).scalar()
|
|
503
|
+
|
|
504
|
+
|
|
542
505
|
# pylint: disable=too-many-branches
|
|
543
506
|
# pylint: disable=too-many-statements
|
|
544
507
|
@celery_app.task(base=DatabaseTask, bind=True)
|
|
@@ -566,8 +529,9 @@ def requeue_interrupted_tasks(self: DatabaseTask) -> None:
|
|
|
566
529
|
logger.debug("Starting check for interrupted tasks to requeue")
|
|
567
530
|
|
|
568
531
|
# Get all in-progress privacy requests that haven't been updated in the last 5 minutes
|
|
532
|
+
# Use query_without_large_columns to prevent OOM errors when processing many privacy requests
|
|
569
533
|
in_progress_requests = (
|
|
570
|
-
|
|
534
|
+
PrivacyRequest.query_without_large_columns(db)
|
|
571
535
|
.filter(
|
|
572
536
|
PrivacyRequest.status.in_(
|
|
573
537
|
[
|
|
@@ -678,6 +642,17 @@ def requeue_interrupted_tasks(self: DatabaseTask) -> None:
|
|
|
678
642
|
should_requeue = False
|
|
679
643
|
break
|
|
680
644
|
|
|
645
|
+
# Check if the Privacy request has polling tasks
|
|
646
|
+
if _has_polling_tasks(db, privacy_request.id):
|
|
647
|
+
# If the polling request task has no cached task ID, it's stuck
|
|
648
|
+
logger.warning(
|
|
649
|
+
f"No task ID found for request task {request_task_id} "
|
|
650
|
+
f"(privacy request {privacy_request.id}) Contains polling tasks - "
|
|
651
|
+
f"keeping request in current status as it may be waiting for polling task to complete"
|
|
652
|
+
)
|
|
653
|
+
should_requeue = False
|
|
654
|
+
break
|
|
655
|
+
|
|
681
656
|
# For other statuses, cancel the entire privacy request
|
|
682
657
|
_cancel_interrupted_tasks_and_error_privacy_request(
|
|
683
658
|
db,
|
|
@@ -704,26 +679,35 @@ def requeue_interrupted_tasks(self: DatabaseTask) -> None:
|
|
|
704
679
|
|
|
705
680
|
|
|
706
681
|
@celery_app.task(base=DatabaseTask, bind=True)
|
|
707
|
-
def
|
|
682
|
+
def requeue_polling_tasks(self: DatabaseTask) -> None:
|
|
708
683
|
"""
|
|
709
684
|
Poll the status of async tasks that are awaiting processing.
|
|
710
685
|
"""
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
.
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
686
|
+
with redis_lock(
|
|
687
|
+
ASYNC_TASKS_STATUS_POLLING_LOCK,
|
|
688
|
+
ASYNC_TASKS_STATUS_POLLING_LOCK_TIMEOUT,
|
|
689
|
+
) as lock:
|
|
690
|
+
if not lock:
|
|
691
|
+
logger.debug("Async tasks status polling lock not acquired, skipping")
|
|
692
|
+
return
|
|
693
|
+
with self.get_new_session() as db:
|
|
694
|
+
logger.debug("Polling for async tasks status")
|
|
695
|
+
|
|
696
|
+
# Get all tasks that are polling and are from polling async tasks
|
|
697
|
+
async_tasks = (
|
|
698
|
+
db.query(RequestTask)
|
|
699
|
+
.filter(RequestTask.status == ExecutionLogStatus.polling)
|
|
700
|
+
.filter(RequestTask.async_type == AsyncTaskType.polling)
|
|
701
|
+
.all()
|
|
726
702
|
)
|
|
703
|
+
logger.info(f"Found {len(async_tasks)} async polling tasks")
|
|
727
704
|
|
|
728
|
-
|
|
729
|
-
|
|
705
|
+
if async_tasks:
|
|
706
|
+
# Avoiding cyclic imports
|
|
707
|
+
from fides.api.task.execute_request_tasks import queue_request_task
|
|
708
|
+
|
|
709
|
+
for async_task in async_tasks:
|
|
710
|
+
logger.info(
|
|
711
|
+
f"Requeuing polling task {async_task.id} for processing"
|
|
712
|
+
)
|
|
713
|
+
queue_request_task(async_task, privacy_request_proceed=True)
|