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,311 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
3
|
+
|
|
4
|
+
from sqlalchemy import Column, Integer, String
|
|
5
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
|
6
|
+
from sqlalchemy.orm import Session
|
|
7
|
+
|
|
8
|
+
from fides.api.db.base_class import Base
|
|
9
|
+
from fides.api.db.util import EnumColumn
|
|
10
|
+
from fides.api.task.conditional_dependencies.schemas import (
|
|
11
|
+
Condition,
|
|
12
|
+
ConditionGroup,
|
|
13
|
+
ConditionLeaf,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from sqlalchemy.orm.relationships import RelationshipProperty
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ConditionalDependencyError(Exception):
|
|
21
|
+
"""Exception for conditional dependency errors."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, message: str):
|
|
24
|
+
self.message = message
|
|
25
|
+
super().__init__(self.message)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ConditionalDependencyType(str, Enum):
|
|
29
|
+
"""Shared enum for conditional dependency node types.
|
|
30
|
+
|
|
31
|
+
Attributes:
|
|
32
|
+
leaf: Individual condition (field_address + operator + value)
|
|
33
|
+
group: Collection of conditions with logical operator (AND/OR)
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
leaf = "leaf"
|
|
37
|
+
group = "group"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class ConditionalDependencyBase(Base):
|
|
41
|
+
"""Abstract base class for all conditional dependency models.
|
|
42
|
+
|
|
43
|
+
This class provides a common structure for building hierarchical condition trees
|
|
44
|
+
that can be evaluated to determine when certain actions should be taken.
|
|
45
|
+
|
|
46
|
+
Architecture:
|
|
47
|
+
- Tree Structure: Supports parent-child relationships for complex logic
|
|
48
|
+
- Two Node Types: 'leaf' (individual conditions) and 'group' (logical operators)
|
|
49
|
+
- Flexible Schema: Uses JSONB for dynamic value storage
|
|
50
|
+
- Ordered Evaluation: sort_order ensures predictable condition processing
|
|
51
|
+
|
|
52
|
+
Concrete Implementations:
|
|
53
|
+
- ManualTaskConditionalDependency: Single-type hierarchy for manual tasks
|
|
54
|
+
- Single-type hierarchy means one condition tree per manual task, this condition
|
|
55
|
+
may be a nested group of conditions or a single leaf condition.
|
|
56
|
+
- DigestCondition: Multi-type hierarchy with digest_condition_type separation
|
|
57
|
+
- Multi-type hierarchy means one digest_config can have multiple independent
|
|
58
|
+
condition trees, each with a different digest_condition_type (RECEIVER, CONTENT, PRIORITY)
|
|
59
|
+
- Within each tree, all nodes must have the same digest_condition_type
|
|
60
|
+
- This enables separate condition logic for different aspects of digest processing
|
|
61
|
+
|
|
62
|
+
Usage Pattern:
|
|
63
|
+
1. Inherit from this base class
|
|
64
|
+
2. Define your table name with @declared_attr
|
|
65
|
+
3. Add foreign key relationships (parent_id, entity_id)
|
|
66
|
+
4. Implement get_root_condition() classmethod
|
|
67
|
+
5. Add any domain-specific columns
|
|
68
|
+
|
|
69
|
+
Example Tree Structure:
|
|
70
|
+
Root Group (AND)
|
|
71
|
+
├── Leaf: user.role == "admin"
|
|
72
|
+
├── Leaf: request.priority >= 3
|
|
73
|
+
└── Child Group (OR)
|
|
74
|
+
├── Leaf: user.department == "security"
|
|
75
|
+
└── Leaf: user.department == "compliance"
|
|
76
|
+
|
|
77
|
+
Note:
|
|
78
|
+
- This is a SQLAlchemy abstract model (__abstract__ = True)
|
|
79
|
+
- No database table is created for this base class
|
|
80
|
+
- Subclasses must implement get_root_condition()
|
|
81
|
+
- The 'children' relationship must be defined in concrete subclasses
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
__abstract__ = True
|
|
85
|
+
|
|
86
|
+
# Tree structure - parent_id defined in concrete classes for proper foreign keys
|
|
87
|
+
condition_type = Column(
|
|
88
|
+
EnumColumn(ConditionalDependencyType), nullable=False, index=True
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Condition details (for leaf nodes)
|
|
92
|
+
field_address = Column(String(255), nullable=True) # For leaf conditions
|
|
93
|
+
operator = Column(String, nullable=True) # For leaf conditions
|
|
94
|
+
value = Column(JSONB, nullable=True) # For leaf conditions
|
|
95
|
+
logical_operator = Column(String, nullable=True) # 'and' or 'or' for groups
|
|
96
|
+
|
|
97
|
+
# Ordering
|
|
98
|
+
sort_order = Column(Integer, nullable=False, default=0, index=True)
|
|
99
|
+
|
|
100
|
+
def to_correct_condition_type(self) -> Union[ConditionLeaf, ConditionGroup]:
|
|
101
|
+
"""Convert this database model to the correct condition type."""
|
|
102
|
+
if self.condition_type == ConditionalDependencyType.leaf:
|
|
103
|
+
return self.to_condition_leaf()
|
|
104
|
+
return self.to_condition_group()
|
|
105
|
+
|
|
106
|
+
def to_condition_leaf(self) -> ConditionLeaf:
|
|
107
|
+
"""Convert this database model to a ConditionLeaf schema object.
|
|
108
|
+
|
|
109
|
+
This method transforms a leaf-type conditional dependency from its database
|
|
110
|
+
representation into a structured ConditionLeaf object that can be used for
|
|
111
|
+
evaluation and serialization.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
ConditionLeaf: Schema object containing field_address, operator, and value
|
|
115
|
+
|
|
116
|
+
Raises:
|
|
117
|
+
ValueError: If this condition is not a leaf type (i.e., it's a group)
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
>>> condition = SomeConcreteConditionalDependency(
|
|
121
|
+
... condition_type="leaf",
|
|
122
|
+
... field_address="user.role",
|
|
123
|
+
... operator="eq",
|
|
124
|
+
... value="admin"
|
|
125
|
+
... )
|
|
126
|
+
>>> leaf = condition.to_condition_leaf()
|
|
127
|
+
>>> print(leaf.field_address) # "user.role"
|
|
128
|
+
"""
|
|
129
|
+
if self.condition_type != ConditionalDependencyType.leaf:
|
|
130
|
+
raise ValueError(
|
|
131
|
+
f"Cannot convert {self.condition_type} condition to leaf. "
|
|
132
|
+
f"Only conditions with condition_type='leaf' can be converted to ConditionLeaf. "
|
|
133
|
+
f"This condition has type '{self.condition_type}' and should be converted using to_condition_group()."
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
return ConditionLeaf(
|
|
137
|
+
field_address=self.field_address, operator=self.operator, value=self.value
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
def to_condition_group(self) -> ConditionGroup:
|
|
141
|
+
"""Convert this database model to a ConditionGroup schema object.
|
|
142
|
+
|
|
143
|
+
This method transforms a group-type conditional dependency from its database
|
|
144
|
+
representation into a structured ConditionGroup object. It recursively processes
|
|
145
|
+
all child conditions, maintaining the tree structure and sort order.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
ConditionGroup: Schema object containing logical_operator and child conditions
|
|
149
|
+
|
|
150
|
+
Raises:
|
|
151
|
+
ValueError: If this condition is not a group type (i.e., it's a leaf)
|
|
152
|
+
AttributeError: If the 'children' relationship is not properly defined
|
|
153
|
+
|
|
154
|
+
Example:
|
|
155
|
+
>>> # Assume we have a group with two leaf children
|
|
156
|
+
>>> group_condition = SomeConcreteConditionalDependency(
|
|
157
|
+
... condition_type="group",
|
|
158
|
+
... logical_operator="and"
|
|
159
|
+
... )
|
|
160
|
+
>>> condition_group = group_condition.to_condition_group()
|
|
161
|
+
>>> print(condition_group.logical_operator) # "and"
|
|
162
|
+
>>> print(len(condition_group.conditions)) # 2
|
|
163
|
+
"""
|
|
164
|
+
if self.condition_type != ConditionalDependencyType.group:
|
|
165
|
+
raise ValueError(
|
|
166
|
+
f"Cannot convert {self.condition_type} condition to group. "
|
|
167
|
+
f"Only conditions with condition_type='group' can be converted to ConditionGroup. "
|
|
168
|
+
f"This condition has type '{self.condition_type}' and should be converted using to_condition_leaf()."
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
# Recursively build children - note: 'children' must be defined in concrete classes
|
|
172
|
+
try:
|
|
173
|
+
children_list = [child for child in self.children] # type: ignore[attr-defined]
|
|
174
|
+
except AttributeError:
|
|
175
|
+
raise AttributeError(
|
|
176
|
+
f"The 'children' relationship is not defined on {self.__class__.__name__}. "
|
|
177
|
+
f"Concrete subclasses must define a 'children' relationship for group conditions to work properly."
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
child_conditions = []
|
|
181
|
+
for child in sorted(children_list, key=lambda x: x.sort_order):
|
|
182
|
+
if child.condition_type == ConditionalDependencyType.leaf:
|
|
183
|
+
child_conditions.append(child.to_condition_leaf())
|
|
184
|
+
elif child.condition_type == ConditionalDependencyType.group:
|
|
185
|
+
child_conditions.append(child.to_condition_group())
|
|
186
|
+
else:
|
|
187
|
+
raise ValueError(
|
|
188
|
+
f"Unknown condition_type '{child.condition_type}' found in child condition. "
|
|
189
|
+
f"Expected '{ConditionalDependencyType.leaf}' or '{ConditionalDependencyType.group}'."
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
return ConditionGroup(
|
|
193
|
+
logical_operator=self.logical_operator, conditions=child_conditions
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
@classmethod
|
|
197
|
+
def get_root_condition(cls, db: Session, **kwargs: Any) -> Optional[Condition]:
|
|
198
|
+
"""Get the root condition tree for a parent entity.
|
|
199
|
+
|
|
200
|
+
This abstract method must be implemented by concrete subclasses to define
|
|
201
|
+
how to retrieve the root condition node for their specific use case.
|
|
202
|
+
The root condition represents the top-level node in a condition tree.
|
|
203
|
+
|
|
204
|
+
Implementation Guidelines:
|
|
205
|
+
1. Query for conditions with parent_id=None for the given parent entity
|
|
206
|
+
2. Return None if no root condition exists
|
|
207
|
+
3. Convert the database model to a Condition schema object
|
|
208
|
+
4. Handle any domain-specific filtering or validation
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
db: SQLAlchemy database session for querying
|
|
212
|
+
**kwargs: Keyword arguments specific to each implementation.
|
|
213
|
+
Examples:
|
|
214
|
+
- manual_task_id: ID of the manual task (for single-type hierarchies)
|
|
215
|
+
- digest_config_id: ID of the digest config (for multi-type hierarchies)
|
|
216
|
+
- digest_condition_type: Type of digest condition (for multi-type hierarchies)
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
Optional[Condition]: Root condition tree (ConditionLeaf or ConditionGroup) or None
|
|
220
|
+
if no conditions exist for the specified criteria
|
|
221
|
+
|
|
222
|
+
Raises:
|
|
223
|
+
NotImplementedError: If called on the base class directly
|
|
224
|
+
|
|
225
|
+
Example Implementation:
|
|
226
|
+
>>> @classmethod
|
|
227
|
+
>>> def get_root_condition(cls, db: Session, *, manual_task_id: str) -> Optional[Condition]:
|
|
228
|
+
... root = db.query(cls).filter(
|
|
229
|
+
... cls.manual_task_id == manual_task_id,
|
|
230
|
+
... cls.parent_id.is_(None)
|
|
231
|
+
... ).first()
|
|
232
|
+
... if not root:
|
|
233
|
+
... return None
|
|
234
|
+
... return root.to_condition_leaf() if root.condition_type == 'leaf' else root.to_condition_group()
|
|
235
|
+
"""
|
|
236
|
+
raise NotImplementedError(
|
|
237
|
+
f"Subclasses of {cls.__name__} must implement get_root_condition(). "
|
|
238
|
+
f"This method should query for the root condition (parent_id=None) "
|
|
239
|
+
f"and return it as a Condition schema object, or None if not found. "
|
|
240
|
+
f"See the docstring for implementation guidelines and examples."
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
def get_depth(self) -> int:
|
|
244
|
+
"""Calculate the depth of this node in the condition tree.
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
int: Depth level (0 for root, 1 for direct children, etc.)
|
|
248
|
+
|
|
249
|
+
Note:
|
|
250
|
+
Requires the 'parent' relationship to be defined in concrete classes.
|
|
251
|
+
"""
|
|
252
|
+
depth = 0
|
|
253
|
+
current = self
|
|
254
|
+
try:
|
|
255
|
+
while hasattr(current, "parent") and current.parent is not None: # type: ignore[attr-defined]
|
|
256
|
+
depth += 1
|
|
257
|
+
current = current.parent # type: ignore[attr-defined]
|
|
258
|
+
except AttributeError:
|
|
259
|
+
# If parent relationship not defined, we can't calculate depth
|
|
260
|
+
pass
|
|
261
|
+
return depth
|
|
262
|
+
|
|
263
|
+
def get_tree_summary(self) -> str:
|
|
264
|
+
"""Generate a human-readable summary of this condition tree.
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
str: Multi-line string representation of the condition tree structure
|
|
268
|
+
|
|
269
|
+
Example:
|
|
270
|
+
>>> print(condition.get_tree_summary())
|
|
271
|
+
Group (AND) [depth: 0, order: 0]
|
|
272
|
+
├── Leaf: user.role == "admin" [depth: 1, order: 0]
|
|
273
|
+
├── Leaf: request.priority >= 3 [depth: 1, order: 1]
|
|
274
|
+
└── Group (OR) [depth: 1, order: 2]
|
|
275
|
+
├── Leaf: user.dept == "security" [depth: 2, order: 0]
|
|
276
|
+
└── Leaf: user.dept == "compliance" [depth: 2, order: 1]
|
|
277
|
+
"""
|
|
278
|
+
|
|
279
|
+
def _build_tree_lines(
|
|
280
|
+
node: "ConditionalDependencyBase", prefix: str = "", is_last: bool = True
|
|
281
|
+
) -> list[str]:
|
|
282
|
+
lines = []
|
|
283
|
+
|
|
284
|
+
# Current node info
|
|
285
|
+
if node.condition_type == ConditionalDependencyType.leaf:
|
|
286
|
+
node_desc = f"Leaf: {node.field_address} {node.operator} {node.value}"
|
|
287
|
+
else:
|
|
288
|
+
node_desc = f"Group ({node.logical_operator.upper() if node.logical_operator else 'UNKNOWN'})"
|
|
289
|
+
|
|
290
|
+
depth = node.get_depth()
|
|
291
|
+
connector = "└── " if is_last else "├── "
|
|
292
|
+
lines.append(
|
|
293
|
+
f"{prefix}{connector}{node_desc} [depth: {depth}, order: {node.sort_order}]"
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
# Add children if this is a group
|
|
297
|
+
if node.condition_type == ConditionalDependencyType.group:
|
|
298
|
+
try:
|
|
299
|
+
children = sorted([child for child in node.children], key=lambda x: x.sort_order) # type: ignore[attr-defined]
|
|
300
|
+
for i, child in enumerate(children):
|
|
301
|
+
is_last_child = i == len(children) - 1
|
|
302
|
+
child_prefix = prefix + (" " if is_last else "│ ")
|
|
303
|
+
lines.extend(
|
|
304
|
+
_build_tree_lines(child, child_prefix, is_last_child)
|
|
305
|
+
)
|
|
306
|
+
except AttributeError:
|
|
307
|
+
lines.append(f"{prefix} [children relationship not defined]")
|
|
308
|
+
|
|
309
|
+
return lines
|
|
310
|
+
|
|
311
|
+
return "\n".join(_build_tree_lines(self))
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import enum
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import Column, Enum, ForeignKey, String
|
|
4
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
5
|
+
from sqlalchemy.orm import relationship
|
|
6
|
+
from sqlalchemy_utils.types.encrypted.encrypted_type import (
|
|
7
|
+
AesGcmEngine,
|
|
8
|
+
StringEncryptedType,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from fides.api.db.base_class import Base
|
|
12
|
+
from fides.api.models.connectionconfig import ConnectionConfig
|
|
13
|
+
|
|
14
|
+
# pylint: disable=unused-import
|
|
15
|
+
from fides.api.models.sql_models import System # type: ignore[attr-defined]
|
|
16
|
+
from fides.config import CONFIG
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class OAuthGrantType(enum.Enum):
|
|
20
|
+
authorization_code = "authorization_code"
|
|
21
|
+
client_credentials = "client_credentials"
|
|
22
|
+
password = "password"
|
|
23
|
+
implicit = "implicit"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class OAuthConfig(Base):
|
|
27
|
+
"""
|
|
28
|
+
Stores credentials to connect fidesops to anything that uses OAuth2 for authentication.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
@declared_attr
|
|
32
|
+
def __tablename__(cls) -> str:
|
|
33
|
+
"""Overriding base class method to set the table name."""
|
|
34
|
+
return "oauth_config"
|
|
35
|
+
|
|
36
|
+
connection_config_id = Column(
|
|
37
|
+
String, ForeignKey(ConnectionConfig.id_field_path), nullable=False
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
grant_type = Column(Enum(OAuthGrantType), nullable=False)
|
|
41
|
+
token_url = Column(String, nullable=False)
|
|
42
|
+
scope = Column(String, nullable=True)
|
|
43
|
+
client_id = Column(String, nullable=False)
|
|
44
|
+
client_secret = Column(
|
|
45
|
+
StringEncryptedType(
|
|
46
|
+
String,
|
|
47
|
+
CONFIG.security.app_encryption_key,
|
|
48
|
+
AesGcmEngine,
|
|
49
|
+
"pkcs5",
|
|
50
|
+
),
|
|
51
|
+
nullable=False,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
connection_config = relationship(
|
|
55
|
+
"ConnectionConfig",
|
|
56
|
+
back_populates="oauth_config",
|
|
57
|
+
)
|
|
@@ -71,7 +71,8 @@ class ConnectionType(enum.Enum):
|
|
|
71
71
|
timescale = "timescale"
|
|
72
72
|
website = "website"
|
|
73
73
|
# Test connection types, used for testing purposes only
|
|
74
|
-
|
|
74
|
+
test_datastore = "test_datastore" # used for ConfigurableTestMonitor
|
|
75
|
+
test_website = "test_website" # used for ConfigurableTestWebsiteMonitor
|
|
75
76
|
|
|
76
77
|
@property
|
|
77
78
|
def human_readable(self) -> str:
|
|
@@ -109,6 +110,7 @@ class ConnectionType(enum.Enum):
|
|
|
109
110
|
ConnectionType.sovrn.value: "Sovrn",
|
|
110
111
|
ConnectionType.timescale.value: "TimescaleDB",
|
|
111
112
|
ConnectionType.website.value: "Website",
|
|
113
|
+
ConnectionType.test_datastore.value: "Test Datastore Connector -- not for production use",
|
|
112
114
|
ConnectionType.test_website.value: "Test Website Connector -- not for production use",
|
|
113
115
|
}
|
|
114
116
|
try:
|
|
@@ -155,6 +157,7 @@ class ConnectionType(enum.Enum):
|
|
|
155
157
|
ConnectionType.sovrn.value: SystemType.email,
|
|
156
158
|
ConnectionType.timescale.value: SystemType.database,
|
|
157
159
|
ConnectionType.website.value: SystemType.website,
|
|
160
|
+
ConnectionType.test_datastore.value: SystemType.database,
|
|
158
161
|
ConnectionType.test_website.value: SystemType.website,
|
|
159
162
|
}
|
|
160
163
|
|
|
@@ -261,6 +264,13 @@ class ConnectionConfig(Base):
|
|
|
261
264
|
ARRAY(Enum(ActionType, native_enum=False)), unique=False, nullable=True
|
|
262
265
|
)
|
|
263
266
|
|
|
267
|
+
oauth_config = relationship( # type: ignore[misc]
|
|
268
|
+
"OAuthConfig",
|
|
269
|
+
back_populates="connection_config",
|
|
270
|
+
cascade="all, delete-orphan",
|
|
271
|
+
uselist=False,
|
|
272
|
+
)
|
|
273
|
+
|
|
264
274
|
@property
|
|
265
275
|
def system_key(self) -> Optional[str]:
|
|
266
276
|
"""Property for caching a system identifier for systems (or connector names as a fallback) for consent reporting"""
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from .classification_benchmark import ClassificationBenchmark
|
|
1
2
|
from .core import (
|
|
2
3
|
DiffStatus,
|
|
3
4
|
MonitorConfig,
|
|
@@ -16,8 +17,10 @@ from .monitor_task import (
|
|
|
16
17
|
create_monitor_task_with_execution_log,
|
|
17
18
|
update_monitor_task_with_execution_log,
|
|
18
19
|
)
|
|
20
|
+
from .staged_resource_error import StagedResourceError
|
|
19
21
|
|
|
20
22
|
__all__ = [
|
|
23
|
+
"ClassificationBenchmark",
|
|
21
24
|
"DiffStatus",
|
|
22
25
|
"MonitorConfig",
|
|
23
26
|
"MonitorExecution",
|
|
@@ -25,6 +28,7 @@ __all__ = [
|
|
|
25
28
|
"SharedMonitorConfig",
|
|
26
29
|
"StagedResource",
|
|
27
30
|
"StagedResourceAncestor",
|
|
31
|
+
"StagedResourceError",
|
|
28
32
|
"fetch_staged_resources_by_type_query",
|
|
29
33
|
"MonitorTask",
|
|
30
34
|
"MonitorTaskExecutionLog",
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Database model for classification benchmark results.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
from sqlalchemy import ARRAY, Column, ForeignKey, String
|
|
11
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
|
12
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
13
|
+
from sqlalchemy.ext.mutable import MutableDict
|
|
14
|
+
from sqlalchemy.orm import Query, RelationshipProperty, Session, relationship
|
|
15
|
+
|
|
16
|
+
from fides.api.db.base_class import Base, FidesBase
|
|
17
|
+
from fides.api.models.detection_discovery.core import MonitorConfig
|
|
18
|
+
from fides.api.models.sql_models import Dataset # type: ignore[attr-defined]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ClassificationBenchmark(Base, FidesBase):
|
|
22
|
+
"""
|
|
23
|
+
Database model for storing classification benchmark results.
|
|
24
|
+
|
|
25
|
+
This model stores the results of classification accuracy benchmarks that compare
|
|
26
|
+
system-assigned classifications on staged resources with ground truth data from datasets.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
@declared_attr
|
|
30
|
+
def __tablename__(self) -> str:
|
|
31
|
+
return "classification_benchmark"
|
|
32
|
+
|
|
33
|
+
# Foreign key relationships
|
|
34
|
+
monitor_config_key = Column(
|
|
35
|
+
String,
|
|
36
|
+
ForeignKey(MonitorConfig.key, ondelete="CASCADE"),
|
|
37
|
+
nullable=False,
|
|
38
|
+
index=True,
|
|
39
|
+
)
|
|
40
|
+
dataset_fides_key = Column(
|
|
41
|
+
String,
|
|
42
|
+
ForeignKey(Dataset.fides_key, ondelete="CASCADE"),
|
|
43
|
+
nullable=False,
|
|
44
|
+
index=True,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Resource URNs (array of strings)
|
|
48
|
+
resource_urns = Column(
|
|
49
|
+
ARRAY(String),
|
|
50
|
+
nullable=False,
|
|
51
|
+
server_default="{}",
|
|
52
|
+
default=list,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Overall accuracy metrics stored as JSONB
|
|
56
|
+
overall_metrics = Column(
|
|
57
|
+
MutableDict.as_mutable(JSONB),
|
|
58
|
+
nullable=True,
|
|
59
|
+
server_default=None,
|
|
60
|
+
default=None,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Field-level accuracy details stored as JSONB array
|
|
64
|
+
field_accuracy_details = Column(
|
|
65
|
+
ARRAY(JSONB),
|
|
66
|
+
nullable=False,
|
|
67
|
+
server_default="{}",
|
|
68
|
+
default=list,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Status and messages for tracking benchmark execution
|
|
72
|
+
status = Column(
|
|
73
|
+
String,
|
|
74
|
+
nullable=False,
|
|
75
|
+
server_default="'pending'",
|
|
76
|
+
default="pending",
|
|
77
|
+
index=True,
|
|
78
|
+
)
|
|
79
|
+
messages = Column(
|
|
80
|
+
ARRAY(String),
|
|
81
|
+
nullable=False,
|
|
82
|
+
server_default="{}",
|
|
83
|
+
default=list,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Relationships
|
|
87
|
+
monitor_config: RelationshipProperty[MonitorConfig] = relationship(
|
|
88
|
+
MonitorConfig,
|
|
89
|
+
foreign_keys=[monitor_config_key],
|
|
90
|
+
primaryjoin="ClassificationBenchmark.monitor_config_key == MonitorConfig.key",
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
dataset: RelationshipProperty[Dataset] = relationship(
|
|
94
|
+
Dataset,
|
|
95
|
+
foreign_keys=[dataset_fides_key],
|
|
96
|
+
primaryjoin="ClassificationBenchmark.dataset_fides_key == Dataset.fides_key",
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def list_benchmarks(
|
|
101
|
+
cls,
|
|
102
|
+
db: Session,
|
|
103
|
+
monitor_config_key: Optional[str] = None,
|
|
104
|
+
dataset_fides_key: Optional[str] = None,
|
|
105
|
+
created_after: Optional[datetime] = None,
|
|
106
|
+
created_before: Optional[datetime] = None,
|
|
107
|
+
status: Optional[str] = None,
|
|
108
|
+
) -> Query:
|
|
109
|
+
"""
|
|
110
|
+
Get a filtered query for benchmarks.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
db: Database session
|
|
114
|
+
monitor_config_key: Filter by monitor config key
|
|
115
|
+
dataset_fides_key: Filter by dataset fides key
|
|
116
|
+
created_after: Filter by creation date (inclusive)
|
|
117
|
+
created_before: Filter by creation date (exclusive)
|
|
118
|
+
status: Filter by status
|
|
119
|
+
Returns:
|
|
120
|
+
Filtered query (not executed)
|
|
121
|
+
"""
|
|
122
|
+
# Build the query with filters
|
|
123
|
+
query = db.query(cls)
|
|
124
|
+
|
|
125
|
+
# Apply filters
|
|
126
|
+
if monitor_config_key:
|
|
127
|
+
query = query.filter(cls.monitor_config_key == monitor_config_key)
|
|
128
|
+
if dataset_fides_key:
|
|
129
|
+
query = query.filter(cls.dataset_fides_key == dataset_fides_key)
|
|
130
|
+
if created_after:
|
|
131
|
+
query = query.filter(cls.created_at >= created_after)
|
|
132
|
+
if created_before:
|
|
133
|
+
query = query.filter(cls.created_at < created_before)
|
|
134
|
+
if status:
|
|
135
|
+
query = query.filter(cls.status == status)
|
|
136
|
+
|
|
137
|
+
# Apply sorting
|
|
138
|
+
query = query.order_by(cls.created_at.desc())
|
|
139
|
+
|
|
140
|
+
return query
|
|
@@ -29,6 +29,9 @@ from sqlalchemy.orm.query import Query
|
|
|
29
29
|
|
|
30
30
|
from fides.api.db.base_class import Base, FidesBase
|
|
31
31
|
from fides.api.models.connectionconfig import ConnectionConfig
|
|
32
|
+
from fides.api.models.detection_discovery.staged_resource_error import (
|
|
33
|
+
StagedResourceError,
|
|
34
|
+
)
|
|
32
35
|
from fides.api.models.sql_models import System # type: ignore[attr-defined]
|
|
33
36
|
|
|
34
37
|
|
|
@@ -60,6 +63,56 @@ class MonitorFrequency(Enum):
|
|
|
60
63
|
QUARTERLY_MONTH_PATTERN = r"^\d+,\d+,\d+,\d+$"
|
|
61
64
|
|
|
62
65
|
|
|
66
|
+
class StagedResourceType(str, Enum):
|
|
67
|
+
"""
|
|
68
|
+
Enum representing the type of staged resource.
|
|
69
|
+
The resource_type column is a string in the DB, this is just for
|
|
70
|
+
application-level use.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
# Note: If you add a new resource type, make sure to update either
|
|
74
|
+
# get_datastore_resource_types or get_website_monitor_resource_types
|
|
75
|
+
|
|
76
|
+
# Datastore staged resources
|
|
77
|
+
DATABASE = "Database"
|
|
78
|
+
SCHEMA = "Schema"
|
|
79
|
+
TABLE = "Table"
|
|
80
|
+
FIELD = "Field"
|
|
81
|
+
ENDPOINT = "Endpoint"
|
|
82
|
+
# Website monitor staged resources
|
|
83
|
+
COOKIE = "Cookie"
|
|
84
|
+
BROWSER_REQUEST = "Browser request"
|
|
85
|
+
IMAGE_BROWSER_REQUEST = "Image"
|
|
86
|
+
IFRAME_BROWSER_REQUEST = "iFrame"
|
|
87
|
+
JAVASCRIPT_BROWSER_REQUEST = "Javascript tag"
|
|
88
|
+
|
|
89
|
+
@staticmethod
|
|
90
|
+
def get_datastore_resource_types() -> List["StagedResourceType"]:
|
|
91
|
+
return [
|
|
92
|
+
StagedResourceType.DATABASE,
|
|
93
|
+
StagedResourceType.SCHEMA,
|
|
94
|
+
StagedResourceType.TABLE,
|
|
95
|
+
StagedResourceType.FIELD,
|
|
96
|
+
StagedResourceType.ENDPOINT,
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
@staticmethod
|
|
100
|
+
def get_website_monitor_resource_types() -> List["StagedResourceType"]:
|
|
101
|
+
return [
|
|
102
|
+
StagedResourceType.COOKIE,
|
|
103
|
+
StagedResourceType.BROWSER_REQUEST,
|
|
104
|
+
StagedResourceType.IMAGE_BROWSER_REQUEST,
|
|
105
|
+
StagedResourceType.IFRAME_BROWSER_REQUEST,
|
|
106
|
+
StagedResourceType.JAVASCRIPT_BROWSER_REQUEST,
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
def is_datastore_resource(self) -> bool:
|
|
110
|
+
return self in self.get_datastore_resource_types()
|
|
111
|
+
|
|
112
|
+
def is_website_monitor_resource(self) -> bool:
|
|
113
|
+
return self in self.get_website_monitor_resource_types()
|
|
114
|
+
|
|
115
|
+
|
|
63
116
|
class SharedMonitorConfig(Base, FidesBase):
|
|
64
117
|
"""SQL model for shareable monitor configurations"""
|
|
65
118
|
|
|
@@ -499,11 +552,15 @@ class StagedResource(Base):
|
|
|
499
552
|
server_default="{}",
|
|
500
553
|
default=dict,
|
|
501
554
|
)
|
|
555
|
+
# This field is intentionally nullable to distinguish the case when no user assigned data uses
|
|
556
|
+
# have been set (default, value is None) from the case in which they have been explicitly set
|
|
557
|
+
# as empty (value is empty array). This allows users to remove all data uses from a StagedResource,
|
|
558
|
+
# which was not possible when this field was not nullable.
|
|
502
559
|
user_assigned_data_uses = Column(
|
|
503
560
|
ARRAY(String),
|
|
504
|
-
nullable=
|
|
505
|
-
server_default=
|
|
506
|
-
default=
|
|
561
|
+
nullable=True,
|
|
562
|
+
server_default=None,
|
|
563
|
+
default=None,
|
|
507
564
|
)
|
|
508
565
|
user_assigned_system_id = Column(String, nullable=True, index=True)
|
|
509
566
|
|
|
@@ -519,6 +576,13 @@ class StagedResource(Base):
|
|
|
519
576
|
# diff-related fields
|
|
520
577
|
diff_status = Column(String, nullable=True, index=True)
|
|
521
578
|
|
|
579
|
+
errors: RelationshipProperty[List[StagedResourceError]] = relationship(
|
|
580
|
+
"StagedResourceError",
|
|
581
|
+
foreign_keys=[StagedResourceError.staged_resource_urn],
|
|
582
|
+
primaryjoin="StagedResource.urn == StagedResourceError.staged_resource_urn",
|
|
583
|
+
cascade="all, delete-orphan",
|
|
584
|
+
)
|
|
585
|
+
|
|
522
586
|
ancestor_links: RelationshipProperty[List[StagedResourceAncestor]] = relationship(
|
|
523
587
|
"StagedResourceAncestor",
|
|
524
588
|
back_populates="descendant_staged_resource",
|
|
@@ -599,6 +663,17 @@ class StagedResource(Base):
|
|
|
599
663
|
"vendor_id",
|
|
600
664
|
text("(meta->>'consent_aggregated')"),
|
|
601
665
|
),
|
|
666
|
+
# GIN indices for array operations (&&, @>, <@)
|
|
667
|
+
Index(
|
|
668
|
+
"idx_stagedresource_classifications_gin",
|
|
669
|
+
"classifications",
|
|
670
|
+
postgresql_using="gin",
|
|
671
|
+
),
|
|
672
|
+
Index(
|
|
673
|
+
"idx_stagedresource_user_categories_gin",
|
|
674
|
+
"user_assigned_data_categories",
|
|
675
|
+
postgresql_using="gin",
|
|
676
|
+
),
|
|
602
677
|
)
|
|
603
678
|
|
|
604
679
|
@classmethod
|