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/util/lock.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from contextlib import contextmanager
|
|
4
|
-
from typing import Generator
|
|
4
|
+
from typing import Generator, Optional
|
|
5
5
|
|
|
6
6
|
from loguru import logger
|
|
7
7
|
from redis.lock import Lock
|
|
@@ -18,7 +18,12 @@ def get_redis_lock(lock_key: str, timeout: int) -> Lock:
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
@contextmanager
|
|
21
|
-
def redis_lock(
|
|
21
|
+
def redis_lock(
|
|
22
|
+
lock_key: str,
|
|
23
|
+
timeout: int,
|
|
24
|
+
blocking: bool = False,
|
|
25
|
+
blocking_timeout: Optional[int] = None,
|
|
26
|
+
) -> Generator[Lock | None, None, None]:
|
|
22
27
|
"""
|
|
23
28
|
A context manager for acquiring a Redis lock.
|
|
24
29
|
If the lock is acquired, it yields the lock object.
|
|
@@ -30,7 +35,12 @@ def redis_lock(lock_key: str, timeout: int) -> Generator[Lock | None, None, None
|
|
|
30
35
|
"""
|
|
31
36
|
lock = get_redis_lock(lock_key, timeout)
|
|
32
37
|
|
|
33
|
-
|
|
38
|
+
# If we're blocking but no blocking timeout is provided
|
|
39
|
+
# fall back to the lock timeout as the blocking timeout
|
|
40
|
+
if blocking and blocking_timeout is None:
|
|
41
|
+
blocking_timeout = timeout
|
|
42
|
+
|
|
43
|
+
if not lock.acquire(blocking=blocking, blocking_timeout=blocking_timeout):
|
|
34
44
|
logger.info(
|
|
35
45
|
f"Another process is already running for lock '{lock_key}'. Skipping this execution."
|
|
36
46
|
)
|
fides/api/util/logger.py
CHANGED
|
@@ -7,8 +7,10 @@ Defines the logging format and other helper functions to be used throughout the
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
import logging
|
|
10
|
+
import os
|
|
10
11
|
import sys
|
|
11
12
|
from contextlib import contextmanager
|
|
13
|
+
from types import FrameType
|
|
12
14
|
from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional
|
|
13
15
|
|
|
14
16
|
from loguru import logger
|
|
@@ -24,6 +26,37 @@ if TYPE_CHECKING:
|
|
|
24
26
|
MASKED = "MASKED"
|
|
25
27
|
|
|
26
28
|
|
|
29
|
+
class InterceptHandler(logging.Handler):
|
|
30
|
+
"""
|
|
31
|
+
Intercept standard library logging and redirect to Loguru.
|
|
32
|
+
|
|
33
|
+
This handler is added to the root logger to capture logs from libraries
|
|
34
|
+
that use standard library logging (SQLAlchemy, Alembic, Celery, etc.)
|
|
35
|
+
and route them through Loguru for consistent formatting and serialization.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def emit(self, record: logging.LogRecord) -> None:
|
|
39
|
+
"""Emit a log record by routing it through Loguru."""
|
|
40
|
+
try:
|
|
41
|
+
level = logger.level(record.levelname).name
|
|
42
|
+
except ValueError:
|
|
43
|
+
level = str(record.levelno)
|
|
44
|
+
|
|
45
|
+
frame: Optional[FrameType] = logging.currentframe()
|
|
46
|
+
depth = 2
|
|
47
|
+
# Get the directory path of the logging module to match all files within it
|
|
48
|
+
logging_module_path = os.path.dirname(logging.__file__) + os.sep
|
|
49
|
+
while frame is not None and frame.f_code.co_filename.startswith(
|
|
50
|
+
logging_module_path
|
|
51
|
+
):
|
|
52
|
+
frame = frame.f_back
|
|
53
|
+
depth += 1
|
|
54
|
+
|
|
55
|
+
logger.opt(depth=depth, exception=record.exc_info).log(
|
|
56
|
+
level, record.getMessage()
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
27
60
|
class RedisSink:
|
|
28
61
|
"""A sink that writes log messages to Redis."""
|
|
29
62
|
|
|
@@ -134,18 +167,30 @@ def create_handler_dicts(
|
|
|
134
167
|
"catch": True,
|
|
135
168
|
}
|
|
136
169
|
|
|
170
|
+
# Helper function to check if a log record has custom extra context
|
|
171
|
+
# Loguru always includes an 'extra' dict, so we need to check if it has any keys
|
|
172
|
+
def has_custom_extra(log_record: Dict) -> bool:
|
|
173
|
+
"""Check if log record has custom extra context beyond Loguru's defaults."""
|
|
174
|
+
extra = log_record.get("extra", {})
|
|
175
|
+
return len(extra) > 0
|
|
176
|
+
|
|
177
|
+
# Helper to filter logs without custom extra
|
|
178
|
+
def filter_standard(log_record: Dict) -> bool:
|
|
179
|
+
"""Filter for logs without custom extra context."""
|
|
180
|
+
return not has_custom_extra(log_record)
|
|
181
|
+
|
|
137
182
|
# Configure handler
|
|
138
183
|
standard_dict = {
|
|
139
184
|
**base_config,
|
|
140
185
|
"sink": sink,
|
|
141
|
-
"filter":
|
|
186
|
+
"filter": filter_standard,
|
|
142
187
|
}
|
|
143
188
|
|
|
144
189
|
# Create extra dict with additional formatting for logs with extra context
|
|
145
190
|
extra_dict = {
|
|
146
191
|
**standard_dict,
|
|
147
192
|
"format": log_format + " | <dim>{extra}</dim>",
|
|
148
|
-
"filter":
|
|
193
|
+
"filter": has_custom_extra,
|
|
149
194
|
}
|
|
150
195
|
|
|
151
196
|
return [standard_dict, extra_dict]
|
|
@@ -171,13 +216,14 @@ def setup(config: FidesConfig) -> None:
|
|
|
171
216
|
# Configure main sink from config
|
|
172
217
|
destination = config.logging.destination
|
|
173
218
|
main_sink = sys.stdout if not destination else destination
|
|
219
|
+
is_json_serialization = config.logging.serialization == "json"
|
|
174
220
|
handlers.extend(
|
|
175
221
|
create_handler_dicts(
|
|
176
222
|
level=config.logging.level,
|
|
177
223
|
include_called_from=config.dev_mode,
|
|
178
224
|
sink=main_sink,
|
|
179
|
-
serialize=
|
|
180
|
-
colorize=config.logging.colorize,
|
|
225
|
+
serialize=is_json_serialization,
|
|
226
|
+
colorize=config.logging.colorize and not is_json_serialization,
|
|
181
227
|
)
|
|
182
228
|
)
|
|
183
229
|
|
|
@@ -196,6 +242,14 @@ def setup(config: FidesConfig) -> None:
|
|
|
196
242
|
|
|
197
243
|
logger.configure(handlers=handlers)
|
|
198
244
|
|
|
245
|
+
# Add InterceptHandler to root logger to capture standard library logs
|
|
246
|
+
# This intercepts logs from SQLAlchemy, Alembic, Celery, etc.
|
|
247
|
+
logging.root.handlers = [InterceptHandler()]
|
|
248
|
+
logging.root.setLevel(config.logging.level)
|
|
249
|
+
|
|
250
|
+
# Capture Python warnings and redirect them to logging so they get formatted by Loguru
|
|
251
|
+
logging.captureWarnings(True)
|
|
252
|
+
|
|
199
253
|
|
|
200
254
|
def obfuscate_message(message: str) -> str:
|
|
201
255
|
"""
|
|
@@ -165,7 +165,9 @@ def request_details(
|
|
|
165
165
|
|
|
166
166
|
if response is not None:
|
|
167
167
|
if CONFIG.dev_mode and response.content:
|
|
168
|
-
details[LoggerContextKeys.response.value] = response.content.decode(
|
|
168
|
+
details[LoggerContextKeys.response.value] = response.content.decode(
|
|
169
|
+
"utf-8", errors="replace"
|
|
170
|
+
)
|
|
169
171
|
|
|
170
172
|
details[LoggerContextKeys.status_code.value] = response.status_code
|
|
171
173
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def mask_sensitive_fields(
|
|
5
|
+
connection_secrets: Dict[str, Any], secret_schema: Dict[str, Any]
|
|
6
|
+
) -> Dict[str, Any]:
|
|
7
|
+
"""
|
|
8
|
+
Mask sensitive fields in the given secrets based on the provided schema.
|
|
9
|
+
This function traverses the given secrets dictionary and uses the provided schema to
|
|
10
|
+
identify fields that have been marked as sensitive. The function replaces the sensitive
|
|
11
|
+
field values with a mask string ('********').
|
|
12
|
+
Args:
|
|
13
|
+
connection_secrets (Dict[str, Any]): The secrets to be masked.
|
|
14
|
+
secret_schema (Dict[str, Any]): The schema defining which fields are sensitive.
|
|
15
|
+
Returns:
|
|
16
|
+
Dict[str, Any]: The secrets dictionary with sensitive fields masked.
|
|
17
|
+
"""
|
|
18
|
+
if connection_secrets is None:
|
|
19
|
+
return connection_secrets
|
|
20
|
+
|
|
21
|
+
secret_schema_properties = secret_schema["properties"]
|
|
22
|
+
new_connection_secrets = {}
|
|
23
|
+
|
|
24
|
+
for key, value in connection_secrets.items():
|
|
25
|
+
if key in secret_schema_properties:
|
|
26
|
+
if secret_schema_properties.get(key, {}).get("sensitive", False):
|
|
27
|
+
new_connection_secrets[key] = "**********"
|
|
28
|
+
else:
|
|
29
|
+
new_connection_secrets[key] = value
|
|
30
|
+
|
|
31
|
+
return new_connection_secrets
|
|
@@ -13,6 +13,7 @@ killed by the system's OOM killer which would result in a WorkerLostError and in
|
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
import gc
|
|
16
17
|
import os
|
|
17
18
|
import signal
|
|
18
19
|
import threading
|
|
@@ -21,6 +22,7 @@ from functools import wraps
|
|
|
21
22
|
from types import FrameType, TracebackType
|
|
22
23
|
from typing import Any, Callable, Literal, Optional, Type, TypeVar, Union
|
|
23
24
|
|
|
25
|
+
import objgraph # type: ignore
|
|
24
26
|
import psutil # type: ignore
|
|
25
27
|
from loguru import logger
|
|
26
28
|
|
|
@@ -56,6 +58,118 @@ class MemoryLimitExceeded(RuntimeError):
|
|
|
56
58
|
self.memory_percent: Optional[float] = memory_percent
|
|
57
59
|
|
|
58
60
|
|
|
61
|
+
def _capture_heap_dump() -> None:
|
|
62
|
+
"""Capture and log actionable heap dump information for memory leak diagnosis.
|
|
63
|
+
|
|
64
|
+
This function builds and logs a comprehensive memory profiling report as a single
|
|
65
|
+
message to help identify memory leaks. It's designed to be called when memory
|
|
66
|
+
threshold is exceeded, just before task termination.
|
|
67
|
+
|
|
68
|
+
The report includes:
|
|
69
|
+
- Process memory stats (RSS, VMS)
|
|
70
|
+
- Top 10 object type counts (spot anomalies like 100k of a custom class)
|
|
71
|
+
- Garbage collector stats (uncollectable objects indicate leaks)
|
|
72
|
+
|
|
73
|
+
All exceptions are caught to ensure heap dump failures don't prevent graceful
|
|
74
|
+
task termination.
|
|
75
|
+
"""
|
|
76
|
+
try:
|
|
77
|
+
# Force garbage collection to get accurate counts
|
|
78
|
+
gc.collect()
|
|
79
|
+
|
|
80
|
+
report_lines = [
|
|
81
|
+
"", # Leading newline for visual separation
|
|
82
|
+
"=" * 80,
|
|
83
|
+
"MEMORY DUMP",
|
|
84
|
+
"=" * 80,
|
|
85
|
+
"",
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
# Section 1: Process Memory Stats
|
|
89
|
+
try:
|
|
90
|
+
process = psutil.Process()
|
|
91
|
+
mem_info = process.memory_info()
|
|
92
|
+
report_lines.extend(
|
|
93
|
+
[
|
|
94
|
+
"PROCESS MEMORY STATS",
|
|
95
|
+
"-" * 80,
|
|
96
|
+
f"RSS (Resident Set Size): {mem_info.rss / 1024 / 1024:.1f} MiB",
|
|
97
|
+
f"VMS (Virtual Memory): {mem_info.vms / 1024 / 1024:.1f} MiB",
|
|
98
|
+
"",
|
|
99
|
+
]
|
|
100
|
+
)
|
|
101
|
+
except Exception as exc:
|
|
102
|
+
logger.debug("Failed to get process memory stats: {}", exc)
|
|
103
|
+
|
|
104
|
+
# Section 2: Object Type Counts (most actionable for finding leaks)
|
|
105
|
+
type_stats = objgraph.most_common_types(limit=10)
|
|
106
|
+
|
|
107
|
+
report_lines.extend(
|
|
108
|
+
[
|
|
109
|
+
"OBJECT TYPE COUNTS (Top 10)",
|
|
110
|
+
"-" * 80,
|
|
111
|
+
]
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if type_stats:
|
|
115
|
+
max_typename_len = max(len(typename) for typename, _ in type_stats)
|
|
116
|
+
|
|
117
|
+
for typename, count in type_stats:
|
|
118
|
+
# Right-align count for easy scanning
|
|
119
|
+
report_lines.append(f"{typename:<{max_typename_len}} {count:>10,}")
|
|
120
|
+
else:
|
|
121
|
+
report_lines.append("No object type data available")
|
|
122
|
+
|
|
123
|
+
report_lines.append("")
|
|
124
|
+
|
|
125
|
+
# Section 3: Garbage Collector Stats
|
|
126
|
+
gc_count = gc.get_count()
|
|
127
|
+
|
|
128
|
+
report_lines.extend(
|
|
129
|
+
[
|
|
130
|
+
"GARBAGE COLLECTOR STATS",
|
|
131
|
+
"-" * 80,
|
|
132
|
+
f"Collections: gen0={gc_count[0]}, gen1={gc_count[1]}, gen2={gc_count[2]}",
|
|
133
|
+
f"Tracked objects: {len(gc.get_objects()):,}",
|
|
134
|
+
]
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# Show uncollectable objects (strong indicator of memory leaks)
|
|
138
|
+
uncollectable = gc.garbage
|
|
139
|
+
if uncollectable:
|
|
140
|
+
report_lines.append(
|
|
141
|
+
f"⚠ UNCOLLECTABLE OBJECTS: {len(uncollectable)} (LEAK DETECTED!)"
|
|
142
|
+
)
|
|
143
|
+
# Show types of uncollectable objects
|
|
144
|
+
uncollectable_types: dict[str, int] = {}
|
|
145
|
+
for obj in uncollectable[:50]: # Limit to first 50
|
|
146
|
+
obj_type = type(obj).__name__
|
|
147
|
+
uncollectable_types[obj_type] = uncollectable_types.get(obj_type, 0) + 1
|
|
148
|
+
for obj_type, count in sorted(
|
|
149
|
+
uncollectable_types.items(), key=lambda x: x[1], reverse=True
|
|
150
|
+
):
|
|
151
|
+
report_lines.append(f" {obj_type}: {count}")
|
|
152
|
+
else:
|
|
153
|
+
report_lines.append("No uncollectable objects detected")
|
|
154
|
+
|
|
155
|
+
report_lines.extend(
|
|
156
|
+
[
|
|
157
|
+
"",
|
|
158
|
+
"=" * 80,
|
|
159
|
+
"END OF MEMORY DUMP",
|
|
160
|
+
"=" * 80,
|
|
161
|
+
"",
|
|
162
|
+
]
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
# Log the entire report as a single message
|
|
166
|
+
heap_dump_report = "\n".join(report_lines)
|
|
167
|
+
logger.error(heap_dump_report)
|
|
168
|
+
|
|
169
|
+
except Exception as exc: # pragma: no cover
|
|
170
|
+
logger.exception("Failed to capture heap dump: {}", exc)
|
|
171
|
+
|
|
172
|
+
|
|
59
173
|
class MemoryWatchdog:
|
|
60
174
|
"""Background memory monitor that enables graceful task termination.
|
|
61
175
|
|
|
@@ -138,6 +252,10 @@ class MemoryWatchdog:
|
|
|
138
252
|
"""Convert the signal into an exception on the main thread."""
|
|
139
253
|
current_percent = _system_memory_percent()
|
|
140
254
|
logger.error("Memory limit exceeded: {}%", current_percent)
|
|
255
|
+
|
|
256
|
+
# Capture heap dump before terminating
|
|
257
|
+
_capture_heap_dump()
|
|
258
|
+
|
|
141
259
|
self.stop()
|
|
142
260
|
raise MemoryLimitExceeded(
|
|
143
261
|
"Memory usage exceeded threshold", memory_percent=current_percent
|
fides/api/util/rate_limit.py
CHANGED
|
@@ -180,15 +180,33 @@ is_rate_limit_enabled = (
|
|
|
180
180
|
CONFIG.security.rate_limit_client_ip_header is not None
|
|
181
181
|
and CONFIG.security.rate_limit_client_ip_header != ""
|
|
182
182
|
)
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
CONFIG.security.request_rate_limit
|
|
187
|
-
], # Creates ONE shared bucket for all endpoints
|
|
183
|
+
|
|
184
|
+
disabled_limiter = Limiter(
|
|
185
|
+
default_limits=[CONFIG.security.request_rate_limit],
|
|
188
186
|
headers_enabled=True,
|
|
189
187
|
key_prefix=CONFIG.security.rate_limit_prefix,
|
|
190
188
|
key_func=safe_rate_limit_key,
|
|
191
189
|
retry_after="http-date",
|
|
192
|
-
|
|
193
|
-
enabled=is_rate_limit_enabled,
|
|
190
|
+
enabled=False,
|
|
194
191
|
)
|
|
192
|
+
|
|
193
|
+
try:
|
|
194
|
+
if is_rate_limit_enabled:
|
|
195
|
+
fides_limiter = Limiter(
|
|
196
|
+
storage_uri=CONFIG.redis.connection_url_unencoded,
|
|
197
|
+
application_limits=[
|
|
198
|
+
CONFIG.security.request_rate_limit
|
|
199
|
+
], # Creates ONE shared bucket for all endpoints
|
|
200
|
+
headers_enabled=True,
|
|
201
|
+
key_prefix=CONFIG.security.rate_limit_prefix,
|
|
202
|
+
key_func=safe_rate_limit_key,
|
|
203
|
+
retry_after="http-date",
|
|
204
|
+
in_memory_fallback_enabled=False, # Fall back to no rate limiting if Redis unavailable
|
|
205
|
+
enabled=is_rate_limit_enabled,
|
|
206
|
+
)
|
|
207
|
+
else:
|
|
208
|
+
fides_limiter = disabled_limiter
|
|
209
|
+
except Exception as e:
|
|
210
|
+
logger.exception("Error instantiating rate limiter: {}", e)
|
|
211
|
+
if is_rate_limit_enabled:
|
|
212
|
+
raise e
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from typing import Iterable
|
|
2
|
+
|
|
3
|
+
from loguru import logger
|
|
4
|
+
from packaging.version import Version
|
|
5
|
+
from packaging.version import parse as parse_version
|
|
6
|
+
from sqlalchemy.orm import Session
|
|
7
|
+
|
|
8
|
+
from fides.api.models.connectionconfig import ConnectionConfig
|
|
9
|
+
from fides.api.models.saas_template_dataset import SaasTemplateDataset
|
|
10
|
+
from fides.api.schemas.saas.connector_template import ConnectorTemplate
|
|
11
|
+
from fides.api.schemas.saas.saas_config import SaaSConfig
|
|
12
|
+
from fides.api.service.connectors.saas.connector_registry_service import (
|
|
13
|
+
ConnectorRegistry,
|
|
14
|
+
)
|
|
15
|
+
from fides.api.util.saas_util import load_config_from_string, load_dataset_from_string
|
|
16
|
+
from fides.service.connection.connection_service import ConnectionService
|
|
17
|
+
from fides.service.event_audit_service import EventAuditService
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def update_saas_configs(db: Session) -> None:
|
|
21
|
+
"""
|
|
22
|
+
Updates SaaS config instances currently in the DB if to the
|
|
23
|
+
corresponding template in the registry are found.
|
|
24
|
+
|
|
25
|
+
Effectively an "update script" for SaaS config instances,
|
|
26
|
+
to be run on server bootstrap.
|
|
27
|
+
"""
|
|
28
|
+
event_audit_service = EventAuditService(db)
|
|
29
|
+
saas_connection_service = ConnectionService(db, event_audit_service)
|
|
30
|
+
for connector_type in ConnectorRegistry.connector_types():
|
|
31
|
+
logger.debug(
|
|
32
|
+
"Determining if any updates are needed for connectors of type {} based on templates...",
|
|
33
|
+
connector_type,
|
|
34
|
+
)
|
|
35
|
+
template: ConnectorTemplate = ConnectorRegistry.get_connector_template( # type: ignore
|
|
36
|
+
connector_type
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# Store the original template dataset (with placeholders) instead of the modified version
|
|
40
|
+
template_dataset_json = load_dataset_from_string(template.dataset)
|
|
41
|
+
|
|
42
|
+
SaasTemplateDataset.get_or_create(
|
|
43
|
+
db=db,
|
|
44
|
+
connector_type=connector_type,
|
|
45
|
+
dataset_json=template_dataset_json,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
saas_config = SaaSConfig(**load_config_from_string(template.config))
|
|
49
|
+
template_version: Version = parse_version(saas_config.version)
|
|
50
|
+
connection_configs: Iterable[ConnectionConfig] = ConnectionConfig.filter(
|
|
51
|
+
db=db,
|
|
52
|
+
conditions=(ConnectionConfig.saas_config["type"].astext == connector_type),
|
|
53
|
+
).all()
|
|
54
|
+
for connection_config in connection_configs:
|
|
55
|
+
saas_config_instance = SaaSConfig.model_validate(
|
|
56
|
+
connection_config.saas_config
|
|
57
|
+
)
|
|
58
|
+
if parse_version(saas_config_instance.version) < template_version:
|
|
59
|
+
logger.info(
|
|
60
|
+
"Updating SaaS config instance '{}' of type '{}' as its version, {}, was found to be lower than the template version {}",
|
|
61
|
+
saas_config_instance.fides_key,
|
|
62
|
+
connector_type,
|
|
63
|
+
saas_config_instance.version,
|
|
64
|
+
template_version,
|
|
65
|
+
)
|
|
66
|
+
try:
|
|
67
|
+
saas_connection_service.update_saas_instance(
|
|
68
|
+
connection_config,
|
|
69
|
+
template,
|
|
70
|
+
saas_config_instance,
|
|
71
|
+
)
|
|
72
|
+
except Exception:
|
|
73
|
+
logger.exception(
|
|
74
|
+
"Encountered error attempting to update SaaS config instance {}",
|
|
75
|
+
saas_config_instance.fides_key,
|
|
76
|
+
)
|
fides/api/util/saas_util.py
CHANGED
|
@@ -16,7 +16,7 @@ from fides.api.common_exceptions import FidesopsException, ValidationError
|
|
|
16
16
|
from fides.api.cryptography.cryptographic_util import bytes_to_b64_str
|
|
17
17
|
from fides.api.graph.config import Collection, CollectionAddress, Field, GraphDataset
|
|
18
18
|
from fides.api.models.privacy_request import PrivacyRequest
|
|
19
|
-
from fides.api.schemas.saas.saas_config import SaaSConfig, SaaSRequest
|
|
19
|
+
from fides.api.schemas.saas.saas_config import ParamValue, SaaSConfig, SaaSRequest
|
|
20
20
|
from fides.api.schemas.saas.shared_schemas import SaaSRequestParams
|
|
21
21
|
from fides.config import CONFIG
|
|
22
22
|
from fides.config.helpers import load_file
|
|
@@ -26,6 +26,7 @@ PRIVACY_REQUEST_ID = "privacy_request_id"
|
|
|
26
26
|
MASKED_OBJECT_FIELDS = "masked_object_fields"
|
|
27
27
|
ALL_OBJECT_FIELDS = "all_object_fields"
|
|
28
28
|
CUSTOM_PRIVACY_REQUEST_FIELDS = "custom_privacy_request_fields"
|
|
29
|
+
PRIVACY_REQUEST_OBJECT = "privacy_request"
|
|
29
30
|
UUID = "uuid"
|
|
30
31
|
ISO_8601_DATETIME = "iso_8601_datetime"
|
|
31
32
|
FIELD_LIST = "field_list"
|
|
@@ -335,6 +336,32 @@ def assign_placeholders(value: Any, param_values: Dict[str, Any]) -> Optional[An
|
|
|
335
336
|
return value
|
|
336
337
|
|
|
337
338
|
|
|
339
|
+
def check_dataset_missing_reference_values(
|
|
340
|
+
input_data: Dict[str, Any], param_values: Optional[List[ParamValue]]
|
|
341
|
+
) -> List[str]:
|
|
342
|
+
"""
|
|
343
|
+
Check if all the dataset reference values are present in the input_data map
|
|
344
|
+
"""
|
|
345
|
+
# get the list of param_value references
|
|
346
|
+
required_param_value_references = [
|
|
347
|
+
param_value.name for param_value in param_values or [] if param_value.references
|
|
348
|
+
]
|
|
349
|
+
|
|
350
|
+
# extract the keys from inside the fides_grouped_inputs and append them the other input_data keys
|
|
351
|
+
provided_input_keys = (
|
|
352
|
+
list(input_data.get("fidesops_grouped_inputs")[0].keys()) # type: ignore
|
|
353
|
+
if input_data.get("fidesops_grouped_inputs")
|
|
354
|
+
else []
|
|
355
|
+
) + list(input_data.keys())
|
|
356
|
+
|
|
357
|
+
# find the missing values
|
|
358
|
+
missing_dataset_reference_values = list(
|
|
359
|
+
set(required_param_value_references) - set(provided_input_keys)
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
return missing_dataset_reference_values
|
|
363
|
+
|
|
364
|
+
|
|
338
365
|
def map_param_values(
|
|
339
366
|
action: str,
|
|
340
367
|
context: str,
|
fides/api/worker/__init__.py
CHANGED
|
@@ -8,11 +8,14 @@ from loguru import logger
|
|
|
8
8
|
from fides.api.db.base import Base # type: ignore
|
|
9
9
|
from fides.api.service.saas_request.override_implementations import *
|
|
10
10
|
from fides.api.tasks import (
|
|
11
|
+
CONSENT_WEBHOOK_QUEUE_NAME,
|
|
11
12
|
DISCOVERY_MONITORS_CLASSIFICATION_QUEUE_NAME,
|
|
12
13
|
DISCOVERY_MONITORS_DETECTION_QUEUE_NAME,
|
|
13
14
|
DISCOVERY_MONITORS_PROMOTION_QUEUE_NAME,
|
|
14
15
|
DSR_QUEUE_NAME,
|
|
15
16
|
MESSAGING_QUEUE_NAME,
|
|
17
|
+
PRIVACY_PREFERENCES_EXPORT_JOB_QUEUE_NAME,
|
|
18
|
+
PRIVACY_PREFERENCES_INGESTION_JOB_QUEUE_NAME,
|
|
16
19
|
PRIVACY_PREFERENCES_QUEUE_NAME,
|
|
17
20
|
celery_app,
|
|
18
21
|
)
|
|
@@ -38,7 +41,10 @@ def start_worker(
|
|
|
38
41
|
default_queue_name,
|
|
39
42
|
MESSAGING_QUEUE_NAME,
|
|
40
43
|
PRIVACY_PREFERENCES_QUEUE_NAME,
|
|
44
|
+
PRIVACY_PREFERENCES_EXPORT_JOB_QUEUE_NAME,
|
|
45
|
+
PRIVACY_PREFERENCES_INGESTION_JOB_QUEUE_NAME,
|
|
41
46
|
DSR_QUEUE_NAME,
|
|
47
|
+
CONSENT_WEBHOOK_QUEUE_NAME,
|
|
42
48
|
DISCOVERY_MONITORS_DETECTION_QUEUE_NAME,
|
|
43
49
|
DISCOVERY_MONITORS_CLASSIFICATION_QUEUE_NAME,
|
|
44
50
|
DISCOVERY_MONITORS_PROMOTION_QUEUE_NAME,
|
|
@@ -76,6 +76,7 @@ VALIDATE = "validate"
|
|
|
76
76
|
VIEW_DATA = "view_data"
|
|
77
77
|
WEBHOOK = "webhook"
|
|
78
78
|
WORKER_STATS = "worker-stats"
|
|
79
|
+
HEAP_DUMP = "heap_dump"
|
|
79
80
|
|
|
80
81
|
ASSIGN_OWNERS = "assign_owners"
|
|
81
82
|
|
|
@@ -146,6 +147,8 @@ DATASET_TEST = f"{DATASET}:{TEST}"
|
|
|
146
147
|
|
|
147
148
|
ENCRYPTION_EXEC = f"{ENCRYPTION}:{EXEC}"
|
|
148
149
|
|
|
150
|
+
HEAP_DUMP_EXEC = f"{HEAP_DUMP}:{EXEC}"
|
|
151
|
+
|
|
149
152
|
EVALUATION_CREATE = f"{EVALUATION}:{CREATE}"
|
|
150
153
|
EVALUATION_READ = f"{EVALUATION}:{READ}"
|
|
151
154
|
EVALUATION_UPDATE = f"{EVALUATION}:{UPDATE}"
|
|
@@ -209,6 +212,7 @@ SAAS_CONFIG_READ = f"{SAAS_CONFIG}:{READ}"
|
|
|
209
212
|
|
|
210
213
|
SAAS_CONNECTION_INSTANTIATE = f"{CONNECTION}:{INSTANTIATE}"
|
|
211
214
|
CONNECTOR_TEMPLATE_REGISTER = f"{CONNECTOR_TEMPLATE}:{REGISTER}"
|
|
215
|
+
CONNECTOR_TEMPLATE_READ = f"{CONNECTOR_TEMPLATE}:{READ}"
|
|
212
216
|
|
|
213
217
|
SCOPE_READ = f"{SCOPE}:{READ}"
|
|
214
218
|
|
|
@@ -226,10 +230,6 @@ SYSTEM_MANAGER_READ = f"{SYSTEM_MANAGER}:{READ}"
|
|
|
226
230
|
SYSTEM_MANAGER_UPDATE = f"{SYSTEM_MANAGER}:{UPDATE}"
|
|
227
231
|
SYSTEM_MANAGER_DELETE = f"{SYSTEM_MANAGER}:{DELETE}"
|
|
228
232
|
|
|
229
|
-
TAXONOMY_CREATE = f"{TAXONOMY}:{CREATE}"
|
|
230
|
-
TAXONOMY_UPDATE = f"{TAXONOMY}:{UPDATE}"
|
|
231
|
-
TAXONOMY_DELETE = f"{TAXONOMY}:{DELETE}"
|
|
232
|
-
|
|
233
233
|
USER_CREATE = f"{USER}:{CREATE}"
|
|
234
234
|
USER_DELETE = f"{USER}:{DELETE}"
|
|
235
235
|
USER_READ = f"{USER}:{READ}"
|
|
@@ -267,6 +267,7 @@ SCOPE_DOCS = {
|
|
|
267
267
|
CONNECTION_AUTHORIZE: "OAuth2 Authorization",
|
|
268
268
|
CONNECTION_TYPE_READ: "View types of connections",
|
|
269
269
|
CONNECTOR_TEMPLATE_REGISTER: "Register a connector template",
|
|
270
|
+
CONNECTOR_TEMPLATE_READ: "View connector template configurations",
|
|
270
271
|
CONSENT_READ: "Read consent preferences",
|
|
271
272
|
CONSENT_SETTINGS_READ: "Read org-wide consent settings",
|
|
272
273
|
CONSENT_SETTINGS_UPDATE: "Update org-wide consent settings",
|
|
@@ -299,6 +300,7 @@ SCOPE_DOCS = {
|
|
|
299
300
|
DATASET_READ: "View datasets",
|
|
300
301
|
DATASET_TEST: "Run a standalone privacy request test for a dataset",
|
|
301
302
|
ENCRYPTION_EXEC: "Encrypt data",
|
|
303
|
+
HEAP_DUMP_EXEC: "Execute a heap dump for memory diagnostics",
|
|
302
304
|
MESSAGING_TEMPLATE_UPDATE: "Update messaging templates",
|
|
303
305
|
EVALUATION_CREATE: "Create evaluation",
|
|
304
306
|
EVALUATION_READ: "Read evaluations",
|
|
@@ -357,9 +359,6 @@ SCOPE_DOCS = {
|
|
|
357
359
|
SYSTEM_MANAGER_READ: "Read systems users can manage",
|
|
358
360
|
SYSTEM_MANAGER_DELETE: "Delete systems user can manage",
|
|
359
361
|
SYSTEM_MANAGER_UPDATE: "Update systems user can manage",
|
|
360
|
-
TAXONOMY_CREATE: "Create local taxonomy",
|
|
361
|
-
TAXONOMY_DELETE: "Delete local taxonomy",
|
|
362
|
-
TAXONOMY_UPDATE: "Update local taxonomy",
|
|
363
362
|
USER_CREATE: "Create users",
|
|
364
363
|
USER_UPDATE: "Update users",
|
|
365
364
|
USER_DELETE: "Remove users",
|
|
@@ -66,7 +66,8 @@ MESSAGING_ACTIVE_DEFAULT = "/messaging/default/active"
|
|
|
66
66
|
MESSAGING_STATUS = "/messaging/default/status"
|
|
67
67
|
MESSAGING_DEFAULT_SECRETS = "/messaging/default/{service_type}/secret"
|
|
68
68
|
MESSAGING_DEFAULT_BY_TYPE = "/messaging/default/{service_type}"
|
|
69
|
-
|
|
69
|
+
MESSAGING_TEST_DEPRECATED = "/messaging/config/test" # DEPRECATED
|
|
70
|
+
MESSAGING_TEST = "/messaging/test/{service_type}"
|
|
70
71
|
MESSAGING_EMAIL_INVITE_STATUS = "/messaging/email-invite/status"
|
|
71
72
|
|
|
72
73
|
# Policy URLs
|
|
@@ -83,8 +84,10 @@ PRIVACY_REQUEST_BATCH_EMAIL_SEND = (
|
|
|
83
84
|
"/privacy-request/administrate/process-awaiting-email-send"
|
|
84
85
|
)
|
|
85
86
|
PRIVACY_REQUEST_AUTHENTICATED = "/privacy-request/authenticated"
|
|
87
|
+
PRIVACY_REQUEST_BULK_FINALIZE = "/privacy-request/bulk/finalize"
|
|
86
88
|
PRIVACY_REQUEST_BULK_RETRY = "/privacy-request/bulk/retry"
|
|
87
89
|
PRIVACY_REQUEST_BULK_SOFT_DELETE = "/privacy-request/bulk/soft-delete"
|
|
90
|
+
PRIVACY_REQUEST_CANCEL = "/privacy-request/administrate/cancel"
|
|
88
91
|
PRIVACY_REQUEST_DENY = "/privacy-request/administrate/deny"
|
|
89
92
|
PRIVACY_REQUEST_SOFT_DELETE = "/privacy-request/{privacy_request_id}/soft-delete"
|
|
90
93
|
REQUEST_STATUS_LOGS = "/privacy-request/{privacy_request_id}/log"
|
|
@@ -157,6 +160,7 @@ CONNECTION_TYPE_SECRETS = "/connection_type/{connection_type}/secret"
|
|
|
157
160
|
CONNECTIONS = "/connection"
|
|
158
161
|
CONNECTION_BY_KEY = "/connection/{connection_key}"
|
|
159
162
|
CONNECTION_SECRETS = "/connection/{connection_key}/secret"
|
|
163
|
+
CONNECTION_OAUTH = "/connection/{connection_key}/oauth"
|
|
160
164
|
CONNECTION_TEST = "/connection/{connection_key}/test"
|
|
161
165
|
AUTHORIZE = "/connection/{connection_key}/authorize"
|
|
162
166
|
|
|
@@ -187,13 +191,21 @@ YAML_DATASETS = YAML + CONNECTION_DATASETS
|
|
|
187
191
|
# SaaS Config URLs
|
|
188
192
|
SAAS_CONFIG_VALIDATE = CONNECTION_BY_KEY + "/validate_saas_config"
|
|
189
193
|
SAAS_CONFIG = CONNECTION_BY_KEY + "/saas_config"
|
|
190
|
-
SAAS_CONNECTOR_FROM_TEMPLATE = "/connection/instantiate/{
|
|
194
|
+
SAAS_CONNECTOR_FROM_TEMPLATE = "/connection/instantiate/{connector_template_type}"
|
|
195
|
+
|
|
196
|
+
# Connector Template URLs
|
|
197
|
+
CONNECTOR_TEMPLATES = "/connector-templates"
|
|
198
|
+
CONNECTOR_TEMPLATES_REGISTER = "/connector-templates/register"
|
|
199
|
+
CONNECTOR_TEMPLATES_CONFIG = "/connector-templates/{connector_template_type}/config"
|
|
200
|
+
CONNECTOR_TEMPLATES_DATASET = "/connector-templates/{connector_template_type}/dataset"
|
|
201
|
+
|
|
202
|
+
# Deprecated: Old connector template register URL
|
|
191
203
|
REGISTER_CONNECTOR_TEMPLATE = "/connector_template/register"
|
|
192
204
|
|
|
193
205
|
# System Connections
|
|
194
206
|
SYSTEM_CONNECTIONS = "/system/{fides_key}/connection"
|
|
195
207
|
INSTANTIATE_SYSTEM_CONNECTION = (
|
|
196
|
-
"/system/{fides_key}/connection/instantiate/{
|
|
208
|
+
"/system/{fides_key}/connection/instantiate/{connector_template_type}"
|
|
197
209
|
)
|
|
198
210
|
|
|
199
211
|
# User URLs
|