ethyca-fides 2.69.1rc0__py2.py3-none-any.whl → 2.76.0rc2__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/METADATA +9 -6
  2. {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/RECORD +488 -361
  3. fides/_version.py +3 -3
  4. fides/api/alembic/alembic.ini +5 -1
  5. fides/api/alembic/migrations/env.py +7 -1
  6. fides/api/alembic/migrations/versions/0eef0016cf06_adding_oauth2_config_for_.py +69 -0
  7. fides/api/alembic/migrations/versions/303287c70600_migrate_resource_type_from_enum_to_.py +99 -0
  8. fides/api/alembic/migrations/versions/30369bb8ae01_add_webmonitorgroupjob_model.py +67 -0
  9. fides/api/alembic/migrations/versions/3efe14d4469a_adds_new_experience_configs_for_vendor_.py +79 -0
  10. fides/api/alembic/migrations/versions/4bfbeff34611_add_polling_status.py +68 -0
  11. fides/api/alembic/migrations/versions/4d8c0fcc5771_adding_default_system_groups.py +78 -0
  12. fides/api/alembic/migrations/versions/5fa78b1f324d_add_event_audit_table.py +82 -0
  13. fides/api/alembic/migrations/versions/65a1bc82ae09_adds_experience_config_for_delete_.py +53 -0
  14. fides/api/alembic/migrations/versions/67d0e389b003_update_consentstatus_enum.py +47 -0
  15. fides/api/alembic/migrations/versions/795f46f656c0_migrate_field_type_from_enum_to_string.py +61 -0
  16. fides/api/alembic/migrations/versions/7db29f9cd77b_create_new_sub_request_table.py +95 -0
  17. fides/api/alembic/migrations/versions/918aefc950c9_create_digest_conditional_dependencies.py +125 -0
  18. fides/api/alembic/migrations/versions/9caf76161e55_make_user_assigned_data_uses_nullable_.py +64 -0
  19. fides/api/alembic/migrations/versions/9e0dcbf67b9f_add_digest_config.py +84 -0
  20. fides/api/alembic/migrations/versions/a55e12c2c2df_add_tagging_instructions_to_data_.py +29 -0
  21. fides/api/alembic/migrations/versions/a8e0c016afd_add_classification_benchmark_table.py +126 -0
  22. fides/api/alembic/migrations/versions/b97e92b038d2_add_digest_execution_model.py +117 -0
  23. fides/api/alembic/migrations/versions/b9bfa12c167b_add_not_applicable_to_asset_consentstatus.py +46 -0
  24. fides/api/alembic/migrations/versions/c09e76282dd1_add_privacy_request_duplication_cols.py +64 -0
  25. fides/api/alembic/migrations/versions/cd8649be3a2b_add_classifications_and_user_assigned_.py +74 -0
  26. fides/api/alembic/migrations/versions/e2cda8d6abc3_add_dismissed_in_activity_view_to_.py +29 -0
  27. fides/api/alembic/migrations/versions/f108fa05c579_adds_optional_duration_field_to_assets.py +28 -0
  28. fides/api/alembic/migrations/versions/f36ce1bde293_add_system_groups.py +132 -0
  29. fides/api/alembic/migrations/versions/fd7571bef683_adds_new_fields_to_messagingconfig_for_.py +31 -0
  30. fides/api/alembic/migrations/versions/xx_2025_10_17_1603_5093e92e2a5a_add_consent_data_v3_to_the_database.py +72 -0
  31. fides/api/alembic/migrations/versions/xx_2025_10_27_1834_67f0f2f4748e_adding_identity_definition_model.py +45 -0
  32. fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
  33. fides/api/alembic/migrations/versions/xx_2025_11_05_0200_f1a2b3c4d5e6_create_staged_resource_error_table.py +82 -0
  34. fides/api/alembic/migrations/versions/xx_2025_11_07_1709_56fe6fad2d89_add_notice_display_order.py +47 -0
  35. fides/api/alembic/migrations/versions/xx_2025_11_10_1200_a1b2c3d4e5f6_add_test_datastore_to_connectiontype.py +53 -0
  36. fides/api/alembic/migrations/versions/xx_2025_11_11_1317_7d82c8fc4c34_store_saas_template_datasets.py +68 -0
  37. fides/api/alembic/migrations/versions/xx_2025_11_12_1430_b2c3d4e5f6a7_add_default_identity_definitions.py +81 -0
  38. fides/api/alembic/migrations/versions/xx_2025_11_25_1854_3ff6449c099e_add_index_on_providedidentity_privacy_.py +50 -0
  39. fides/api/api/v1/api.py +2 -0
  40. fides/api/api/v1/endpoints/admin.py +39 -0
  41. fides/api/api/v1/endpoints/connection_endpoints.py +191 -47
  42. fides/api/api/v1/endpoints/connector_template_endpoints.py +167 -0
  43. fides/api/api/v1/endpoints/generic_overrides.py +90 -15
  44. fides/api/api/v1/endpoints/messaging_endpoints.py +164 -34
  45. fides/api/api/v1/endpoints/pre_approval_webhook_endpoints.py +5 -5
  46. fides/api/api/v1/endpoints/privacy_request_endpoints.py +231 -46
  47. fides/api/api/v1/endpoints/saas_config_endpoints.py +63 -92
  48. fides/api/api/v1/endpoints/storage_endpoints.py +5 -1
  49. fides/api/api/v1/endpoints/system.py +157 -100
  50. fides/api/api/v1/endpoints/user_endpoints.py +17 -4
  51. fides/api/app_setup.py +1 -3
  52. fides/api/common_exceptions.py +8 -0
  53. fides/api/db/base.py +8 -0
  54. fides/api/db/crud.py +30 -2
  55. fides/api/db/database.py +261 -4
  56. fides/api/db/safe_crud.py +377 -0
  57. fides/api/db/seed.py +35 -1
  58. fides/api/email_templates/get_email_template.py +3 -0
  59. fides/api/email_templates/template_names.py +1 -0
  60. fides/api/email_templates/templates/external_user_welcome.html +9 -5
  61. fides/api/email_templates/templates/manual_task_digest.html +316 -0
  62. fides/api/main.py +2 -0
  63. fides/api/migrations/post_upgrade_index_creation.py +20 -0
  64. fides/api/models/asset.py +17 -1
  65. fides/api/models/attachment.py +1 -0
  66. fides/api/models/conditional_dependency/__init__.py +0 -0
  67. fides/api/models/conditional_dependency/conditional_dependency_base.py +311 -0
  68. fides/api/models/connection_oauth_credentials.py +57 -0
  69. fides/api/models/connectionconfig.py +11 -1
  70. fides/api/models/detection_discovery/__init__.py +4 -0
  71. fides/api/models/detection_discovery/classification_benchmark.py +140 -0
  72. fides/api/models/detection_discovery/core.py +78 -3
  73. fides/api/models/detection_discovery/monitor_task.py +3 -1
  74. fides/api/models/detection_discovery/staged_resource_error.py +25 -0
  75. fides/api/models/detection_discovery/web_monitor.py +61 -0
  76. fides/api/models/digest/__init__.py +16 -0
  77. fides/api/models/digest/conditional_dependencies.py +275 -0
  78. fides/api/models/digest/digest_config.py +110 -0
  79. fides/api/models/digest/digest_execution.py +142 -0
  80. fides/api/models/event_audit.py +85 -0
  81. fides/api/models/experience_notices.py +6 -1
  82. fides/api/models/fides_user.py +9 -0
  83. fides/api/models/identity_definition.py +66 -0
  84. fides/api/models/location_regulation_selections.py +22 -0
  85. fides/api/models/manual_task/conditional_dependency.py +29 -87
  86. fides/api/models/manual_webhook.py +17 -6
  87. fides/api/models/messaging.py +30 -10
  88. fides/api/models/messaging_template.py +14 -0
  89. fides/api/models/policy.py +27 -0
  90. fides/api/models/privacy_experience.py +41 -0
  91. fides/api/models/privacy_notice.py +196 -13
  92. fides/api/models/privacy_preference.py +2 -0
  93. fides/api/models/privacy_request/duplicate_group.py +84 -0
  94. fides/api/models/privacy_request/privacy_request.py +154 -8
  95. fides/api/models/privacy_request/provided_identity.py +22 -1
  96. fides/api/models/privacy_request/request_task.py +98 -1
  97. fides/api/models/privacy_request/webhook.py +3 -1
  98. fides/api/models/saas_template_dataset.py +63 -0
  99. fides/api/models/sql_models.py +161 -7
  100. fides/api/models/system_group.py +85 -0
  101. fides/api/models/taxonomy.py +91 -9
  102. fides/api/models/v3/__init__.py +0 -0
  103. fides/api/models/v3/privacy_preferences.py +85 -0
  104. fides/api/models/worker_task.py +8 -0
  105. fides/api/oauth/roles.py +4 -0
  106. fides/api/schemas/application_config.py +32 -1
  107. fides/api/schemas/connection_configuration/connection_config.py +1 -30
  108. fides/api/schemas/connection_configuration/connection_oauth_config.py +42 -0
  109. fides/api/schemas/connection_configuration/connection_secrets_mongodb.py +15 -3
  110. fides/api/schemas/connection_configuration/connection_secrets_mssql.py +5 -0
  111. fides/api/schemas/messaging/messaging.py +49 -66
  112. fides/api/schemas/messaging/messaging_secrets_docs_only.py +1 -1
  113. fides/api/schemas/messaging/shared_schemas.py +102 -0
  114. fides/api/schemas/oauth.py +2 -1
  115. fides/api/schemas/privacy_center_config.py +29 -5
  116. fides/api/schemas/privacy_request.py +44 -7
  117. fides/api/schemas/saas/async_polling_configuration.py +81 -0
  118. fides/api/schemas/saas/connector_template.py +14 -0
  119. fides/api/schemas/saas/saas_config.py +12 -20
  120. fides/api/schemas/system.py +8 -0
  121. fides/api/schemas/taxonomy_extensions.py +8 -0
  122. fides/api/schemas/user.py +2 -2
  123. fides/api/service/async_dsr/handlers/__init__.py +0 -0
  124. fides/api/service/async_dsr/handlers/polling_attachment_handler.py +155 -0
  125. fides/api/service/async_dsr/handlers/polling_request_handler.py +88 -0
  126. fides/api/service/async_dsr/handlers/polling_response_handler.py +261 -0
  127. fides/api/service/async_dsr/handlers/polling_sub_request_handler.py +123 -0
  128. fides/api/service/async_dsr/strategies/__init__.py +0 -0
  129. fides/api/service/async_dsr/strategies/async_dsr_strategy.py +52 -0
  130. fides/api/service/async_dsr/strategies/async_dsr_strategy_callback.py +199 -0
  131. fides/api/service/async_dsr/strategies/async_dsr_strategy_factory.py +72 -0
  132. fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +691 -0
  133. fides/api/service/async_dsr/utils.py +130 -0
  134. fides/api/service/connectors/base_erasure_email_connector.py +7 -0
  135. fides/api/service/connectors/bigquery_connector.py +34 -16
  136. fides/api/service/connectors/fides/fides_client.py +63 -1
  137. fides/api/service/connectors/http_connector.py +48 -12
  138. fides/api/service/connectors/microsoft_sql_server_connector.py +6 -1
  139. fides/api/service/connectors/mongodb_connector.py +74 -9
  140. fides/api/service/connectors/query_configs/saas_query_config.py +160 -79
  141. fides/api/service/connectors/saas/connector_registry_service.py +42 -135
  142. fides/api/service/connectors/saas_connector.py +116 -76
  143. fides/api/service/connectors/sql_connector.py +14 -4
  144. fides/api/service/deps.py +25 -2
  145. fides/api/service/messaging/message_dispatch_service.py +98 -20
  146. fides/api/service/messaging/messaging_crud_service.py +5 -9
  147. fides/api/service/privacy_request/attachment_handling.py +9 -2
  148. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +17 -9
  149. fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +41 -30
  150. fides/api/service/privacy_request/dsr_package/templates/clickme.html +68 -0
  151. fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +30 -27
  152. fides/api/service/privacy_request/duplication_detection.py +439 -0
  153. fides/api/service/privacy_request/email_batch_service.py +2 -1
  154. fides/api/service/privacy_request/request_runner_service.py +92 -91
  155. fides/api/service/privacy_request/request_service.py +74 -90
  156. fides/api/service/saas_request/saas_request_override_factory.py +71 -1
  157. fides/api/service/storage/streaming/schemas.py +27 -19
  158. fides/api/service/storage/streaming/smart_open_client.py +2 -2
  159. fides/api/service/storage/streaming/smart_open_streaming_storage.py +238 -147
  160. fides/api/service/storage/util.py +20 -106
  161. fides/api/service/strategy.py +6 -3
  162. fides/api/task/conditional_dependencies/privacy_request/__init__.py +0 -0
  163. fides/api/task/conditional_dependencies/privacy_request/convenience_fields.py +155 -0
  164. fides/api/task/conditional_dependencies/privacy_request/privacy_request_data.py +140 -0
  165. fides/api/task/conditional_dependencies/privacy_request/schemas.py +212 -0
  166. fides/api/task/conditional_dependencies/sql_schemas.py +301 -0
  167. fides/api/task/conditional_dependencies/sql_translator.py +757 -0
  168. fides/api/task/conditional_dependencies/util.py +111 -0
  169. fides/api/task/execute_request_tasks.py +34 -13
  170. fides/api/task/filter_results.py +35 -2
  171. fides/api/task/graph_runners.py +2 -32
  172. fides/api/task/graph_task.py +42 -12
  173. fides/api/task/manual/manual_task_conditional_evaluation.py +33 -28
  174. fides/api/task/manual/manual_task_graph_task.py +4 -1
  175. fides/api/task/manual/manual_task_utils.py +68 -26
  176. fides/api/task/scheduler_utils.py +39 -0
  177. fides/api/tasks/__init__.py +15 -1
  178. fides/api/util/cache.py +5 -1
  179. fides/api/util/connection_util.py +101 -218
  180. fides/api/util/event_audit_util.py +230 -0
  181. fides/api/util/filter_utils.py +0 -3
  182. fides/api/util/fuzzy_search_utils.py +7 -1
  183. fides/api/util/lock.py +13 -3
  184. fides/api/util/logger.py +58 -4
  185. fides/api/util/logger_context_utils.py +3 -1
  186. fides/api/util/masking_util.py +31 -0
  187. fides/api/util/memory_watchdog.py +118 -0
  188. fides/api/util/rate_limit.py +25 -7
  189. fides/api/util/saas_config_updater.py +76 -0
  190. fides/api/util/saas_util.py +28 -1
  191. fides/api/worker/__init__.py +6 -0
  192. fides/common/api/scope_registry.py +6 -7
  193. fides/common/api/v1/urn_registry.py +15 -3
  194. fides/config/__init__.py +11 -2
  195. fides/config/celery_settings.py +42 -0
  196. fides/config/config_proxy.py +10 -0
  197. fides/config/duplicate_detection_settings.py +31 -0
  198. fides/config/execution_settings.py +6 -6
  199. fides/config/security_settings.py +4 -1
  200. fides/config/utils.py +5 -0
  201. fides/data/language/languages.yml +2 -0
  202. fides/service/connection/__init__.py +0 -0
  203. fides/service/connection/connection_service.py +651 -0
  204. fides/service/dataset/dataset_service.py +39 -0
  205. fides/service/event_audit_service.py +109 -0
  206. fides/service/messaging/aws_ses_service.py +2 -4
  207. fides/service/messaging/messaging_service.py +75 -74
  208. fides/service/privacy_request/privacy_request_service.py +345 -100
  209. fides/service/system/__init__.py +0 -0
  210. fides/service/system/system_service.py +153 -0
  211. fides/service/taxonomy/handlers/legacy_handler.py +3 -3
  212. fides/service/taxonomy/taxonomy_service.py +64 -18
  213. fides/ui-build/static/admin/404.html +1 -1
  214. fides/ui-build/static/admin/_next/static/chunks/1099-688fa865621531cc.js +1 -0
  215. fides/ui-build/static/admin/_next/static/chunks/1115-7fd171dac1eb0e51.js +1 -0
  216. fides/ui-build/static/admin/_next/static/chunks/1276.deb10ae2643f8463.js +1 -0
  217. fides/ui-build/static/admin/_next/static/chunks/1438-8a33b3834d6e43f3.js +1 -0
  218. fides/ui-build/static/admin/_next/static/chunks/{6148-59a59d5c5925344f.js → 1533-84e250d1f26e6d7d.js} +1 -1
  219. fides/ui-build/static/admin/_next/static/chunks/1821-c1daa160f492aacf.js +1 -0
  220. fides/ui-build/static/admin/_next/static/chunks/1840-359ee056e4cf6629.js +1 -0
  221. fides/ui-build/static/admin/_next/static/chunks/{1975.78e719130cfe3fd6.js → 1975.bef017bc80e2012c.js} +1 -1
  222. fides/ui-build/static/admin/_next/static/chunks/2040-70972e15960d9afe.js +1 -0
  223. fides/ui-build/static/admin/_next/static/chunks/2121.321b0fd3932164d4.js +1 -0
  224. fides/ui-build/static/admin/_next/static/chunks/2397-3434603a97f3f5d6.js +1 -0
  225. fides/ui-build/static/admin/_next/static/chunks/2921-49ed0ed897832958.js +1 -0
  226. fides/ui-build/static/admin/_next/static/chunks/3150-da5406b80d25fe6d.js +1 -0
  227. fides/ui-build/static/admin/_next/static/chunks/3214-90ce0a366b0f461a.js +1 -0
  228. fides/ui-build/static/admin/_next/static/chunks/3377-02bf9780fd383d94.js +1 -0
  229. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
  230. fides/ui-build/static/admin/_next/static/chunks/3655-5e1ba5dd68b5ec48.js +1 -0
  231. fides/ui-build/static/admin/_next/static/chunks/3729-31ff8ba51491bf21.js +1 -0
  232. fides/ui-build/static/admin/_next/static/chunks/3872-cff30ca0844fe2b1.js +1 -0
  233. fides/ui-build/static/admin/_next/static/chunks/3931-8bedde156fe83564.js +1 -0
  234. fides/ui-build/static/admin/_next/static/chunks/401-582d9970d89deefe.js +1 -0
  235. fides/ui-build/static/admin/_next/static/chunks/4093-7e47408c28de5375.js +1 -0
  236. fides/ui-build/static/admin/_next/static/chunks/{4259.d1507e0db19cbed7.js → 4259.05038c9b78467244.js} +1 -1
  237. fides/ui-build/static/admin/_next/static/chunks/431-e01ee730c8ad9ece.js +1 -0
  238. fides/ui-build/static/admin/_next/static/chunks/4322-f6aeff6880726c83.js +1 -0
  239. fides/ui-build/static/admin/_next/static/chunks/4339-04a715ab07122744.js +1 -0
  240. fides/ui-build/static/admin/_next/static/chunks/4496-ccbce2459174e0d6.js +1 -0
  241. fides/ui-build/static/admin/_next/static/chunks/454-d5c2c84f1a14e4f1.js +1 -0
  242. fides/ui-build/static/admin/_next/static/chunks/4589-c1d83c6a8dab4d30.js +1 -0
  243. fides/ui-build/static/admin/_next/static/chunks/4809-a8f4a108a42f53ed.js +1 -0
  244. fides/ui-build/static/admin/_next/static/chunks/4903-19c0bc07a956dfa8.js +1 -0
  245. fides/ui-build/static/admin/_next/static/chunks/4910-d990773601f794c1.js +1 -0
  246. fides/ui-build/static/admin/_next/static/chunks/5185-96423702fba70ced.js +1 -0
  247. fides/ui-build/static/admin/_next/static/chunks/5258-4e308cca01d59367.js +1 -0
  248. fides/ui-build/static/admin/_next/static/chunks/5487-5c3501754bf027ba.js +1 -0
  249. fides/ui-build/static/admin/_next/static/chunks/549-1bdc3e6f3264c020.js +1 -0
  250. fides/ui-build/static/admin/_next/static/chunks/5505-43b9c39491b88e08.js +1 -0
  251. fides/ui-build/static/admin/_next/static/chunks/5698.2135391a128cc373.js +164 -0
  252. fides/ui-build/static/admin/_next/static/chunks/5783-016dfcee8e49bf61.js +1 -0
  253. fides/ui-build/static/admin/_next/static/chunks/5826-4db99ea4e5077911.js +1 -0
  254. fides/ui-build/static/admin/_next/static/chunks/590-be447cacf12419dd.js +1 -0
  255. fides/ui-build/static/admin/_next/static/chunks/6084-91badbc6569a0efb.js +1 -0
  256. fides/ui-build/static/admin/_next/static/chunks/6344-026cb323c1d49926.js +1 -0
  257. fides/ui-build/static/admin/_next/static/chunks/6362-ba0e12f2fc4cad94.js +1 -0
  258. fides/ui-build/static/admin/_next/static/chunks/6853-882889659769d7b4.js +1 -0
  259. fides/ui-build/static/admin/_next/static/chunks/6882-bb1b469d7d7f5335.js +1 -0
  260. fides/ui-build/static/admin/_next/static/chunks/6954-0dcf22a9aabe39c5.js +1 -0
  261. fides/ui-build/static/admin/_next/static/chunks/7170-46db82bb5b55e856.js +1 -0
  262. fides/ui-build/static/admin/_next/static/chunks/7218-2ace8c82e3e7eb74.js +1 -0
  263. fides/ui-build/static/admin/_next/static/chunks/7245-1cdafb35f289861b.js +1 -0
  264. fides/ui-build/static/admin/_next/static/chunks/7630-7f75ab7b8df42eb3.js +1 -0
  265. fides/ui-build/static/admin/_next/static/chunks/7654-2e9a8be02e41769a.js +1 -0
  266. fides/ui-build/static/admin/_next/static/chunks/8212-348ddd2b6933db70.js +1 -0
  267. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
  268. fides/ui-build/static/admin/_next/static/chunks/{5596-bb601cbf40e47a0f.js → 9195-da717d324917b049.js} +3 -3
  269. fides/ui-build/static/admin/_next/static/chunks/9450-b7b7bb1d755ecf57.js +1 -0
  270. fides/ui-build/static/admin/_next/static/chunks/{9676.9fd9552ef744c717.js → 9676.1f395eeb9cc34968.js} +1 -1
  271. fides/ui-build/static/admin/_next/static/chunks/9826-1078e46f3ac0b688.js +1 -0
  272. fides/ui-build/static/admin/_next/static/chunks/9911-ece086f2230e34f0.js +1 -0
  273. fides/ui-build/static/admin/_next/static/chunks/pages/{404-471a6b18e712f050.js → 404-800be6996aaa999c.js} +1 -1
  274. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-fcdad91f6f66292b.js → _app-de4b578c904df772.js} +57 -220
  275. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-f12020b82dd4bd1a.js +1 -0
  276. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-a911b7990371704d.js +1 -0
  277. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-ad585b79953c2753.js +1 -0
  278. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-406170eaae4329c6.js → add-vendors-bb263d394ca1c8fa.js} +1 -1
  279. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-6907c368d8611c44.js +1 -0
  280. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-f80cf2d3966816fd.js → [id]-c32f381af358149b.js} +1 -1
  281. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-e74cb5ea87f15b40.js → new-6efb3c069d8b47dd.js} +1 -1
  282. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-1975c529905eea9b.js +1 -0
  283. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-b378576cba255609.js → [id]-b05331178928ab52.js} +1 -1
  284. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2ca1de7b88094ab0.js → new-516834e930bb0d0d.js} +1 -1
  285. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-985717f2565f9d9d.js +1 -0
  286. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-226efa1dcd41437f.js → properties-2be773e08498e40c.js} +1 -1
  287. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-850afb74f4192e87.js +1 -0
  288. fides/ui-build/static/admin/_next/static/chunks/pages/consent-b63d1e395d879b86.js +1 -0
  289. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-5b28f0f674ea87bd.js +1 -0
  290. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-04cfe2cfba7b7cd8.js → [projectUrn]-676177e2f3c9c2a2.js} +1 -1
  291. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-794906929efb8e1d.js +1 -0
  292. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-3ccbf7c0d06507b9.js +1 -0
  293. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-1ea0b24d306b1e67.js +1 -0
  294. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-d4861a4a218bb65a.js +1 -0
  295. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore-4498881c26f1458d.js +1 -0
  296. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure/[monitorId]-66bd265044daf97d.js +1 -0
  297. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure-c9c79fa8576a4f77.js +1 -0
  298. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-60cacc3232c2eead.js +1 -0
  299. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-437bd64a3016de36.js +1 -0
  300. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website-5b3e0009d442bc3f.js +1 -0
  301. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8349248c2da970a6.js +1 -0
  302. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6919a1d6cadaa46b.js +1 -0
  303. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-8f736b078e9842da.js → [resourceUrn]-1a50d421897d3da1.js} +1 -1
  304. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-eb814e3c22807871.js → detection-49509414a15e8393.js} +1 -1
  305. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6875b7783fcfda2f.js → [resourceUrn]-1a1bb80b586d0c0f.js} +1 -1
  306. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-172dbd7740e212ca.js → discovery-49de61df1e8e7fba.js} +1 -1
  307. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c2719f5cff20c0f8.js +1 -0
  308. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-dfd71c1e9c458b89.js → [...subfieldNames]-415015aebab60436.js} +1 -1
  309. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-7cdc42ec5493b83d.js → [collectionName]-5accb09715b5122d.js} +1 -1
  310. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-aebecca1d8ec5f98.js +1 -0
  311. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-9551a82ddec9f909.js +1 -0
  312. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-72f8fe47beef0f09.js +1 -0
  313. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-3a8aa3f633528e88.js +1 -0
  314. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-87512616f35ec6da.js +1 -0
  315. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-2f1bf4eac7aa55fd.js +1 -0
  316. fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-1f4335dca5c09860.js → fides-js-docs-5235760b3e508d7d.js} +1 -1
  317. fides/ui-build/static/admin/_next/static/chunks/pages/index-8d67cd2872cb682a.js +1 -0
  318. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-7a631df29cd0e31a.js +1 -0
  319. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-ea3bc43cdaf273de.js +1 -0
  320. fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-5d8632bba1b81cd4.js +1 -0
  321. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/[id]-92e01822ecde8fb8.js +1 -0
  322. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/new-1256cf6d3f6794e0.js +1 -0
  323. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-0daac00911d27617.js +1 -0
  324. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/[key]-2d976fe5e8ba0a3a.js +1 -0
  325. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/new-7766ba497b863740.js +1 -0
  326. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-f2880d2ed4734270.js +1 -0
  327. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/[id]-669f585c3458faff.js +1 -0
  328. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/add-template-c79e7724e4bc3899.js +1 -0
  329. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-891654e8dc13965c.js +1 -0
  330. fides/ui-build/static/admin/_next/static/chunks/pages/notifications-40c8148244c5d347.js +1 -0
  331. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-1e86f3e28bd23ed6.js +1 -0
  332. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-9b7bd8c38f02c091.js +1 -0
  333. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-b18a53a940cf9e19.js +1 -0
  334. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-6d028d7450e77578.js +1 -0
  335. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-8399083ee2cd8cc2.js +1 -0
  336. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-0a910125cdb2b3b8.js +1 -0
  337. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-acc90b6f7fe915cb.js +1 -0
  338. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-bbc42026f2685438.js +1 -0
  339. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-c08ca6ad21c99799.js +1 -0
  340. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-77c2db582f8823bc.js +1 -0
  341. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-e784c05d056b2371.js → [id]-74ccea4868408e3d.js} +1 -1
  342. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-0a7a2db148a7561a.js → add-property-7d9f09bfe9d44dfc.js} +1 -1
  343. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-da734840e4f9d04b.js → properties-cd77bc30672bb1fa.js} +1 -1
  344. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-cc3bd9540132d5ed.js +1 -0
  345. fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-7ce7d720107ab4b5.js +1 -0
  346. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-68eaac2d79133679.js +1 -0
  347. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-6c4904c157477285.js +1 -0
  348. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-ae789892343c24f5.js +1 -0
  349. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13ee1b331ced0846.js +1 -0
  350. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-ee4e43692336a330.js +1 -0
  351. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-ca51d794abfcbf25.js +1 -0
  352. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ecd1dc5db8e81409.js +1 -0
  353. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-df06f7e2f668c540.js +1 -0
  354. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-da0c77bd510c6c51.js +1 -0
  355. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-950b0c115bf673d8.js +1 -0
  356. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-2e635dcd11b78224.js → locations-7e36cb4756973a9d.js} +1 -1
  357. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a0e5ed486d24ccf3.js +1 -0
  358. fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-3cdebafb6870d3ad.js +1 -0
  359. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-7c02e469d8c5bd74.js → regulations-159aad34f1021320.js} +1 -1
  360. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-dbd1a64090ad0946.js +1 -0
  361. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-7d042497a57a3788.js +1 -0
  362. fides/ui-build/static/admin/_next/static/chunks/pages/systems-21f1172e73dfc9f0.js +1 -0
  363. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-e553161e6338ee48.js +1 -0
  364. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-92f52c43f522a350.js → new-efc4af017723e57a.js} +1 -1
  365. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-64452dfae2c5e614.js → [id]-b152319d67372ee4.js} +1 -1
  366. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dba8692491f7935e.js +1 -0
  367. fides/ui-build/static/admin/_next/static/chunks/webpack-09ca52bc7beb0b43.js +1 -0
  368. fides/ui-build/static/admin/_next/static/css/012b10627a654d5c.css +1 -0
  369. fides/ui-build/static/admin/_next/static/css/05d05fc31d09638b.css +1 -0
  370. fides/ui-build/static/admin/_next/static/css/0fd6e0884cfcc5f3.css +1 -0
  371. fides/ui-build/static/admin/_next/static/css/14ba79c49597d37a.css +1 -0
  372. fides/ui-build/static/admin/_next/static/css/{34a7eb08b86ddb57.css → 3d6582469f7d56e0.css} +1 -1
  373. fides/ui-build/static/admin/_next/static/css/3d66bb57ddcb0978.css +1 -0
  374. fides/ui-build/static/admin/_next/static/css/4861ca3e088f2d05.css +1 -0
  375. fides/ui-build/static/admin/_next/static/css/a1800714b486e230.css +1 -0
  376. fides/ui-build/static/admin/_next/static/css/a1e4be9466578ef1.css +1 -0
  377. fides/ui-build/static/admin/_next/static/css/af32fcac7a177a0e.css +1 -0
  378. fides/ui-build/static/admin/_next/static/css/cb417f0587918f85.css +1 -0
  379. fides/ui-build/static/admin/_next/static/css/dd15c278b964de80.css +1 -0
  380. fides/ui-build/static/admin/_next/static/css/{5f393dea1c0d031c.css → f89607996ad54f4b.css} +1 -1
  381. fides/ui-build/static/admin/_next/static/css/f9a2a44d3d34c904.css +1 -0
  382. fides/ui-build/static/admin/_next/static/l2vgGUHB04Fi4oEVlVMrc/_buildManifest.js +1 -0
  383. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  384. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  385. fides/ui-build/static/admin/add-systems.html +1 -1
  386. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  387. fides/ui-build/static/admin/consent/configure.html +1 -1
  388. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  389. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  390. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  391. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  392. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  393. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  394. fides/ui-build/static/admin/consent/properties.html +1 -1
  395. fides/ui-build/static/admin/consent/reporting.html +1 -1
  396. fides/ui-build/static/admin/consent.html +1 -1
  397. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  398. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  399. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  400. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  401. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  402. fides/ui-build/static/admin/data-catalog.html +1 -1
  403. fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -0
  404. fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -0
  405. fides/ui-build/static/admin/data-discovery/action-center/infrastructure/[monitorId].html +1 -0
  406. fides/ui-build/static/admin/data-discovery/action-center/infrastructure.html +1 -0
  407. fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -0
  408. fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -0
  409. fides/ui-build/static/admin/data-discovery/action-center/website.html +1 -0
  410. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  411. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  412. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  413. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  414. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  415. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  416. fides/ui-build/static/admin/datamap.html +1 -1
  417. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  418. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  419. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  420. fides/ui-build/static/admin/dataset/new.html +1 -1
  421. fides/ui-build/static/admin/dataset.html +1 -1
  422. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  423. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  424. fides/ui-build/static/admin/datastore-connection.html +1 -1
  425. fides/ui-build/static/admin/index.html +1 -1
  426. fides/ui-build/static/admin/integrations/[id].html +1 -1
  427. fides/ui-build/static/admin/integrations.html +1 -1
  428. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  429. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  430. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  431. fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
  432. fides/ui-build/static/admin/lib/fides.js +3 -3
  433. fides/ui-build/static/admin/login/[provider].html +1 -1
  434. fides/ui-build/static/admin/login.html +1 -1
  435. fides/ui-build/static/admin/new-privacy-requests.html +1 -0
  436. fides/ui-build/static/admin/notifications/digests/[id].html +1 -0
  437. fides/ui-build/static/admin/notifications/digests/new.html +1 -0
  438. fides/ui-build/static/admin/notifications/digests.html +1 -0
  439. fides/ui-build/static/admin/notifications/providers/[key].html +1 -0
  440. fides/ui-build/static/admin/notifications/providers/new.html +1 -0
  441. fides/ui-build/static/admin/notifications/providers.html +1 -0
  442. fides/ui-build/static/admin/notifications/templates/[id].html +1 -0
  443. fides/ui-build/static/admin/notifications/templates/add-template.html +1 -0
  444. fides/ui-build/static/admin/notifications/templates.html +1 -0
  445. fides/ui-build/static/admin/notifications.html +1 -0
  446. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  447. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  448. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  449. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  450. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  451. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  452. fides/ui-build/static/admin/poc/forms.html +1 -1
  453. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  454. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  455. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  456. fides/ui-build/static/admin/privacy-requests.html +1 -1
  457. fides/ui-build/static/admin/properties/[id].html +1 -1
  458. fides/ui-build/static/admin/properties/add-property.html +1 -1
  459. fides/ui-build/static/admin/properties.html +1 -1
  460. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  461. fides/ui-build/static/admin/sandbox/privacy-notices.html +1 -0
  462. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  463. fides/ui-build/static/admin/settings/about.html +1 -1
  464. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  465. fides/ui-build/static/admin/settings/consent.html +1 -1
  466. fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -0
  467. fides/ui-build/static/admin/settings/custom-fields/new.html +1 -0
  468. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  469. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  470. fides/ui-build/static/admin/settings/domains.html +1 -1
  471. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  472. fides/ui-build/static/admin/settings/locations.html +1 -1
  473. fides/ui-build/static/admin/settings/organization.html +1 -1
  474. fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
  475. fides/ui-build/static/admin/settings/regulations.html +1 -1
  476. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  477. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  478. fides/ui-build/static/admin/systems.html +1 -1
  479. fides/ui-build/static/admin/taxonomy.html +1 -1
  480. fides/ui-build/static/admin/user-management/new.html +1 -1
  481. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  482. fides/ui-build/static/admin/user-management.html +1 -1
  483. fides/api/service/async_dsr/async_dsr_service.py +0 -75
  484. fides/api/service/privacy_request/dsr_package/templates/welcome.html +0 -66
  485. fides/ui-build/static/admin/_next/static/OmXHlY9MvjoZH9jDkAytl/_buildManifest.js +0 -1
  486. fides/ui-build/static/admin/_next/static/chunks/1099-79646e64f26d62fa.js +0 -1
  487. fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +0 -1
  488. fides/ui-build/static/admin/_next/static/chunks/1345-5e1c5b66e25c566e.js +0 -1
  489. fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +0 -1
  490. fides/ui-build/static/admin/_next/static/chunks/1817-0ca16d288fad916d.js +0 -1
  491. fides/ui-build/static/admin/_next/static/chunks/2150-930ffaf2c4718edc.js +0 -1
  492. fides/ui-build/static/admin/_next/static/chunks/255-1bc0cbef7a59cdc6.js +0 -1
  493. fides/ui-build/static/admin/_next/static/chunks/2921-52328140bc420d0f.js +0 -1
  494. fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +0 -1
  495. fides/ui-build/static/admin/_next/static/chunks/3550-d04125c828d591a1.js +0 -1
  496. fides/ui-build/static/admin/_next/static/chunks/3620-602eb74dc896d556.js +0 -1
  497. fides/ui-build/static/admin/_next/static/chunks/3729-c17ac8031a4c4fd1.js +0 -1
  498. fides/ui-build/static/admin/_next/static/chunks/3847-230bf61b053bc706.js +0 -1
  499. fides/ui-build/static/admin/_next/static/chunks/3855-ef5194cdb228beb6.js +0 -1
  500. fides/ui-build/static/admin/_next/static/chunks/3872-f78dec02f0d959ae.js +0 -1
  501. fides/ui-build/static/admin/_next/static/chunks/3923-bb2417b8dcade7a4.js +0 -1
  502. fides/ui-build/static/admin/_next/static/chunks/401-4af0a912e249d30f.js +0 -1
  503. fides/ui-build/static/admin/_next/static/chunks/4164-355644b916ae0094.js +0 -1
  504. fides/ui-build/static/admin/_next/static/chunks/431-86ad2beeb93c95c9.js +0 -1
  505. fides/ui-build/static/admin/_next/static/chunks/4608-be8cba73f5d7c326.js +0 -1
  506. fides/ui-build/static/admin/_next/static/chunks/4786-61154adf88e448e1.js +0 -1
  507. fides/ui-build/static/admin/_next/static/chunks/4808-dd4157aa72648068.js +0 -1
  508. fides/ui-build/static/admin/_next/static/chunks/4831-fd99c0b3784de128.js +0 -1
  509. fides/ui-build/static/admin/_next/static/chunks/4844-46324c3d848b8b6a.js +0 -1
  510. fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +0 -1
  511. fides/ui-build/static/admin/_next/static/chunks/5258-b0de22a8521686ab.js +0 -1
  512. fides/ui-build/static/admin/_next/static/chunks/5487-02d00bad7c6830e0.js +0 -1
  513. fides/ui-build/static/admin/_next/static/chunks/549-38ea1d91ee2addaa.js +0 -1
  514. fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +0 -1
  515. fides/ui-build/static/admin/_next/static/chunks/6084-c153669d5567e242.js +0 -1
  516. fides/ui-build/static/admin/_next/static/chunks/6419-d0c00d661b01f8fa.js +0 -1
  517. fides/ui-build/static/admin/_next/static/chunks/6853-b17673391117c976.js +0 -1
  518. fides/ui-build/static/admin/_next/static/chunks/6954-5296188c19d7d0ac.js +0 -1
  519. fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +0 -1
  520. fides/ui-build/static/admin/_next/static/chunks/7476-45c5088baa8b66af.js +0 -1
  521. fides/ui-build/static/admin/_next/static/chunks/7630-7ed6c6117775dffe.js +0 -1
  522. fides/ui-build/static/admin/_next/static/chunks/787-a8c7eab617e2fceb.js +0 -1
  523. fides/ui-build/static/admin/_next/static/chunks/79-65674011d455af4d.js +0 -1
  524. fides/ui-build/static/admin/_next/static/chunks/796-9e1ca1a4030707c5.js +0 -1
  525. fides/ui-build/static/admin/_next/static/chunks/8002-24af20d679efc04e.js +0 -1
  526. fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +0 -1
  527. fides/ui-build/static/admin/_next/static/chunks/9046-712156d461165f56.js +0 -1
  528. fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +0 -1
  529. fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +0 -1
  530. fides/ui-build/static/admin/_next/static/chunks/9729-fcf6ff4e3534e4a8.js +0 -1
  531. fides/ui-build/static/admin/_next/static/chunks/9826-dbae8dee941a7fac.js +0 -1
  532. fides/ui-build/static/admin/_next/static/chunks/9951-a88367a129b724ba.js +0 -1
  533. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-ace203dfacacbdc4.js +0 -1
  534. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-920fb469e0dda1d2.js +0 -1
  535. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-bd0d82078e67cac3.js +0 -1
  536. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-7207ab23bdb36ce8.js +0 -1
  537. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-9dda4de5ec580279.js +0 -1
  538. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-0d4844d0b808e6e4.js +0 -1
  539. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-28b192e2c074b0f3.js +0 -1
  540. fides/ui-build/static/admin/_next/static/chunks/pages/consent-3e8bdefe714254ec.js +0 -1
  541. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-2c29ff7a01198f30.js +0 -1
  542. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-5f2d7b24804f861f.js +0 -1
  543. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-8eb581024bc0172f.js +0 -1
  544. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-30108b00ac769fc3.js +0 -1
  545. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-e1ba213fb666b3f4.js +0 -1
  546. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-6d133580045abdda.js +0 -1
  547. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9a81d42a474e1e48.js +0 -1
  548. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-b6ae7adb8ef0b525.js +0 -1
  549. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c7390e046b2e2b7f.js +0 -1
  550. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e12b11ba15bc3fc1.js +0 -1
  551. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-e32fccc4ca520d2b.js +0 -1
  552. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-7c59a6abf6ba6207.js +0 -1
  553. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-927b7e476c4b47d0.js +0 -1
  554. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-cbe100d50df34285.js +0 -1
  555. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cce20440b177050b.js +0 -1
  556. fides/ui-build/static/admin/_next/static/chunks/pages/index-6cd8708106331b8d.js +0 -1
  557. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4c3c413a2668df53.js +0 -1
  558. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-95402b5001c07ef2.js +0 -1
  559. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-3c6dc2f6e6bae960.js +0 -1
  560. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-4a6d4023a7791be8.js +0 -1
  561. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-76b204c9b98d656f.js +0 -1
  562. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-bc0e2adf6e0d3ac7.js +0 -1
  563. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-86ffcc1ad3fa912e.js +0 -1
  564. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-ec04f595465bdf69.js +0 -1
  565. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-41d309754ff0c1de.js +0 -1
  566. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-cab1f78cec7808f9.js +0 -1
  567. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-eb6058221403b156.js +0 -1
  568. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-48500551fd6a7602.js +0 -1
  569. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-0f25a76dd18c5e20.js +0 -1
  570. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-ad6ad3e5bd72765d.js +0 -1
  571. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-6032d82f0fc2893d.js +0 -1
  572. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-d83e5bd52a638234.js +0 -1
  573. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-baf31c3e4b081046.js +0 -1
  574. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-6903f42a0412bfa6.js +0 -1
  575. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-a82f3df840d5c1b5.js +0 -1
  576. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-d06fb16487705b9d.js +0 -1
  577. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-9495e2eb506606c7.js +0 -1
  578. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-93a978443bf299db.js +0 -1
  579. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-9ecb803099082bf4.js +0 -1
  580. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-16fdd91a81074dd1.js +0 -1
  581. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-4cdd6001e7cb9aee.js +0 -1
  582. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-1914de830ce5cfc4.js +0 -1
  583. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-f547f1f33c12faf3.js +0 -1
  584. fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-2ecc073f41628f62.js +0 -1
  585. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-20b1193ed76c56b0.js +0 -1
  586. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-6e15332935f6b538.js +0 -1
  587. fides/ui-build/static/admin/_next/static/chunks/pages/systems-fbc8761ef4d55516.js +0 -1
  588. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-4d7827fc9c46b6b8.js +0 -1
  589. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-9cec020f89544426.js +0 -1
  590. fides/ui-build/static/admin/_next/static/chunks/webpack-678e89d68dbcd94f.js +0 -1
  591. fides/ui-build/static/admin/_next/static/css/073713cd1eddda79.css +0 -1
  592. fides/ui-build/static/admin/_next/static/css/23cf870196941c9a.css +0 -1
  593. fides/ui-build/static/admin/_next/static/css/304c6f148886a8d4.css +0 -1
  594. fides/ui-build/static/admin/_next/static/css/650df9c348000a26.css +0 -1
  595. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +0 -1
  596. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +0 -1
  597. fides/ui-build/static/admin/messaging/[id].html +0 -1
  598. fides/ui-build/static/admin/messaging/add-template.html +0 -1
  599. fides/ui-build/static/admin/messaging.html +0 -1
  600. fides/ui-build/static/admin/poc/table-migration.html +0 -1
  601. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +0 -1
  602. {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/WHEEL +0 -0
  603. {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/entry_points.txt +0 -0
  604. {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/licenses/LICENSE +0 -0
  605. {ethyca_fides-2.69.1rc0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/top_level.txt +0 -0
  606. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-de704de849960f01.js → resources-81d1b50585468fb0.js} +0 -0
  607. /fides/ui-build/static/admin/_next/static/{OmXHlY9MvjoZH9jDkAytl → l2vgGUHB04Fi4oEVlVMrc}/_ssgManifest.js +0 -0
@@ -0,0 +1,111 @@
1
+ from datetime import datetime
2
+ from typing import Any
3
+ from uuid import UUID
4
+
5
+ from pydantic import BaseModel
6
+
7
+
8
+ # pylint: disable=too-many-return-statements
9
+ def transform_value_for_evaluation(value: Any) -> Any:
10
+ """
11
+ Transforms a value to its evaluation-ready form.
12
+
13
+ Handles various data types defensively to ensure compatibility with
14
+ the operators defined in task.conditional_dependencies.operators.py
15
+
16
+ Args:
17
+ value: The value to transform
18
+
19
+ Returns:
20
+ The transformed value compatible with evaluation operators
21
+ """
22
+ if value is None:
23
+ return None
24
+
25
+ # Handle Pydantic models first (before checking for other attributes)
26
+ if isinstance(value, BaseModel):
27
+ return value.model_dump(mode="json")
28
+
29
+ # Handle enums (must come before other checks as enums might have other attributes)
30
+ if hasattr(value, "value") and not isinstance(value, BaseModel):
31
+ return value.value
32
+
33
+ # Handle date/time types
34
+ if isinstance(value, datetime):
35
+ return value.isoformat()
36
+
37
+ # Handle UUIDs
38
+ if isinstance(value, UUID):
39
+ return str(value)
40
+
41
+ # Handle bytes types - convert to strings for string operators
42
+ if isinstance(value, (bytes, bytearray)):
43
+ try:
44
+ return value.decode("utf-8")
45
+ except UnicodeDecodeError:
46
+ # If decode fails, use repr for a string representation
47
+ return repr(value)
48
+
49
+ # Handle complex numbers - convert to string as they can't be compared with < > etc
50
+ if isinstance(value, complex):
51
+ return str(value)
52
+
53
+ # Handle set/frozenset/tuple - convert to lists for list operators
54
+ # (operators.py list operations check isinstance(x, list))
55
+ if isinstance(value, (set, frozenset, tuple)):
56
+ return list(value)
57
+
58
+ # Return value as-is if no transformation needed
59
+ return value
60
+
61
+
62
+ def extract_nested_field_value(data: Any, field_path: list[str]) -> Any:
63
+ """
64
+ Extracts a value from a dictionary by following the path.
65
+
66
+ Args:
67
+ data: The dictionary to extract from
68
+ field_path: The path to extract the value from
69
+
70
+ Returns:
71
+ The extracted value
72
+ """
73
+ current: Any = data
74
+ for part in field_path:
75
+ if current is None:
76
+ return None
77
+ if hasattr(current, part):
78
+ current = getattr(current, part)
79
+ elif isinstance(current, list) and part.isdigit():
80
+ if 0 <= int(part) < len(current):
81
+ current = current[int(part)]
82
+ else:
83
+ return None
84
+ elif isinstance(current, dict) and part in current:
85
+ current = current[part]
86
+ else:
87
+ # If we can't find the part, return None
88
+ return None
89
+ return current
90
+
91
+
92
+ def set_nested_value(path: list[str], value: Any) -> dict[str, Any]:
93
+ """
94
+ Returns a dictionary with a nested value set at the path.
95
+
96
+ Args:
97
+ path: List of keys to traverse (e.g., ["policy", "key"])
98
+ value: The value to set at the end of the path
99
+ """
100
+ result: dict[str, Any] = {}
101
+ final_key = path[-1]
102
+ current = result
103
+
104
+ for key in path[:-1]:
105
+ if key not in current:
106
+ current[key] = {}
107
+ current = current[key]
108
+
109
+ # Set the final value
110
+ current[final_key] = value
111
+ return result
@@ -3,7 +3,7 @@ from typing import Callable, List, Optional, Tuple
3
3
  from celery.app.task import Task
4
4
  from loguru import logger
5
5
  from sqlalchemy.exc import OperationalError
6
- from sqlalchemy.orm import Query, Session
6
+ from sqlalchemy.orm import Query, Session, selectinload
7
7
  from tenacity import (
8
8
  RetryCallState,
9
9
  retry,
@@ -21,8 +21,12 @@ from fides.api.common_exceptions import (
21
21
  )
22
22
  from fides.api.graph.config import TERMINATOR_ADDRESS, CollectionAddress
23
23
  from fides.api.models.connectionconfig import ConnectionConfig
24
+ from fides.api.models.policy import Policy
24
25
  from fides.api.models.privacy_request import ExecutionLog, PrivacyRequest, RequestTask
25
- from fides.api.models.worker_task import ExecutionLogStatus
26
+ from fides.api.models.worker_task import (
27
+ RESUMABLE_EXECUTION_LOG_STATUSES,
28
+ ExecutionLogStatus,
29
+ )
26
30
  from fides.api.schemas.policy import ActionType, CurrentStep
27
31
  from fides.api.schemas.privacy_request import PrivacyRequestStatus
28
32
  from fides.api.task.graph_task import (
@@ -45,11 +49,23 @@ def get_privacy_request_and_task(
45
49
  session: Session, privacy_request_id: str, privacy_request_task_id: str
46
50
  ) -> Tuple[PrivacyRequest, RequestTask]:
47
51
  """
48
- Retrieves and validates a privacy request and its associated task
52
+ Retrieves and validates a privacy request and its associated task.
53
+ Eager loads policy.rules to avoid N+1 queries during manual task execution.
49
54
  """
50
55
 
51
- privacy_request: Optional[PrivacyRequest] = PrivacyRequest.get(
52
- db=session, object_id=privacy_request_id
56
+ # Eager load relationships to avoid N+1 queries during manual task execution:
57
+ # - policy.rules: accessed by get_policy_convenience_fields()
58
+ # - provided_identities: accessed by get_persisted_identity()
59
+ # - custom_fields: accessed by get_persisted_custom_privacy_request_fields()
60
+ privacy_request: Optional[PrivacyRequest] = (
61
+ session.query(PrivacyRequest)
62
+ .options(
63
+ selectinload(PrivacyRequest.policy).selectinload(Policy.rules), # type: ignore[attr-defined]
64
+ selectinload(PrivacyRequest.provided_identities), # type: ignore[attr-defined]
65
+ selectinload(PrivacyRequest.custom_fields), # type: ignore[attr-defined]
66
+ )
67
+ .filter(PrivacyRequest.id == privacy_request_id)
68
+ .first()
53
69
  )
54
70
  request_task: Optional[RequestTask] = RequestTask.get(
55
71
  db=session, object_id=privacy_request_task_id
@@ -162,7 +178,7 @@ def can_run_task_body(
162
178
  if request_task.is_root_task:
163
179
  # Shouldn't be possible but adding as a catch-all
164
180
  return False
165
- if request_task.status != ExecutionLogStatus.pending:
181
+ if request_task.status not in RESUMABLE_EXECUTION_LOG_STATUSES:
166
182
  logger_method(request_task)(
167
183
  "Skipping {} task {} with status {}.",
168
184
  request_task.action_type,
@@ -274,15 +290,18 @@ def run_access_node(
274
290
 
275
291
  try:
276
292
  with self.get_new_session() as session:
277
- privacy_request, request_task, upstream_results = (
278
- run_prerequisite_task_checks(
279
- session, privacy_request_id, privacy_request_task_id
280
- )
293
+ (
294
+ privacy_request,
295
+ request_task,
296
+ upstream_results,
297
+ ) = run_prerequisite_task_checks(
298
+ session, privacy_request_id, privacy_request_task_id
281
299
  )
282
300
  with logger.contextualize(
283
301
  privacy_request_source=(
284
302
  privacy_request.source.value if privacy_request.source else None
285
- )
303
+ ),
304
+ collection=request_task.collection_address,
286
305
  ):
287
306
  log_task_starting(request_task)
288
307
 
@@ -343,7 +362,8 @@ def run_erasure_node(
343
362
  with logger.contextualize(
344
363
  privacy_request_source=(
345
364
  privacy_request.source.value if privacy_request.source else None
346
- )
365
+ ),
366
+ collection=request_task.collection_address,
347
367
  ):
348
368
  log_task_starting(request_task)
349
369
 
@@ -416,7 +436,8 @@ def run_consent_node(
416
436
  with logger.contextualize(
417
437
  privacy_request_source=(
418
438
  privacy_request.source.value if privacy_request.source else None
419
- )
439
+ ),
440
+ collection=request_task.collection_address,
420
441
  ):
421
442
  log_task_starting(request_task)
422
443
 
@@ -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 manual task data - it doesn't need filtering since it's controlled by field definitions
42
- if ManualTaskAddress.is_manual_task_address(node_address):
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
 
@@ -1,6 +1,5 @@
1
- from typing import Any, Dict, List, Optional
1
+ from typing import Any, Dict, List
2
2
 
3
- from loguru import logger
4
3
  from sqlalchemy.orm import Session
5
4
 
6
5
  from fides.api.common_exceptions import PrivacyRequestExit
@@ -19,37 +18,8 @@ from fides.api.task.deprecated_graph_task import (
19
18
  run_consent_request_deprecated,
20
19
  run_erasure_request_deprecated,
21
20
  )
21
+ from fides.api.task.scheduler_utils import use_dsr_3_0_scheduler
22
22
  from fides.api.util.collection_util import Row
23
- from fides.config import CONFIG
24
-
25
-
26
- def use_dsr_3_0_scheduler(
27
- privacy_request: PrivacyRequest, action_type: ActionType
28
- ) -> bool:
29
- """Return whether we should use the DSR 3.0 scheduler.
30
-
31
- Override if we have a partially processed Privacy Request that was already run on
32
- DSR 2.0 so we can finish processing it on 2.0.
33
-
34
- """
35
- use_dsr_3_0 = CONFIG.execution.use_dsr_3_0
36
-
37
- prev_results: Dict[str, Optional[List[Row]]] = (
38
- privacy_request.get_raw_access_results()
39
- )
40
- existing_tasks_count: int = privacy_request.get_tasks_by_action(action_type).count()
41
-
42
- if prev_results and use_dsr_3_0 and not existing_tasks_count:
43
- # If we've previously tried to process this Privacy Request using DSR 2.0, continue doing so
44
- # for access and erasure requests
45
- logger.info(
46
- "Overriding scheduler to run privacy request {} using DSR 2.0 as it's "
47
- "already partially processed",
48
- privacy_request.id,
49
- )
50
- use_dsr_3_0 = False
51
-
52
- return use_dsr_3_0
53
23
 
54
24
 
55
25
  def access_runner(
@@ -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,
@@ -47,6 +48,7 @@ from fides.api.service.execution_context import collect_execution_log_messages
47
48
  from fides.api.task.consolidate_query_matches import consolidate_query_matches
48
49
  from fides.api.task.filter_element_match import filter_element_match
49
50
  from fides.api.task.refine_target_path import FieldPathNodeInput
51
+ from fides.api.task.scheduler_utils import use_dsr_3_0_scheduler
50
52
  from fides.api.task.task_resources import TaskResources
51
53
  from fides.api.util.cache import get_cache
52
54
  from fides.api.util.collection_util import (
@@ -60,7 +62,6 @@ from fides.api.util.collection_util import (
60
62
  from fides.api.util.consent_util import (
61
63
  add_errored_system_status_for_consent_reporting_on_preferences,
62
64
  )
63
- from fides.api.util.logger import Pii
64
65
  from fides.api.util.logger_context_utils import LoggerContextKeys
65
66
  from fides.api.util.memory_watchdog import MemoryLimitExceeded
66
67
  from fides.api.util.saas_util import FIDESOPS_GROUPED_INPUTS
@@ -95,6 +96,7 @@ def retry(
95
96
  If we exceed the number of TASK_RETRY_COUNT retries, we re-raise the exception to stop execution of the privacy request.
96
97
  """
97
98
 
99
+ # pylint: disable=too-many-return-statements
98
100
  def decorator(func: Callable) -> Callable:
99
101
  @wraps(func)
100
102
  def result(*args: Any, **kwargs: Any) -> Any:
@@ -114,8 +116,18 @@ def retry(
114
116
  self.log_start(action_type)
115
117
  # Run access or erasure request
116
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
117
130
  except AwaitingAsyncTask as ex:
118
- traceback.print_exc()
119
131
  logger.warning(
120
132
  "Request Task {} {} {} awaiting async continuation",
121
133
  self.request_task.id if self.request_task.id else None,
@@ -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 request task to ensure we keep the changes made
420
- # to self.request_task that haven't yet been committed to the database
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.warning(
473
- "Ending {}, {} with failure {}",
503
+ logger.error(
504
+ "Ending {}, {} with failure: {}",
474
505
  self.resources.request.id,
475
506
  self.key,
476
- Pii(ex),
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
@@ -589,7 +620,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
589
620
  # TODO Remove when we stop support for DSR 2.0
590
621
  # Save data to build masking requests for DSR 2.0 in Redis.
591
622
  # Results saved with matching array elements preserved
592
- if not CONFIG.execution.use_dsr_3_0:
623
+ if not use_dsr_3_0_scheduler(self.resources.request, ActionType.access):
593
624
  self.resources.cache_results_with_placeholders(
594
625
  f"access_request__{self.key}", placeholder_output
595
626
  )
@@ -619,7 +650,8 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
619
650
 
620
651
  # TODO Remove when we stop support for DSR 2.0
621
652
  # Saves intermediate access results for DSR 2.0 in Redis
622
- if not CONFIG.execution.use_dsr_3_0:
653
+ # Only cache for existing DSR 2.0 requests
654
+ if not use_dsr_3_0_scheduler(self.resources.request, ActionType.access):
623
655
  self.resources.cache_object(f"access_request__{self.key}", output)
624
656
 
625
657
  # Return filtered rows with non-matched array data removed.
@@ -692,7 +724,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
692
724
  self.execution_node,
693
725
  self.resources.policy,
694
726
  self.resources.request,
695
- self.resources.privacy_request_task,
727
+ self.request_task,
696
728
  formatted_input_data,
697
729
  )
698
730
 
@@ -853,7 +885,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
853
885
  privacy_request_id = self.resources.request.id
854
886
 
855
887
  with get_db() as db:
856
-
857
888
  privacy_preferences = db.query(PrivacyPreferenceHistory).filter(
858
889
  PrivacyPreferenceHistory.privacy_request_id == privacy_request_id
859
890
  )
@@ -974,7 +1005,6 @@ def build_affected_field_logs(
974
1005
  policy_id = policy.id
975
1006
 
976
1007
  with get_db() as db:
977
-
978
1008
  rules = db.query(Rule).filter(Rule.policy_id == policy_id)
979
1009
 
980
1010
  targeted_field_paths: Dict[FieldAddress, str] = {}
@@ -8,13 +8,21 @@ from fides.api.models.manual_task import ManualTask
8
8
  from fides.api.models.manual_task.conditional_dependency import (
9
9
  ManualTaskConditionalDependency,
10
10
  )
11
+ from fides.api.models.privacy_request import PrivacyRequest
11
12
  from fides.api.task.conditional_dependencies.evaluator import ConditionEvaluator
13
+ from fides.api.task.conditional_dependencies.privacy_request.privacy_request_data import (
14
+ PrivacyRequestDataTransformer,
15
+ )
12
16
  from fides.api.task.conditional_dependencies.schemas import EvaluationResult
17
+ from fides.api.task.conditional_dependencies.util import extract_nested_field_value
13
18
  from fides.api.util.collection_util import Row
14
19
 
15
20
 
16
21
  def extract_conditional_dependency_data_from_inputs(
17
- *inputs: list[Row], manual_task: ManualTask, input_keys: list[CollectionAddress]
22
+ *inputs: list[Row],
23
+ manual_task: ManualTask,
24
+ input_keys: list[CollectionAddress],
25
+ privacy_request: PrivacyRequest,
18
26
  ) -> dict[str, Any]:
19
27
  """
20
28
  Extract data for conditional dependency field addresses from input data.
@@ -33,14 +41,35 @@ def extract_conditional_dependency_data_from_inputs(
33
41
 
34
42
  conditional_data: dict[str, Any] = {}
35
43
 
36
- # Get all conditional dependencies field addresses
44
+ # Get all task input conditional dependencies field addresses
37
45
  field_addresses = [
38
46
  dependency.field_address
39
47
  for dependency in manual_task.conditional_dependencies
40
48
  if dependency.field_address
49
+ and not dependency.field_address.startswith("privacy_request.")
41
50
  ]
42
51
 
43
- # if no field addresses, return empty conditional data
52
+ # Get all privacy request conditional dependencies field addresses
53
+ privacy_request_field_addresses = {
54
+ dependency.field_address
55
+ for dependency in manual_task.conditional_dependencies
56
+ if dependency.field_address
57
+ and dependency.field_address.startswith("privacy_request.")
58
+ }
59
+ # If there are any privacy request conditional dependencies field addresses,
60
+ # transform the privacy request data into a dictionary structure for evaluation
61
+ if privacy_request_field_addresses:
62
+ privacy_request_data_transformer = PrivacyRequestDataTransformer(
63
+ privacy_request
64
+ )
65
+ conditional_privacy_request_data = (
66
+ privacy_request_data_transformer.to_evaluation_data(
67
+ privacy_request_field_addresses
68
+ )
69
+ )
70
+ conditional_data = {**conditional_privacy_request_data}
71
+
72
+ # if no field addresses, return conditional data which may contain privacy request data or be empty
44
73
  # This will allow the manual task to be executed if there are no conditional dependencies
45
74
  if not field_addresses:
46
75
  return conditional_data
@@ -103,30 +132,6 @@ def parse_field_address(field_address: str) -> tuple[str, list[str]]:
103
132
  return source_collection_key, field_path
104
133
 
105
134
 
106
- def extract_nested_field_value(data: Any, field_path: list[str]) -> Any:
107
- """
108
- Extract a nested field value by traversing the field path.
109
-
110
- Args:
111
- data: The data to extract from (usually a dict)
112
- field_path: List of field names to traverse (e.g., ["profile", "preferences", "theme"])
113
-
114
- Returns:
115
- The value at the end of the field path, or None if not found
116
- """
117
- if not field_path:
118
- return data
119
-
120
- current = data
121
- for field_name in field_path:
122
- if isinstance(current, dict) and field_name in current:
123
- current = current[field_name]
124
- else:
125
- return None
126
-
127
- return current
128
-
129
-
130
135
  def set_nested_value(field_address: str, value: Any) -> dict[str, Any]:
131
136
  """
132
137
  Set a field value in the conditional data structure.
@@ -181,7 +186,7 @@ def evaluate_conditional_dependencies(
181
186
  """
182
187
  # Get the root condition for this manual task
183
188
  root_condition = ManualTaskConditionalDependency.get_root_condition(
184
- db, manual_task.id
189
+ db, manual_task_id=manual_task.id
185
190
  )
186
191
 
187
192
  if not root_condition:
@@ -158,7 +158,10 @@ class ManualTaskGraphTask(GraphTask):
158
158
 
159
159
  # Extract conditional dependency data from inputs
160
160
  conditional_data = extract_conditional_dependency_data_from_inputs(
161
- *inputs, manual_task=manual_task, input_keys=self.execution_node.input_keys
161
+ *inputs,
162
+ manual_task=manual_task,
163
+ input_keys=self.execution_node.input_keys,
164
+ privacy_request=self.resources.request,
162
165
  )
163
166
  # Evaluate conditional dependencies
164
167
  evaluation_result = evaluate_conditional_dependencies(