ethyca-fides 2.71.1b1__py2.py3-none-any.whl → 2.74.0rc1__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.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.71.1b1.dist-info → ethyca_fides-2.74.0rc1.dist-info}/METADATA +3 -2
- {ethyca_fides-2.71.1b1.dist-info → ethyca_fides-2.74.0rc1.dist-info}/RECORD +377 -327
- 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/4bfbeff34611_add_polling_status.py +68 -0
- fides/api/alembic/migrations/versions/65a1bc82ae09_adds_experience_config_for_delete_.py +53 -0
- fides/api/alembic/migrations/versions/7db29f9cd77b_create_new_sub_request_table.py +95 -0
- fides/api/alembic/migrations/versions/a55e12c2c2df_add_tagging_instructions_to_data_.py +29 -0
- fides/api/alembic/migrations/versions/b97e92b038d2_add_digest_execution_model.py +117 -0
- fides/api/alembic/migrations/versions/c09e76282dd1_add_privacy_request_duplication_cols.py +64 -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/api/v1/endpoints/connection_endpoints.py +38 -45
- fides/api/api/v1/endpoints/generic_overrides.py +75 -6
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +60 -6
- fides/api/api/v1/endpoints/saas_config_endpoints.py +60 -48
- fides/api/api/v1/endpoints/system.py +11 -43
- fides/api/api/v1/endpoints/user_endpoints.py +8 -1
- fides/api/app_setup.py +1 -3
- fides/api/common_exceptions.py +8 -0
- fides/api/db/base.py +2 -0
- fides/api/db/database.py +257 -2
- fides/api/email_templates/get_email_template.py +3 -0
- fides/api/email_templates/template_names.py +1 -0
- fides/api/email_templates/templates/manual_task_digest.html +316 -0
- fides/api/main.py +2 -2
- fides/api/models/attachment.py +1 -0
- fides/api/models/detection_discovery/__init__.py +2 -0
- fides/api/models/detection_discovery/core.py +10 -0
- fides/api/models/detection_discovery/monitor_task.py +1 -0
- fides/api/models/detection_discovery/staged_resource_error.py +25 -0
- fides/api/models/digest/__init__.py +2 -0
- fides/api/models/digest/digest_config.py +10 -1
- fides/api/models/digest/digest_execution.py +142 -0
- fides/api/models/event_audit.py +17 -0
- fides/api/models/identity_definition.py +65 -0
- fides/api/models/messaging_template.py +7 -0
- fides/api/models/privacy_experience.py +11 -0
- 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 +56 -8
- fides/api/models/privacy_request/request_task.py +98 -1
- fides/api/models/sql_models.py +3 -0
- fides/api/models/taxonomy.py +14 -4
- 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/schemas/application_config.py +28 -0
- fides/api/schemas/connection_configuration/connection_config.py +1 -30
- fides/api/schemas/messaging/messaging.py +15 -0
- fides/api/schemas/privacy_request.py +17 -3
- fides/api/schemas/saas/async_polling_configuration.py +81 -0
- fides/api/schemas/saas/saas_config.py +10 -3
- fides/api/schemas/saas/strategy_configuration.py +0 -12
- fides/api/schemas/taxonomy_extensions.py +8 -0
- 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 +686 -0
- fides/api/service/async_dsr/utils.py +130 -0
- fides/api/service/connectors/bigquery_connector.py +34 -16
- fides/api/service/connectors/fides/fides_client.py +63 -1
- fides/api/service/connectors/query_configs/saas_query_config.py +160 -79
- fides/api/service/connectors/saas/connector_registry_service.py +1 -138
- fides/api/service/connectors/saas_connector.py +116 -94
- fides/api/service/connectors/sql_connector.py +14 -4
- fides/api/service/deps.py +8 -0
- fides/api/service/messaging/message_dispatch_service.py +38 -1
- fides/api/service/privacy_request/attachment_handling.py +9 -2
- fides/api/service/privacy_request/duplication_detection.py +424 -0
- fides/api/service/privacy_request/request_runner_service.py +46 -84
- fides/api/service/privacy_request/request_service.py +47 -74
- fides/api/service/saas_request/saas_request_override_factory.py +71 -1
- fides/api/task/execute_request_tasks.py +17 -9
- fides/api/task/filter_results.py +35 -2
- fides/api/task/graph_task.py +37 -8
- fides/api/tasks/__init__.py +0 -1
- fides/api/util/connection_util.py +99 -215
- fides/api/util/event_audit_util.py +230 -0
- 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/saas_config_updater.py +66 -0
- fides/api/util/saas_util.py +28 -1
- fides/common/api/scope_registry.py +0 -7
- fides/common/api/v1/urn_registry.py +2 -0
- fides/config/__init__.py +10 -1
- 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 +7 -3
- 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/event_audit_service.py +16 -22
- fides/service/privacy_request/privacy_request_service.py +162 -43
- fides/service/taxonomy/handlers/legacy_handler.py +3 -3
- fides/service/taxonomy/taxonomy_service.py +15 -15
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/FZTEUgamBvOhgPWce135w/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1115-90baef2a89f361ad.js → 1115-0da062111df309bf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6148-59a59d5c5925344f.js → 1533-84e250d1f26e6d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-508b16628e8eb225.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1840-5bbe6d878ed73fb4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1975.78e719130cfe3fd6.js → 1975.afe8cad52f904fcf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2040-fdecc41a18e40bdc.js → 2040-fe1a06d82c0413f1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2397-40b8db1cb2f23e2a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2921-b10bbc3a9104933b.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-eb5cd82b3ee6ab0c.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-93ecd09f1cb9dbef.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3696-90c8b336bbc46782.js → 3696-6db05a35ae806825.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3923-98bea73b618292aa.js → 3923-44255a63d6d80ff5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/401-fe8db8b5d8f600de.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/4277-13bcf4516326d474.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/431-e01ee730c8ad9ece.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4496-bed72bd5639075be.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/454-d5c2c84f1a14e4f1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4817-d29f40d4ce729f37.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5185-b2ac9fecc00b67e7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5258-4672eae0656430f9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5487-8dedd1ca94fbba54.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/549-6e2442db533a711e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5643-55d758444a8d7162.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5724-1e40975cefa405f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5783-d119cb132abd8a91.js → 5783-6055edba275155ca.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6084-82e2df433fe5ba85.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6344-3e21444374f8059f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6362-12e3fd23130ccf15.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6372-a8d0f08dac1ebd0e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6780-3db5133c1f4c6f1e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6853-1adbdf6418ec3d62.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-aa0c60ee1092be8e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7059-12be23a345a94c1e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7079-6e6efc3396ff1ebb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7218-d297a4a06f924b09.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7245-686665c197b58e68.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7476-d055aa931da47ac0.js → 7476-a43c046c24de37cc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-c654c61ba98d8c74.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7654-716cf37a020b3d11.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{796-02086581996a0548.js → 796-e83ace3c6ab99ac7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/8212-b9e8295ca883c9f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8939-4925751c57c51f87.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9046-e4daf28840a69fd6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5596-29a7c8322530b7cf.js → 9195-550bd50d538c5f79.js} +3 -3
- fides/ui-build/static/admin/_next/static/chunks/9330-e519adec48222d45.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9341-bfc0e59bcc56c604.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9450-b7b7bb1d755ecf57.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9676.b86ecbcfe5afd25d.js → 9676.7d029a5383595b69.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9682-da69ac5d06f281da.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9826-ccedc28e978ca9e1.js → 9826-657652d55936a8c6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9911-ece086f2230e34f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9965-56c5e4fc9cd3b3a5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-2eb8aed4939f1142.js → 404-d079b8bf35250874.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-c1c2f757b1f3da12.js → _app-e64fd8510033a27c.js} +63 -63
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-ddd9d7d40847fc28.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-b4d18c1f4d414f5f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-d451bc8932330141.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-7a258b7ecd6da4b8.js → add-vendors-c24663cd5dec57db.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-fb5017ff5fa54fcc.js → configure-d93418688bd258eb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-e1e2fd704ac2d71d.js → [id]-9b1f2b1c06968166.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a5e738a234dadc7e.js → new-115a085e5d42de45.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-d9b7b311195df29e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-5fc78b78a51c239c.js → [id]-3de34624829cbce8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-b79bcb93b5f4c734.js → new-dc95e7ed278d1a29.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-cdfc9bb19f47c709.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-069f4e3ee96ebf77.js → properties-0b995b01dc4dbd1f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-e3ad3a55624e302a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-d2bf72508c3cad55.js → consent-b37ed76849330edd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-2fa4b3a58f75f81d.js → [resourceUrn]-dd82729296dee5c5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-49e5477eb1a11b92.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-dfc1ead4a12c9ffa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-5b31e3d7727b917a.js → [resourceUrn]-8442eb219958ac7e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources-feda358d1801c18d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-d16acb6fc07aad46.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-c51a1e98c45d231a.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/website/[monitorId]/[systemId]-bcfe38eebca30f8c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-f66d0655897c4400.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-6f1e012cd641da19.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-581d6248fcf98d17.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-844a8de0d1b506e2.js → [resourceUrn]-ddc1c1641e1e9430.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-11b07cf2d91b17ef.js → detection-2b48f7e524743b2b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-5525cf287d4ab493.js → [resourceUrn]-862b67418600251e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-ed4723e1b67d890e.js → discovery-0ffec855f5df262c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-6a030ab8c2e2b0db.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-6cb66f649b8ca4bf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-0b008dad90b00aaa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-5566edf9a9d1be2d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d4ca1f485b6e9e02.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-85dee7e81dc4bafb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-e905e018a2cab35d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-912723bc86299b1a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-f1f0affc18327033.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-b74d1e8608ae5b5d.js → index-692d27dbe9392c9f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-1b94e2d769a182b2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adfe6c5ac5b703d0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-f9be7080ebbb7445.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/[id]-caaa8602a1d449b1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/new-9b106b1d2d93985b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-6a1ded8cdde836c4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/[key]-f94e3accf9507ebf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/new-5e83220ff1f2a250.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-a03cbd698a23e5b3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/[id]-3cde574b3c8447c0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/add-template-0448bb4ae8536c58.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-1621a4b87c432117.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications-4ea28f6b1dd63642.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-e02516d9fd314528.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-fec08bea801b4918.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-d911e5fbf5a4a888.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-91b1adcac6a57b2d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-de309d8813b1ebfb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-f2943c1309062284.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-29fb7b39f8962650.js → table-migration-03eda417711ae909.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-1fe486f3af832c80.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-ea6f78fa8b2d3f6c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-8f577df28ebca869.js → configure-bda7b474493e7128.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-2c0ec8fed16c20ae.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-57a75c7e9659271a.js → [id]-30d298a47e85709f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-8964c2300206bc89.js → add-property-438084cca0d0f10d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-08472b2a6bf1d392.js → properties-17fd44d98f5bd5b6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-baf77d34a3b3bece.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-8c80391025ca7339.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-7c19810858b708cc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-ee8820fe0fa14c77.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/{[id]-bd1042a0e9be6aff.js → [id]-8eb862182f19a6c2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/{new-469ad83c8cfa1290.js → new-37c29ef618e9fe3c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-1db425150dcb1b6b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-744f669431b84f71.js → domain-records-e334b43fa5c5b1e6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-9d18eb5c38d85522.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-604790638c656fbd.js → email-templates-cb937ed7c4b1e5a8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-be2a885150adc133.js → locations-835281251f0785cd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-3c86162afe9759df.js → organization-7fd050c92866938c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-59ea66130fca0d05.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-4fe3b90747d885e5.js → regulations-b0fe1051d908f366.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-f108bf5015144d2f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-4d470bbf199a2f9c.js → [id]-0e7c7228d01290ea.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-adc13b542e10a37d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-23dd250da26511c5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-98f737e735eaa0f0.js → [id]-aed30fb22ae7c9ec.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-562624e5461083ec.js → user-management-6b88ca3e02ee67c9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-6f97ebe373e7ef6b.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/4861ca3e088f2d05.css +1 -0
- fides/ui-build/static/admin/_next/static/css/65ae906f224cd8ae.css +1 -0
- fides/ui-build/static/admin/_next/static/css/a1800714b486e230.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/d5701118537cbdd2.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/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/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/poc/table-migration.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 -1
- fides/ui-build/static/admin/settings/custom-fields/new.html +1 -1
- 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 -195
- fides/api/service/async_dsr/async_dsr_strategy.py +0 -5
- fides/api/service/async_dsr/async_dsr_strategy_callback.py +0 -16
- fides/api/service/async_dsr/async_dsr_strategy_factory.py +0 -63
- fides/api/service/async_dsr/async_dsr_strategy_polling.py +0 -94
- fides/ui-build/static/admin/_next/static/_IxwgneyQjdSaZFEF3Tqu/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/155-b4337d0826d5addc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-1ad037b7d6d2f6d2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1896-49010da5c2705fc5.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-66f65496c3a09316.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2962-e92d525bf570a9a3.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-83cb70e80cbe41ba.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3585-f728d32fda6f1ac1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-ed226b8a8050bd40.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-04d3afbfa41a7782.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-ffe4e8436e1eceb9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/409-5c3d31163028339f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-78bf05f35d7eec4f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4558-8305aee48def1dcd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4608-0c6ef78e30a51f84.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4718-3a412bdb90add82f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/502-0d9f4ac29ef34a1c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/504-88caa30c03374e9b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5185-51eaa78e3ed6bfb7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5279-12c9cbdc67ad7b14.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5309-3b6cf0cc9d0c6a83.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5574-c31ea831371610d5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5643-10a36584c399526c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-182efc294d413f64.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6419-9b3a86af57c86791.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6853-7004a8c420b1ca02.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6882-dbe0a25dcf1a8ee0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-4b24e1731c1cc3b3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7045-14e955890f1147e4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7079-50571e9f3269d74d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7158-04745cc8d684b2e7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7218-e2983b96b95e33b4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-d0d3a0fe3f95e971.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7725-f2a7be705b75dcc3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7929-0fd0d4948bc8d70e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8002-ed832921ad190832.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9037-453224ba3ee65b13.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9046-b6616ba7b59d947e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9226-4a7027057f55ca2a.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/pages/add-systems/manual-4ec03eed67572861.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-2ca59996860a33c5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-19214babd1f219e3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-92182be6603c2842.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-ab54b19609bff325.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-c1a3caf3c286bf5d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-4a1af12d2d7cd660.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-99573a1ee3ef8f4c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources-6e429b7511028d60.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-b7326c51d88cc2cc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-5b57f9132426fe52.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-0d512528b498d75c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-040813022f0890c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-a28cc0e23bbe4fc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-7d22222608ec3aac.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-0abd30eada811b5b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-007965429368d9a3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-60a4a9eb4aab4c11.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d514cd4ec62e3b03.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-0e3a6ac4797ffbbb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-816e02b6cbe4a684.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-b6838162200141b3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-223c2d1ded51bfb1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-153eb88ab4e7dc6d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-331544e9b85c4ac2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-e8d2140787045acd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-e3f93462a08251bf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-b5f7d6afdecd013d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-248ad9f65a872442.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-aedb66a62042b10a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-018df38b7cd77fdb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-6ca9099d03aab817.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-0f2c90786ea005a4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-200b51a725f8b2d1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-7dac2302f573f5ee.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-479890582973deaf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-7af00f72cf694077.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-f7753e9effae3816.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-f3e6e74e0efb005c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4d658222ec800511.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-2fcd95c41e578d57.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-a3275554ffe8e640.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/[key]-77239269acc2d31a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/new-8bf1821722b082e9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers-8d92be437793c96f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-97221067330c0c27.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-2deb6becece69d46.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-6c91bdea40875227.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-3059aba38adefa56.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-2766492c5dbceb0a.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/295d729ea1b11885.css +0 -1
- fides/ui-build/static/admin/_next/static/css/304c6f148886a8d4.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/settings/messaging-providers/[key].html +0 -1
- fides/ui-build/static/admin/settings/messaging-providers/new.html +0 -1
- fides/ui-build/static/admin/settings/messaging-providers.html +0 -1
- {ethyca_fides-2.71.1b1.dist-info → ethyca_fides-2.74.0rc1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.71.1b1.dist-info → ethyca_fides-2.74.0rc1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.71.1b1.dist-info → ethyca_fides-2.74.0rc1.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.71.1b1.dist-info → ethyca_fides-2.74.0rc1.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{_IxwgneyQjdSaZFEF3Tqu → FZTEUgamBvOhgPWce135w}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-629c88e90699369b.js → new-7dce2916cc589c54.js} +0 -0
|
@@ -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 - THRESHOLD EXCEEDED",
|
|
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
|
|
@@ -0,0 +1,66 @@
|
|
|
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.schemas.saas.connector_template import ConnectorTemplate
|
|
10
|
+
from fides.api.schemas.saas.saas_config import SaaSConfig
|
|
11
|
+
from fides.api.service.connectors.saas.connector_registry_service import (
|
|
12
|
+
ConnectorRegistry,
|
|
13
|
+
)
|
|
14
|
+
from fides.api.util.saas_util import load_config_from_string
|
|
15
|
+
from fides.service.connection.connection_service import ConnectionService
|
|
16
|
+
from fides.service.event_audit_service import EventAuditService
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def update_saas_configs(db: Session) -> None:
|
|
20
|
+
"""
|
|
21
|
+
Updates SaaS config instances currently in the DB if to the
|
|
22
|
+
corresponding template in the registry are found.
|
|
23
|
+
|
|
24
|
+
Effectively an "update script" for SaaS config instances,
|
|
25
|
+
to be run on server bootstrap.
|
|
26
|
+
"""
|
|
27
|
+
event_audit_service = EventAuditService(db)
|
|
28
|
+
saas_connection_service = ConnectionService(db, event_audit_service)
|
|
29
|
+
for connector_type in ConnectorRegistry.connector_types():
|
|
30
|
+
logger.debug(
|
|
31
|
+
"Determining if any updates are needed for connectors of type {} based on templates...",
|
|
32
|
+
connector_type,
|
|
33
|
+
)
|
|
34
|
+
template: ConnectorTemplate = ConnectorRegistry.get_connector_template( # type: ignore
|
|
35
|
+
connector_type
|
|
36
|
+
)
|
|
37
|
+
saas_config = SaaSConfig(**load_config_from_string(template.config))
|
|
38
|
+
template_version: Version = parse_version(saas_config.version)
|
|
39
|
+
|
|
40
|
+
connection_configs: Iterable[ConnectionConfig] = ConnectionConfig.filter(
|
|
41
|
+
db=db,
|
|
42
|
+
conditions=(ConnectionConfig.saas_config["type"].astext == connector_type),
|
|
43
|
+
).all()
|
|
44
|
+
for connection_config in connection_configs:
|
|
45
|
+
saas_config_instance = SaaSConfig.model_validate(
|
|
46
|
+
connection_config.saas_config
|
|
47
|
+
)
|
|
48
|
+
if parse_version(saas_config_instance.version) < template_version:
|
|
49
|
+
logger.info(
|
|
50
|
+
"Updating SaaS config instance '{}' of type '{}' as its version, {}, was found to be lower than the template version {}",
|
|
51
|
+
saas_config_instance.fides_key,
|
|
52
|
+
connector_type,
|
|
53
|
+
saas_config_instance.version,
|
|
54
|
+
template_version,
|
|
55
|
+
)
|
|
56
|
+
try:
|
|
57
|
+
saas_connection_service.update_saas_instance(
|
|
58
|
+
connection_config,
|
|
59
|
+
template,
|
|
60
|
+
saas_config_instance,
|
|
61
|
+
)
|
|
62
|
+
except Exception:
|
|
63
|
+
logger.exception(
|
|
64
|
+
"Encountered error attempting to update SaaS config instance {}",
|
|
65
|
+
saas_config_instance.fides_key,
|
|
66
|
+
)
|
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,
|
|
@@ -226,10 +226,6 @@ SYSTEM_MANAGER_READ = f"{SYSTEM_MANAGER}:{READ}"
|
|
|
226
226
|
SYSTEM_MANAGER_UPDATE = f"{SYSTEM_MANAGER}:{UPDATE}"
|
|
227
227
|
SYSTEM_MANAGER_DELETE = f"{SYSTEM_MANAGER}:{DELETE}"
|
|
228
228
|
|
|
229
|
-
TAXONOMY_CREATE = f"{TAXONOMY}:{CREATE}"
|
|
230
|
-
TAXONOMY_UPDATE = f"{TAXONOMY}:{UPDATE}"
|
|
231
|
-
TAXONOMY_DELETE = f"{TAXONOMY}:{DELETE}"
|
|
232
|
-
|
|
233
229
|
USER_CREATE = f"{USER}:{CREATE}"
|
|
234
230
|
USER_DELETE = f"{USER}:{DELETE}"
|
|
235
231
|
USER_READ = f"{USER}:{READ}"
|
|
@@ -357,9 +353,6 @@ SCOPE_DOCS = {
|
|
|
357
353
|
SYSTEM_MANAGER_READ: "Read systems users can manage",
|
|
358
354
|
SYSTEM_MANAGER_DELETE: "Delete systems user can manage",
|
|
359
355
|
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
356
|
USER_CREATE: "Create users",
|
|
364
357
|
USER_UPDATE: "Update users",
|
|
365
358
|
USER_DELETE: "Remove users",
|
|
@@ -84,8 +84,10 @@ PRIVACY_REQUEST_BATCH_EMAIL_SEND = (
|
|
|
84
84
|
"/privacy-request/administrate/process-awaiting-email-send"
|
|
85
85
|
)
|
|
86
86
|
PRIVACY_REQUEST_AUTHENTICATED = "/privacy-request/authenticated"
|
|
87
|
+
PRIVACY_REQUEST_BULK_FINALIZE = "/privacy-request/bulk/finalize"
|
|
87
88
|
PRIVACY_REQUEST_BULK_RETRY = "/privacy-request/bulk/retry"
|
|
88
89
|
PRIVACY_REQUEST_BULK_SOFT_DELETE = "/privacy-request/bulk/soft-delete"
|
|
90
|
+
PRIVACY_REQUEST_CANCEL = "/privacy-request/administrate/cancel"
|
|
89
91
|
PRIVACY_REQUEST_DENY = "/privacy-request/administrate/deny"
|
|
90
92
|
PRIVACY_REQUEST_SOFT_DELETE = "/privacy-request/{privacy_request_id}/soft-delete"
|
|
91
93
|
REQUEST_STATUS_LOGS = "/privacy-request/{privacy_request_id}/log"
|
fides/config/__init__.py
CHANGED
|
@@ -19,11 +19,12 @@ from pydantic_settings import (
|
|
|
19
19
|
from fides.common.utils import echo_red
|
|
20
20
|
|
|
21
21
|
from .admin_ui_settings import AdminUISettings
|
|
22
|
-
from .celery_settings import CelerySettings
|
|
22
|
+
from .celery_settings import CelerySettings, merge_celery_environment
|
|
23
23
|
from .cli_settings import CLISettings
|
|
24
24
|
from .consent_settings import ConsentSettings
|
|
25
25
|
from .credentials_settings import merge_credentials_environment
|
|
26
26
|
from .database_settings import DatabaseSettings
|
|
27
|
+
from .duplicate_detection_settings import DuplicateDetectionSettings
|
|
27
28
|
from .execution_settings import ExecutionSettings
|
|
28
29
|
from .fides_settings import FidesSettings
|
|
29
30
|
from .helpers import handle_deprecated_env_variables, handle_deprecated_fields
|
|
@@ -79,6 +80,7 @@ class FidesConfig(FidesSettings):
|
|
|
79
80
|
description="This is a special section that is used to store arbitrary key/value pairs to be used as credentials."
|
|
80
81
|
)
|
|
81
82
|
database: DatabaseSettings
|
|
83
|
+
privacy_request_duplicate_detection: DuplicateDetectionSettings
|
|
82
84
|
execution: ExecutionSettings
|
|
83
85
|
logging: LoggingSettings
|
|
84
86
|
notifications: NotificationSettings
|
|
@@ -155,12 +157,19 @@ def build_config(config_dict: Dict[str, Any]) -> FidesConfig:
|
|
|
155
157
|
config_dict = handle_deprecated_fields(config_dict)
|
|
156
158
|
config_dict = handle_deprecated_env_variables(config_dict)
|
|
157
159
|
|
|
160
|
+
# Logic for merging additional Celery environment variables before validation.
|
|
161
|
+
# This allows arbitrary Celery configuration via FIDES__CELERY__* env vars,
|
|
162
|
+
# not just the explicitly defined fields in CelerySettings.
|
|
163
|
+
# Environment variables override TOML file values.
|
|
164
|
+
config_dict["celery"] = merge_celery_environment(config_dict.get("celery", {}))
|
|
165
|
+
|
|
158
166
|
settings_map: Dict[str, Any] = {
|
|
159
167
|
"admin_ui": AdminUISettings,
|
|
160
168
|
"celery": CelerySettings,
|
|
161
169
|
"consent": ConsentSettings,
|
|
162
170
|
"cli": CLISettings,
|
|
163
171
|
"database": DatabaseSettings,
|
|
172
|
+
"privacy_request_duplicate_detection": DuplicateDetectionSettings,
|
|
164
173
|
"execution": ExecutionSettings,
|
|
165
174
|
"logging": LoggingSettings,
|
|
166
175
|
"notifications": NotificationSettings,
|
fides/config/celery_settings.py
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
from json import JSONDecodeError
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
|
|
1
6
|
from pydantic import Field
|
|
2
7
|
from pydantic_settings import SettingsConfigDict
|
|
3
8
|
|
|
@@ -23,3 +28,40 @@ class CelerySettings(FidesSettings):
|
|
|
23
28
|
"If False, tasks are sent to the queue.",
|
|
24
29
|
)
|
|
25
30
|
model_config = SettingsConfigDict(env_prefix=ENV_PREFIX)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def merge_celery_environment(celery_dict: Dict[str, Any]) -> Dict[str, Any]:
|
|
34
|
+
"""
|
|
35
|
+
Given a dict of config settings, merges configs which are found
|
|
36
|
+
in environment variables. Environment variable configs are treated
|
|
37
|
+
as overrides. Environment variables must use the prefix FIDES__CELERY__.
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
FIDES__CELERY__WORKER_PREFETCH_MULTIPLIER=4
|
|
41
|
+
|
|
42
|
+
Merges to:
|
|
43
|
+
{"worker_prefetch_multiplier": 4}
|
|
44
|
+
|
|
45
|
+
This allows arbitrary Celery configuration to be set via environment variables,
|
|
46
|
+
not just the explicitly defined fields in CelerySettings.
|
|
47
|
+
"""
|
|
48
|
+
for key, value in os.environ.items():
|
|
49
|
+
if key.startswith(ENV_PREFIX):
|
|
50
|
+
# Strip the prefix and convert to lowercase
|
|
51
|
+
stripped_key = key[len(ENV_PREFIX) :].lower()
|
|
52
|
+
if stripped_key:
|
|
53
|
+
# Normalize boolean strings only to preserve case-sensitive values
|
|
54
|
+
# like URLs (e.g., Redis://myhost) or passwords
|
|
55
|
+
normalized_value = value
|
|
56
|
+
if value.lower() in ("true", "false"):
|
|
57
|
+
normalized_value = value.lower()
|
|
58
|
+
|
|
59
|
+
# Use JSON parsing to handle type conversion properly
|
|
60
|
+
# This handles booleans (true/false), integers, floats, etc.
|
|
61
|
+
try:
|
|
62
|
+
celery_dict[stripped_key] = json.loads(normalized_value)
|
|
63
|
+
except (JSONDecodeError, ValueError):
|
|
64
|
+
# If JSON parsing fails, keep it as a string
|
|
65
|
+
celery_dict[stripped_key] = value
|
|
66
|
+
|
|
67
|
+
return celery_dict
|
fides/config/config_proxy.py
CHANGED
|
@@ -155,6 +155,15 @@ class ConsentSettingsProxy(ConfigProxyBase):
|
|
|
155
155
|
override_vendor_purposes: bool
|
|
156
156
|
|
|
157
157
|
|
|
158
|
+
class DuplicateDetectionSettingsProxy(ConfigProxyBase):
|
|
159
|
+
prefix = "privacy_request_duplicate_detection"
|
|
160
|
+
|
|
161
|
+
enabled: bool
|
|
162
|
+
time_window_days: int
|
|
163
|
+
match_identity_fields: List[str]
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
# pylint: disable=too-many-instance-attributes
|
|
158
167
|
class ConfigProxy:
|
|
159
168
|
"""
|
|
160
169
|
ConfigProxy instances allow access to "resolved" config properties
|
|
@@ -183,6 +192,7 @@ class ConfigProxy:
|
|
|
183
192
|
self.storage = StorageSettingsProxy(db)
|
|
184
193
|
self.security = SecuritySettingsProxy(db)
|
|
185
194
|
self.consent = ConsentSettingsProxy(db)
|
|
195
|
+
self.privacy_request_duplicate_detection = DuplicateDetectionSettingsProxy(db)
|
|
186
196
|
self.privacy_center = PrivacyCenterSettingsProxy(db)
|
|
187
197
|
|
|
188
198
|
def load_current_cors_domains_into_middleware(self, app: FastAPI) -> None:
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
from pydantic_settings import SettingsConfigDict
|
|
5
|
+
|
|
6
|
+
from .fides_settings import FidesSettings
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DuplicateDetectionSettings(FidesSettings):
|
|
10
|
+
"""Configuration settings for Duplicate Privacy Request Detection."""
|
|
11
|
+
|
|
12
|
+
enabled: bool = Field(
|
|
13
|
+
default=False,
|
|
14
|
+
description="Whether duplicate detection is enabled. Disabled by default.",
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
time_window_days: int = Field(
|
|
18
|
+
default=365,
|
|
19
|
+
description="Time window in days for duplicate detection. Default is 1 year.",
|
|
20
|
+
ge=1,
|
|
21
|
+
le=3650, # Max 10 years
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
match_identity_fields: List[str] = Field(
|
|
25
|
+
default=["email"],
|
|
26
|
+
description="Identity field names to match on for duplicate detection (e.g., 'email', 'phone_number'). Default is email only.",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
model_config = SettingsConfigDict(
|
|
30
|
+
env_prefix="FIDES__PRIVACY_REQUEST_DUPLICATE_DETECTION__"
|
|
31
|
+
)
|
|
@@ -61,9 +61,13 @@ class ExecutionSettings(FidesSettings):
|
|
|
61
61
|
default=3,
|
|
62
62
|
description="The number of times a privacy request will be requeued when its tasks are interrupted before being marked as error",
|
|
63
63
|
)
|
|
64
|
-
|
|
65
|
-
default=
|
|
66
|
-
description="
|
|
64
|
+
async_polling_interval_hours: int = Field(
|
|
65
|
+
default=1,
|
|
66
|
+
description="Hours between status checks for async tasks",
|
|
67
|
+
)
|
|
68
|
+
async_polling_request_timeout_days: int = Field(
|
|
69
|
+
default=30,
|
|
70
|
+
description="Maximum time in days to wait for an async polling request to complete before timing out",
|
|
67
71
|
)
|
|
68
72
|
erasure_request_finalization_required: bool = Field(
|
|
69
73
|
default=False,
|
fides/config/utils.py
CHANGED
|
@@ -70,4 +70,9 @@ CONFIG_KEY_ALLOWLIST = {
|
|
|
70
70
|
"consent": ["override_vendor_purposes"],
|
|
71
71
|
"admin_ui": ["enabled", "url", "error_notification_mode"],
|
|
72
72
|
"privacy_center": ["url"],
|
|
73
|
+
"privacy_request_duplicate_detection": [
|
|
74
|
+
"enabled",
|
|
75
|
+
"time_window_days",
|
|
76
|
+
"match_identity_fields",
|
|
77
|
+
],
|
|
73
78
|
}
|
|
File without changes
|