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
fides/api/models/sql_models.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# type: ignore
|
|
2
|
-
# pylint: disable=comparison-with-callable
|
|
2
|
+
# pylint: disable=comparison-with-callable, too-many-lines
|
|
3
3
|
"""
|
|
4
4
|
Contains all of the SqlAlchemy models for the Fides resources.
|
|
5
5
|
"""
|
|
@@ -15,9 +15,10 @@ from fideslang.models import DataCategory as FideslangDataCategory
|
|
|
15
15
|
from fideslang.models import Dataset as FideslangDataset
|
|
16
16
|
from fideslang.models import DatasetCollection as FideslangDatasetCollection
|
|
17
17
|
from pydantic import BaseModel
|
|
18
|
-
from sqlalchemy import BOOLEAN, JSON, Column
|
|
19
|
-
from sqlalchemy import Enum as EnumColumn
|
|
20
18
|
from sqlalchemy import (
|
|
19
|
+
BOOLEAN,
|
|
20
|
+
JSON,
|
|
21
|
+
Column,
|
|
21
22
|
ForeignKey,
|
|
22
23
|
Index,
|
|
23
24
|
Integer,
|
|
@@ -184,6 +185,9 @@ class DataCategory(Base, FidesBase):
|
|
|
184
185
|
version_deprecated = Column(Text)
|
|
185
186
|
replaced_by = Column(Text)
|
|
186
187
|
|
|
188
|
+
# LLM Classification
|
|
189
|
+
tagging_instructions = Column(Text, nullable=True)
|
|
190
|
+
|
|
187
191
|
children: "RelationshipProperty[List[DataCategory]]" = relationship(
|
|
188
192
|
"DataCategory",
|
|
189
193
|
back_populates="parent",
|
|
@@ -197,6 +201,54 @@ class DataCategory(Base, FidesBase):
|
|
|
197
201
|
remote_side=[fides_key],
|
|
198
202
|
)
|
|
199
203
|
|
|
204
|
+
@classmethod
|
|
205
|
+
def create(
|
|
206
|
+
cls: Type["DataCategory"],
|
|
207
|
+
db: Session,
|
|
208
|
+
*,
|
|
209
|
+
data: dict[str, Any],
|
|
210
|
+
check_name: bool = True,
|
|
211
|
+
) -> "DataCategory":
|
|
212
|
+
"""
|
|
213
|
+
Override create to skip name uniqueness check for hierarchical taxonomy.
|
|
214
|
+
|
|
215
|
+
DataCategory is hierarchical - fides_key provides sufficient uniqueness.
|
|
216
|
+
Multiple categories can share the same name as long as their keys differ.
|
|
217
|
+
"""
|
|
218
|
+
# Check if data category with same fides_key already exists
|
|
219
|
+
if "fides_key" in data and data["fides_key"]:
|
|
220
|
+
existing_by_key = (
|
|
221
|
+
db.query(cls).filter(cls.fides_key == data["fides_key"]).first()
|
|
222
|
+
)
|
|
223
|
+
if existing_by_key:
|
|
224
|
+
raise KeyOrNameAlreadyExists(
|
|
225
|
+
f'Data category with fides_key "{data["fides_key"]}" already exists.'
|
|
226
|
+
)
|
|
227
|
+
# Always skip name check - fides_key uniqueness is sufficient
|
|
228
|
+
return super().create(db=db, data=data, check_name=False)
|
|
229
|
+
|
|
230
|
+
def update(self, db: Session, *, data: dict[str, Any]) -> "DataCategory":
|
|
231
|
+
"""
|
|
232
|
+
Override update to check for existing data categories with the same fides_key
|
|
233
|
+
when fides_key is being changed.
|
|
234
|
+
"""
|
|
235
|
+
# Check if fides_key is being changed and if it conflicts with an existing category
|
|
236
|
+
if (
|
|
237
|
+
"fides_key" in data
|
|
238
|
+
and data["fides_key"]
|
|
239
|
+
and data["fides_key"] != self.fides_key
|
|
240
|
+
):
|
|
241
|
+
existing_by_key = (
|
|
242
|
+
db.query(DataCategory)
|
|
243
|
+
.filter(DataCategory.fides_key == data["fides_key"])
|
|
244
|
+
.first()
|
|
245
|
+
)
|
|
246
|
+
if existing_by_key:
|
|
247
|
+
raise KeyOrNameAlreadyExists(
|
|
248
|
+
f'Data category with fides_key "{data["fides_key"]}" already exists.'
|
|
249
|
+
)
|
|
250
|
+
return super().update(db=db, data=data)
|
|
251
|
+
|
|
200
252
|
@classmethod
|
|
201
253
|
def from_fideslang_obj(
|
|
202
254
|
cls, data_category: FideslangDataCategory
|
|
@@ -228,6 +280,54 @@ class DataSubject(Base, FidesBase):
|
|
|
228
280
|
version_deprecated = Column(Text)
|
|
229
281
|
replaced_by = Column(Text)
|
|
230
282
|
|
|
283
|
+
@classmethod
|
|
284
|
+
def create(
|
|
285
|
+
cls: Type["DataSubject"],
|
|
286
|
+
db: Session,
|
|
287
|
+
*,
|
|
288
|
+
data: dict[str, Any],
|
|
289
|
+
check_name: bool = True,
|
|
290
|
+
) -> "DataSubject":
|
|
291
|
+
"""
|
|
292
|
+
Override create to skip name uniqueness check for data subjects.
|
|
293
|
+
|
|
294
|
+
DataSubject allows duplicate names - fides_key provides sufficient uniqueness.
|
|
295
|
+
Multiple subjects can share the same name as long as their keys differ.
|
|
296
|
+
"""
|
|
297
|
+
# Check if data subject with same fides_key already exists
|
|
298
|
+
if "fides_key" in data and data["fides_key"]:
|
|
299
|
+
existing_by_key = (
|
|
300
|
+
db.query(cls).filter(cls.fides_key == data["fides_key"]).first()
|
|
301
|
+
)
|
|
302
|
+
if existing_by_key:
|
|
303
|
+
raise KeyOrNameAlreadyExists(
|
|
304
|
+
f'Data subject with fides_key "{data["fides_key"]}" already exists.'
|
|
305
|
+
)
|
|
306
|
+
# Always skip name check - fides_key uniqueness is sufficient
|
|
307
|
+
return super().create(db=db, data=data, check_name=False)
|
|
308
|
+
|
|
309
|
+
def update(self, db: Session, *, data: dict[str, Any]) -> "DataSubject":
|
|
310
|
+
"""
|
|
311
|
+
Override update to check for existing data subjects with the same fides_key
|
|
312
|
+
when fides_key is being changed.
|
|
313
|
+
"""
|
|
314
|
+
# Check if fides_key is being changed and if it conflicts with an existing subject
|
|
315
|
+
if (
|
|
316
|
+
"fides_key" in data
|
|
317
|
+
and data["fides_key"]
|
|
318
|
+
and data["fides_key"] != self.fides_key
|
|
319
|
+
):
|
|
320
|
+
existing_by_key = (
|
|
321
|
+
db.query(DataSubject)
|
|
322
|
+
.filter(DataSubject.fides_key == data["fides_key"])
|
|
323
|
+
.first()
|
|
324
|
+
)
|
|
325
|
+
if existing_by_key:
|
|
326
|
+
raise KeyOrNameAlreadyExists(
|
|
327
|
+
f'Data subject with fides_key "{data["fides_key"]}" already exists.'
|
|
328
|
+
)
|
|
329
|
+
return super().update(db=db, data=data)
|
|
330
|
+
|
|
231
331
|
|
|
232
332
|
class DataUse(Base, FidesBase):
|
|
233
333
|
"""
|
|
@@ -261,6 +361,52 @@ class DataUse(Base, FidesBase):
|
|
|
261
361
|
remote_side=[fides_key],
|
|
262
362
|
)
|
|
263
363
|
|
|
364
|
+
@classmethod
|
|
365
|
+
def create(
|
|
366
|
+
cls: Type["DataUse"],
|
|
367
|
+
db: Session,
|
|
368
|
+
*,
|
|
369
|
+
data: dict[str, Any],
|
|
370
|
+
check_name: bool = True,
|
|
371
|
+
) -> "DataUse":
|
|
372
|
+
"""
|
|
373
|
+
Override create to skip name uniqueness check for hierarchical taxonomy.
|
|
374
|
+
|
|
375
|
+
DataUse is hierarchical - fides_key provides sufficient uniqueness.
|
|
376
|
+
Multiple uses can share the same name as long as their keys differ.
|
|
377
|
+
"""
|
|
378
|
+
# Check if data use with same fides_key already exists
|
|
379
|
+
if "fides_key" in data and data["fides_key"]:
|
|
380
|
+
existing_by_key = (
|
|
381
|
+
db.query(cls).filter(cls.fides_key == data["fides_key"]).first()
|
|
382
|
+
)
|
|
383
|
+
if existing_by_key:
|
|
384
|
+
raise KeyOrNameAlreadyExists(
|
|
385
|
+
f'Data use with fides_key "{data["fides_key"]}" already exists.'
|
|
386
|
+
)
|
|
387
|
+
# Always skip name check - fides_key uniqueness is sufficient
|
|
388
|
+
return super().create(db=db, data=data, check_name=False)
|
|
389
|
+
|
|
390
|
+
def update(self, db: Session, *, data: dict[str, Any]) -> "DataUse":
|
|
391
|
+
"""
|
|
392
|
+
Override update to check for existing data uses with the same fides_key
|
|
393
|
+
when fides_key is being changed.
|
|
394
|
+
"""
|
|
395
|
+
# Check if fides_key is being changed and if it conflicts with an existing use
|
|
396
|
+
if (
|
|
397
|
+
"fides_key" in data
|
|
398
|
+
and data["fides_key"]
|
|
399
|
+
and data["fides_key"] != self.fides_key
|
|
400
|
+
):
|
|
401
|
+
existing_by_key = (
|
|
402
|
+
db.query(DataUse).filter(DataUse.fides_key == data["fides_key"]).first()
|
|
403
|
+
)
|
|
404
|
+
if existing_by_key:
|
|
405
|
+
raise KeyOrNameAlreadyExists(
|
|
406
|
+
f'DataUse with fides_key "{data["fides_key"]}" already exists.'
|
|
407
|
+
)
|
|
408
|
+
return super().update(db=db, data=data)
|
|
409
|
+
|
|
264
410
|
@staticmethod
|
|
265
411
|
def get_parent_uses_from_key(data_use_key: str) -> Set[str]:
|
|
266
412
|
"""
|
|
@@ -308,7 +454,7 @@ class Dataset(Base, FidesBase):
|
|
|
308
454
|
Duplicate names are allowed.
|
|
309
455
|
"""
|
|
310
456
|
# Check if dataset with same fides_key already exists
|
|
311
|
-
if "fides_key" in data:
|
|
457
|
+
if "fides_key" in data and data["fides_key"]:
|
|
312
458
|
existing_by_key = (
|
|
313
459
|
db.query(cls).filter(cls.fides_key == data["fides_key"]).first()
|
|
314
460
|
)
|
|
@@ -461,6 +607,14 @@ class System(Base, FidesBase):
|
|
|
461
607
|
"Asset", back_populates="system", lazy="selectin", uselist=True, viewonly=True
|
|
462
608
|
)
|
|
463
609
|
|
|
610
|
+
system_groups = relationship(
|
|
611
|
+
"SystemGroup",
|
|
612
|
+
secondary="system_group_member",
|
|
613
|
+
back_populates="systems",
|
|
614
|
+
lazy="selectin",
|
|
615
|
+
viewonly=True,
|
|
616
|
+
)
|
|
617
|
+
|
|
464
618
|
@classmethod
|
|
465
619
|
def get_data_uses(
|
|
466
620
|
cls: Type[System], systems: List[System], include_parents: bool = True
|
|
@@ -764,11 +918,11 @@ class CustomFieldDefinition(Base):
|
|
|
764
918
|
name = Column(String, index=True, nullable=False)
|
|
765
919
|
description = Column(String)
|
|
766
920
|
field_type = Column(
|
|
767
|
-
|
|
921
|
+
String,
|
|
768
922
|
nullable=False,
|
|
769
923
|
)
|
|
770
924
|
allow_list_id = Column(String, ForeignKey(CustomFieldValueList.id), nullable=True)
|
|
771
|
-
resource_type = Column(
|
|
925
|
+
resource_type = Column(String, nullable=False)
|
|
772
926
|
field_definition = Column(String)
|
|
773
927
|
custom_field = relationship(
|
|
774
928
|
"CustomField",
|
|
@@ -832,7 +986,7 @@ class CustomField(Base):
|
|
|
832
986
|
|
|
833
987
|
__tablename__ = "plus_custom_field"
|
|
834
988
|
|
|
835
|
-
resource_type = Column(
|
|
989
|
+
resource_type = Column(String, nullable=False)
|
|
836
990
|
resource_id = Column(String, index=True, nullable=False)
|
|
837
991
|
custom_field_definition_id = Column(
|
|
838
992
|
String, ForeignKey(CustomFieldDefinition.id), nullable=False
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
from citext import CIText
|
|
4
|
+
from sqlalchemy import ARRAY, Column
|
|
5
|
+
from sqlalchemy import Enum as EnumColumn
|
|
6
|
+
from sqlalchemy import ForeignKey, String, UniqueConstraint
|
|
7
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
8
|
+
from sqlalchemy.orm import relationship
|
|
9
|
+
|
|
10
|
+
from fides.api.db.base_class import Base
|
|
11
|
+
from fides.api.models.fides_user import FidesUser
|
|
12
|
+
from fides.api.models.sql_models import System # type: ignore[attr-defined]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CustomTaxonomyColor(str, Enum):
|
|
16
|
+
WHITE = "taxonomy_white"
|
|
17
|
+
RED = "taxonomy_red"
|
|
18
|
+
ORANGE = "taxonomy_orange"
|
|
19
|
+
YELLOW = "taxonomy_yellow"
|
|
20
|
+
GREEN = "taxonomy_green"
|
|
21
|
+
BLUE = "taxonomy_blue"
|
|
22
|
+
PURPLE = "taxonomy_purple"
|
|
23
|
+
SANDSTONE = "sandstone"
|
|
24
|
+
MINOS = "minos"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SystemGroup(Base):
|
|
28
|
+
@declared_attr
|
|
29
|
+
def __tablename__(self) -> str:
|
|
30
|
+
return "system_group"
|
|
31
|
+
|
|
32
|
+
fides_key = Column(
|
|
33
|
+
String,
|
|
34
|
+
ForeignKey("taxonomy_element.fides_key", ondelete="CASCADE"),
|
|
35
|
+
nullable=False,
|
|
36
|
+
unique=True,
|
|
37
|
+
index=True,
|
|
38
|
+
)
|
|
39
|
+
label_color = Column(
|
|
40
|
+
EnumColumn(CustomTaxonomyColor, values_callable=lambda x: [i.value for i in x]),
|
|
41
|
+
nullable=True,
|
|
42
|
+
)
|
|
43
|
+
data_steward_username = Column(
|
|
44
|
+
CIText,
|
|
45
|
+
ForeignKey(FidesUser.username, ondelete="SET NULL"),
|
|
46
|
+
index=True,
|
|
47
|
+
nullable=True,
|
|
48
|
+
)
|
|
49
|
+
data_uses = Column(
|
|
50
|
+
ARRAY(String),
|
|
51
|
+
nullable=False,
|
|
52
|
+
server_default="{}",
|
|
53
|
+
default=list,
|
|
54
|
+
) # a list of `fides_key`s of `DataUse` records
|
|
55
|
+
data_steward = relationship(
|
|
56
|
+
"FidesUser", foreign_keys=[data_steward_username], lazy="selectin"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
systems = relationship(
|
|
60
|
+
System,
|
|
61
|
+
secondary="system_group_member",
|
|
62
|
+
back_populates="system_groups",
|
|
63
|
+
viewonly=True,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class SystemGroupMember(Base):
|
|
68
|
+
@declared_attr
|
|
69
|
+
def __tablename__(self) -> str:
|
|
70
|
+
return "system_group_member"
|
|
71
|
+
|
|
72
|
+
system_group_id = Column(
|
|
73
|
+
String(255), ForeignKey("system_group.id", ondelete="CASCADE"), index=True
|
|
74
|
+
)
|
|
75
|
+
system_id = Column(
|
|
76
|
+
String(255), ForeignKey("ctl_systems.id", ondelete="CASCADE"), index=True
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
__table_args__ = (
|
|
80
|
+
UniqueConstraint(
|
|
81
|
+
"system_group_id",
|
|
82
|
+
"system_id",
|
|
83
|
+
name="uq_system_group_member_group_system",
|
|
84
|
+
),
|
|
85
|
+
)
|
fides/api/models/taxonomy.py
CHANGED
|
@@ -17,11 +17,19 @@ from sqlalchemy.ext.associationproxy import association_proxy
|
|
|
17
17
|
from sqlalchemy.ext.declarative import declared_attr
|
|
18
18
|
from sqlalchemy.orm import RelationshipProperty, Session, relationship
|
|
19
19
|
|
|
20
|
-
from fides.api.common_exceptions import ValidationError
|
|
20
|
+
from fides.api.common_exceptions import KeyOrNameAlreadyExists, ValidationError
|
|
21
21
|
from fides.api.db.base_class import Base
|
|
22
22
|
from fides.api.models.sql_models import FidesBase # type: ignore[attr-defined]
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
# Legacy Fideslang taxonomy keys
|
|
25
|
+
LEGACY_TAXONOMY_KEYS = {
|
|
26
|
+
"data_category",
|
|
27
|
+
"data_use",
|
|
28
|
+
"data_subject",
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Taxonomies that are managed by Fides (legacy taxonomies and system group)
|
|
32
|
+
MANAGED_TAXONOMY_KEYS = {"data_category", "data_use", "data_subject", "system_group"}
|
|
25
33
|
|
|
26
34
|
|
|
27
35
|
class TargetType(str, Enum):
|
|
@@ -81,14 +89,23 @@ class Taxonomy(Base, FidesBase):
|
|
|
81
89
|
"""Create a new Taxonomy with proper handling of applies_to."""
|
|
82
90
|
# Disallow creating taxonomies that represent legacy types
|
|
83
91
|
fides_key = data.get("fides_key")
|
|
84
|
-
|
|
92
|
+
# Specifically exclude system_group to allow for creation during tests
|
|
93
|
+
# We already have unique constraints on fides_key to prevent duplicates on DB level
|
|
94
|
+
if fides_key in MANAGED_TAXONOMY_KEYS:
|
|
85
95
|
raise ValidationError(
|
|
86
96
|
f"Cannot create taxonomy '{fides_key}'. This is a taxonomy managed by the system."
|
|
87
97
|
)
|
|
88
|
-
applies_to = data.
|
|
98
|
+
applies_to = data.get("applies_to", [])
|
|
99
|
+
|
|
100
|
+
# Create a copy of data without applies_to to avoid modifying the input
|
|
101
|
+
data_without_applies_to = {
|
|
102
|
+
key: value for key, value in data.items() if key != "applies_to"
|
|
103
|
+
}
|
|
89
104
|
|
|
90
105
|
# Create the taxonomy
|
|
91
|
-
taxonomy: Taxonomy = super().create(
|
|
106
|
+
taxonomy: Taxonomy = super().create(
|
|
107
|
+
db=db, data=data_without_applies_to, check_name=check_name
|
|
108
|
+
)
|
|
92
109
|
|
|
93
110
|
# Reconcile allowed usages if applies_to was provided
|
|
94
111
|
if applies_to:
|
|
@@ -98,10 +115,15 @@ class Taxonomy(Base, FidesBase):
|
|
|
98
115
|
|
|
99
116
|
def update(self, db: Session, *, data: Dict[str, Any]) -> "Taxonomy":
|
|
100
117
|
"""Update a Taxonomy with proper handling of applies_to."""
|
|
101
|
-
applies_to = data.
|
|
118
|
+
applies_to = data.get("applies_to", None)
|
|
119
|
+
|
|
120
|
+
# Create a copy of data without applies_to to avoid modifying the input
|
|
121
|
+
data_without_applies_to = {
|
|
122
|
+
key: value for key, value in data.items() if key != "applies_to"
|
|
123
|
+
}
|
|
102
124
|
|
|
103
125
|
# Update the base fields
|
|
104
|
-
super().update(db=db, data=
|
|
126
|
+
super().update(db=db, data=data_without_applies_to)
|
|
105
127
|
|
|
106
128
|
# If applies_to was provided, reconcile allowed usages
|
|
107
129
|
if applies_to is not None:
|
|
@@ -154,7 +176,7 @@ class TaxonomyAllowedUsage(Base):
|
|
|
154
176
|
|
|
155
177
|
target_type can be either:
|
|
156
178
|
- A generic type: "system", "privacy_declaration", "taxonomy"
|
|
157
|
-
- A taxonomy key: "
|
|
179
|
+
- A taxonomy key: "data_category", "data_use", etc.
|
|
158
180
|
"""
|
|
159
181
|
|
|
160
182
|
@declared_attr
|
|
@@ -181,7 +203,7 @@ class TaxonomyAllowedUsage(Base):
|
|
|
181
203
|
)
|
|
182
204
|
target_type: Column[str] = Column(
|
|
183
205
|
String, primary_key=True
|
|
184
|
-
) # Can be "system", "dataset", OR a taxonomy key like "
|
|
206
|
+
) # Can be "system", "dataset", OR a taxonomy key like "data_category"
|
|
185
207
|
|
|
186
208
|
|
|
187
209
|
class TaxonomyElement(Base, FidesBase):
|
|
@@ -232,6 +254,66 @@ class TaxonomyElement(Base, FidesBase):
|
|
|
232
254
|
remote_side="TaxonomyElement.fides_key",
|
|
233
255
|
)
|
|
234
256
|
|
|
257
|
+
@classmethod
|
|
258
|
+
def create(
|
|
259
|
+
cls: Type["TaxonomyElement"],
|
|
260
|
+
db: Session,
|
|
261
|
+
*,
|
|
262
|
+
data: dict[str, Any],
|
|
263
|
+
check_name: bool = True,
|
|
264
|
+
) -> "TaxonomyElement":
|
|
265
|
+
"""
|
|
266
|
+
Override create to skip name uniqueness check for hierarchical taxonomy.
|
|
267
|
+
|
|
268
|
+
TaxonomyElement is hierarchical - fides_key provides sufficient uniqueness.
|
|
269
|
+
Multiple elements can share the same name as long as their keys differ.
|
|
270
|
+
"""
|
|
271
|
+
# Check if taxonomy element with same fides_key already exists within the same taxonomy_type
|
|
272
|
+
if "fides_key" in data and data["fides_key"] and "taxonomy_type" in data:
|
|
273
|
+
existing_by_key = (
|
|
274
|
+
db.query(cls)
|
|
275
|
+
.filter(
|
|
276
|
+
cls.fides_key == data["fides_key"],
|
|
277
|
+
cls.taxonomy_type == data["taxonomy_type"],
|
|
278
|
+
)
|
|
279
|
+
.first()
|
|
280
|
+
)
|
|
281
|
+
if existing_by_key:
|
|
282
|
+
raise KeyOrNameAlreadyExists(
|
|
283
|
+
f'Taxonomy element with fides_key "{data["fides_key"]}" already exists in taxonomy "{data["taxonomy_type"]}".'
|
|
284
|
+
)
|
|
285
|
+
# Always skip name check - fides_key uniqueness is sufficient
|
|
286
|
+
return super().create(db=db, data=data, check_name=False)
|
|
287
|
+
|
|
288
|
+
def update(self, db: Session, *, data: dict[str, Any]) -> "TaxonomyElement":
|
|
289
|
+
"""
|
|
290
|
+
Override update to check for existing taxonomy elements with the same fides_key
|
|
291
|
+
within the same taxonomy_type when fides_key is being changed.
|
|
292
|
+
"""
|
|
293
|
+
# Check if fides_key is being changed and if it conflicts with an existing element
|
|
294
|
+
if (
|
|
295
|
+
"fides_key" in data
|
|
296
|
+
and data["fides_key"]
|
|
297
|
+
and data["fides_key"] != self.fides_key
|
|
298
|
+
):
|
|
299
|
+
# Ensure taxonomy_type is available (either in data or from self)
|
|
300
|
+
taxonomy_type = data.get("taxonomy_type") or self.taxonomy_type
|
|
301
|
+
if taxonomy_type:
|
|
302
|
+
existing_by_key = (
|
|
303
|
+
db.query(TaxonomyElement)
|
|
304
|
+
.filter(
|
|
305
|
+
TaxonomyElement.fides_key == data["fides_key"],
|
|
306
|
+
TaxonomyElement.taxonomy_type == taxonomy_type,
|
|
307
|
+
TaxonomyElement.id != self.id, # Exclude current element
|
|
308
|
+
)
|
|
309
|
+
.first()
|
|
310
|
+
)
|
|
311
|
+
if existing_by_key:
|
|
312
|
+
raise KeyOrNameAlreadyExists(
|
|
313
|
+
f'Taxonomy element with fides_key "{data["fides_key"]}" already exists in taxonomy "{taxonomy_type}".'
|
|
314
|
+
)
|
|
315
|
+
return super().update(db=db, data=data) # type: ignore[return-value]
|
|
316
|
+
|
|
235
317
|
|
|
236
318
|
class TaxonomyUsage(Base):
|
|
237
319
|
"""
|
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""SQLAlchemy model for the v3 privacy_preferences table."""
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import ( # type: ignore[attr-defined]
|
|
4
|
+
BigInteger,
|
|
5
|
+
Boolean,
|
|
6
|
+
Column,
|
|
7
|
+
DateTime,
|
|
8
|
+
Identity,
|
|
9
|
+
Text,
|
|
10
|
+
text,
|
|
11
|
+
)
|
|
12
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
|
13
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
14
|
+
from sqlalchemy_utils.types.encrypted.encrypted_type import (
|
|
15
|
+
AesGcmEngine,
|
|
16
|
+
StringEncryptedType,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from fides.api.cryptography.cryptographic_util import hash_value_with_salt
|
|
20
|
+
from fides.api.cryptography.identity_salt import get_identity_salt
|
|
21
|
+
from fides.api.db.base_class import Base
|
|
22
|
+
from fides.api.schemas.redis_cache import MultiValue
|
|
23
|
+
from fides.config import CONFIG
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class PrivacyPreferences(Base):
|
|
27
|
+
"""
|
|
28
|
+
Model for the v3 privacy_preferences table.
|
|
29
|
+
This is used for the v3 privacy preferences API.
|
|
30
|
+
|
|
31
|
+
This table stores privacy preference records with a partitioning scheme
|
|
32
|
+
based on the is_latest flag, splitting records into current and historic partitions.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
@declared_attr
|
|
36
|
+
def __tablename__(self) -> str:
|
|
37
|
+
return "privacy_preferences"
|
|
38
|
+
|
|
39
|
+
# Override the default id column from Base (which is a String UUID)
|
|
40
|
+
# with a BigInteger identity column for this table
|
|
41
|
+
id = Column(
|
|
42
|
+
BigInteger, # type: ignore[arg-type]
|
|
43
|
+
Identity(start=1, increment=1, always=True),
|
|
44
|
+
primary_key=True,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Searchable/queryable data stored as JSONB
|
|
48
|
+
search_data = Column(JSONB, nullable=True)
|
|
49
|
+
|
|
50
|
+
# Full record data stored as encrypted text (contains PII)
|
|
51
|
+
record_data = Column(
|
|
52
|
+
StringEncryptedType(
|
|
53
|
+
type_in=Text(),
|
|
54
|
+
key=CONFIG.security.app_encryption_key,
|
|
55
|
+
engine=AesGcmEngine,
|
|
56
|
+
padding="pkcs5",
|
|
57
|
+
),
|
|
58
|
+
nullable=True,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# Partition key - determines if record goes to _current or _historic partition
|
|
62
|
+
is_latest = Column(
|
|
63
|
+
Boolean, nullable=False, server_default=text("false"), primary_key=True
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Override base class timestamp columns to match migration
|
|
67
|
+
created_at = Column(
|
|
68
|
+
DateTime(timezone=True), nullable=False, server_default=text("now()")
|
|
69
|
+
)
|
|
70
|
+
updated_at = Column(DateTime(timezone=True), nullable=True)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
def hash_value(
|
|
74
|
+
cls,
|
|
75
|
+
value: MultiValue,
|
|
76
|
+
encoding: str = "UTF-8",
|
|
77
|
+
) -> str:
|
|
78
|
+
"""Utility function to hash the value with a generated salt"""
|
|
79
|
+
salt = get_identity_salt()
|
|
80
|
+
value_str = str(value)
|
|
81
|
+
hashed_value = hash_value_with_salt(
|
|
82
|
+
value_str.encode(encoding),
|
|
83
|
+
salt.encode(encoding),
|
|
84
|
+
)
|
|
85
|
+
return hashed_value
|
fides/api/models/worker_task.py
CHANGED
|
@@ -17,6 +17,14 @@ class ExecutionLogStatus(enum.Enum):
|
|
|
17
17
|
awaiting_processing = "paused" # "paused" in the database to avoid a migration, but use "awaiting_processing" in the app
|
|
18
18
|
retrying = "retrying"
|
|
19
19
|
skipped = "skipped"
|
|
20
|
+
polling = "polling"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Statuses that can be resumed
|
|
24
|
+
RESUMABLE_EXECUTION_LOG_STATUSES = [
|
|
25
|
+
ExecutionLogStatus.pending,
|
|
26
|
+
ExecutionLogStatus.polling,
|
|
27
|
+
]
|
|
20
28
|
|
|
21
29
|
|
|
22
30
|
class WorkerTask:
|
fides/api/oauth/roles.py
CHANGED
|
@@ -16,6 +16,7 @@ from fides.common.api.scope_registry import (
|
|
|
16
16
|
DATA_USE_READ,
|
|
17
17
|
DATASET_READ,
|
|
18
18
|
EVALUATION_READ,
|
|
19
|
+
HEAP_DUMP_EXEC,
|
|
19
20
|
MASKING_EXEC,
|
|
20
21
|
MASKING_READ,
|
|
21
22
|
MESSAGING_CREATE_OR_UPDATE,
|
|
@@ -26,6 +27,7 @@ from fides.common.api.scope_registry import (
|
|
|
26
27
|
PRIVACY_EXPERIENCE_READ,
|
|
27
28
|
PRIVACY_NOTICE_READ,
|
|
28
29
|
PRIVACY_REQUEST_CALLBACK_RESUME,
|
|
30
|
+
PRIVACY_REQUEST_CREATE,
|
|
29
31
|
PRIVACY_REQUEST_DELETE,
|
|
30
32
|
PRIVACY_REQUEST_EMAIL_INTEGRATIONS_SEND,
|
|
31
33
|
PRIVACY_REQUEST_MANUAL_STEPS_RESPOND,
|
|
@@ -88,6 +90,7 @@ approver_scopes = [
|
|
|
88
90
|
PRIVACY_REQUEST_UPLOAD_DATA,
|
|
89
91
|
PRIVACY_REQUEST_VIEW_DATA,
|
|
90
92
|
PRIVACY_REQUEST_DELETE,
|
|
93
|
+
PRIVACY_REQUEST_CREATE, # allows approvers to create new privacy requests
|
|
91
94
|
USER_READ, # allows approver to view user management table and update their own password
|
|
92
95
|
PRIVACY_REQUEST_MANUAL_STEPS_REVIEW, # allows approvers to see all manual steps
|
|
93
96
|
]
|
|
@@ -143,6 +146,7 @@ not_contributor_scopes = [
|
|
|
143
146
|
PRIVACY_REQUEST_NOTIFICATIONS_CREATE_OR_UPDATE,
|
|
144
147
|
PRIVACY_REQUEST_EMAIL_INTEGRATIONS_SEND,
|
|
145
148
|
USER_PERMISSION_ASSIGN_OWNERS,
|
|
149
|
+
HEAP_DUMP_EXEC,
|
|
146
150
|
]
|
|
147
151
|
|
|
148
152
|
ROLES_TO_SCOPES_MAPPING: Dict[str, List] = {
|
|
@@ -53,8 +53,11 @@ class NotificationApplicationConfig(FidesSchema):
|
|
|
53
53
|
|
|
54
54
|
@field_validator("notification_service_type", mode="before")
|
|
55
55
|
@classmethod
|
|
56
|
-
def validate_notification_service_type(cls, value: str) -> Optional[str]:
|
|
56
|
+
def validate_notification_service_type(cls, value: Optional[str]) -> Optional[str]:
|
|
57
57
|
"""Ensure the provided type is a valid value."""
|
|
58
|
+
if value is None:
|
|
59
|
+
return None # Allow None values for disabling messaging
|
|
60
|
+
|
|
58
61
|
value = value.lower() # force lowercase for safety
|
|
59
62
|
try:
|
|
60
63
|
MessagingServiceType[value]
|
|
@@ -98,6 +101,31 @@ class ConsentConfig(FidesSchema):
|
|
|
98
101
|
model_config = ConfigDict(extra="forbid")
|
|
99
102
|
|
|
100
103
|
|
|
104
|
+
class DuplicateDetectionApplicationConfig(FidesSchema):
|
|
105
|
+
"""
|
|
106
|
+
API model - configuration settings for duplicate privacy request detection.
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
enabled: Optional[bool] = Field(
|
|
110
|
+
default=False,
|
|
111
|
+
description="Whether duplicate detection is enabled. Disabled by default.",
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
time_window_days: Optional[int] = Field(
|
|
115
|
+
default=365,
|
|
116
|
+
description="Time window in days for duplicate detection. Default is 1 year.",
|
|
117
|
+
ge=1,
|
|
118
|
+
le=3650, # Max 10 years
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
match_identity_fields: Optional[List[str]] = Field(
|
|
122
|
+
default=["email"],
|
|
123
|
+
description="Identity field names to match on for duplicate detection (e.g., 'email', 'phone_number'). Default is email only.",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
model_config = ConfigDict(extra="forbid")
|
|
127
|
+
|
|
128
|
+
|
|
101
129
|
class SecurityApplicationConfig(FidesSchema):
|
|
102
130
|
# only valid URLs should be set as cors_origins
|
|
103
131
|
# for advanced usage of non-URLs, e.g. wildcards (`*`), the related
|
|
@@ -126,6 +154,9 @@ class ApplicationConfig(FidesSchema):
|
|
|
126
154
|
consent: Optional[ConsentConfig] = None
|
|
127
155
|
admin_ui: Optional[AdminUIConfig] = None
|
|
128
156
|
privacy_center: Optional[PrivacyCenterConfig] = None
|
|
157
|
+
privacy_request_duplicate_detection: Optional[
|
|
158
|
+
DuplicateDetectionApplicationConfig
|
|
159
|
+
] = None
|
|
129
160
|
|
|
130
161
|
@model_validator(mode="before")
|
|
131
162
|
@classmethod
|