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,82 @@
|
|
|
1
|
+
"""Create staged resource error table
|
|
2
|
+
|
|
3
|
+
Revision ID: f1a2b3c4d5e6
|
|
4
|
+
Revises: 80d28dea3b6b
|
|
5
|
+
Create Date: 2025-11-05 02:00:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "f1a2b3c4d5e6"
|
|
14
|
+
down_revision = "80d28dea3b6b"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
# Create the stagedresourceerror table
|
|
21
|
+
op.create_table(
|
|
22
|
+
"stagedresourceerror",
|
|
23
|
+
sa.Column("id", sa.String(), nullable=False),
|
|
24
|
+
sa.Column(
|
|
25
|
+
"created_at",
|
|
26
|
+
sa.DateTime(timezone=True),
|
|
27
|
+
server_default=sa.text("now()"),
|
|
28
|
+
nullable=True,
|
|
29
|
+
),
|
|
30
|
+
sa.Column(
|
|
31
|
+
"updated_at",
|
|
32
|
+
sa.DateTime(timezone=True),
|
|
33
|
+
server_default=sa.text("now()"),
|
|
34
|
+
nullable=True,
|
|
35
|
+
),
|
|
36
|
+
sa.Column(
|
|
37
|
+
"staged_resource_urn",
|
|
38
|
+
sa.String(),
|
|
39
|
+
nullable=False,
|
|
40
|
+
),
|
|
41
|
+
sa.Column("message", sa.String(), nullable=False),
|
|
42
|
+
sa.Column("timestamp", sa.DateTime(timezone=True), nullable=False),
|
|
43
|
+
sa.Column("error_type", sa.String(), nullable=False),
|
|
44
|
+
sa.Column("diff_status", sa.String(), nullable=False),
|
|
45
|
+
sa.Column("task_id", sa.String(), nullable=True),
|
|
46
|
+
sa.ForeignKeyConstraint(
|
|
47
|
+
["staged_resource_urn"],
|
|
48
|
+
["stagedresource.urn"],
|
|
49
|
+
name="stagedresourceerror_staged_resource_urn_fkey",
|
|
50
|
+
ondelete="CASCADE",
|
|
51
|
+
),
|
|
52
|
+
sa.PrimaryKeyConstraint("id"),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
op.create_index(
|
|
56
|
+
"ix_stagedresourceerror_staged_resource_urn",
|
|
57
|
+
"stagedresourceerror",
|
|
58
|
+
["staged_resource_urn"],
|
|
59
|
+
unique=False,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
op.create_index(
|
|
63
|
+
"ix_stagedresourceerror_task_id",
|
|
64
|
+
"stagedresourceerror",
|
|
65
|
+
["task_id"],
|
|
66
|
+
unique=False,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def downgrade():
|
|
71
|
+
# Drop the indices
|
|
72
|
+
op.drop_index(
|
|
73
|
+
"ix_stagedresourceerror_task_id",
|
|
74
|
+
table_name="stagedresourceerror",
|
|
75
|
+
)
|
|
76
|
+
op.drop_index(
|
|
77
|
+
"ix_stagedresourceerror_staged_resource_urn",
|
|
78
|
+
table_name="stagedresourceerror",
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Drop the stagedresourceerror table
|
|
82
|
+
op.drop_table("stagedresourceerror")
|
|
@@ -24,6 +24,7 @@ from starlette.status import (
|
|
|
24
24
|
from fides.api.api import deps
|
|
25
25
|
from fides.api.models.connection_oauth_credentials import OAuthConfig
|
|
26
26
|
from fides.api.models.connectionconfig import ConnectionConfig, ConnectionType
|
|
27
|
+
from fides.api.models.event_audit import EventAuditType
|
|
27
28
|
from fides.api.oauth.utils import verify_oauth_client
|
|
28
29
|
from fides.api.schemas.connection_configuration import connection_secrets_schemas
|
|
29
30
|
from fides.api.schemas.connection_configuration.connection_config import (
|
|
@@ -40,13 +41,14 @@ from fides.api.schemas.connection_configuration.connection_secrets import (
|
|
|
40
41
|
)
|
|
41
42
|
from fides.api.schemas.connection_configuration.enums.system_type import SystemType
|
|
42
43
|
from fides.api.schemas.connection_configuration.enums.test_status import TestStatus
|
|
44
|
+
from fides.api.service.deps import get_connection_service
|
|
43
45
|
from fides.api.util.api_router import APIRouter
|
|
44
46
|
from fides.api.util.connection_util import (
|
|
45
47
|
connection_status,
|
|
46
48
|
delete_connection_config,
|
|
47
49
|
get_connection_config_or_error,
|
|
48
50
|
patch_connection_configs,
|
|
49
|
-
|
|
51
|
+
update_connection_secrets,
|
|
50
52
|
)
|
|
51
53
|
from fides.common.api.scope_registry import (
|
|
52
54
|
CONNECTION_CREATE_OR_UPDATE,
|
|
@@ -61,6 +63,8 @@ from fides.common.api.v1.urn_registry import (
|
|
|
61
63
|
CONNECTIONS,
|
|
62
64
|
V1_URL_PREFIX,
|
|
63
65
|
)
|
|
66
|
+
from fides.service.connection.connection_service import ConnectionService
|
|
67
|
+
from fides.service.event_audit_service import EventAuditService
|
|
64
68
|
|
|
65
69
|
router = APIRouter(tags=["Connections"], prefix=V1_URL_PREFIX)
|
|
66
70
|
|
|
@@ -220,28 +224,6 @@ def delete_connection(
|
|
|
220
224
|
delete_connection_config(db, connection_key)
|
|
221
225
|
|
|
222
226
|
|
|
223
|
-
def validate_and_update_secrets(
|
|
224
|
-
connection_key: FidesKey,
|
|
225
|
-
connection_config: ConnectionConfig,
|
|
226
|
-
db: Session,
|
|
227
|
-
unvalidated_secrets: connection_secrets_schemas,
|
|
228
|
-
verify: Optional[bool],
|
|
229
|
-
) -> TestStatusMessage:
|
|
230
|
-
connection_config.secrets = validate_secrets(
|
|
231
|
-
db, unvalidated_secrets, connection_config
|
|
232
|
-
).model_dump(mode="json")
|
|
233
|
-
# Save validated secrets, regardless of whether they've been verified.
|
|
234
|
-
logger.info("Updating connection config secrets for '{}'", connection_key)
|
|
235
|
-
connection_config.save(db=db)
|
|
236
|
-
|
|
237
|
-
msg = f"Secrets updated for ConnectionConfig with key: {connection_key}."
|
|
238
|
-
|
|
239
|
-
if verify:
|
|
240
|
-
return connection_status(connection_config, msg, db)
|
|
241
|
-
|
|
242
|
-
return TestStatusMessage(msg=msg, test_status=None)
|
|
243
|
-
|
|
244
|
-
|
|
245
227
|
@router.put(
|
|
246
228
|
CONNECTION_SECRETS,
|
|
247
229
|
status_code=HTTP_200_OK,
|
|
@@ -251,7 +233,7 @@ def validate_and_update_secrets(
|
|
|
251
233
|
def put_connection_config_secrets(
|
|
252
234
|
connection_key: FidesKey,
|
|
253
235
|
*,
|
|
254
|
-
|
|
236
|
+
connection_service: ConnectionService = Depends(get_connection_service),
|
|
255
237
|
unvalidated_secrets: connection_secrets_schemas,
|
|
256
238
|
verify: Optional[bool] = True,
|
|
257
239
|
) -> TestStatusMessage:
|
|
@@ -261,10 +243,8 @@ def put_connection_config_secrets(
|
|
|
261
243
|
The specific secrets will be connection-dependent. For example, the components needed to connect to a Postgres DB
|
|
262
244
|
will differ from Dynamo DB.
|
|
263
245
|
"""
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
return validate_and_update_secrets(
|
|
267
|
-
connection_key, connection_config, db, unvalidated_secrets, verify
|
|
246
|
+
return update_connection_secrets(
|
|
247
|
+
connection_service, connection_key, unvalidated_secrets, verify
|
|
268
248
|
)
|
|
269
249
|
|
|
270
250
|
|
|
@@ -277,7 +257,7 @@ def put_connection_config_secrets(
|
|
|
277
257
|
def patch_connection_config_secrets(
|
|
278
258
|
connection_key: FidesKey,
|
|
279
259
|
*,
|
|
280
|
-
|
|
260
|
+
connection_service: ConnectionService = Depends(get_connection_service),
|
|
281
261
|
unvalidated_secrets: connection_secrets_schemas,
|
|
282
262
|
verify: Optional[bool] = True,
|
|
283
263
|
) -> TestStatusMessage:
|
|
@@ -287,22 +267,12 @@ def patch_connection_config_secrets(
|
|
|
287
267
|
The specific secrets will be connection-dependent. For example, the components needed to connect to a Postgres DB
|
|
288
268
|
will differ from Dynamo DB.
|
|
289
269
|
"""
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
if existing_secrets:
|
|
297
|
-
patched_secrets = {**existing_secrets}
|
|
298
|
-
|
|
299
|
-
patched_secrets = {
|
|
300
|
-
**patched_secrets,
|
|
301
|
-
**unvalidated_secrets, # type: ignore[dict-item]
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
return validate_and_update_secrets(
|
|
305
|
-
connection_key, connection_config, db, patched_secrets, verify # type: ignore[arg-type]
|
|
270
|
+
return update_connection_secrets(
|
|
271
|
+
connection_service,
|
|
272
|
+
connection_key,
|
|
273
|
+
unvalidated_secrets,
|
|
274
|
+
verify,
|
|
275
|
+
merge_with_existing=True,
|
|
306
276
|
)
|
|
307
277
|
|
|
308
278
|
|
|
@@ -354,6 +324,16 @@ def put_connection_oauth_config(
|
|
|
354
324
|
)
|
|
355
325
|
connection_config.save(db=db)
|
|
356
326
|
|
|
327
|
+
event_audit_service = EventAuditService(db)
|
|
328
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
329
|
+
|
|
330
|
+
# Create secrets audit event for OAuth credential changes
|
|
331
|
+
connection_service.create_secrets_audit_event(
|
|
332
|
+
EventAuditType.connection_secrets_updated,
|
|
333
|
+
connection_config,
|
|
334
|
+
oauth_config.model_dump(exclude_unset=True), # The OAuth secrets being updated
|
|
335
|
+
)
|
|
336
|
+
|
|
357
337
|
msg = (
|
|
358
338
|
f"OAuth2 configuration updated for ConnectionConfig with key: {connection_key}."
|
|
359
339
|
)
|
|
@@ -455,6 +435,19 @@ def patch_connection_oauth_config(
|
|
|
455
435
|
detail="Invalid OAuth2 configuration.",
|
|
456
436
|
) from exc
|
|
457
437
|
|
|
438
|
+
# Create audit event for OAuth config update (OAuth credentials are secrets)
|
|
439
|
+
event_audit_service = EventAuditService(db)
|
|
440
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
441
|
+
|
|
442
|
+
# Create secrets audit event for OAuth credential changes
|
|
443
|
+
connection_service.create_secrets_audit_event(
|
|
444
|
+
EventAuditType.connection_secrets_updated,
|
|
445
|
+
connection_config,
|
|
446
|
+
validated_config.model_dump(
|
|
447
|
+
exclude_unset=True
|
|
448
|
+
), # The OAuth secrets being updated
|
|
449
|
+
)
|
|
450
|
+
|
|
458
451
|
msg = (
|
|
459
452
|
f"OAuth2 configuration updated for ConnectionConfig with key: {connection_key}."
|
|
460
453
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from functools import partial
|
|
2
2
|
from typing import Dict, List, Optional, Union
|
|
3
3
|
|
|
4
|
-
from fastapi import Depends, HTTPException, Query, Response, Security
|
|
4
|
+
from fastapi import Body, Depends, HTTPException, Query, Response, Security
|
|
5
5
|
from fastapi.concurrency import run_in_threadpool
|
|
6
6
|
from fastapi.encoders import jsonable_encoder
|
|
7
7
|
from fastapi.responses import JSONResponse
|
|
@@ -368,7 +368,7 @@ async def create_data_use(
|
|
|
368
368
|
"""
|
|
369
369
|
try:
|
|
370
370
|
return taxonomy_service.create_or_update_element(
|
|
371
|
-
"
|
|
371
|
+
"data_use", data_use.model_dump()
|
|
372
372
|
)
|
|
373
373
|
except KeyOrNameAlreadyExists:
|
|
374
374
|
raise HTTPException(
|
|
@@ -399,7 +399,7 @@ async def create_data_category(
|
|
|
399
399
|
|
|
400
400
|
try:
|
|
401
401
|
return taxonomy_service.create_or_update_element(
|
|
402
|
-
"
|
|
402
|
+
"data_category", data_category.model_dump()
|
|
403
403
|
)
|
|
404
404
|
except KeyOrNameAlreadyExists:
|
|
405
405
|
raise HTTPException(
|
|
@@ -430,7 +430,7 @@ async def create_data_subject(
|
|
|
430
430
|
|
|
431
431
|
try:
|
|
432
432
|
return taxonomy_service.create_or_update_element(
|
|
433
|
-
"
|
|
433
|
+
"data_subject", data_subject.model_dump()
|
|
434
434
|
)
|
|
435
435
|
except KeyOrNameAlreadyExists:
|
|
436
436
|
raise HTTPException(
|
|
@@ -465,7 +465,7 @@ async def update_data_use(
|
|
|
465
465
|
)
|
|
466
466
|
try:
|
|
467
467
|
result = taxonomy_service.update_element(
|
|
468
|
-
"
|
|
468
|
+
"data_use", data_use.fides_key, data_use.model_dump()
|
|
469
469
|
)
|
|
470
470
|
if not result:
|
|
471
471
|
raise HTTPException(
|
|
@@ -501,7 +501,7 @@ async def update_data_category(
|
|
|
501
501
|
)
|
|
502
502
|
try:
|
|
503
503
|
result = taxonomy_service.update_element(
|
|
504
|
-
"
|
|
504
|
+
"data_category", data_category.fides_key, data_category.model_dump()
|
|
505
505
|
)
|
|
506
506
|
if not result:
|
|
507
507
|
raise HTTPException(
|
|
@@ -516,6 +516,75 @@ async def update_data_category(
|
|
|
516
516
|
)
|
|
517
517
|
|
|
518
518
|
|
|
519
|
+
@data_category_router.patch(
|
|
520
|
+
"/data_category/{fides_key}/tagging_instructions",
|
|
521
|
+
dependencies=[Security(verify_oauth_client, scopes=[DATA_CATEGORY_UPDATE])],
|
|
522
|
+
response_model=DataCategory,
|
|
523
|
+
status_code=status.HTTP_200_OK,
|
|
524
|
+
name="Update tagging instructions",
|
|
525
|
+
)
|
|
526
|
+
async def update_data_category_tagging_instructions(
|
|
527
|
+
fides_key: str,
|
|
528
|
+
tagging_instructions: str = Body(..., embed=True),
|
|
529
|
+
taxonomy_service: TaxonomyService = Depends(get_taxonomy_service),
|
|
530
|
+
) -> Dict:
|
|
531
|
+
"""
|
|
532
|
+
Update or add tagging_instructions for a data category.
|
|
533
|
+
This is used by LLM-based classification to provide custom instructions for tagging.
|
|
534
|
+
"""
|
|
535
|
+
try:
|
|
536
|
+
result = taxonomy_service.update_element(
|
|
537
|
+
"data_category",
|
|
538
|
+
fides_key,
|
|
539
|
+
{"tagging_instructions": tagging_instructions},
|
|
540
|
+
)
|
|
541
|
+
if not result:
|
|
542
|
+
raise HTTPException(
|
|
543
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
544
|
+
detail=f"Data category not found with key: {fides_key}",
|
|
545
|
+
)
|
|
546
|
+
return result
|
|
547
|
+
except (ValidationError, PydanticValidationError) as e:
|
|
548
|
+
raise HTTPException(
|
|
549
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
550
|
+
detail=str(e),
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
@data_category_router.delete(
|
|
555
|
+
"/data_category/{fides_key}/tagging_instructions",
|
|
556
|
+
dependencies=[Security(verify_oauth_client, scopes=[DATA_CATEGORY_UPDATE])],
|
|
557
|
+
response_model=DataCategory,
|
|
558
|
+
status_code=status.HTTP_200_OK,
|
|
559
|
+
name="Delete tagging instructions",
|
|
560
|
+
)
|
|
561
|
+
async def delete_data_category_tagging_instructions(
|
|
562
|
+
fides_key: str,
|
|
563
|
+
taxonomy_service: TaxonomyService = Depends(get_taxonomy_service),
|
|
564
|
+
) -> Dict:
|
|
565
|
+
"""
|
|
566
|
+
Remove tagging_instructions from a data category.
|
|
567
|
+
Sets the tagging_instructions field to None.
|
|
568
|
+
"""
|
|
569
|
+
try:
|
|
570
|
+
result = taxonomy_service.update_element(
|
|
571
|
+
"data_category",
|
|
572
|
+
fides_key,
|
|
573
|
+
{"tagging_instructions": None},
|
|
574
|
+
)
|
|
575
|
+
if not result:
|
|
576
|
+
raise HTTPException(
|
|
577
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
578
|
+
detail=f"Data category not found with key: {fides_key}",
|
|
579
|
+
)
|
|
580
|
+
return result
|
|
581
|
+
except (ValidationError, PydanticValidationError) as e:
|
|
582
|
+
raise HTTPException(
|
|
583
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
584
|
+
detail=str(e),
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
|
|
519
588
|
GENERIC_OVERRIDES_ROUTER = APIRouter()
|
|
520
589
|
GENERIC_OVERRIDES_ROUTER.include_router(dataset_router)
|
|
521
590
|
GENERIC_OVERRIDES_ROUTER.include_router(data_use_router)
|
|
@@ -91,6 +91,7 @@ from fides.api.schemas.privacy_request import (
|
|
|
91
91
|
BulkPostPrivacyRequests,
|
|
92
92
|
BulkReviewResponse,
|
|
93
93
|
BulkSoftDeletePrivacyRequests,
|
|
94
|
+
CancelPrivacyRequests,
|
|
94
95
|
CheckpointActionRequired,
|
|
95
96
|
DenyPrivacyRequests,
|
|
96
97
|
ExecutionLogDetailResponse,
|
|
@@ -144,8 +145,10 @@ from fides.common.api.v1.urn_registry import (
|
|
|
144
145
|
PRIVACY_REQUEST_APPROVE,
|
|
145
146
|
PRIVACY_REQUEST_AUTHENTICATED,
|
|
146
147
|
PRIVACY_REQUEST_BATCH_EMAIL_SEND,
|
|
148
|
+
PRIVACY_REQUEST_BULK_FINALIZE,
|
|
147
149
|
PRIVACY_REQUEST_BULK_RETRY,
|
|
148
150
|
PRIVACY_REQUEST_BULK_SOFT_DELETE,
|
|
151
|
+
PRIVACY_REQUEST_CANCEL,
|
|
149
152
|
PRIVACY_REQUEST_DENY,
|
|
150
153
|
PRIVACY_REQUEST_FILTERED_RESULTS,
|
|
151
154
|
PRIVACY_REQUEST_FINALIZE,
|
|
@@ -485,7 +488,7 @@ def _filter_privacy_request_queryset(
|
|
|
485
488
|
errored_gt: Optional[datetime] = None,
|
|
486
489
|
external_id: Optional[str] = None,
|
|
487
490
|
location: Optional[str] = None,
|
|
488
|
-
action_type: Optional[ActionType] = None,
|
|
491
|
+
action_type: Optional[Union[ActionType, List[ActionType]]] = None,
|
|
489
492
|
include_consent_webhook_requests: Optional[bool] = False,
|
|
490
493
|
include_deleted_requests: Optional[bool] = False,
|
|
491
494
|
) -> Query:
|
|
@@ -675,9 +678,11 @@ def _filter_privacy_request_queryset(
|
|
|
675
678
|
PrivacyRequest.finished_processing_at > errored_gt,
|
|
676
679
|
)
|
|
677
680
|
if action_type:
|
|
681
|
+
if isinstance(action_type, ActionType):
|
|
682
|
+
action_type = [action_type]
|
|
678
683
|
policy_ids_for_action_type = (
|
|
679
684
|
db.query(Rule)
|
|
680
|
-
.filter(Rule.action_type
|
|
685
|
+
.filter(Rule.action_type.in_(action_type))
|
|
681
686
|
.with_entities(Rule.policy_id)
|
|
682
687
|
.distinct()
|
|
683
688
|
)
|
|
@@ -791,7 +796,7 @@ def _shared_privacy_request_search(
|
|
|
791
796
|
errored_gt: Optional[datetime] = None,
|
|
792
797
|
external_id: Optional[str] = None,
|
|
793
798
|
location: Optional[str] = None,
|
|
794
|
-
action_type: Optional[ActionType] = None,
|
|
799
|
+
action_type: Optional[Union[ActionType, List[ActionType]]] = None,
|
|
795
800
|
verbose: Optional[bool] = False,
|
|
796
801
|
include_identities: Optional[bool] = False,
|
|
797
802
|
include_custom_privacy_request_fields: Optional[bool] = False,
|
|
@@ -1356,10 +1361,10 @@ def restart_privacy_request_from_failure(
|
|
|
1356
1361
|
)
|
|
1357
1362
|
|
|
1358
1363
|
# Automatically resubmit the request if the cache has expired
|
|
1364
|
+
|
|
1359
1365
|
if (
|
|
1360
|
-
not privacy_request.
|
|
1361
|
-
and privacy_request.status
|
|
1362
|
-
not in [PrivacyRequestStatus.complete, PrivacyRequestStatus.pending]
|
|
1366
|
+
not privacy_request.verify_cache_for_identity_data()
|
|
1367
|
+
and privacy_request.status != PrivacyRequestStatus.complete
|
|
1363
1368
|
):
|
|
1364
1369
|
logger.info(
|
|
1365
1370
|
f"Cached data for privacy request {privacy_request.id} has expired, automatically resubmitting request"
|
|
@@ -1476,6 +1481,29 @@ def deny_privacy_request(
|
|
|
1476
1481
|
)
|
|
1477
1482
|
|
|
1478
1483
|
|
|
1484
|
+
@router.patch(
|
|
1485
|
+
PRIVACY_REQUEST_CANCEL,
|
|
1486
|
+
status_code=HTTP_200_OK,
|
|
1487
|
+
response_model=BulkReviewResponse,
|
|
1488
|
+
)
|
|
1489
|
+
def cancel_privacy_request(
|
|
1490
|
+
*,
|
|
1491
|
+
client: ClientDetail = Security(
|
|
1492
|
+
verify_oauth_client,
|
|
1493
|
+
scopes=[PRIVACY_REQUEST_REVIEW],
|
|
1494
|
+
),
|
|
1495
|
+
privacy_request_service: PrivacyRequestService = Depends(
|
|
1496
|
+
get_privacy_request_service
|
|
1497
|
+
),
|
|
1498
|
+
privacy_requests: CancelPrivacyRequests,
|
|
1499
|
+
) -> BulkReviewResponse:
|
|
1500
|
+
"""Cancel a list of privacy requests and/or report failure"""
|
|
1501
|
+
|
|
1502
|
+
return privacy_request_service.cancel_privacy_requests(
|
|
1503
|
+
privacy_requests.request_ids, privacy_requests.reason, user_id=client.user_id
|
|
1504
|
+
)
|
|
1505
|
+
|
|
1506
|
+
|
|
1479
1507
|
def _validate_privacy_request_pending_or_error(
|
|
1480
1508
|
db: Session, privacy_request_id: str
|
|
1481
1509
|
) -> None:
|
|
@@ -1971,6 +1999,32 @@ def resume_privacy_request_from_requires_input(
|
|
|
1971
1999
|
return privacy_request # type: ignore[return-value]
|
|
1972
2000
|
|
|
1973
2001
|
|
|
2002
|
+
@router.post(
|
|
2003
|
+
PRIVACY_REQUEST_BULK_FINALIZE,
|
|
2004
|
+
status_code=HTTP_200_OK,
|
|
2005
|
+
response_model=BulkReviewResponse,
|
|
2006
|
+
)
|
|
2007
|
+
def bulk_finalize_privacy_requests(
|
|
2008
|
+
*,
|
|
2009
|
+
client: ClientDetail = Security(
|
|
2010
|
+
verify_oauth_client,
|
|
2011
|
+
scopes=[PRIVACY_REQUEST_REVIEW],
|
|
2012
|
+
),
|
|
2013
|
+
privacy_request_service: PrivacyRequestService = Depends(
|
|
2014
|
+
get_privacy_request_service
|
|
2015
|
+
),
|
|
2016
|
+
privacy_requests: ReviewPrivacyRequestIds,
|
|
2017
|
+
) -> BulkReviewResponse:
|
|
2018
|
+
"""
|
|
2019
|
+
Bulk finalize privacy requests that are in requires_manual_finalization status.
|
|
2020
|
+
Each request will be moved from the 'requires_finalization' state to 'complete'.
|
|
2021
|
+
Returns an object with the list of successfully finalized privacy requests and the list of failed finalizations.
|
|
2022
|
+
"""
|
|
2023
|
+
return privacy_request_service.finalize_privacy_requests(
|
|
2024
|
+
privacy_requests.request_ids, user_id=client.user_id
|
|
2025
|
+
)
|
|
2026
|
+
|
|
2027
|
+
|
|
1974
2028
|
@router.post(
|
|
1975
2029
|
PRIVACY_REQUEST_FINALIZE,
|
|
1976
2030
|
status_code=HTTP_200_OK,
|
|
@@ -3,10 +3,12 @@ from typing import Optional
|
|
|
3
3
|
from zipfile import BadZipFile, ZipFile
|
|
4
4
|
|
|
5
5
|
from fastapi import Body, Depends, HTTPException, Request
|
|
6
|
+
from fastapi.encoders import jsonable_encoder
|
|
6
7
|
from fastapi.params import Security
|
|
7
8
|
from fastapi.responses import JSONResponse
|
|
8
9
|
from fideslang.validation import FidesKey
|
|
9
10
|
from loguru import logger
|
|
11
|
+
from pydantic import ValidationError
|
|
10
12
|
from sqlalchemy.orm import Session
|
|
11
13
|
from starlette.status import (
|
|
12
14
|
HTTP_200_OK,
|
|
@@ -18,9 +20,15 @@ from starlette.status import (
|
|
|
18
20
|
)
|
|
19
21
|
|
|
20
22
|
from fides.api.api import deps
|
|
21
|
-
from fides.api.common_exceptions import
|
|
23
|
+
from fides.api.common_exceptions import (
|
|
24
|
+
FidesopsException,
|
|
25
|
+
KeyOrNameAlreadyExists,
|
|
26
|
+
SaaSConfigNotFoundException,
|
|
27
|
+
)
|
|
28
|
+
from fides.api.common_exceptions import ValidationError as FidesValidationError
|
|
22
29
|
from fides.api.models.connectionconfig import ConnectionConfig, ConnectionType
|
|
23
30
|
from fides.api.models.datasetconfig import DatasetConfig
|
|
31
|
+
from fides.api.models.event_audit import EventAuditStatus, EventAuditType
|
|
24
32
|
from fides.api.models.sql_models import System # type: ignore
|
|
25
33
|
from fides.api.oauth.utils import verify_oauth_client
|
|
26
34
|
from fides.api.schemas.connection_configuration.connection_config import (
|
|
@@ -29,7 +37,6 @@ from fides.api.schemas.connection_configuration.connection_config import (
|
|
|
29
37
|
from fides.api.schemas.connection_configuration.saas_config_template_values import (
|
|
30
38
|
SaasConnectionTemplateValues,
|
|
31
39
|
)
|
|
32
|
-
from fides.api.schemas.saas.connector_template import ConnectorTemplate
|
|
33
40
|
from fides.api.schemas.saas.saas_config import (
|
|
34
41
|
SaaSConfig,
|
|
35
42
|
SaaSConfigValidationDetails,
|
|
@@ -42,13 +49,11 @@ from fides.api.service.authentication.authentication_strategy_oauth2_authorizati
|
|
|
42
49
|
OAuth2AuthorizationCodeAuthenticationStrategy,
|
|
43
50
|
)
|
|
44
51
|
from fides.api.service.connectors.saas.connector_registry_service import (
|
|
45
|
-
ConnectorRegistry,
|
|
46
52
|
CustomConnectorTemplateLoader,
|
|
47
|
-
create_connection_config_from_template_no_save,
|
|
48
|
-
upsert_dataset_config_from_template,
|
|
49
53
|
)
|
|
50
54
|
from fides.api.util.api_router import APIRouter
|
|
51
|
-
from fides.api.util.connection_util import
|
|
55
|
+
from fides.api.util.connection_util import validate_secrets_error_message
|
|
56
|
+
from fides.api.util.event_audit_util import generate_connection_audit_event_details
|
|
52
57
|
from fides.common.api.scope_registry import (
|
|
53
58
|
CONNECTION_AUTHORIZE,
|
|
54
59
|
CONNECTOR_TEMPLATE_REGISTER,
|
|
@@ -59,13 +64,17 @@ from fides.common.api.scope_registry import (
|
|
|
59
64
|
)
|
|
60
65
|
from fides.common.api.v1.urn_registry import (
|
|
61
66
|
AUTHORIZE,
|
|
62
|
-
CONNECTION_TYPES,
|
|
63
67
|
REGISTER_CONNECTOR_TEMPLATE,
|
|
64
68
|
SAAS_CONFIG,
|
|
65
69
|
SAAS_CONFIG_VALIDATE,
|
|
66
70
|
SAAS_CONNECTOR_FROM_TEMPLATE,
|
|
67
71
|
V1_URL_PREFIX,
|
|
68
72
|
)
|
|
73
|
+
from fides.service.connection.connection_service import (
|
|
74
|
+
ConnectionService,
|
|
75
|
+
ConnectorTemplateNotFound,
|
|
76
|
+
)
|
|
77
|
+
from fides.service.event_audit_service import EventAuditService
|
|
69
78
|
|
|
70
79
|
router = APIRouter(tags=["SaaS Configs"], prefix=V1_URL_PREFIX)
|
|
71
80
|
|
|
@@ -168,12 +177,29 @@ def patch_saas_config(
|
|
|
168
177
|
Given a SaaS config element, update the corresponding ConnectionConfig object
|
|
169
178
|
or report failure
|
|
170
179
|
"""
|
|
180
|
+
|
|
171
181
|
logger.info(
|
|
172
182
|
"Updating SaaS config '{}' on connection config '{}'",
|
|
173
183
|
saas_config.fides_key,
|
|
174
184
|
connection_config.key,
|
|
175
185
|
)
|
|
176
186
|
connection_config.update_saas_config(db, saas_config=saas_config)
|
|
187
|
+
|
|
188
|
+
# Create audit event for SaaS config update
|
|
189
|
+
event_audit_service = EventAuditService(db)
|
|
190
|
+
event_details, description = generate_connection_audit_event_details(
|
|
191
|
+
EventAuditType.connection_updated,
|
|
192
|
+
connection_config=connection_config,
|
|
193
|
+
)
|
|
194
|
+
event_audit_service.create_event_audit(
|
|
195
|
+
event_type=EventAuditType.connection_updated,
|
|
196
|
+
status=EventAuditStatus.succeeded,
|
|
197
|
+
resource_type="connection_config",
|
|
198
|
+
resource_identifier=connection_config.key,
|
|
199
|
+
description=description,
|
|
200
|
+
event_details=event_details,
|
|
201
|
+
)
|
|
202
|
+
|
|
177
203
|
return connection_config.saas_config # type: ignore
|
|
178
204
|
|
|
179
205
|
|
|
@@ -305,59 +331,45 @@ def instantiate_connection(
|
|
|
305
331
|
Looks up the connector type in the SaaS connector registry and, if all required
|
|
306
332
|
fields are provided, persists the associated connection config and dataset to the database.
|
|
307
333
|
"""
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
status_code=HTTP_404_NOT_FOUND,
|
|
314
|
-
detail=f"SaaS connector type '{saas_connector_type}' is not yet available in Fidesops. For a list of available SaaS connectors, refer to {CONNECTION_TYPES}.",
|
|
334
|
+
event_audit_service = EventAuditService(db)
|
|
335
|
+
connection_service = ConnectionService(db, event_audit_service)
|
|
336
|
+
try:
|
|
337
|
+
connection_config, dataset_config = connection_service.instantiate_connection(
|
|
338
|
+
saas_connector_type, template_values, system
|
|
315
339
|
)
|
|
316
|
-
|
|
317
|
-
if DatasetConfig.filter(
|
|
318
|
-
db=db,
|
|
319
|
-
conditions=(DatasetConfig.fides_key == template_values.instance_key), # type: ignore[arg-type]
|
|
320
|
-
).count():
|
|
340
|
+
except ConnectorTemplateNotFound as exc:
|
|
321
341
|
raise HTTPException(
|
|
322
|
-
status_code=
|
|
323
|
-
detail=f"
|
|
324
|
-
)
|
|
325
|
-
|
|
326
|
-
try:
|
|
327
|
-
connection_config: ConnectionConfig = (
|
|
328
|
-
create_connection_config_from_template_no_save(
|
|
329
|
-
db, connector_template, template_values
|
|
330
|
-
)
|
|
342
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
343
|
+
detail=f"{exc.args[0]}",
|
|
331
344
|
)
|
|
332
345
|
except KeyOrNameAlreadyExists as exc:
|
|
333
346
|
raise HTTPException(
|
|
334
347
|
status_code=HTTP_400_BAD_REQUEST,
|
|
335
348
|
detail=exc.args[0],
|
|
336
349
|
)
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
if system:
|
|
342
|
-
connection_config.system_id = system.id
|
|
343
|
-
connection_config.save(db=db) # Not persisted to db until secrets are validated
|
|
344
|
-
|
|
345
|
-
try:
|
|
346
|
-
dataset_config: DatasetConfig = upsert_dataset_config_from_template(
|
|
347
|
-
db, connection_config, connector_template, template_values
|
|
350
|
+
except SaaSConfigNotFoundException:
|
|
351
|
+
raise HTTPException(
|
|
352
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
353
|
+
detail=validate_secrets_error_message(),
|
|
348
354
|
)
|
|
349
|
-
except
|
|
350
|
-
|
|
355
|
+
except FidesValidationError as e:
|
|
356
|
+
# Check if the exception has the original pydantic errors attached
|
|
357
|
+
raise HTTPException(status_code=HTTP_422_UNPROCESSABLE_ENTITY, detail=e.message)
|
|
358
|
+
except ValidationError as e:
|
|
359
|
+
errors = e.errors(include_url=False, include_input=False)
|
|
360
|
+
for err in errors:
|
|
361
|
+
# Additionally, manually remove the context from the error message -
|
|
362
|
+
# this may contain sensitive information
|
|
363
|
+
err.pop("ctx", None)
|
|
364
|
+
raise HTTPException(
|
|
365
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
366
|
+
detail=jsonable_encoder(errors),
|
|
367
|
+
)
|
|
368
|
+
except Exception as exc:
|
|
351
369
|
raise HTTPException(
|
|
352
370
|
status_code=HTTP_500_INTERNAL_SERVER_ERROR,
|
|
353
|
-
detail=f"
|
|
371
|
+
detail=f"{exc.args[0]}",
|
|
354
372
|
)
|
|
355
|
-
logger.info(
|
|
356
|
-
"SaaS Connector and Dataset {} successfully created from '{}' template.",
|
|
357
|
-
template_values.instance_key,
|
|
358
|
-
saas_connector_type,
|
|
359
|
-
)
|
|
360
|
-
|
|
361
373
|
return SaasConnectionTemplateResponse(
|
|
362
374
|
connection=connection_config, dataset=dataset_config.ctl_dataset
|
|
363
375
|
)
|