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,130 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pure utility functions for async DSR operations.
|
|
3
|
+
|
|
4
|
+
This module contains utility functions with no business logic dependencies.
|
|
5
|
+
These are helper functions that can be used across the async DSR system.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from enum import Enum
|
|
9
|
+
|
|
10
|
+
# Type checking imports
|
|
11
|
+
from typing import TYPE_CHECKING, List, cast
|
|
12
|
+
|
|
13
|
+
from loguru import logger
|
|
14
|
+
from sqlalchemy.orm import Session
|
|
15
|
+
|
|
16
|
+
from fides.api.common_exceptions import PrivacyRequestError
|
|
17
|
+
from fides.api.models.connectionconfig import ConnectionConfig
|
|
18
|
+
from fides.api.models.datasetconfig import DatasetConfig
|
|
19
|
+
from fides.api.models.privacy_request.request_task import AsyncTaskType, RequestTask
|
|
20
|
+
from fides.api.schemas.saas.saas_config import SaaSRequest
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from fides.api.service.connectors.query_configs.saas_query_config import (
|
|
24
|
+
SaaSQueryConfig,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def has_async_requests(query_config: "SaaSQueryConfig") -> bool:
|
|
29
|
+
"""Check if any read/update/delete requests have async configuration"""
|
|
30
|
+
all_requests: List[SaaSRequest] = cast(
|
|
31
|
+
List[SaaSRequest], query_config.get_read_requests_by_identity()
|
|
32
|
+
)
|
|
33
|
+
masking_request = query_config.get_masking_request()
|
|
34
|
+
if masking_request:
|
|
35
|
+
all_requests.append(masking_request)
|
|
36
|
+
return any(request.async_config is not None for request in all_requests)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def is_polling_continuation(request_task: RequestTask) -> bool:
|
|
40
|
+
"""Check if this is a polling continuation (not initial request)"""
|
|
41
|
+
async_type_check = request_task.async_type == AsyncTaskType.polling
|
|
42
|
+
sub_requests_count = len(request_task.sub_requests)
|
|
43
|
+
|
|
44
|
+
logger.warning(
|
|
45
|
+
f"is_polling_continuation for task {request_task.id}: "
|
|
46
|
+
f"async_type={request_task.async_type} (polling={async_type_check}), "
|
|
47
|
+
f"sub_requests_count={sub_requests_count}"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
return async_type_check and sub_requests_count > 0
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def is_callback_completion(request_task: RequestTask) -> bool:
|
|
54
|
+
"""Check if this is a completed callback request"""
|
|
55
|
+
return bool(request_task.callback_succeeded)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def is_async_request(
|
|
59
|
+
request_task: RequestTask, query_config: "SaaSQueryConfig"
|
|
60
|
+
) -> bool:
|
|
61
|
+
"""
|
|
62
|
+
Check if this is an async request (callback, continuation, or initial async).
|
|
63
|
+
|
|
64
|
+
This is the main entry point for async detection.
|
|
65
|
+
"""
|
|
66
|
+
return (
|
|
67
|
+
is_callback_completion(request_task)
|
|
68
|
+
or is_polling_continuation(request_task)
|
|
69
|
+
or has_async_requests(query_config)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class AsyncPhase(Enum):
|
|
74
|
+
"""Enum representing different phases of async DSR processing."""
|
|
75
|
+
|
|
76
|
+
callback_completion = "callback_completion"
|
|
77
|
+
polling_continuation = "polling_continuation"
|
|
78
|
+
initial_async = "initial_async"
|
|
79
|
+
sync = "sync"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def get_async_phase(
|
|
83
|
+
request_task: RequestTask, query_config: "SaaSQueryConfig"
|
|
84
|
+
) -> AsyncPhase:
|
|
85
|
+
"""
|
|
86
|
+
Classify the phase of async request for routing purposes.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
AsyncPhase enum value representing the current phase:
|
|
90
|
+
- callback_completion: Callback has completed
|
|
91
|
+
- polling_continuation: Continuing an existing polling process
|
|
92
|
+
- initial_async: Initial async request setup
|
|
93
|
+
- sync: Not an async request
|
|
94
|
+
"""
|
|
95
|
+
if is_callback_completion(request_task):
|
|
96
|
+
return AsyncPhase.callback_completion
|
|
97
|
+
if is_polling_continuation(request_task):
|
|
98
|
+
return AsyncPhase.polling_continuation
|
|
99
|
+
if has_async_requests(query_config):
|
|
100
|
+
return AsyncPhase.initial_async
|
|
101
|
+
return AsyncPhase.sync
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def get_connection_config_from_task(
|
|
105
|
+
db: Session, request_task: RequestTask
|
|
106
|
+
) -> ConnectionConfig:
|
|
107
|
+
"""
|
|
108
|
+
Get ConnectionConfig from a RequestTask.
|
|
109
|
+
|
|
110
|
+
This utility function retrieves the connection configuration
|
|
111
|
+
associated with a request task by looking up the dataset configuration.
|
|
112
|
+
"""
|
|
113
|
+
dataset_config = DatasetConfig.filter(
|
|
114
|
+
db=db,
|
|
115
|
+
conditions=(DatasetConfig.fides_key == request_task.dataset_name),
|
|
116
|
+
).first()
|
|
117
|
+
if not dataset_config:
|
|
118
|
+
raise PrivacyRequestError(
|
|
119
|
+
f"DatasetConfig with fides_key {request_task.dataset_name} not found."
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
connection_config = ConnectionConfig.get(
|
|
123
|
+
db=db, object_id=dataset_config.connection_config_id
|
|
124
|
+
)
|
|
125
|
+
if not connection_config:
|
|
126
|
+
raise PrivacyRequestError(
|
|
127
|
+
f"ConnectionConfig with id {dataset_config.connection_config_id} not found."
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
return connection_config
|
|
@@ -59,11 +59,18 @@ class BaseErasureEmailConnector(BaseEmailConnector):
|
|
|
59
59
|
self, user_identities: Dict[str, Any], privacy_request: PrivacyRequest
|
|
60
60
|
) -> bool:
|
|
61
61
|
"""Schedules an erasure email for erasure privacy requests containing the required identities"""
|
|
62
|
+
|
|
63
|
+
# do not send erasure emails if there is more than 1 action type for the request.
|
|
64
|
+
# we use consent + erasure types to facilitate Do Not Sell features.
|
|
65
|
+
multiple_action_types = len(privacy_request.policy.get_all_action_types()) > 1
|
|
66
|
+
|
|
62
67
|
erasure_rules: List[Rule] = privacy_request.policy.get_rules_for_action(
|
|
63
68
|
action_type=ActionType.erasure
|
|
64
69
|
)
|
|
70
|
+
|
|
65
71
|
return bool(
|
|
66
72
|
erasure_rules
|
|
73
|
+
and not multiple_action_types
|
|
67
74
|
and filter_user_identities_for_connector(self.config, user_identities)
|
|
68
75
|
)
|
|
69
76
|
|
|
@@ -7,7 +7,7 @@ from sqlalchemy.orm import Session
|
|
|
7
7
|
from sqlalchemy.sql import Executable # type: ignore
|
|
8
8
|
from sqlalchemy.sql.elements import TextClause
|
|
9
9
|
|
|
10
|
-
from fides.api.common_exceptions import ConnectionException
|
|
10
|
+
from fides.api.common_exceptions import ConnectionException, TableNotFound
|
|
11
11
|
from fides.api.graph.execution import ExecutionNode
|
|
12
12
|
from fides.api.models.connectionconfig import ConnectionTestStatus
|
|
13
13
|
from fides.api.models.policy import Policy
|
|
@@ -194,23 +194,41 @@ class BigQueryConnector(SQLConnector):
|
|
|
194
194
|
update_or_delete_ct = 0
|
|
195
195
|
client = self.client()
|
|
196
196
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
delete_stmts, self.should_dry_run(SqlDryRunMode.erasure), client
|
|
202
|
-
)
|
|
203
|
-
else:
|
|
204
|
-
for row in rows:
|
|
205
|
-
update_or_delete_stmts: List[Executable] = query_config.generate_update(
|
|
206
|
-
row, policy, privacy_request, client
|
|
207
|
-
)
|
|
208
|
-
logger.debug(
|
|
209
|
-
f"Generated {len(update_or_delete_stmts)} UPDATE statements"
|
|
210
|
-
)
|
|
197
|
+
try:
|
|
198
|
+
if query_config.uses_delete_masking_strategy():
|
|
199
|
+
delete_stmts = query_config.generate_delete(client, input_data or {})
|
|
200
|
+
logger.debug(f"Generated {len(delete_stmts)} DELETE statements")
|
|
211
201
|
update_or_delete_ct += self._execute_statements_with_sql_dry_run(
|
|
212
|
-
|
|
202
|
+
delete_stmts,
|
|
213
203
|
self.should_dry_run(SqlDryRunMode.erasure),
|
|
214
204
|
client,
|
|
215
205
|
)
|
|
206
|
+
else:
|
|
207
|
+
for row in rows:
|
|
208
|
+
update_or_delete_stmts: List[Executable] = (
|
|
209
|
+
query_config.generate_update(
|
|
210
|
+
row, policy, privacy_request, client
|
|
211
|
+
)
|
|
212
|
+
)
|
|
213
|
+
logger.debug(
|
|
214
|
+
f"Generated {len(update_or_delete_stmts)} UPDATE statements"
|
|
215
|
+
)
|
|
216
|
+
update_or_delete_ct += self._execute_statements_with_sql_dry_run(
|
|
217
|
+
update_or_delete_stmts,
|
|
218
|
+
self.should_dry_run(SqlDryRunMode.erasure),
|
|
219
|
+
client,
|
|
220
|
+
)
|
|
221
|
+
except Exception as exc:
|
|
222
|
+
# Check if table exists using qualified table name
|
|
223
|
+
qualified_table_name = self.get_qualified_table_name(node)
|
|
224
|
+
if not self.table_exists(qualified_table_name):
|
|
225
|
+
# For data erasure, we can always skip the collection since other collections
|
|
226
|
+
# don't depend on erasure results
|
|
227
|
+
skip_msg = (
|
|
228
|
+
f"Table '{qualified_table_name}' did not exist during data erasure."
|
|
229
|
+
)
|
|
230
|
+
raise TableNotFound(skip_msg) from exc
|
|
231
|
+
# Table exists or can't check - re-raise original exception
|
|
232
|
+
raise
|
|
233
|
+
|
|
216
234
|
return update_or_delete_ct
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from asyncio import sleep
|
|
4
|
+
from datetime import datetime
|
|
3
5
|
from typing import Any, Dict, List, Optional
|
|
4
6
|
|
|
5
7
|
import httpx
|
|
6
8
|
from httpx import AsyncClient, Client, HTTPStatusError, Request, RequestError, Timeout
|
|
7
9
|
from loguru import logger
|
|
8
10
|
|
|
11
|
+
from fides.api.common_exceptions import PrivacyRequestNotFound
|
|
9
12
|
from fides.api.schemas.privacy_request import (
|
|
10
13
|
PrivacyRequestCreate,
|
|
11
14
|
PrivacyRequestResponse,
|
|
@@ -13,11 +16,11 @@ from fides.api.schemas.privacy_request import (
|
|
|
13
16
|
)
|
|
14
17
|
from fides.api.schemas.redis_cache import Identity
|
|
15
18
|
from fides.api.schemas.user import UserLogin
|
|
16
|
-
from fides.api.service.privacy_request.request_service import poll_server_for_completion
|
|
17
19
|
from fides.api.util.collection_util import Row
|
|
18
20
|
from fides.api.util.errors import FidesError
|
|
19
21
|
from fides.api.util.wrappers import sync
|
|
20
22
|
from fides.common.api.v1 import urn_registry as urls
|
|
23
|
+
from fides.common.api.v1.urn_registry import PRIVACY_REQUESTS
|
|
21
24
|
|
|
22
25
|
COMPLETION_STATUSES = [
|
|
23
26
|
PrivacyRequestStatus.complete,
|
|
@@ -27,6 +30,65 @@ COMPLETION_STATUSES = [
|
|
|
27
30
|
]
|
|
28
31
|
|
|
29
32
|
|
|
33
|
+
def get_async_client() -> AsyncClient:
|
|
34
|
+
"""Return an async client used to make API requests"""
|
|
35
|
+
return AsyncClient()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def poll_server_for_completion(
|
|
39
|
+
privacy_request_id: str,
|
|
40
|
+
server_url: str,
|
|
41
|
+
token: str,
|
|
42
|
+
*,
|
|
43
|
+
poll_interval_seconds: int = 30,
|
|
44
|
+
timeout_seconds: int = 1800, # 30 minutes
|
|
45
|
+
client: AsyncClient | None = None,
|
|
46
|
+
) -> PrivacyRequestResponse:
|
|
47
|
+
"""Poll a server for privacy request completion.
|
|
48
|
+
|
|
49
|
+
Requests will report complete with if they have a status of canceled, complete,
|
|
50
|
+
denied, or error. By default the polling will time out if not completed in 30
|
|
51
|
+
minutes, time can be overridden by setting the timeout_seconds.
|
|
52
|
+
"""
|
|
53
|
+
url = f"{server_url}{urls.V1_URL_PREFIX}{PRIVACY_REQUESTS}?request_id={privacy_request_id}"
|
|
54
|
+
start_time = datetime.now()
|
|
55
|
+
elapsed_time = 0.0
|
|
56
|
+
while elapsed_time < timeout_seconds:
|
|
57
|
+
if client:
|
|
58
|
+
response = await client.get(
|
|
59
|
+
url, headers={"Authorization": f"Bearer {token}"}
|
|
60
|
+
)
|
|
61
|
+
else:
|
|
62
|
+
async_client = get_async_client()
|
|
63
|
+
response = await async_client.get(
|
|
64
|
+
url, headers={"Authorization": f"Bearer {token}"}
|
|
65
|
+
)
|
|
66
|
+
response.raise_for_status()
|
|
67
|
+
|
|
68
|
+
# Privacy requests are returned paginated. Since this is searching for a specific
|
|
69
|
+
# privacy request there should only be one value present in items.
|
|
70
|
+
items = response.json()["items"]
|
|
71
|
+
if not items:
|
|
72
|
+
raise PrivacyRequestNotFound(
|
|
73
|
+
f"No privacy request found with id '{privacy_request_id}'"
|
|
74
|
+
)
|
|
75
|
+
status = PrivacyRequestResponse(**items[0])
|
|
76
|
+
if status.status and status.status in (
|
|
77
|
+
PrivacyRequestStatus.complete,
|
|
78
|
+
PrivacyRequestStatus.canceled,
|
|
79
|
+
PrivacyRequestStatus.error,
|
|
80
|
+
PrivacyRequestStatus.denied,
|
|
81
|
+
):
|
|
82
|
+
return status
|
|
83
|
+
|
|
84
|
+
await sleep(poll_interval_seconds)
|
|
85
|
+
time_delta = datetime.now() - start_time
|
|
86
|
+
elapsed_time = time_delta.seconds
|
|
87
|
+
raise TimeoutError(
|
|
88
|
+
f"Timeout of {timeout_seconds} seconds has been exceeded while waiting for privacy request {privacy_request_id}"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
30
92
|
class FidesClient:
|
|
31
93
|
"""
|
|
32
94
|
A helper client to broker communications between Fides servers.
|
|
@@ -3,6 +3,9 @@ from typing import Any, Dict, List, Optional
|
|
|
3
3
|
|
|
4
4
|
import requests
|
|
5
5
|
from loguru import logger
|
|
6
|
+
from oauthlib.oauth2 import BackendApplicationClient
|
|
7
|
+
from requests.auth import HTTPBasicAuth
|
|
8
|
+
from requests_oauthlib import OAuth2Session
|
|
6
9
|
from starlette.status import HTTP_500_INTERNAL_SERVER_ERROR
|
|
7
10
|
|
|
8
11
|
from fides.api.common_exceptions import ClientUnsuccessfulException
|
|
@@ -41,25 +44,58 @@ class HTTPSConnector(BaseConnector[None]):
|
|
|
41
44
|
) -> Optional[Dict[str, Any]]:
|
|
42
45
|
"""Calls a client-defined endpoint and returns the data that it responds with"""
|
|
43
46
|
config = HttpsSchema(**self.configuration.secrets or {})
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
|
|
48
|
+
def _request_with_oauth() -> requests.Response:
|
|
49
|
+
"""Helper function to make a request with OAuth2 authentication"""
|
|
50
|
+
client_id = oauth_config.client_id
|
|
51
|
+
client_secret = oauth_config.client_secret
|
|
52
|
+
scopes = oauth_config.scope.split(" ") or []
|
|
53
|
+
auth = HTTPBasicAuth(client_id, client_secret)
|
|
54
|
+
client = BackendApplicationClient(client_id=client_id)
|
|
55
|
+
session_client = OAuth2Session(client=client, scope=scopes)
|
|
56
|
+
try:
|
|
57
|
+
# Fetch the access token from the token URL
|
|
58
|
+
session_client.fetch_token(token_url=oauth_config.token_url, auth=auth)
|
|
59
|
+
except Exception as e:
|
|
60
|
+
logger.error(f"Error fetching OAuth2 token: {e}")
|
|
61
|
+
raise ClientUnsuccessfulException(
|
|
62
|
+
status_code=HTTP_500_INTERNAL_SERVER_ERROR
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return session_client.post(
|
|
66
|
+
url=config.url, headers=additional_headers, json=request_body
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
def _request_without_oauth() -> requests.Response:
|
|
70
|
+
"""Helper function to make a request without OAuth2 authentication"""
|
|
71
|
+
headers = self.build_authorization_header()
|
|
72
|
+
headers.update(additional_headers)
|
|
73
|
+
return requests.post(url=config.url, headers=headers, json=request_body)
|
|
74
|
+
|
|
75
|
+
oauth_config = self.configuration.oauth_config
|
|
46
76
|
|
|
47
77
|
try:
|
|
48
|
-
response =
|
|
78
|
+
response = (
|
|
79
|
+
_request_with_oauth()
|
|
80
|
+
if oauth_config is not None
|
|
81
|
+
else _request_without_oauth()
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
if not response_expected:
|
|
85
|
+
return {}
|
|
86
|
+
|
|
87
|
+
if not response.ok:
|
|
88
|
+
logger.error("Invalid response received from webhook.")
|
|
89
|
+
raise ClientUnsuccessfulException(status_code=response.status_code)
|
|
90
|
+
|
|
91
|
+
return json.loads(response.text)
|
|
92
|
+
|
|
49
93
|
except requests.ConnectionError:
|
|
50
|
-
logger.
|
|
94
|
+
logger.error("HTTPS client received a connection error.")
|
|
51
95
|
raise ClientUnsuccessfulException(
|
|
52
96
|
status_code=HTTP_500_INTERNAL_SERVER_ERROR
|
|
53
97
|
)
|
|
54
98
|
|
|
55
|
-
if not response_expected:
|
|
56
|
-
return {}
|
|
57
|
-
|
|
58
|
-
if not response.ok:
|
|
59
|
-
logger.error("Invalid response received from webhook.")
|
|
60
|
-
raise ClientUnsuccessfulException(status_code=response.status_code)
|
|
61
|
-
return json.loads(response.text)
|
|
62
|
-
|
|
63
99
|
def test_connection(self) -> Optional[ConnectionTestStatus]:
|
|
64
100
|
"""
|
|
65
101
|
Override to skip connection test
|
|
@@ -25,7 +25,7 @@ class MicrosoftSQLServerConnector(SQLConnector):
|
|
|
25
25
|
def build_uri(self) -> URL:
|
|
26
26
|
"""
|
|
27
27
|
Build URI of format
|
|
28
|
-
mssql+pymssql://[username]:[password]@[host]:[port]/[dbname]
|
|
28
|
+
mssql+pymssql://[username]:[password]@[host]:[port]/[dbname]?read_only=[read_only_connection]
|
|
29
29
|
Returns URL obj, since SQLAlchemy's create_engine method accepts either a URL obj or a string
|
|
30
30
|
"""
|
|
31
31
|
|
|
@@ -38,6 +38,11 @@ class MicrosoftSQLServerConnector(SQLConnector):
|
|
|
38
38
|
host=config.host,
|
|
39
39
|
port=config.port,
|
|
40
40
|
database=config.dbname,
|
|
41
|
+
query=(
|
|
42
|
+
{"read_only": str(config.read_only_connection)}
|
|
43
|
+
if config.read_only_connection
|
|
44
|
+
else None
|
|
45
|
+
),
|
|
41
46
|
)
|
|
42
47
|
|
|
43
48
|
return url
|
|
@@ -27,31 +27,96 @@ class MongoDBConnector(BaseConnector[MongoClient]):
|
|
|
27
27
|
|
|
28
28
|
def build_uri(self) -> str:
|
|
29
29
|
"""
|
|
30
|
-
Builds URI of format
|
|
30
|
+
Builds URI of format:
|
|
31
|
+
- mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
|
|
32
|
+
- mongodb+srv://[username:password@]host[/[defaultauthdb][?options]] (for SRV)
|
|
31
33
|
"""
|
|
32
34
|
|
|
33
35
|
config = MongoDBSchema(**self.configuration.secrets or {})
|
|
34
36
|
|
|
37
|
+
# Determine scheme based on SRV setting
|
|
38
|
+
scheme = "mongodb+srv" if config.use_srv else "mongodb"
|
|
39
|
+
|
|
40
|
+
# Build authentication part
|
|
35
41
|
user_pass: str = ""
|
|
36
|
-
default_auth_db: str = ""
|
|
37
42
|
if config.username and config.password:
|
|
38
43
|
user_pass = f"{quote_plus(config.username)}:{quote_plus(config.password)}@"
|
|
39
|
-
if config.defaultauthdb:
|
|
40
|
-
default_auth_db = f"/{config.defaultauthdb}"
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
# Build host/port part
|
|
46
|
+
if config.use_srv:
|
|
47
|
+
# SRV connections use hostname only, no port
|
|
48
|
+
host_part = config.host
|
|
49
|
+
else:
|
|
50
|
+
# Standard connections include port if specified
|
|
51
|
+
port = f":{config.port}" if config.port else ""
|
|
52
|
+
host_part = f"{config.host}{port}"
|
|
53
|
+
|
|
54
|
+
# Build database path
|
|
55
|
+
default_auth_db = f"/{config.defaultauthdb}" if config.defaultauthdb else ""
|
|
56
|
+
|
|
57
|
+
# Build query parameters
|
|
58
|
+
params = []
|
|
59
|
+
|
|
60
|
+
# Determine SSL behavior
|
|
61
|
+
ssl_active = self._determine_ssl_enabled(config)
|
|
62
|
+
if ssl_active is True:
|
|
63
|
+
params.append("ssl=true")
|
|
64
|
+
elif ssl_active is False and config.use_srv:
|
|
65
|
+
# Explicitly disable SSL for SRV (override default)
|
|
66
|
+
params.append("ssl=false")
|
|
67
|
+
|
|
68
|
+
query = f"?{'&'.join(params)}" if params else ""
|
|
69
|
+
|
|
70
|
+
url = f"{scheme}://{user_pass}{host_part}{default_auth_db}{query}"
|
|
44
71
|
return url
|
|
45
72
|
|
|
73
|
+
def _determine_ssl_enabled(self, config: MongoDBSchema) -> Optional[bool]:
|
|
74
|
+
"""Determine if SSL should be enabled based on configuration"""
|
|
75
|
+
if config.ssl_enabled is not None:
|
|
76
|
+
# Explicit setting takes precedence
|
|
77
|
+
return config.ssl_enabled
|
|
78
|
+
if config.use_srv:
|
|
79
|
+
# SRV defaults to SSL enabled
|
|
80
|
+
return True
|
|
81
|
+
|
|
82
|
+
# Standard connections default to SSL disabled
|
|
83
|
+
return False
|
|
84
|
+
|
|
46
85
|
def create_client(self) -> MongoClient:
|
|
47
86
|
"""Returns a client for a MongoDB instance"""
|
|
48
|
-
|
|
87
|
+
secrets = self.configuration.secrets or {}
|
|
88
|
+
uri = secrets.get("url") or self.build_uri()
|
|
89
|
+
|
|
90
|
+
# Log connection details (without credentials) for debugging
|
|
91
|
+
if secrets.get("url"):
|
|
92
|
+
# URL-based connection - determine scheme and SSL from URL or defaults
|
|
93
|
+
scheme = "mongodb+srv" if "mongodb+srv://" in uri else "mongodb"
|
|
94
|
+
# For URL connections, SSL is determined by the URI scheme or explicit setting
|
|
95
|
+
ssl_status = (
|
|
96
|
+
"enabled"
|
|
97
|
+
if "ssl=true" in uri or secrets.get("ssl_enabled")
|
|
98
|
+
else "disabled"
|
|
99
|
+
)
|
|
100
|
+
else:
|
|
101
|
+
# Individual parameter connection - validate using schema
|
|
102
|
+
config = MongoDBSchema(**secrets)
|
|
103
|
+
scheme = "mongodb+srv" if config.use_srv else "mongodb"
|
|
104
|
+
ssl_status = (
|
|
105
|
+
"enabled" if self._determine_ssl_enabled(config) else "disabled"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
logger.info(
|
|
109
|
+
"Connecting to MongoDB using {} scheme with SSL {}", scheme, ssl_status
|
|
110
|
+
)
|
|
111
|
+
|
|
49
112
|
try:
|
|
50
113
|
return MongoClient(
|
|
51
114
|
uri, serverSelectionTimeoutMS=5000, uuidRepresentation="standard"
|
|
52
115
|
)
|
|
53
|
-
except ValueError:
|
|
54
|
-
raise ConnectionException("Value Error connecting to MongoDB
|
|
116
|
+
except ValueError as exc:
|
|
117
|
+
raise ConnectionException(f"Value Error connecting to MongoDB: {exc}")
|
|
118
|
+
except Exception as exc:
|
|
119
|
+
raise ConnectionException(f"Error connecting to MongoDB: {exc}")
|
|
55
120
|
|
|
56
121
|
def query_config(self, node: ExecutionNode) -> QueryConfig[Any]:
|
|
57
122
|
"""Query wrapper corresponding to the input traversal_node."""
|