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
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
-
from asyncio import sleep
|
|
5
4
|
from datetime import datetime, timedelta
|
|
6
5
|
from typing import Any, Dict, List, Optional, Set
|
|
7
6
|
|
|
@@ -11,7 +10,7 @@ from sqlalchemy import text
|
|
|
11
10
|
from sqlalchemy.orm import Session
|
|
12
11
|
from sqlalchemy.sql.elements import TextClause
|
|
13
12
|
|
|
14
|
-
from fides.api.common_exceptions import PrivacyRequestError
|
|
13
|
+
from fides.api.common_exceptions import PrivacyRequestError
|
|
15
14
|
from fides.api.models.privacy_request import (
|
|
16
15
|
EXITED_EXECUTION_LOG_STATUSES,
|
|
17
16
|
PrivacyRequest,
|
|
@@ -21,10 +20,7 @@ from fides.api.models.privacy_request.request_task import AsyncTaskType
|
|
|
21
20
|
from fides.api.models.worker_task import ExecutionLogStatus
|
|
22
21
|
from fides.api.schemas.drp_privacy_request import DrpPrivacyRequestCreate
|
|
23
22
|
from fides.api.schemas.policy import ActionType
|
|
24
|
-
from fides.api.schemas.privacy_request import
|
|
25
|
-
PrivacyRequestResponse,
|
|
26
|
-
PrivacyRequestStatus,
|
|
27
|
-
)
|
|
23
|
+
from fides.api.schemas.privacy_request import PrivacyRequestStatus
|
|
28
24
|
from fides.api.schemas.redis_cache import Identity
|
|
29
25
|
from fides.api.tasks import DSR_QUEUE_NAME, DatabaseTask, celery_app
|
|
30
26
|
from fides.api.tasks.scheduled.scheduler import scheduler
|
|
@@ -38,7 +34,6 @@ from fides.api.util.cache import (
|
|
|
38
34
|
reset_privacy_request_retry_count,
|
|
39
35
|
)
|
|
40
36
|
from fides.api.util.lock import redis_lock
|
|
41
|
-
from fides.common.api.v1.urn_registry import PRIVACY_REQUESTS, V1_URL_PREFIX
|
|
42
37
|
from fides.config import CONFIG
|
|
43
38
|
|
|
44
39
|
PRIVACY_REQUEST_STATUS_CHANGE_POLL = "privacy_request_status_change_poll"
|
|
@@ -98,62 +93,6 @@ def get_async_client() -> AsyncClient:
|
|
|
98
93
|
return AsyncClient()
|
|
99
94
|
|
|
100
95
|
|
|
101
|
-
async def poll_server_for_completion(
|
|
102
|
-
privacy_request_id: str,
|
|
103
|
-
server_url: str,
|
|
104
|
-
token: str,
|
|
105
|
-
*,
|
|
106
|
-
poll_interval_seconds: int = 30,
|
|
107
|
-
timeout_seconds: int = 1800, # 30 minutes
|
|
108
|
-
client: AsyncClient | None = None,
|
|
109
|
-
) -> PrivacyRequestResponse:
|
|
110
|
-
"""Poll a server for privacy request completion.
|
|
111
|
-
|
|
112
|
-
Requests will report complete with if they have a status of canceled, complete,
|
|
113
|
-
denied, or error. By default the polling will time out if not completed in 30
|
|
114
|
-
minutes, time can be overridden by setting the timeout_seconds.
|
|
115
|
-
"""
|
|
116
|
-
url = (
|
|
117
|
-
f"{server_url}{V1_URL_PREFIX}{PRIVACY_REQUESTS}?request_id={privacy_request_id}"
|
|
118
|
-
)
|
|
119
|
-
start_time = datetime.now()
|
|
120
|
-
elapsed_time = 0.0
|
|
121
|
-
while elapsed_time < timeout_seconds:
|
|
122
|
-
if client:
|
|
123
|
-
response = await client.get(
|
|
124
|
-
url, headers={"Authorization": f"Bearer {token}"}
|
|
125
|
-
)
|
|
126
|
-
else:
|
|
127
|
-
async_client = get_async_client()
|
|
128
|
-
response = await async_client.get(
|
|
129
|
-
url, headers={"Authorization": f"Bearer {token}"}
|
|
130
|
-
)
|
|
131
|
-
response.raise_for_status()
|
|
132
|
-
|
|
133
|
-
# Privacy requests are returned paginated. Since this is searching for a specific
|
|
134
|
-
# privacy request there should only be one value present in items.
|
|
135
|
-
items = response.json()["items"]
|
|
136
|
-
if not items:
|
|
137
|
-
raise PrivacyRequestNotFound(
|
|
138
|
-
f"No privacy request found with id '{privacy_request_id}'"
|
|
139
|
-
)
|
|
140
|
-
status = PrivacyRequestResponse(**items[0])
|
|
141
|
-
if status.status and status.status in (
|
|
142
|
-
PrivacyRequestStatus.complete,
|
|
143
|
-
PrivacyRequestStatus.canceled,
|
|
144
|
-
PrivacyRequestStatus.error,
|
|
145
|
-
PrivacyRequestStatus.denied,
|
|
146
|
-
):
|
|
147
|
-
return status
|
|
148
|
-
|
|
149
|
-
await sleep(poll_interval_seconds)
|
|
150
|
-
time_delta = datetime.now() - start_time
|
|
151
|
-
elapsed_time = time_delta.seconds
|
|
152
|
-
raise TimeoutError(
|
|
153
|
-
f"Timeout of {timeout_seconds} seconds has been exceeded while waiting for privacy request {privacy_request_id}"
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
|
|
157
96
|
def initiate_poll_for_exited_privacy_request_tasks() -> None:
|
|
158
97
|
"""Initiates scheduler to check if a Privacy Request's status needs to be flipped when all
|
|
159
98
|
Request Tasks have had a chance to run"""
|
|
@@ -364,7 +303,7 @@ def initiate_interrupted_task_requeue_poll() -> None:
|
|
|
364
303
|
)
|
|
365
304
|
|
|
366
305
|
|
|
367
|
-
def
|
|
306
|
+
def initiate_polling_task_requeue() -> None:
|
|
368
307
|
"""Initiates scheduler to check for and requeue pending polling async tasks"""
|
|
369
308
|
if CONFIG.test_mode:
|
|
370
309
|
return
|
|
@@ -375,13 +314,13 @@ def initiate_async_tasks_status_polling() -> None:
|
|
|
375
314
|
|
|
376
315
|
logger.info("Initiating scheduler for async tasks status polling")
|
|
377
316
|
scheduler.add_job(
|
|
378
|
-
func=
|
|
317
|
+
func=requeue_polling_tasks,
|
|
379
318
|
trigger="interval",
|
|
380
319
|
kwargs={},
|
|
381
320
|
id=ASYNC_TASKS_STATUS_POLLING,
|
|
382
321
|
coalesce=True,
|
|
383
322
|
replace_existing=True,
|
|
384
|
-
seconds=CONFIG.execution.
|
|
323
|
+
seconds=CONFIG.execution.async_polling_interval_hours * 3600,
|
|
385
324
|
)
|
|
386
325
|
|
|
387
326
|
|
|
@@ -541,6 +480,27 @@ def _get_request_task_ids_in_progress(
|
|
|
541
480
|
return [task[0] for task in request_tasks_in_progress]
|
|
542
481
|
|
|
543
482
|
|
|
483
|
+
def _has_polling_tasks(db: Session, privacy_request_id: str) -> bool:
|
|
484
|
+
"""
|
|
485
|
+
Check if a privacy request has any polling async tasks.
|
|
486
|
+
|
|
487
|
+
Args:
|
|
488
|
+
db: Database session
|
|
489
|
+
privacy_request_id: The ID of the privacy request to check
|
|
490
|
+
|
|
491
|
+
Returns:
|
|
492
|
+
bool: True if the privacy request has polling tasks, False otherwise
|
|
493
|
+
"""
|
|
494
|
+
return db.query(
|
|
495
|
+
db.query(RequestTask)
|
|
496
|
+
.filter(
|
|
497
|
+
RequestTask.privacy_request_id == privacy_request_id,
|
|
498
|
+
RequestTask.async_type == AsyncTaskType.polling,
|
|
499
|
+
)
|
|
500
|
+
.exists()
|
|
501
|
+
).scalar()
|
|
502
|
+
|
|
503
|
+
|
|
544
504
|
# pylint: disable=too-many-branches
|
|
545
505
|
# pylint: disable=too-many-statements
|
|
546
506
|
@celery_app.task(base=DatabaseTask, bind=True)
|
|
@@ -680,6 +640,17 @@ def requeue_interrupted_tasks(self: DatabaseTask) -> None:
|
|
|
680
640
|
should_requeue = False
|
|
681
641
|
break
|
|
682
642
|
|
|
643
|
+
# Check if the Privacy request has polling tasks
|
|
644
|
+
if _has_polling_tasks(db, privacy_request.id):
|
|
645
|
+
# If the polling request task has no cached task ID, it's stuck
|
|
646
|
+
logger.warning(
|
|
647
|
+
f"No task ID found for request task {request_task_id} "
|
|
648
|
+
f"(privacy request {privacy_request.id}) Contains polling tasks - "
|
|
649
|
+
f"keeping request in current status as it may be waiting for polling task to complete"
|
|
650
|
+
)
|
|
651
|
+
should_requeue = False
|
|
652
|
+
break
|
|
653
|
+
|
|
683
654
|
# For other statuses, cancel the entire privacy request
|
|
684
655
|
_cancel_interrupted_tasks_and_error_privacy_request(
|
|
685
656
|
db,
|
|
@@ -706,7 +677,7 @@ def requeue_interrupted_tasks(self: DatabaseTask) -> None:
|
|
|
706
677
|
|
|
707
678
|
|
|
708
679
|
@celery_app.task(base=DatabaseTask, bind=True)
|
|
709
|
-
def
|
|
680
|
+
def requeue_polling_tasks(self: DatabaseTask) -> None:
|
|
710
681
|
"""
|
|
711
682
|
Poll the status of async tasks that are awaiting processing.
|
|
712
683
|
"""
|
|
@@ -720,19 +691,21 @@ def poll_async_tasks_status(self: DatabaseTask) -> None:
|
|
|
720
691
|
with self.get_new_session() as db:
|
|
721
692
|
logger.debug("Polling for async tasks status")
|
|
722
693
|
|
|
723
|
-
# Get all tasks that are
|
|
694
|
+
# Get all tasks that are polling and are from polling async tasks
|
|
724
695
|
async_tasks = (
|
|
725
696
|
db.query(RequestTask)
|
|
726
|
-
.filter(RequestTask.status == ExecutionLogStatus.
|
|
697
|
+
.filter(RequestTask.status == ExecutionLogStatus.polling)
|
|
727
698
|
.filter(RequestTask.async_type == AsyncTaskType.polling)
|
|
728
699
|
.all()
|
|
729
700
|
)
|
|
730
|
-
logger.info(f"Found {len(async_tasks)} async tasks
|
|
701
|
+
logger.info(f"Found {len(async_tasks)} async polling tasks")
|
|
731
702
|
|
|
732
703
|
if async_tasks:
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
)
|
|
704
|
+
# Avoiding cyclic imports
|
|
705
|
+
from fides.api.task.execute_request_tasks import queue_request_task
|
|
736
706
|
|
|
737
707
|
for async_task in async_tasks:
|
|
738
|
-
|
|
708
|
+
logger.info(
|
|
709
|
+
f"Requeuing polling task {async_task.id} for processing"
|
|
710
|
+
)
|
|
711
|
+
queue_request_task(async_task, privacy_request_proceed=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
2
|
from inspect import Signature, signature
|
|
3
|
-
from typing import Callable, Dict, List, Union
|
|
3
|
+
from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Union
|
|
4
4
|
|
|
5
5
|
from loguru import logger
|
|
6
6
|
|
|
@@ -12,6 +12,9 @@ from fides.api.schemas.consentable_item import ConsentableItem, ConsentWebhookRe
|
|
|
12
12
|
from fides.api.schemas.saas.shared_schemas import ConsentPropagationStatus
|
|
13
13
|
from fides.api.util.collection_util import Row
|
|
14
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from fides.api.schemas.saas.async_polling_configuration import PollingResult
|
|
17
|
+
|
|
15
18
|
|
|
16
19
|
# at some point this should likely be formalized more centrally...
|
|
17
20
|
class SaaSRequestType(Enum):
|
|
@@ -30,6 +33,10 @@ class SaaSRequestType(Enum):
|
|
|
30
33
|
UPDATE_CONSENT = "update_consent"
|
|
31
34
|
PROCESS_CONSENT_WEBHOOK = "process_consent_webhook"
|
|
32
35
|
|
|
36
|
+
# Async polling request types
|
|
37
|
+
POLLING_STATUS = "polling_status"
|
|
38
|
+
POLLING_RESULT = "polling_result"
|
|
39
|
+
|
|
33
40
|
|
|
34
41
|
RequestOverrideFunction = Callable[
|
|
35
42
|
...,
|
|
@@ -39,6 +46,8 @@ RequestOverrideFunction = Callable[
|
|
|
39
46
|
List[Row],
|
|
40
47
|
ConsentPropagationStatus,
|
|
41
48
|
int,
|
|
49
|
+
bool, # For polling status overrides
|
|
50
|
+
"PollingResult", # For polling result overrides - string literal to avoid circular import
|
|
42
51
|
None,
|
|
43
52
|
],
|
|
44
53
|
]
|
|
@@ -105,6 +114,10 @@ class SaaSRequestOverrideFactory:
|
|
|
105
114
|
validate_update_consent_function(override_function)
|
|
106
115
|
elif request_type == SaaSRequestType.PROCESS_CONSENT_WEBHOOK:
|
|
107
116
|
validate_process_consent_webhook_function(override_function)
|
|
117
|
+
elif request_type == SaaSRequestType.POLLING_STATUS:
|
|
118
|
+
validate_polling_status_override_function(override_function)
|
|
119
|
+
elif request_type == SaaSRequestType.POLLING_RESULT:
|
|
120
|
+
validate_polling_result_override_function(override_function)
|
|
108
121
|
else:
|
|
109
122
|
raise ValueError(
|
|
110
123
|
f"Invalid SaaSRequestType '{request_type}' provided for SaaS request override function"
|
|
@@ -264,5 +277,62 @@ def validate_process_consent_webhook_function(f: Callable) -> None:
|
|
|
264
277
|
)
|
|
265
278
|
|
|
266
279
|
|
|
280
|
+
def validate_polling_status_override_function(f: Callable) -> None:
|
|
281
|
+
"""
|
|
282
|
+
Perform some basic checks on the user-provided SaaS request override function
|
|
283
|
+
that will be used for polling status checks.
|
|
284
|
+
|
|
285
|
+
The validation is not overly strict to allow for some flexibility in
|
|
286
|
+
the functions that are used for overrides, but we check to ensure that
|
|
287
|
+
the function meets the framework's basic expectations.
|
|
288
|
+
|
|
289
|
+
Specifically, the validation checks that function's return type is `bool`
|
|
290
|
+
and that it declares at least 4 parameters.
|
|
291
|
+
"""
|
|
292
|
+
sig: Signature = signature(f)
|
|
293
|
+
if sig.return_annotation is not bool:
|
|
294
|
+
raise InvalidSaaSRequestOverrideException(
|
|
295
|
+
"Polling status override function must return a bool"
|
|
296
|
+
)
|
|
297
|
+
if len(sig.parameters) < 4:
|
|
298
|
+
raise InvalidSaaSRequestOverrideException(
|
|
299
|
+
"Polling status override function must declare at least 4 parameters"
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
def validate_polling_result_override_function(f: Callable) -> None:
|
|
304
|
+
"""
|
|
305
|
+
Perform some basic checks on the user-provided SaaS request override function
|
|
306
|
+
that will be used for polling result retrieval.
|
|
307
|
+
|
|
308
|
+
The validation is not overly strict to allow for some flexibility in
|
|
309
|
+
the functions that are used for overrides, but we check to ensure that
|
|
310
|
+
the function meets the framework's basic expectations.
|
|
311
|
+
|
|
312
|
+
Specifically, the validation checks that function's return type is `PollingResult`
|
|
313
|
+
and that it declares at least 4 parameters.
|
|
314
|
+
"""
|
|
315
|
+
sig: Signature = signature(f)
|
|
316
|
+
|
|
317
|
+
# Import PollingResult here to avoid circular imports at module level
|
|
318
|
+
from fides.api.schemas.saas.async_polling_configuration import PollingResult
|
|
319
|
+
|
|
320
|
+
# Check return type annotation - handle both direct class and string literals
|
|
321
|
+
return_annotation = sig.return_annotation
|
|
322
|
+
if return_annotation not in (
|
|
323
|
+
PollingResult,
|
|
324
|
+
"PollingResult",
|
|
325
|
+
Optional[PollingResult],
|
|
326
|
+
"Optional[PollingResult]",
|
|
327
|
+
):
|
|
328
|
+
raise InvalidSaaSRequestOverrideException(
|
|
329
|
+
"Polling result override function must return a PollingResult"
|
|
330
|
+
)
|
|
331
|
+
if len(sig.parameters) < 4:
|
|
332
|
+
raise InvalidSaaSRequestOverrideException(
|
|
333
|
+
"Polling result override function must declare at least 4 parameters"
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
|
|
267
337
|
# TODO: Avoid running this on import?
|
|
268
338
|
register = SaaSRequestOverrideFactory.register
|
|
@@ -22,7 +22,10 @@ from fides.api.common_exceptions import (
|
|
|
22
22
|
from fides.api.graph.config import TERMINATOR_ADDRESS, CollectionAddress
|
|
23
23
|
from fides.api.models.connectionconfig import ConnectionConfig
|
|
24
24
|
from fides.api.models.privacy_request import ExecutionLog, PrivacyRequest, RequestTask
|
|
25
|
-
from fides.api.models.worker_task import
|
|
25
|
+
from fides.api.models.worker_task import (
|
|
26
|
+
RESUMABLE_EXECUTION_LOG_STATUSES,
|
|
27
|
+
ExecutionLogStatus,
|
|
28
|
+
)
|
|
26
29
|
from fides.api.schemas.policy import ActionType, CurrentStep
|
|
27
30
|
from fides.api.schemas.privacy_request import PrivacyRequestStatus
|
|
28
31
|
from fides.api.task.graph_task import (
|
|
@@ -162,7 +165,7 @@ def can_run_task_body(
|
|
|
162
165
|
if request_task.is_root_task:
|
|
163
166
|
# Shouldn't be possible but adding as a catch-all
|
|
164
167
|
return False
|
|
165
|
-
if request_task.status
|
|
168
|
+
if request_task.status not in RESUMABLE_EXECUTION_LOG_STATUSES:
|
|
166
169
|
logger_method(request_task)(
|
|
167
170
|
"Skipping {} task {} with status {}.",
|
|
168
171
|
request_task.action_type,
|
|
@@ -274,15 +277,18 @@ def run_access_node(
|
|
|
274
277
|
|
|
275
278
|
try:
|
|
276
279
|
with self.get_new_session() as session:
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
280
|
+
(
|
|
281
|
+
privacy_request,
|
|
282
|
+
request_task,
|
|
283
|
+
upstream_results,
|
|
284
|
+
) = run_prerequisite_task_checks(
|
|
285
|
+
session, privacy_request_id, privacy_request_task_id
|
|
281
286
|
)
|
|
282
287
|
with logger.contextualize(
|
|
283
288
|
privacy_request_source=(
|
|
284
289
|
privacy_request.source.value if privacy_request.source else None
|
|
285
|
-
)
|
|
290
|
+
),
|
|
291
|
+
collection=request_task.collection_address,
|
|
286
292
|
):
|
|
287
293
|
log_task_starting(request_task)
|
|
288
294
|
|
|
@@ -343,7 +349,8 @@ def run_erasure_node(
|
|
|
343
349
|
with logger.contextualize(
|
|
344
350
|
privacy_request_source=(
|
|
345
351
|
privacy_request.source.value if privacy_request.source else None
|
|
346
|
-
)
|
|
352
|
+
),
|
|
353
|
+
collection=request_task.collection_address,
|
|
347
354
|
):
|
|
348
355
|
log_task_starting(request_task)
|
|
349
356
|
|
|
@@ -416,7 +423,8 @@ def run_consent_node(
|
|
|
416
423
|
with logger.contextualize(
|
|
417
424
|
privacy_request_source=(
|
|
418
425
|
privacy_request.source.value if privacy_request.source else None
|
|
419
|
-
)
|
|
426
|
+
),
|
|
427
|
+
collection=request_task.collection_address,
|
|
420
428
|
):
|
|
421
429
|
log_task_starting(request_task)
|
|
422
430
|
|
fides/api/task/filter_results.py
CHANGED
|
@@ -6,10 +6,43 @@ from loguru import logger
|
|
|
6
6
|
|
|
7
7
|
from fides.api.graph.config import CollectionAddress, FieldPath
|
|
8
8
|
from fides.api.graph.graph import DatasetGraph
|
|
9
|
+
from fides.api.service.storage.util import is_attachment_field
|
|
9
10
|
from fides.api.task.manual.manual_task_address import ManualTaskAddress
|
|
10
11
|
from fides.api.util.collection_util import Row
|
|
11
12
|
|
|
12
13
|
|
|
14
|
+
def should_skip_data_category_filtering(
|
|
15
|
+
node_address: str, results: List[Dict[str, Optional[Any]]]
|
|
16
|
+
) -> bool:
|
|
17
|
+
"""
|
|
18
|
+
Determine if results should skip data category filtering.
|
|
19
|
+
|
|
20
|
+
This includes:
|
|
21
|
+
1. Manual task data - controlled by field definitions, not data categories
|
|
22
|
+
2. Attachment data - should be preserved regardless of data categories (from polling or manual tasks)
|
|
23
|
+
|
|
24
|
+
:param node_address: The collection address being processed
|
|
25
|
+
:param results: The results data to check
|
|
26
|
+
:return: True if filtering should be skipped, False otherwise
|
|
27
|
+
"""
|
|
28
|
+
# Check if this is a manual task address
|
|
29
|
+
if ManualTaskAddress.is_manual_task_address(node_address):
|
|
30
|
+
return True
|
|
31
|
+
|
|
32
|
+
# Check if results contain attachment data
|
|
33
|
+
if not results:
|
|
34
|
+
return False
|
|
35
|
+
|
|
36
|
+
# Verify it looks like actual attachment data
|
|
37
|
+
for result in results:
|
|
38
|
+
if isinstance(result, dict) and any(
|
|
39
|
+
is_attachment_field(value) for value in result.values()
|
|
40
|
+
):
|
|
41
|
+
return True
|
|
42
|
+
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
|
|
13
46
|
def filter_data_categories(
|
|
14
47
|
access_request_results: Dict[str, List[Dict[str, Optional[Any]]]],
|
|
15
48
|
target_categories: Set[str],
|
|
@@ -38,8 +71,8 @@ def filter_data_categories(
|
|
|
38
71
|
if not results:
|
|
39
72
|
continue
|
|
40
73
|
|
|
41
|
-
# Skip
|
|
42
|
-
if
|
|
74
|
+
# Skip data that doesn't need filtering (manual tasks and attachment data)
|
|
75
|
+
if should_skip_data_category_filtering(node_address, results):
|
|
43
76
|
filtered_access_results[node_address].extend(results)
|
|
44
77
|
continue
|
|
45
78
|
|
fides/api/task/graph_task.py
CHANGED
|
@@ -13,6 +13,7 @@ from sqlalchemy.orm import Session
|
|
|
13
13
|
from fides.api.api.deps import get_autoclose_db_session as get_db
|
|
14
14
|
from fides.api.common_exceptions import (
|
|
15
15
|
ActionDisabled,
|
|
16
|
+
AwaitingAsyncProcessing,
|
|
16
17
|
AwaitingAsyncTask,
|
|
17
18
|
CollectionDisabled,
|
|
18
19
|
NotSupportedForCollection,
|
|
@@ -61,7 +62,6 @@ from fides.api.util.collection_util import (
|
|
|
61
62
|
from fides.api.util.consent_util import (
|
|
62
63
|
add_errored_system_status_for_consent_reporting_on_preferences,
|
|
63
64
|
)
|
|
64
|
-
from fides.api.util.logger import Pii
|
|
65
65
|
from fides.api.util.logger_context_utils import LoggerContextKeys
|
|
66
66
|
from fides.api.util.memory_watchdog import MemoryLimitExceeded
|
|
67
67
|
from fides.api.util.saas_util import FIDESOPS_GROUPED_INPUTS
|
|
@@ -96,6 +96,7 @@ def retry(
|
|
|
96
96
|
If we exceed the number of TASK_RETRY_COUNT retries, we re-raise the exception to stop execution of the privacy request.
|
|
97
97
|
"""
|
|
98
98
|
|
|
99
|
+
# pylint: disable=too-many-return-statements
|
|
99
100
|
def decorator(func: Callable) -> Callable:
|
|
100
101
|
@wraps(func)
|
|
101
102
|
def result(*args: Any, **kwargs: Any) -> Any:
|
|
@@ -115,6 +116,17 @@ def retry(
|
|
|
115
116
|
self.log_start(action_type)
|
|
116
117
|
# Run access or erasure request
|
|
117
118
|
return func(*args, **kwargs)
|
|
119
|
+
except AwaitingAsyncProcessing as ex:
|
|
120
|
+
logger.warning(
|
|
121
|
+
"Request Task {} {} {} async processing in progress",
|
|
122
|
+
self.request_task.id if self.request_task.id else None,
|
|
123
|
+
method_name,
|
|
124
|
+
self.execution_node.address,
|
|
125
|
+
)
|
|
126
|
+
# Log the async processing status and exit without retrying.
|
|
127
|
+
self.log_async_processing(action_type, ex)
|
|
128
|
+
# Request Task put in "polling" status and exited, external system is processing
|
|
129
|
+
return None
|
|
118
130
|
except AwaitingAsyncTask as ex:
|
|
119
131
|
logger.warning(
|
|
120
132
|
"Request Task {} {} {} awaiting async continuation",
|
|
@@ -416,9 +428,13 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
416
428
|
# created to keep these in sync.
|
|
417
429
|
# TODO remove conditional above alongside deprecating DSR 2.0
|
|
418
430
|
if self.request_task.id:
|
|
419
|
-
# Merge the
|
|
420
|
-
#
|
|
431
|
+
# Merge the request_task into the current session to make it persistent,
|
|
432
|
+
# then refresh its `async_type` to load the latest state from the
|
|
433
|
+
# database. This is crucial for async tasks where `async_type` might be
|
|
434
|
+
# updated by another process, and avoids overwriting local data like
|
|
435
|
+
# `access_data`.
|
|
421
436
|
request_task = db.merge(self.request_task)
|
|
437
|
+
db.refresh(request_task, attribute_names=["async_type"])
|
|
422
438
|
request_task.update_status(db, status)
|
|
423
439
|
self.request_task = request_task
|
|
424
440
|
|
|
@@ -453,6 +469,21 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
453
469
|
message, [], action_type, ExecutionLogStatus.awaiting_processing
|
|
454
470
|
)
|
|
455
471
|
|
|
472
|
+
def log_async_processing(
|
|
473
|
+
self,
|
|
474
|
+
action_type: ActionType,
|
|
475
|
+
ex: Optional[BaseException],
|
|
476
|
+
extra_message: Optional[str] = None,
|
|
477
|
+
) -> None:
|
|
478
|
+
"""On async processing activities - external system is actively processing, Fides is polling"""
|
|
479
|
+
logger.info("Polling for async results on node {}", self.key)
|
|
480
|
+
|
|
481
|
+
message = str(ex)
|
|
482
|
+
if extra_message:
|
|
483
|
+
message = f"{message}. {extra_message}"
|
|
484
|
+
|
|
485
|
+
self.update_status(message, [], action_type, ExecutionLogStatus.polling)
|
|
486
|
+
|
|
456
487
|
def log_skipped(self, action_type: ActionType, ex: str) -> None:
|
|
457
488
|
"""Log that a collection was skipped. For now, this is because a collection has been disabled."""
|
|
458
489
|
logger.info("Skipping node {}", self.key)
|
|
@@ -469,11 +500,11 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
469
500
|
) -> None:
|
|
470
501
|
"""On completion activities"""
|
|
471
502
|
if ex:
|
|
472
|
-
logger.
|
|
473
|
-
"Ending {}, {} with failure {}",
|
|
503
|
+
logger.error(
|
|
504
|
+
"Ending {}, {} with failure: {}",
|
|
474
505
|
self.resources.request.id,
|
|
475
506
|
self.key,
|
|
476
|
-
|
|
507
|
+
ex,
|
|
477
508
|
)
|
|
478
509
|
self.update_status(str(ex), [], action_type, ExecutionLogStatus.error)
|
|
479
510
|
# For DSR 3.0, Hooking into the GraphTask.log_end method to also mark the current
|
|
@@ -854,7 +885,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
854
885
|
privacy_request_id = self.resources.request.id
|
|
855
886
|
|
|
856
887
|
with get_db() as db:
|
|
857
|
-
|
|
858
888
|
privacy_preferences = db.query(PrivacyPreferenceHistory).filter(
|
|
859
889
|
PrivacyPreferenceHistory.privacy_request_id == privacy_request_id
|
|
860
890
|
)
|
|
@@ -975,7 +1005,6 @@ def build_affected_field_logs(
|
|
|
975
1005
|
policy_id = policy.id
|
|
976
1006
|
|
|
977
1007
|
with get_db() as db:
|
|
978
|
-
|
|
979
1008
|
rules = db.query(Rule).filter(Rule.policy_id == policy_id)
|
|
980
1009
|
|
|
981
1010
|
targeted_field_paths: Dict[FieldAddress, str] = {}
|
fides/api/tasks/__init__.py
CHANGED
|
@@ -86,7 +86,6 @@ class DatabaseTask(Task): # pylint: disable=W0223
|
|
|
86
86
|
# to prevent session overlap when requests are executing concurrently
|
|
87
87
|
# when in task_always_eager mode (i.e. without proper workers)
|
|
88
88
|
new_session = self._sessionmaker()
|
|
89
|
-
logger.debug(f"DatabaseTaskSession ID: {id(new_session)}. Self ID: {id(self)}")
|
|
90
89
|
return new_session
|
|
91
90
|
|
|
92
91
|
|