ethyca-fides 2.66.2b1__py2.py3-none-any.whl → 2.66.2rc0__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.

Files changed (279) hide show
  1. {ethyca_fides-2.66.2b1.dist-info → ethyca_fides-2.66.2rc0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.66.2b1.dist-info → ethyca_fides-2.66.2rc0.dist-info}/RECORD +254 -264
  3. fides/_version.py +3 -3
  4. fides/api/api/v1/endpoints/dataset_config_endpoints.py +5 -13
  5. fides/api/api/v1/endpoints/drp_endpoints.py +1 -7
  6. fides/api/api/v1/endpoints/privacy_request_endpoints.py +1 -44
  7. fides/api/api/v1/endpoints/user_endpoints.py +7 -83
  8. fides/api/app_setup.py +2 -3
  9. fides/api/common_exceptions.py +0 -4
  10. fides/api/db/base.py +0 -1
  11. fides/api/db/database.py +1 -1
  12. fides/api/graph/execution.py +0 -30
  13. fides/api/models/{manual_task/manual_task.py → manual_task.py} +0 -10
  14. fides/api/models/policy.py +0 -23
  15. fides/api/models/privacy_request/execution_log.py +0 -1
  16. fides/api/models/privacy_request/privacy_request.py +13 -31
  17. fides/api/oauth/roles.py +0 -2
  18. fides/api/schemas/application_config.py +1 -11
  19. fides/api/schemas/masking/masking_secrets.py +1 -1
  20. fides/api/schemas/policy.py +0 -1
  21. fides/api/schemas/privacy_request.py +0 -5
  22. fides/api/service/connectors/base_connector.py +0 -1
  23. fides/api/service/connectors/bigquery_connector.py +19 -67
  24. fides/api/service/connectors/dynamodb_connector.py +1 -2
  25. fides/api/service/connectors/fides_connector.py +0 -1
  26. fides/api/service/connectors/http_connector.py +0 -1
  27. fides/api/service/connectors/manual_task_connector.py +0 -1
  28. fides/api/service/connectors/manual_webhook_connector.py +1 -2
  29. fides/api/service/connectors/mongodb_connector.py +0 -1
  30. fides/api/service/connectors/okta_connector.py +0 -1
  31. fides/api/service/connectors/query_configs/bigquery_query_config.py +32 -91
  32. fides/api/service/connectors/rds_mysql_connector.py +0 -1
  33. fides/api/service/connectors/rds_postgres_connector.py +0 -1
  34. fides/api/service/connectors/s3_connector.py +0 -1
  35. fides/api/service/connectors/saas_connector.py +0 -1
  36. fides/api/service/connectors/scylla_connector.py +0 -1
  37. fides/api/service/connectors/sql_connector.py +4 -36
  38. fides/api/service/connectors/website_connector.py +0 -1
  39. fides/api/service/privacy_request/request_runner_service.py +53 -142
  40. fides/api/service/privacy_request/request_service.py +22 -1
  41. fides/api/task/deprecated_graph_task.py +6 -24
  42. fides/api/task/execute_request_tasks.py +11 -88
  43. fides/api/task/graph_task.py +3 -38
  44. fides/api/task/manual/manual_task_graph_task.py +0 -1
  45. fides/api/util/cache.py +0 -5
  46. fides/api/util/encryption/secrets_util.py +18 -48
  47. fides/common/api/scope_registry.py +0 -3
  48. fides/common/api/v1/urn_registry.py +1 -1
  49. fides/config/execution_settings.py +0 -4
  50. fides/config/utils.py +0 -1
  51. fides/service/privacy_request/privacy_request_service.py +1 -6
  52. fides/ui-build/static/admin/404.html +1 -1
  53. fides/ui-build/static/admin/_next/static/8108ANFxs99VY7KZ_Xev2/_buildManifest.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/1817-e601e737e3cc7a0e.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/{203-4e777c324a01dbec.js → 203-5a663f465ba26bb4.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/431-34f0b91c26f8d9ab.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/5309-b2c4803370634ff8.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/6780-e3d40aa17a4bf2e9.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/9046-5c4c22c375de25b1.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-be7889cec5a0f5cd.js → _app-39ccb07327c2c5d5.js} +56 -56
  61. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2265ecb899d45fbc.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5d522637871ac6c8.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-0a58aee2d1e7fa01.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-f10a7dcf7541c865.js → integrations-e2d5d7e2a5265e68.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-05616e2ae20ff4f8.js → table-migration-69ad86b7a8a9a115.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-32600543eb7b584f.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-10ce53ea356f8bad.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-5501bbb129fee9c4.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cbe4c8f9096b6543.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-ff5738706da07801.js +1 -0
  71. fides/ui-build/static/admin/_next/static/css/2cadb5f62dcd7c2b.css +1 -0
  72. fides/ui-build/static/admin/_next/static/css/{23cf870196941c9a.css → 5bfb2473e5701527.css} +1 -1
  73. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  74. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  75. fides/ui-build/static/admin/add-systems.html +1 -1
  76. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  77. fides/ui-build/static/admin/consent/configure.html +1 -1
  78. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  79. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  80. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  81. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  82. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  83. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  84. fides/ui-build/static/admin/consent/properties.html +1 -1
  85. fides/ui-build/static/admin/consent/reporting.html +1 -1
  86. fides/ui-build/static/admin/consent.html +1 -1
  87. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  88. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  89. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  90. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  91. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  92. fides/ui-build/static/admin/data-catalog.html +1 -1
  93. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  94. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  95. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  96. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  97. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  98. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  99. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  100. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  101. fides/ui-build/static/admin/datamap.html +1 -1
  102. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  103. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  104. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  105. fides/ui-build/static/admin/dataset/new.html +1 -1
  106. fides/ui-build/static/admin/dataset.html +1 -1
  107. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  108. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  109. fides/ui-build/static/admin/datastore-connection.html +1 -1
  110. fides/ui-build/static/admin/index.html +1 -1
  111. fides/ui-build/static/admin/integrations/[id].html +1 -1
  112. fides/ui-build/static/admin/integrations.html +1 -1
  113. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  114. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  115. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  116. fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
  117. fides/ui-build/static/admin/lib/fides.js +3 -3
  118. fides/ui-build/static/admin/login/[provider].html +1 -1
  119. fides/ui-build/static/admin/login.html +1 -1
  120. fides/ui-build/static/admin/messaging/[id].html +1 -1
  121. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  122. fides/ui-build/static/admin/messaging.html +1 -1
  123. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  124. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  125. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  126. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  127. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  128. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  129. fides/ui-build/static/admin/poc/forms.html +1 -1
  130. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  131. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  132. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  133. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  134. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  135. fides/ui-build/static/admin/privacy-requests.html +1 -1
  136. fides/ui-build/static/admin/properties/[id].html +1 -1
  137. fides/ui-build/static/admin/properties/add-property.html +1 -1
  138. fides/ui-build/static/admin/properties.html +1 -1
  139. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  140. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  141. fides/ui-build/static/admin/settings/about.html +1 -1
  142. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  143. fides/ui-build/static/admin/settings/consent.html +1 -1
  144. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  145. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  146. fides/ui-build/static/admin/settings/domains.html +1 -1
  147. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  148. fides/ui-build/static/admin/settings/locations.html +1 -1
  149. fides/ui-build/static/admin/settings/organization.html +1 -1
  150. fides/ui-build/static/admin/settings/regulations.html +1 -1
  151. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  152. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  153. fides/ui-build/static/admin/systems.html +1 -1
  154. fides/ui-build/static/admin/taxonomy.html +1 -1
  155. fides/ui-build/static/admin/user-management/new.html +1 -1
  156. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  157. fides/ui-build/static/admin/user-management.html +1 -1
  158. fides/api/alembic/migrations/versions/7e9a2b52f498_adding_masking_secrets.py +0 -60
  159. fides/api/alembic/migrations/versions/a7065df4dcf1_add_finalized_fields_to_privacy_request.py +0 -65
  160. fides/api/alembic/migrations/versions/d0031087eacb_create_manualtaskconditionaldependency_.py +0 -106
  161. fides/api/models/manual_task/__init__.py +0 -2
  162. fides/api/models/manual_task/conditional_dependency.py +0 -144
  163. fides/api/models/masking_secret.py +0 -72
  164. fides/api/task/conditional_dependencies/__init__.py +0 -0
  165. fides/api/task/conditional_dependencies/evaluator.py +0 -109
  166. fides/api/task/conditional_dependencies/schemas.py +0 -54
  167. fides/ui-build/static/admin/_next/static/CQD5hIjm-4lH18YYESYuD/_buildManifest.js +0 -1
  168. fides/ui-build/static/admin/_next/static/chunks/1817-6f35f58cd08b04ae.js +0 -1
  169. fides/ui-build/static/admin/_next/static/chunks/431-ade3e312fac3430b.js +0 -1
  170. fides/ui-build/static/admin/_next/static/chunks/5309-67bdf9001531e972.js +0 -1
  171. fides/ui-build/static/admin/_next/static/chunks/6780-4b687168dd8daa84.js +0 -1
  172. fides/ui-build/static/admin/_next/static/chunks/8237-55049f8f5fd5e058.js +0 -1
  173. fides/ui-build/static/admin/_next/static/chunks/9046-54877976a0529de2.js +0 -1
  174. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-71579a199158952e.js +0 -1
  175. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-7e63ac744c45f6da.js +0 -1
  176. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-8d83a5518c00fcfc.js +0 -1
  177. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-1caa552a8f11f2f2.js +0 -1
  178. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-7498d1d5974a78b0.js +0 -1
  179. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-2d3a2d967767a131.js +0 -1
  180. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a9068df48bdee05.js +0 -1
  181. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-fe58cebba358119d.js +0 -1
  182. fides/ui-build/static/admin/_next/static/css/b81194f2c3930152.css +0 -1
  183. {ethyca_fides-2.66.2b1.dist-info → ethyca_fides-2.66.2rc0.dist-info}/WHEEL +0 -0
  184. {ethyca_fides-2.66.2b1.dist-info → ethyca_fides-2.66.2rc0.dist-info}/entry_points.txt +0 -0
  185. {ethyca_fides-2.66.2b1.dist-info → ethyca_fides-2.66.2rc0.dist-info}/licenses/LICENSE +0 -0
  186. {ethyca_fides-2.66.2b1.dist-info → ethyca_fides-2.66.2rc0.dist-info}/top_level.txt +0 -0
  187. /fides/ui-build/static/admin/_next/static/{CQD5hIjm-4lH18YYESYuD → 8108ANFxs99VY7KZ_Xev2}/_ssgManifest.js +0 -0
  188. /fides/ui-build/static/admin/_next/static/chunks/{2921-86f1547ac40a5cdf.js → 2921-455e6357b74d2f76.js} +0 -0
  189. /fides/ui-build/static/admin/_next/static/chunks/{3450-1cc2bb07ed142203.js → 3450-0ba194991d0cca88.js} +0 -0
  190. /fides/ui-build/static/admin/_next/static/chunks/{3855-e2fa6db53d32c3de.js → 3855-e172870d3e21b0dd.js} +0 -0
  191. /fides/ui-build/static/admin/_next/static/chunks/{3872-84b7e380b88b4454.js → 3872-46cebf7ec1b31a2b.js} +0 -0
  192. /fides/ui-build/static/admin/_next/static/chunks/{3923-13a6b4da2d51bf8f.js → 3923-6cc911dafccc5f63.js} +0 -0
  193. /fides/ui-build/static/admin/_next/static/chunks/{401-3cc1fee61494e3bd.js → 401-1b529d5800aa1f3a.js} +0 -0
  194. /fides/ui-build/static/admin/_next/static/chunks/{409-45a125437261580c.js → 409-a257e14acebcd73b.js} +0 -0
  195. /fides/ui-build/static/admin/_next/static/chunks/{4121-f50675521dfee6eb.js → 4121-2bc09fc4ddbfe5cb.js} +0 -0
  196. /fides/ui-build/static/admin/_next/static/chunks/{4230-840c287045c88b34.js → 4230-60100f7ef3ddcde1.js} +0 -0
  197. /fides/ui-build/static/admin/_next/static/chunks/{4608-a8e3100e2806dbff.js → 4608-bbb7bf511a05c3c2.js} +0 -0
  198. /fides/ui-build/static/admin/_next/static/chunks/{5574-9312f97b637d9ee2.js → 5574-b13021775a15bfd2.js} +0 -0
  199. /fides/ui-build/static/admin/_next/static/chunks/{6084-5d7598b7bcb548cf.js → 6084-7178ff6ea6822475.js} +0 -0
  200. /fides/ui-build/static/admin/_next/static/chunks/{6662-efb2cf74641647f2.js → 6662-507be5d46e5b719b.js} +0 -0
  201. /fides/ui-build/static/admin/_next/static/chunks/{6853-4f8bf6558f8c6a46.js → 6853-2ad3e08fe6f9f5f2.js} +0 -0
  202. /fides/ui-build/static/admin/_next/static/chunks/{6882-586b84aeb02d5830.js → 6882-6af16fef26c21e06.js} +0 -0
  203. /fides/ui-build/static/admin/_next/static/chunks/{6954-34e062e4bffc7e71.js → 6954-bb875d9ac89f6030.js} +0 -0
  204. /fides/ui-build/static/admin/_next/static/chunks/{7476-d206c11823c91088.js → 7476-281ee9a8286556f3.js} +0 -0
  205. /fides/ui-build/static/admin/_next/static/chunks/{7630-b1c93688013ef013.js → 7630-9aac73191ed5ed13.js} +0 -0
  206. /fides/ui-build/static/admin/_next/static/chunks/{787-cbe2d0bfb513d90a.js → 787-fb41002f797eb2df.js} +0 -0
  207. /fides/ui-build/static/admin/_next/static/chunks/{79-3db1941d274f40c7.js → 79-7e87aff851423d4a.js} +0 -0
  208. /fides/ui-build/static/admin/_next/static/chunks/{796-98d4bd68909fbe1e.js → 796-329a5f823ec258a5.js} +0 -0
  209. /fides/ui-build/static/admin/_next/static/chunks/{9226-72ad691ca57b83ef.js → 9226-746771d47dff6266.js} +0 -0
  210. /fides/ui-build/static/admin/_next/static/chunks/{9826-3c578665c6d3b21d.js → 9826-111aaee8bd8dbd09.js} +0 -0
  211. /fides/ui-build/static/admin/_next/static/chunks/{9951-595d0f1588215081.js → 9951-9b753ad7c3f51bdf.js} +0 -0
  212. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-2d803dab6a00f353.js → 404-aece2c920ea14514.js} +0 -0
  213. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-acb59f8b5e97512a.js → manual-98777246bec9dc2a.js} +0 -0
  214. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-8ff7f37913ad736a.js → multiple-dc75dc6e37e52f05.js} +0 -0
  215. /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-0943633a8e422695.js → add-systems-a71c0aff4e0e6535.js} +0 -0
  216. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-d00c9034cdeb0236.js → add-vendors-24d226b5a8de5c74.js} +0 -0
  217. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-0e1ca0f4c8e7f4da.js → configure-6a8ef51138ac926a.js} +0 -0
  218. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-fc3a011154a2e1de.js → [id]-1edf582ba3cd3bbb.js} +0 -0
  219. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-09d4408014bcfe1c.js → privacy-experience-685771e5f7196d87.js} +0 -0
  220. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d67542783ef5ddac.js → [id]-6ccedc70dc447089.js} +0 -0
  221. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-3f20e8a316bb3d5b.js → new-944bca1cc57985b5.js} +0 -0
  222. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-23e9dcd4590312d2.js → privacy-notices-84f4bd14ce8673bc.js} +0 -0
  223. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-057cad65e7414a44.js → properties-6f86ab63a08a6528.js} +0 -0
  224. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-8f891957c8944137.js → reporting-afdbd4665657cfa1.js} +0 -0
  225. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-e17c56eec8d91371.js → consent-73d3cbf68f7c3a31.js} +0 -0
  226. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-99c9092d65c94807.js → [resourceUrn]-11d52f1570759c4d.js} +0 -0
  227. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-80a6cc8e8573514a.js → [projectUrn]-6ba9e160dae64695.js} +0 -0
  228. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-774fecea22ba8852.js → projects-32eac8bbd217615a.js} +0 -0
  229. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-f6bd6aff389cb9fe.js → [resourceUrn]-b83afa5565d0c84e.js} +0 -0
  230. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-6c3714ee97a718c1.js → resources-7648bbd4f6711e4d.js} +0 -0
  231. /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-8a7f9285da66b965.js → data-catalog-6f630d42ac9fb6b4.js} +0 -0
  232. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-85e140788e251272.js → action-center-9ddb52ebb7ac4c71.js} +0 -0
  233. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-5af9381f02b2aff6.js → activity-9aa744d56cdacb0d.js} +0 -0
  234. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-31e6c54794a9883e.js → [resourceUrn]-393e20924c83373e.js} +0 -0
  235. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-2822a423a7ad0550.js → detection-8733807dad4bc96e.js} +0 -0
  236. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6421ce247549c5d6.js → [resourceUrn]-14bd7500362ff224.js} +0 -0
  237. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-3eac407ac5181a3c.js → discovery-9e7dfd5a6acc2e8f.js} +0 -0
  238. /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-d2b275d83089820d.js → datamap-7674b97d655c193b.js} +0 -0
  239. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-1c98bd0959d9570a.js → [...subfieldNames]-c0d2bfd465df20e0.js} +0 -0
  240. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-e548cabda7da32c9.js → [collectionName]-28280a8a39a6e37c.js} +0 -0
  241. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-a8e8b5f4ee7af86c.js → [datasetId]-006b695e5af5ef24.js} +0 -0
  242. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-513c862c3a707735.js → new-82fb246d87e58ebd.js} +0 -0
  243. /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-747b7a13289f1cd7.js → dataset-20165c31ab1bc7cf.js} +0 -0
  244. /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-3d22525b3c327b2e.js → [id]-b4a6bcc87d126840.js} +0 -0
  245. /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-d2cad97495e86adb.js → new-f95d7b0bbfc58f5a.js} +0 -0
  246. /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-0f29b47402292070.js → datastore-connection-c391c6fad56eec48.js} +0 -0
  247. /fides/ui-build/static/admin/_next/static/chunks/pages/{index-12ac3e317fc86f21.js → index-1919aab9e5834b51.js} +0 -0
  248. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-5627d0d0668077f9.js → [id]-53fecfb9dd6a1e0c.js} +0 -0
  249. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-feca66ad5c5fe54a.js → add-template-76b01cec5fde10a9.js} +0 -0
  250. /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-c1bd3e7adbe8d2d3.js → messaging-5094ffea13f32ed9.js} +0 -0
  251. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-64a322d01aae5ca7.js → ant-components-5c08e8447c45ce44.js} +0 -0
  252. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-8bca16a7726e7eb2.js → AntForm-06ad5f34585480aa.js} +0 -0
  253. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-b0f246fc3b67ebf7.js → FormikAntFormItem-6f071c2bc9446cb0.js} +0 -0
  254. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-1a0852b090bfc392.js → FormikControlled-efcc38c58991ac9e.js} +0 -0
  255. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-11f3de1b45e36583.js → FormikField-430ba5c979abfb7c.js} +0 -0
  256. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-1b73a1c2b6c6285f.js → forms-5c561880bf131afb.js} +0 -0
  257. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-e551a860ec727802.js → configure-d888a69a3bbe040e.js} +0 -0
  258. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-dd99183f93763ae4.js → [id]-d3d8e3d7583ec635.js} +0 -0
  259. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-0bdbc1fcbf553b8f.js → add-property-1af10ed303815d46.js} +0 -0
  260. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-e959378bb32b6b73.js → properties-cebc0dc186be499a.js} +0 -0
  261. /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-2a98bd257edd8f47.js → datamap-e130c0197362e8f3.js} +0 -0
  262. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-8f98a4895e74725e.js → alpha-5e1322de868d615e.js} +0 -0
  263. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-8155a35a62fdb5ae.js → about-241f95e372b65d0f.js} +0 -0
  264. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-668d74c041d74650.js → [purpose_id]-fc201657f4a782c7.js} +0 -0
  265. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-a989532a12c40dcf.js → consent-c2d39cba8396ef3a.js} +0 -0
  266. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-45bea76ff7eda3cb.js → custom-fields-d992103cc55901ae.js} +0 -0
  267. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-51333dbd21cb37c8.js → domain-records-41242f805599feda.js} +0 -0
  268. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-bde86e5f6c09da5a.js → domains-2e885f74c92f669c.js} +0 -0
  269. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-4f9a5cc8bea7725b.js → email-templates-ff112655ad5f41e5.js} +0 -0
  270. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-6946e78a5d43e654.js → locations-023e1895552817de.js} +0 -0
  271. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-55a10e01dffc8039.js → organization-ac403c0886b20e20.js} +0 -0
  272. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-102efd9199e87124.js → regulations-86062a18e081a52a.js} +0 -0
  273. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-f91f22cf96566ed4.js → test-datasets-7a3396ac819c7904.js} +0 -0
  274. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-d4a57ea18935dd70.js → [id]-8314a819837f5b2a.js} +0 -0
  275. /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-648a0ff4920579ce.js → systems-21f423a7c417aa9d.js} +0 -0
  276. /fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-0b9d1a24188f65a9.js → taxonomy-6387fcc8cce872eb.js} +0 -0
  277. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-bc4eb541906781e6.js → new-a2524414e968f862.js} +0 -0
  278. /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-45bfa04e45a7d13f.js → user-management-173ac3a1ed2b05a6.js} +0 -0
  279. /fides/ui-build/static/admin/_next/static/chunks/{webpack-63a0c45b150a1037.js → webpack-ff0cd6bff75588da.js} +0 -0
@@ -14,7 +14,6 @@ from fides.api.common_exceptions import (
14
14
  ClientUnsuccessfulException,
15
15
  IdentityNotFoundException,
16
16
  ManualWebhookFieldsUnset,
17
- MaskingSecretsExpired,
18
17
  MessageDispatchException,
19
18
  NoCachedManualWebhookEntry,
20
19
  PrivacyRequestExit,
@@ -76,7 +75,6 @@ from fides.api.task.graph_task import (
76
75
  from fides.api.task.manual.manual_task_utils import create_manual_task_artificial_graphs
77
76
  from fides.api.tasks import DatabaseTask, celery_app
78
77
  from fides.api.tasks.scheduled.scheduler import scheduler
79
- from fides.api.util.cache import get_all_masking_secret_keys
80
78
  from fides.api.util.collection_util import Row
81
79
  from fides.api.util.logger import Pii, _log_exception, _log_warning
82
80
  from fides.api.util.logger_context_utils import LoggerContextKeys, log_context
@@ -480,21 +478,12 @@ def run_privacy_request(
480
478
  connection_configs
481
479
  )
482
480
 
483
- # If the privacy request requires manual finalization and has not yet been finalized, we exit here
484
- if (
485
- privacy_request.status
486
- == PrivacyRequestStatus.requires_manual_finalization
487
- and privacy_request.finalized_at is None
488
- ):
489
- return
490
-
491
481
  # Access CHECKPOINT
492
482
  if (
493
483
  policy.get_rules_for_action(action_type=ActionType.access)
494
484
  or policy.get_rules_for_action(action_type=ActionType.erasure)
495
485
  ) and can_run_checkpoint(
496
- request_checkpoint=CurrentStep.access,
497
- from_checkpoint=resume_step,
486
+ request_checkpoint=CurrentStep.access, from_checkpoint=resume_step
498
487
  ):
499
488
  privacy_request.cache_failed_checkpoint_details(CurrentStep.access)
500
489
  access_runner(
@@ -539,12 +528,9 @@ def run_privacy_request(
539
528
  if policy.get_rules_for_action(
540
529
  action_type=ActionType.erasure
541
530
  ) and can_run_checkpoint(
542
- request_checkpoint=CurrentStep.erasure,
543
- from_checkpoint=resume_step,
531
+ request_checkpoint=CurrentStep.erasure, from_checkpoint=resume_step
544
532
  ):
545
533
  privacy_request.cache_failed_checkpoint_details(CurrentStep.erasure)
546
- _verify_masking_secrets(policy, privacy_request, resume_step)
547
-
548
534
  # We only need to run the erasure once until masking strategies are handled
549
535
  erasure_runner(
550
536
  privacy_request=privacy_request,
@@ -666,111 +652,58 @@ def run_privacy_request(
666
652
  if not proceed:
667
653
  return
668
654
 
669
- # Request finalization CHECKPOINT
670
- if can_run_checkpoint(
671
- request_checkpoint=CurrentStep.finalization,
672
- from_checkpoint=resume_step,
673
- ):
674
- privacy_request.cache_failed_checkpoint_details(
675
- CurrentStep.finalization,
676
- )
677
- if privacy_request.status != PrivacyRequestStatus.error:
678
- erasure_rules = policy.get_rules_for_action(
679
- action_type=ActionType.erasure
680
- )
681
- if (
682
- privacy_request.finalized_at is None
683
- and erasure_rules
684
- and CONFIG.execution.erasure_request_finalization_required
685
- ):
686
- logger.info(
687
- "Marking privacy request '{}' as requires manual finalization.",
688
- privacy_request.id,
689
- )
690
- privacy_request.status = (
691
- PrivacyRequestStatus.requires_manual_finalization
692
- )
693
- privacy_request.save(db=session)
694
- return
695
-
696
- # Finally, mark the request as complete
697
- if privacy_request.finalized_at:
698
- logger.info(
699
- "Marking privacy request '{}' as finalized.",
700
- privacy_request.id,
701
- )
702
- privacy_request.add_success_execution_log(
703
- session,
704
- connection_key=None,
705
- dataset_name="Request finalized",
706
- collection_name=None,
707
- message=f"Request finalized for privacy request: {privacy_request.id}",
708
- action_type=privacy_request.policy.get_action_type(), # type: ignore
709
- )
710
-
711
- logger.info(
712
- "Marking privacy request '{}' as complete.",
713
- privacy_request.id,
714
- )
715
- AuditLog.create(
716
- db=session,
717
- data={
718
- "user_id": "system",
719
- "privacy_request_id": privacy_request.id,
720
- "action": AuditLogAction.finished,
721
- "message": "",
722
- },
655
+ legacy_request_completion_enabled = ConfigProxy(
656
+ session
657
+ ).notifications.send_request_completion_notification
658
+
659
+ action_type = (
660
+ MessagingActionType.PRIVACY_REQUEST_COMPLETE_ACCESS
661
+ if policy.get_rules_for_action(action_type=ActionType.access)
662
+ else MessagingActionType.PRIVACY_REQUEST_COMPLETE_DELETION
663
+ )
664
+
665
+ if message_send_enabled(
666
+ session,
667
+ privacy_request.property_id,
668
+ action_type,
669
+ legacy_request_completion_enabled,
670
+ ) and not policy.get_rules_for_action(action_type=ActionType.consent):
671
+ try:
672
+ if not access_result_urls:
673
+ # For DSR 3.0, if the request had both access and erasure rules, this needs to be fetched
674
+ # from the database because the Privacy Request would have exited
675
+ # processing and lost access to the access_result_urls in memory
676
+ access_result_urls = (
677
+ privacy_request.access_result_urls or {}
678
+ ).get("access_result_urls", [])
679
+ initiate_privacy_request_completion_email(
680
+ session,
681
+ policy,
682
+ access_result_urls,
683
+ identity_data,
684
+ privacy_request.property_id,
723
685
  )
724
- privacy_request.status = PrivacyRequestStatus.complete
725
- privacy_request.finished_processing_at = datetime.utcnow()
726
- privacy_request.save(db=session)
727
-
728
- # Send a final email to the user confirming request completion
729
- if privacy_request.status == PrivacyRequestStatus.complete:
730
- legacy_request_completion_enabled = ConfigProxy(
731
- session
732
- ).notifications.send_request_completion_notification
733
-
734
- action_type = (
735
- MessagingActionType.PRIVACY_REQUEST_COMPLETE_ACCESS
736
- if policy.get_rules_for_action(
737
- action_type=ActionType.access
738
- )
739
- else MessagingActionType.PRIVACY_REQUEST_COMPLETE_DELETION
740
- )
741
-
742
- if message_send_enabled(
743
- session,
744
- privacy_request.property_id,
745
- action_type,
746
- legacy_request_completion_enabled,
747
- ) and not policy.get_rules_for_action(
748
- action_type=ActionType.consent
749
- ):
750
- if not access_result_urls:
751
- # For DSR 3.0, if the request had both access and erasure rules, this needs to be fetched
752
- # from the database because the Privacy Request would have exited
753
- # processing and lost access to the access_result_urls in memory
754
- access_result_urls = (
755
- privacy_request.access_result_urls or {}
756
- ).get("access_result_urls", [])
757
-
758
- try:
759
- initiate_privacy_request_completion_email(
760
- session,
761
- policy,
762
- access_result_urls,
763
- identity_data,
764
- privacy_request.property_id,
765
- )
766
- except (
767
- IdentityNotFoundException,
768
- MessageDispatchException,
769
- ) as e:
770
- privacy_request.error_processing(db=session)
771
- # If dev mode, log traceback
772
- _log_exception(e, CONFIG.dev_mode)
773
- return
686
+ except (IdentityNotFoundException, MessageDispatchException) as e:
687
+ privacy_request.error_processing(db=session)
688
+ # If dev mode, log traceback
689
+ _log_exception(e, CONFIG.dev_mode)
690
+ return
691
+
692
+ # Only mark as complete if not in error state
693
+ if privacy_request.status != PrivacyRequestStatus.error:
694
+ privacy_request.finished_processing_at = datetime.utcnow()
695
+ AuditLog.create(
696
+ db=session,
697
+ data={
698
+ "user_id": "system",
699
+ "privacy_request_id": privacy_request.id,
700
+ "action": AuditLogAction.finished,
701
+ "message": "",
702
+ },
703
+ )
704
+ privacy_request.status = PrivacyRequestStatus.complete
705
+ logger.info("Privacy request run completed.")
706
+ privacy_request.save(db=session)
774
707
 
775
708
 
776
709
  def initiate_privacy_request_completion_email(
@@ -1067,25 +1000,3 @@ def run_webhooks_and_report_status(
1067
1000
  return False
1068
1001
 
1069
1002
  return True
1070
-
1071
-
1072
- def _verify_masking_secrets(
1073
- policy: Policy, privacy_request: PrivacyRequest, resume_step: Optional[CurrentStep]
1074
- ) -> None:
1075
- """
1076
- Checks that the required masking secrets are still cached for the given request.
1077
- Raises an exception if masking secrets are needed for the given policy but they don't exist.
1078
- """
1079
-
1080
- if resume_step is None:
1081
- return
1082
-
1083
- # if masking can be performed without any masking secrets, we skip the cache check
1084
- if (
1085
- policy.generate_masking_secrets()
1086
- and not get_all_masking_secret_keys(privacy_request.id)
1087
- and not privacy_request.masking_secrets
1088
- ):
1089
- raise MaskingSecretsExpired(
1090
- f"The masking secrets for privacy request ID '{privacy_request.id}' have expired. Please submit a new erasure request."
1091
- )
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import json
4
4
  from asyncio import sleep
5
5
  from datetime import datetime, timedelta
6
- from typing import Any, Dict, Optional, Set
6
+ from typing import Any, Dict, List, Optional, Set
7
7
 
8
8
  from httpx import AsyncClient
9
9
  from loguru import logger
@@ -11,6 +11,7 @@ from sqlalchemy import text
11
11
  from sqlalchemy.sql.elements import TextClause
12
12
 
13
13
  from fides.api.common_exceptions import PrivacyRequestNotFound
14
+ from fides.api.models.policy import Policy
14
15
  from fides.api.models.privacy_request import (
15
16
  EXITED_EXECUTION_LOG_STATUSES,
16
17
  PrivacyRequest,
@@ -18,12 +19,14 @@ from fides.api.models.privacy_request import (
18
19
  )
19
20
  from fides.api.models.worker_task import ExecutionLogStatus
20
21
  from fides.api.schemas.drp_privacy_request import DrpPrivacyRequestCreate
22
+ from fides.api.schemas.masking.masking_secrets import MaskingSecretCache
21
23
  from fides.api.schemas.policy import ActionType
22
24
  from fides.api.schemas.privacy_request import (
23
25
  PrivacyRequestResponse,
24
26
  PrivacyRequestStatus,
25
27
  )
26
28
  from fides.api.schemas.redis_cache import Identity
29
+ from fides.api.service.masking.strategy.masking_strategy import MaskingStrategy
27
30
  from fides.api.tasks import DSR_QUEUE_NAME, DatabaseTask, celery_app
28
31
  from fides.api.tasks.scheduled.scheduler import scheduler
29
32
  from fides.api.util.cache import (
@@ -66,6 +69,7 @@ def build_required_privacy_request_kwargs(
66
69
 
67
70
  def cache_data(
68
71
  privacy_request: PrivacyRequest,
72
+ policy: Policy,
69
73
  identity: Identity,
70
74
  encryption_key: Optional[str],
71
75
  drp_request_body: Optional[DrpPrivacyRequestCreate],
@@ -78,6 +82,23 @@ def cache_data(
78
82
  privacy_request.cache_custom_privacy_request_fields(custom_privacy_request_fields)
79
83
  privacy_request.cache_encryption(encryption_key) # handles None already
80
84
 
85
+ # Store masking secrets in the cache
86
+ logger.info("Caching masking secrets for privacy request {}", privacy_request.id)
87
+ erasure_rules = policy.get_rules_for_action(action_type=ActionType.erasure)
88
+ unique_masking_strategies_by_name: Set[str] = set()
89
+ for rule in erasure_rules:
90
+ strategy_name: str = rule.masking_strategy["strategy"] # type: ignore
91
+ configuration = rule.masking_strategy["configuration"] # type: ignore
92
+ if strategy_name in unique_masking_strategies_by_name:
93
+ continue
94
+ unique_masking_strategies_by_name.add(strategy_name)
95
+ masking_strategy = MaskingStrategy.get_strategy(strategy_name, configuration)
96
+ if masking_strategy.secrets_required():
97
+ masking_secrets: List[MaskingSecretCache] = (
98
+ masking_strategy.generate_secrets_for_cache()
99
+ )
100
+ for masking_secret in masking_secrets:
101
+ privacy_request.cache_masking_secret(masking_secret)
81
102
  if drp_request_body:
82
103
  privacy_request.cache_drp_request_body(drp_request_body)
83
104
 
@@ -1,5 +1,4 @@
1
1
  # pylint: disable=too-many-lines
2
- from functools import partial
3
2
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
4
3
 
5
4
  import dask
@@ -253,33 +252,16 @@ def run_erasure_request_deprecated( # pylint: disable = too-many-arguments
253
252
 
254
253
  access_request_data[ROOT_COLLECTION_ADDRESS.value] = [identity]
255
254
 
256
- # Build the dask task graph for erasure, ensuring we also pass along the
257
- # upstream access data that may be required by the connector (e.g. BigQuery
258
- # delete statements). We accomplish this by partially applying the
259
- # `inputs` kwarg on each task's `erasure_request` method. The resulting
260
- # callable accepts the original positional arguments expected by Dask.
261
-
262
- dsk: Dict[CollectionAddress, Any] = {}
263
- for k, t in env.items():
264
- # Collect upstream access data in the same order as the input keys
265
- upstream_access_data: List[List[Row]] = [
266
- access_request_data.get(str(input_key), [])
267
- for input_key in t.execution_node.input_keys
268
- ]
269
-
270
- # Bind the `inputs` keyword argument so it is supplied when the task executes
271
- erasure_fn_with_inputs = partial(
272
- t.erasure_request, inputs=upstream_access_data
273
- )
274
-
275
- # Build the task tuple: (callable, retrieved_data, *prereqs)
276
- dsk[k] = (
277
- erasure_fn_with_inputs,
255
+ dsk: Dict[CollectionAddress, Any] = {
256
+ k: (
257
+ t.erasure_request,
278
258
  access_request_data.get(
279
259
  str(k), []
280
- ), # Data retrieved for this collection
260
+ ), # Pass in the results of the access request for this collection
281
261
  *_evaluate_erasure_dependencies(t, erasure_end_nodes),
282
262
  )
263
+ for k, t in env.items()
264
+ }
283
265
 
284
266
  # root node returns 0 to be consistent with the output of the other erasure tasks
285
267
  dsk[ROOT_COLLECTION_ADDRESS] = 0
@@ -298,11 +298,17 @@ def run_access_node(
298
298
  )
299
299
  # Currently, upstream tasks and "input keys" (which are built by data dependencies)
300
300
  # are the same, but they may not be the same in the future.
301
- upstream_access_data: List[List[Row]] = (
302
- _build_upstream_access_data(
301
+ ordered_upstream_tasks: List[Optional[RequestTask]] = (
302
+ _order_tasks_by_input_key(
303
303
  graph_task.execution_node.input_keys, upstream_results
304
304
  )
305
305
  )
306
+ # Pass in access data dependencies in the same order as the input keys.
307
+ # If we don't have access data for an upstream node, pass in an empty list
308
+ upstream_access_data: List[List[Row]] = [
309
+ upstream.get_access_data() if upstream else []
310
+ for upstream in ordered_upstream_tasks
311
+ ]
306
312
  # Run the main access function
307
313
  graph_task.access_request(*upstream_access_data)
308
314
 
@@ -353,7 +359,7 @@ def run_erasure_node(
353
359
  session,
354
360
  ) as resources:
355
361
  # Build GraphTask resource to facilitate execution
356
- erasure_graph_task: GraphTask = create_graph_task(
362
+ graph_task: GraphTask = create_graph_task(
357
363
  session, request_task, resources
358
364
  )
359
365
  # Get access data that was saved in the erasure format that was collected from the
@@ -362,24 +368,8 @@ def run_erasure_node(
362
368
  request_task.get_data_for_erasures() or []
363
369
  )
364
370
 
365
- upstream_access_data: List[List[Row]] = []
366
-
367
- try:
368
- upstream_access_data = (
369
- get_upstream_access_data_for_erasure_task(
370
- request_task, session, resources
371
- )
372
- )
373
- except Exception as e:
374
- logger.error(
375
- f"Unable to get upstream access data for erasure task {request_task.collection_address}: {e}"
376
- )
377
-
378
- # Run the main erasure function, passing along the upstream access data.
379
- # The extra data is currently only needed for generating BigQuery delete statements.
380
- erasure_graph_task.erasure_request(
381
- retrieved_data, inputs=upstream_access_data
382
- )
371
+ # Run the main erasure function!
372
+ graph_task.erasure_request(retrieved_data)
383
373
 
384
374
  queue_downstream_tasks_with_retries(
385
375
  self,
@@ -497,73 +487,6 @@ def _order_tasks_by_input_key(
497
487
  return tasks
498
488
 
499
489
 
500
- def get_upstream_access_data_for_erasure_task(
501
- erasure_request_task: RequestTask,
502
- session: Session,
503
- resources: TaskResources,
504
- ) -> List[List[Row]]:
505
- """
506
- Retrieves upstream access data for a given erasure request task.
507
-
508
- This function finds the corresponding access task for the erasure task,
509
- creates a GraphTask to extract input keys, and builds the upstream access data
510
- needed for erasure operations (particularly for BigQuery delete statements).
511
-
512
- Args:
513
- erasure_request_task: The erasure task that needs upstream access data
514
- session: Database session for querying
515
- resources: Task resources for creating GraphTask
516
-
517
- Returns:
518
- List[List[Row]]: Upstream access data ordered by input keys
519
-
520
- Raises:
521
- Exception: If the corresponding access task cannot be found
522
- """
523
- # Get the corresponding access task for the current erasure task
524
- access_request_task = (
525
- session.query(RequestTask)
526
- .filter(
527
- RequestTask.privacy_request_id == erasure_request_task.privacy_request_id,
528
- RequestTask.collection_address == erasure_request_task.collection_address,
529
- RequestTask.action_type == ActionType.access,
530
- )
531
- .first()
532
- )
533
-
534
- if not access_request_task:
535
- raise Exception(
536
- f"Unable to find access request task for erasure task {erasure_request_task.collection_address}"
537
- )
538
-
539
- # Convert the request task to a GraphTask to get the input_keys
540
- access_graph_task: GraphTask = create_graph_task(
541
- session, access_request_task, resources
542
- )
543
-
544
- # Build and return the upstream access data
545
- return _build_upstream_access_data(
546
- access_graph_task.execution_node.input_keys,
547
- access_request_task.upstream_tasks_objects(session),
548
- )
549
-
550
-
551
- def _build_upstream_access_data(
552
- input_keys: List[CollectionAddress],
553
- upstream_tasks: Query,
554
- ) -> List[List[Row]]:
555
- """
556
- Helper function to build the access data for the current node.
557
- The access data is passed in the same order as the input keys.
558
- If we don't have access data for an upstream node, return an empty list.
559
- """
560
-
561
- ordered_upstream: List[Optional[RequestTask]] = _order_tasks_by_input_key(
562
- input_keys, upstream_tasks
563
- )
564
- return [task.get_access_data() if task else [] for task in ordered_upstream]
565
-
566
-
567
490
  mapping = {
568
491
  ActionType.access.value: run_access_node,
569
492
  ActionType.erasure.value: run_erasure_node,
@@ -421,7 +421,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
421
421
  action_type: ActionType,
422
422
  ex: Optional[BaseException] = None,
423
423
  success_override_msg: Optional[str] = None,
424
- record_count: Optional[int] = None,
425
424
  ) -> None:
426
425
  """On completion activities"""
427
426
  if ex:
@@ -441,23 +440,8 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
441
440
  mark_current_and_downstream_nodes_as_failed(request_task, db)
442
441
  else:
443
442
  logger.info("Ending {}, {}", self.resources.request.id, self.key)
444
-
445
- # Build standardized success message with record count
446
- base_message = (
447
- str(success_override_msg) if success_override_msg else "success"
448
- )
449
- if record_count is not None:
450
- if action_type == ActionType.access:
451
- message = f"{base_message} - retrieved {record_count} records"
452
- elif action_type == ActionType.erasure:
453
- message = f"{base_message} - masked {record_count} records"
454
- else:
455
- message = f"{base_message} - processed {record_count} records"
456
- else:
457
- message = base_message
458
-
459
443
  self.update_status(
460
- message,
444
+ str(success_override_msg) if success_override_msg else "success",
461
445
  build_affected_field_logs(
462
446
  self.execution_node, self.resources.policy, action_type
463
447
  ),
@@ -653,11 +637,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
653
637
  if messages:
654
638
  success_message = "\n".join(messages)
655
639
 
656
- self.log_end(
657
- ActionType.access,
658
- success_override_msg=success_message,
659
- record_count=len(filtered_output),
660
- )
640
+ self.log_end(ActionType.access, success_override_msg=success_message)
661
641
  return filtered_output
662
642
 
663
643
  @retry(action_type=ActionType.erasure, default_return=0)
@@ -665,15 +645,9 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
665
645
  self,
666
646
  retrieved_data: List[Row],
667
647
  *erasure_prereqs: int, # TODO Remove when we stop support for DSR 2.0. DSR 3.0 enforces with downstream_tasks.
668
- inputs: Optional[
669
- List[List[Row]]
670
- ] = None, # Upstream data from corresponding access task
671
648
  ) -> int:
672
649
  """Run erasure request"""
673
650
 
674
- if inputs is None:
675
- inputs = []
676
-
677
651
  # if there is no primary key specified in the graph node configuration
678
652
  # note this in the execution log and perform no erasures on this node
679
653
  if (
@@ -720,10 +694,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
720
694
  )
721
695
  return 0
722
696
 
723
- formatted_input_data: NodeInput = self.pre_process_input_data(
724
- *inputs, group_dependent_fields=True
725
- )
726
-
727
697
  # Use execution context to capture postprocessor messages
728
698
  with collect_execution_log_messages() as messages:
729
699
  output = self.connector.mask_data(
@@ -732,7 +702,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
732
702
  self.resources.request,
733
703
  self.resources.privacy_request_task,
734
704
  retrieved_data,
735
- formatted_input_data,
736
705
  )
737
706
 
738
707
  if self.request_task.id:
@@ -751,11 +720,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
751
720
  if messages:
752
721
  success_message = "\n".join(messages)
753
722
 
754
- self.log_end(
755
- ActionType.erasure,
756
- success_override_msg=success_message,
757
- record_count=output,
758
- )
723
+ self.log_end(ActionType.erasure, success_override_msg=success_message)
759
724
  return output
760
725
 
761
726
  @retry(action_type=ActionType.consent, default_return=False)
@@ -268,7 +268,6 @@ class ManualTaskGraphTask(GraphTask):
268
268
  self,
269
269
  retrieved_data: List[Row],
270
270
  *erasure_prereqs: int, # noqa: D401, pylint: disable=unused-argument
271
- inputs: Optional[List[List[Row]]] = None,
272
271
  ) -> int:
273
272
  """Execute manual-task-driven erasure logic.
274
273
 
fides/api/util/cache.py CHANGED
@@ -387,8 +387,3 @@ def get_queue_counts() -> Dict[str, int]:
387
387
  logger.critical(exception)
388
388
  queue_counts = {}
389
389
  return queue_counts
390
-
391
-
392
- def get_all_masking_secret_keys(privacy_request_id: str) -> List[str]:
393
- cache: FidesopsRedis = get_cache()
394
- return cache.keys(f"id-{privacy_request_id}-masking-secret-*")