ethyca-fides 2.62.1b3__py2.py3-none-any.whl → 2.62.1rc0__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 (281) hide show
  1. {ethyca_fides-2.62.1b3.dist-info → ethyca_fides-2.62.1rc0.dist-info}/METADATA +1 -2
  2. {ethyca_fides-2.62.1b3.dist-info → ethyca_fides-2.62.1rc0.dist-info}/RECORD +228 -232
  3. fides/_version.py +3 -3
  4. fides/api/api/v1/endpoints/privacy_request_endpoints.py +2 -2
  5. fides/api/db/base.py +0 -3
  6. fides/api/main.py +1 -0
  7. fides/api/models/attachment.py +10 -117
  8. fides/api/models/audit_log.py +3 -0
  9. fides/api/models/detection_discovery.py +1 -66
  10. fides/api/models/fides_user.py +4 -51
  11. fides/api/models/fides_user_permissions.py +7 -25
  12. fides/api/models/privacy_request/privacy_request.py +1 -40
  13. fides/api/oauth/roles.py +0 -19
  14. fides/api/service/connectors/query_configs/saas_query_config.py +8 -3
  15. fides/api/service/connectors/saas_connector.py +4 -7
  16. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +2 -4
  17. fides/api/service/privacy_request/request_runner_service.py +18 -47
  18. fides/api/service/storage/s3.py +15 -40
  19. fides/api/tasks/storage.py +5 -6
  20. fides/api/util/storage_util.py +8 -14
  21. fides/common/api/scope_registry.py +0 -6
  22. fides/config/config_proxy.py +1 -0
  23. fides/config/execution_settings.py +4 -0
  24. fides/service/error_handling/__init__.py +0 -0
  25. fides/service/error_handling/error_handler.py +202 -0
  26. fides/ui-build/static/admin/404.html +1 -1
  27. fides/ui-build/static/admin/_next/static/K1_4-1GhwfL7h4fYYQBvB/_buildManifest.js +1 -0
  28. fides/ui-build/static/admin/_next/static/chunks/1327-92a38135ee8d55ec.js +1 -0
  29. fides/ui-build/static/admin/_next/static/chunks/1817-721fdeb29c07c6be.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/1904-7e5354990377a849.js +1 -0
  31. fides/ui-build/static/admin/_next/static/chunks/{2310-6a5fb2f76f7b6491.js → 2310-0d63c66c2685e83c.js} +1 -1
  32. fides/ui-build/static/admin/_next/static/chunks/3119-e441b14cdab4320e.js +1 -0
  33. fides/ui-build/static/admin/_next/static/chunks/3426-e49cb4766324b2dd.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/{3513-293b1e54699cf3e7.js → 3513-87b54d931698986f.js} +1 -1
  35. fides/ui-build/static/admin/_next/static/chunks/355-e4340980d72b4faa.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{3872-99da5bb6140ff810.js → 3872-6b828cb00fb2ce93.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/4060-9593a3f98e600487.js +1 -0
  38. fides/ui-build/static/admin/_next/static/chunks/4121-5c3af879cdd8b3be.js +1 -0
  39. fides/ui-build/static/admin/_next/static/chunks/4481-8398edf74aabb8ea.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/4723-4c3c7a375e998c15.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/5258-e000d07844eccf7e.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/{5487-218e4847b8250fbb.js → 5487-62955c11bab63734.js} +1 -1
  43. fides/ui-build/static/admin/_next/static/chunks/5626-1b636798faad78e1.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/5683-44966a05fa5ad566.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/5826-ce34f25ac2eeb807.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/5973-56d90405c3616068.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/6277-c35c8cc806f7571f.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/6853-0cee00c9da26a40e.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/{6954-04030a21a0c8cf5a.js → 6954-d02d474ba30756b2.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/79-e5884e6878fc1bbb.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/7980-e17dda2f50ec76b8.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/{9494-d1fd4fb83c3d4836.js → 9494-0df032fe6ee531a5.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/9767-74320abc2e9a4550.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-f1add6386651ca3d.js → _app-371b155655c83a1e.js} +69 -69
  55. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-1292fd216f2839c7.js → manual-7d789458fb296270.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-2ffc37614e9d1fa9.js → multiple-90320455052466cd.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a69f8946466471aa.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-c8033d6560635046.js → add-vendors-bcc515a765c0119d.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-49b9f1b56262dfdc.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-fd71fb440dbe60e4.js → privacy-experience-5ef03041a530b0e2.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-12f3ba4609bc2ba5.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-5960170d492acb03.js → properties-ffa15d7ff64a9f05.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-b959d61c2a3682b3.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-18e3faf7963962e4.js → [resourceUrn]-7ddf45ffd49533b0.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-a10a0f3e6592f350.js → [projectUrn]-ecf23116a845188a.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-6971531bb09dff3a.js → projects-79f8e613827c55c1.js} +1 -1
  67. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-7320524a47104798.js → [resourceUrn]-ed213bc1b7041aa2.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-51d99174c8006eb5.js → resources-1f033ca5a0702018.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-4dbc71d8be9765f3.js → data-catalog-e950d41b75f86c85.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-84ead584a88ab662.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-90f1975f559fff3e.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-4b820a3173f35504.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-db3853a09933097a.js → activity-beedbc38ee2b0094.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-4c526db0c30c488a.js → [resourceUrn]-f38b3ef885a29ea6.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-6f27dbb7c8edc69d.js → detection-29fd0d5a73f13a00.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-562d2b8ae90dd1f0.js → [resourceUrn]-9a80241f1028c470.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-fe7f51502eda57c9.js → discovery-c58333981b1522c9.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-3aaa99709d83a1f6.js → datamap-2d6f95b2769a0936.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-c08363922838022a.js → [...subfieldNames]-3536ae978741b659.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-f12df2140e309dfb.js → [collectionName]-8b5afe14cf42a4ac.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-3f564c8d6cfb03d4.js → [datasetId]-b8dca4298b5bb085.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-1e26702b1a7e0e12.js +1 -0
  83. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-1f0c4e2e5d0b5bf6.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-b078218865a8fd28.js → [id]-ebf54ea9874c59ae.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-c39e8e2269883796.js +1 -0
  86. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-9db81467fa254996.js +1 -0
  87. fides/ui-build/static/admin/_next/static/chunks/pages/{index-2e6ba5382358fcf8.js → index-868b60407eae35da.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-ebc41649161f7fb9.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-b89b9f68ccc69c1b.js +1 -0
  90. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-71166bf207804754.js → messaging-5f41afae411cd8a4.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-928430cd40c35ef2.js +1 -0
  92. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-07ef58b04404479d.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-595ed9f6ca438020.js +1 -0
  94. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-b3384299166bcd1e.js +1 -0
  95. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-4a5e8ec41574c6b5.js → properties-f00530710b699afd.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-6a6016708efb5f4f.js +1 -0
  97. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-ba15c12c89ee10f8.js +1 -0
  98. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-0f2daeec241bd1a2.js +1 -0
  99. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-0401208a3128fa4d.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-92e8246170b492b5.js → domain-records-0daa256958675a23.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-4fbab6716326060d.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-b235f961f9ca39a6.js → organization-9404a6b0b2951992.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-99cd1a12ae0373b0.js → test-datasets-48be14ad09ed4133.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-01006a55ac873135.js → [id]-b03403fed4dd8805.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-45990d85a4c5739b.js → systems-ae591953b24e2fc9.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-913efe5371344de6.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-dc11ba29dbd4708b.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-c0b2113b44f46112.js +1 -0
  109. fides/ui-build/static/admin/_next/static/css/b89fc4b36b501cf6.css +1 -0
  110. fides/ui-build/static/admin/_next/static/css/{1b227ba7eabbfe2f.css → c0c2eb63ad3e7390.css} +1 -1
  111. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  112. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  113. fides/ui-build/static/admin/add-systems.html +1 -1
  114. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  115. fides/ui-build/static/admin/consent/configure.html +1 -1
  116. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  117. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  118. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  119. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  120. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  121. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  122. fides/ui-build/static/admin/consent/properties.html +1 -1
  123. fides/ui-build/static/admin/consent/reporting.html +1 -1
  124. fides/ui-build/static/admin/consent.html +1 -1
  125. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  126. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  127. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  128. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  129. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  130. fides/ui-build/static/admin/data-catalog.html +1 -1
  131. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  132. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  133. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  134. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  135. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  136. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  137. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  138. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  139. fides/ui-build/static/admin/datamap.html +1 -1
  140. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  141. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  142. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  143. fides/ui-build/static/admin/dataset/new.html +1 -1
  144. fides/ui-build/static/admin/dataset.html +1 -1
  145. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  146. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  147. fides/ui-build/static/admin/datastore-connection.html +1 -1
  148. fides/ui-build/static/admin/index.html +1 -1
  149. fides/ui-build/static/admin/integrations/[id].html +1 -1
  150. fides/ui-build/static/admin/integrations.html +1 -1
  151. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  152. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  153. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  154. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  155. fides/ui-build/static/admin/lib/fides.js +2 -2
  156. fides/ui-build/static/admin/login/[provider].html +1 -1
  157. fides/ui-build/static/admin/login.html +1 -1
  158. fides/ui-build/static/admin/messaging/[id].html +1 -1
  159. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  160. fides/ui-build/static/admin/messaging.html +1 -1
  161. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  162. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  163. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  164. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  165. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  166. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  167. fides/ui-build/static/admin/poc/forms.html +1 -1
  168. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  169. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  170. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  171. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  172. fides/ui-build/static/admin/privacy-requests.html +1 -1
  173. fides/ui-build/static/admin/properties/[id].html +1 -1
  174. fides/ui-build/static/admin/properties/add-property.html +1 -1
  175. fides/ui-build/static/admin/properties.html +1 -1
  176. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  177. fides/ui-build/static/admin/settings/about.html +1 -1
  178. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  179. fides/ui-build/static/admin/settings/consent.html +1 -1
  180. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  181. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  182. fides/ui-build/static/admin/settings/domains.html +1 -1
  183. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  184. fides/ui-build/static/admin/settings/locations.html +1 -1
  185. fides/ui-build/static/admin/settings/organization.html +1 -1
  186. fides/ui-build/static/admin/settings/regulations.html +1 -1
  187. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  188. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  189. fides/ui-build/static/admin/systems.html +1 -1
  190. fides/ui-build/static/admin/taxonomy.html +1 -1
  191. fides/ui-build/static/admin/user-management/new.html +1 -1
  192. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  193. fides/ui-build/static/admin/user-management.html +1 -1
  194. fides/api/alembic/migrations/versions/2263583b0e44_add_shared_monitor_config.py +0 -82
  195. fides/api/alembic/migrations/versions/440a5b9a3493_add_fides_user_respondent_email_.py +0 -80
  196. fides/api/models/fides_user_respondent_email_verification.py +0 -112
  197. fides/ui-build/static/admin/_next/static/D-B-G-FV05_6iwXWBGS0J/_buildManifest.js +0 -1
  198. fides/ui-build/static/admin/_next/static/chunks/1327-da0303f70d12fb20.js +0 -1
  199. fides/ui-build/static/admin/_next/static/chunks/1817-d2543e460cec0dcb.js +0 -1
  200. fides/ui-build/static/admin/_next/static/chunks/1904-25e5d4f1b8146fb3.js +0 -1
  201. fides/ui-build/static/admin/_next/static/chunks/3119-b5e40d8d24af1e79.js +0 -1
  202. fides/ui-build/static/admin/_next/static/chunks/3426-77fccf2c9a5e10cd.js +0 -1
  203. fides/ui-build/static/admin/_next/static/chunks/3923-c6dcaeaa3267f254.js +0 -1
  204. fides/ui-build/static/admin/_next/static/chunks/401-a882199f6c94a4dc.js +0 -1
  205. fides/ui-build/static/admin/_next/static/chunks/4060-c657e58514e91e91.js +0 -1
  206. fides/ui-build/static/admin/_next/static/chunks/4121-ec1d8faa3cf5783c.js +0 -1
  207. fides/ui-build/static/admin/_next/static/chunks/4481-9357e3930d35073b.js +0 -1
  208. fides/ui-build/static/admin/_next/static/chunks/5258-49e73e5998c01254.js +0 -1
  209. fides/ui-build/static/admin/_next/static/chunks/5683-3d5c4194b1b1493e.js +0 -1
  210. fides/ui-build/static/admin/_next/static/chunks/5973-d776c0029db45971.js +0 -1
  211. fides/ui-build/static/admin/_next/static/chunks/6277-db781b6c1dde3c84.js +0 -1
  212. fides/ui-build/static/admin/_next/static/chunks/6853-348fe2ba132b400c.js +0 -1
  213. fides/ui-build/static/admin/_next/static/chunks/7553-0f3e9e7eaf1a8b62.js +0 -1
  214. fides/ui-build/static/admin/_next/static/chunks/79-d877d3bde220da44.js +0 -1
  215. fides/ui-build/static/admin/_next/static/chunks/796-7424eb6391142ccd.js +0 -1
  216. fides/ui-build/static/admin/_next/static/chunks/7980-041df432c4d3a68b.js +0 -1
  217. fides/ui-build/static/admin/_next/static/chunks/9767-f8ea7d0127f81294.js +0 -1
  218. fides/ui-build/static/admin/_next/static/chunks/9965-92f4a28823a5e623.js +0 -1
  219. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-0234733a90ed5127.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-2ba21b95aa3bb15e.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-5a63fc903408412e.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-80bd51f8217edae4.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-67ddc090cf949af4.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-07ff657ee49e5742.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-dbc8c95c22b9f2aa.js +0 -1
  226. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-157b00d23b651d12.js +0 -1
  227. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-9d29dd6cf109891d.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-b01f89d250ff52af.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-9fc15228581786e6.js +0 -1
  230. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-43abc599f0768331.js +0 -1
  231. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-d69c9f1007e76046.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-fec150afcfeb3fb5.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-2862630f0e9e484b.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-35e58b5ed6b12b2b.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-bb02092af39446da.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6baa485385ce0678.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-707551df97d5eebd.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-e4df123bef1ff2b1.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-2fd6b0ff9b6741fc.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-3a829c53d5d723d2.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-4194ce716b81480d.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-ec739e169cd5eafe.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-603c2bdbd8dc00ca.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-592e497369673e1a.js +0 -1
  245. fides/ui-build/static/admin/_next/static/css/5ded47c57dae5baf.css +0 -1
  246. fides/ui-build/static/admin/poc/table-migration.html +0 -1
  247. {ethyca_fides-2.62.1b3.dist-info → ethyca_fides-2.62.1rc0.dist-info}/WHEEL +0 -0
  248. {ethyca_fides-2.62.1b3.dist-info → ethyca_fides-2.62.1rc0.dist-info}/entry_points.txt +0 -0
  249. {ethyca_fides-2.62.1b3.dist-info → ethyca_fides-2.62.1rc0.dist-info}/licenses/LICENSE +0 -0
  250. {ethyca_fides-2.62.1b3.dist-info → ethyca_fides-2.62.1rc0.dist-info}/top_level.txt +0 -0
  251. /fides/ui-build/static/admin/_next/static/{D-B-G-FV05_6iwXWBGS0J → K1_4-1GhwfL7h4fYYQBvB}/_ssgManifest.js +0 -0
  252. /fides/ui-build/static/admin/_next/static/chunks/{1099-b652e6f9a0cd778b.js → 1099-98458e8e9ff67508.js} +0 -0
  253. /fides/ui-build/static/admin/_next/static/chunks/{1100-e19e94b0a6486255.js → 1100-4106d99f5e1ebd75.js} +0 -0
  254. /fides/ui-build/static/admin/_next/static/chunks/{2921-771dc5d9e95dc6b4.js → 2921-ca04a0476e2e56c5.js} +0 -0
  255. /fides/ui-build/static/admin/_next/static/chunks/{3505-313087fc1744a0ca.js → 3505-e58b93f9c1cbdcad.js} +0 -0
  256. /fides/ui-build/static/admin/_next/static/chunks/{69-ef4c11c574b4e6dd.js → 69-dc52e39d26a4ad14.js} +0 -0
  257. /fides/ui-build/static/admin/_next/static/chunks/{8433-755359b501d32eaa.js → 8433-a77c2cd1c1a6887e.js} +0 -0
  258. /fides/ui-build/static/admin/_next/static/chunks/{8499-06ab15acbfec037c.js → 8499-34a34015c91fc38b.js} +0 -0
  259. /fides/ui-build/static/admin/_next/static/chunks/{9327-b691be8352e31b58.js → 9327-a25347d72bfbe680.js} +0 -0
  260. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-e868487119cd14fc.js → 404-c00773c4c6e930af.js} +0 -0
  261. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-94391554a7607c5b.js → [id]-d4137bb7fdc1ac6e.js} +0 -0
  262. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-596dd2a35b455f21.js → [id]-a5a95ac63b1ce206.js} +0 -0
  263. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-fa7f0d2639e12a5a.js → new-946ce1a2aa1500d4.js} +0 -0
  264. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-dd2a0e3b536b8b42.js → consent-7797e367dd946a18.js} +0 -0
  265. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-111b07344f1ee9e4.js → [id]-22812f08e81bd4f3.js} +0 -0
  266. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-c41f368fb6b35de4.js → add-template-ca22869201847ccc.js} +0 -0
  267. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-3dabaf6828acb2cb.js → ant-components-173bd3ad45ea61c6.js} +0 -0
  268. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-784081c774042249.js → AntForm-4dfe984ad80927cd.js} +0 -0
  269. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-63905f2382f158cd.js → FormikAntFormItem-f790e1ea5cbc26c0.js} +0 -0
  270. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-43f6eab28eae7b56.js → FormikControlled-af9e682ec620e990.js} +0 -0
  271. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-e4a07abc908fc9b5.js → FormikField-6ce407101daa6000.js} +0 -0
  272. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-71a3bfb94280fc49.js → forms-9ee8cf14a93eaa4a.js} +0 -0
  273. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-42213855a0a8c209.js → configure-25a3add8e7982e43.js} +0 -0
  274. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-d547a1da0b74f00f.js → [id]-081f13526443e0a6.js} +0 -0
  275. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-a7de6f8409a76358.js → add-property-17fb474e458b63e7.js} +0 -0
  276. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-704fc28e61b17247.js → about-177919b4ccf8f660.js} +0 -0
  277. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-f0e9ee8756a65540.js → domains-26810d1ffedcd156.js} +0 -0
  278. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-a4771098466af1ed.js → email-templates-eb78b645d0c1d4ea.js} +0 -0
  279. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-8cff97fe57f42ed3.js → regulations-0a3aa951ef4a44ba.js} +0 -0
  280. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-b124cc24b930c9e1.js → new-69176abe09cf9b52.js} +0 -0
  281. /fides/ui-build/static/admin/_next/static/chunks/{webpack-3a61b934ba2fb620.js → webpack-abd3efcb23c0bb03.js} +0 -0
@@ -530,15 +530,11 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
530
530
 
531
531
  session = Session.object_session(privacy_request)
532
532
  masking_request = query_config.get_masking_request(session)
533
- rows_updated = 0
534
-
535
533
  if not masking_request:
536
- logger.info(
537
- "No masking request found for the '{}' collection in {}",
538
- self.current_collection_name,
539
- self.saas_config.fides_key, # type: ignore
534
+ raise Exception(
535
+ f"Either no masking request configured or no valid masking request for {node.address.collection}. "
536
+ f"Check that MASKING_STRICT env var is appropriately set"
540
537
  )
541
- return rows_updated
542
538
 
543
539
  self.set_saas_request_state(masking_request)
544
540
 
@@ -569,6 +565,7 @@ class SaaSConnector(BaseConnector[AuthenticatedClient], Contextualizable):
569
565
  cast(Optional[List[PostProcessorStrategy]], masking_request.postprocessors),
570
566
  )
571
567
 
568
+ rows_updated = 0
572
569
  client = self.create_client()
573
570
  for row in rows:
574
571
  try:
@@ -11,7 +11,7 @@ from jinja2 import Environment, FileSystemLoader
11
11
 
12
12
  from fides.api.models.privacy_request import PrivacyRequest
13
13
  from fides.api.schemas.policy import ActionType
14
- from fides.api.util.storage_util import StorageJSONEncoder
14
+ from fides.api.util.storage_util import storage_json_encoder
15
15
 
16
16
  DSR_DIRECTORY = Path(__file__).parent.resolve()
17
17
 
@@ -41,9 +41,7 @@ class DsrReportBuilder:
41
41
 
42
42
  # Jinja template environment initialization
43
43
  def pretty_print(value: str, indent: int = 4) -> str:
44
- return json.dumps(
45
- value, indent=indent, default=StorageJSONEncoder().default
46
- )
44
+ return json.dumps(value, indent=indent, default=storage_json_encoder)
47
45
 
48
46
  jinja2.filters.FILTERS["pretty_print"] = pretty_print
49
47
  self.template_loader = Environment(
@@ -1,4 +1,3 @@
1
- import time
2
1
  from datetime import datetime, timedelta
3
2
  from typing import Any, Dict, List, Optional, Set, Tuple
4
3
 
@@ -68,7 +67,6 @@ from fides.api.tasks import DatabaseTask, celery_app
68
67
  from fides.api.tasks.scheduled.scheduler import scheduler
69
68
  from fides.api.util.collection_util import Row
70
69
  from fides.api.util.logger import Pii, _log_exception, _log_warning
71
- from fides.api.util.logger_context_utils import LoggerContextKeys, log_context
72
70
  from fides.common.api.v1.urn_registry import (
73
71
  PRIVACY_REQUEST_TRANSFER_TO_PARENT,
74
72
  V1_URL_PREFIX,
@@ -202,11 +200,6 @@ def run_webhooks_and_report_status(
202
200
  return True
203
201
 
204
202
 
205
- @log_context(
206
- capture_args={
207
- "privacy_request_id": LoggerContextKeys.privacy_request_id,
208
- }
209
- )
210
203
  def upload_access_results( # pylint: disable=R0912
211
204
  session: Session,
212
205
  policy: Policy,
@@ -217,7 +210,6 @@ def upload_access_results( # pylint: disable=R0912
217
210
  fides_connector_datasets: Set[str],
218
211
  ) -> List[str]:
219
212
  """Process the data uploads after the access portion of the privacy request has completed"""
220
- start_time = time.time()
221
213
  download_urls: List[str] = []
222
214
  if not access_result:
223
215
  logger.info("No results returned for access request")
@@ -259,30 +251,12 @@ def upload_access_results( # pylint: disable=R0912
259
251
  )
260
252
  if download_url:
261
253
  download_urls.append(download_url)
262
- privacy_request.add_success_execution_log(
263
- session,
264
- connection_key=None,
265
- dataset_name="Access Package Upload",
266
- collection_name=None,
267
- message="Access Package Upload successful for privacy request.",
268
- action_type=ActionType.access,
269
- )
270
- logger.bind(
271
- time_taken=time.time() - start_time,
272
- ).info("Access Package Upload successful for privacy request.")
273
254
  except common_exceptions.StorageUploadError as exc:
274
- logger.bind(
275
- policy_key=policy.key,
276
- rule_key=rule.key,
277
- error=Pii(str(exc)),
278
- ).error("Error uploading subject access data for rule.")
279
- privacy_request.add_error_execution_log(
280
- session,
281
- connection_key=None,
282
- dataset_name="Access Package Upload",
283
- collection_name=None,
284
- message="Access Package Upload failed for privacy request.",
285
- action_type=ActionType.access,
255
+ logger.error(
256
+ "Error uploading subject access data for rule {} on policy {}: {}",
257
+ rule.key,
258
+ policy.key,
259
+ Pii(str(exc)),
286
260
  )
287
261
  privacy_request.status = PrivacyRequestStatus.error
288
262
  # Save the results we uploaded to the user for later retrieval
@@ -622,22 +596,19 @@ def run_privacy_request(
622
596
  # If dev mode, log traceback
623
597
  _log_exception(e, CONFIG.dev_mode)
624
598
  return
625
-
626
- # Only mark as complete if not in error state
627
- if privacy_request.status != PrivacyRequestStatus.error:
628
- privacy_request.finished_processing_at = datetime.utcnow()
629
- AuditLog.create(
630
- db=session,
631
- data={
632
- "user_id": "system",
633
- "privacy_request_id": privacy_request.id,
634
- "action": AuditLogAction.finished,
635
- "message": "",
636
- },
637
- )
638
- privacy_request.status = PrivacyRequestStatus.complete
639
- logger.info("Privacy request run completed.")
640
- privacy_request.save(db=session)
599
+ privacy_request.finished_processing_at = datetime.utcnow()
600
+ AuditLog.create(
601
+ db=session,
602
+ data={
603
+ "user_id": "system",
604
+ "privacy_request_id": privacy_request.id,
605
+ "action": AuditLogAction.finished,
606
+ "message": "",
607
+ },
608
+ )
609
+ privacy_request.status = PrivacyRequestStatus.complete
610
+ logger.info("Privacy request run completed.")
611
+ privacy_request.save(db=session)
641
612
 
642
613
 
643
614
  def initiate_privacy_request_completion_email(
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import IO, Any, Dict, Tuple, Union
3
+ from typing import IO, Any, Dict, Tuple
4
4
 
5
5
  from boto3.s3.transfer import TransferConfig
6
6
  from botocore.exceptions import ClientError, ParamValidationError
@@ -129,38 +129,25 @@ def generic_retrieve_from_s3(
129
129
  bucket_name: str,
130
130
  file_key: str,
131
131
  auth_method: str,
132
- get_content: bool = False,
133
- ) -> Tuple[int, Union[str, bytes]]:
132
+ ) -> Tuple[int, AnyHttpUrlString]:
134
133
  """
135
- Retrieves a file from S3 and returns its size and either a presigned URL or the actual content.
136
-
137
- Args:
138
- storage_secrets: Dictionary containing S3 credentials
139
- bucket_name: Name of the S3 bucket
140
- file_key: Key of the file in the bucket
141
- auth_method: Authentication method to use
142
- get_content: If True, returns the actual content instead of a presigned URL
134
+ Retrieves file metadata and generates a presigned URL for downloading an S3 object.
143
135
 
144
- Returns:
145
- Tuple containing (file_size, presigned_url_or_content)
136
+ :param storage_secrets: S3 storage secrets
137
+ :param bucket_name: Name of the S3 bucket
138
+ :param file_key: Key of the file in the bucket
139
+ :param auth_method: Authentication method for S3
140
+ :return: Tuple containing (file_size, presigned_url)
146
141
  """
147
142
  logger.info("Retrieving S3 object: {}", file_key)
148
- s3_client = get_s3_client(auth_method, storage_secrets)
149
143
 
144
+ s3_client = maybe_get_s3_client(auth_method, storage_secrets)
150
145
  try:
151
- if get_content:
152
- # Get the actual content
153
- response = s3_client.get_object(Bucket=bucket_name, Key=file_key)
154
- content = response["Body"].read()
155
- return response["ContentLength"], content
156
-
157
- # Get presigned URL
158
- presigned_url = create_presigned_url_for_s3(s3_client, bucket_name, file_key)
159
- # Get file size
160
- response = s3_client.head_object(Bucket=bucket_name, Key=file_key)
161
- return int(response["ContentLength"]), str(presigned_url)
162
- except ClientError as e:
163
- logger.error(f"Error retrieving file from S3: {e}")
146
+ get_allowed_file_type_or_raise(file_key)
147
+ file_size = get_file_size(s3_client, bucket_name, file_key)
148
+ return file_size, create_presigned_url_for_s3(s3_client, bucket_name, file_key)
149
+ except Exception as e:
150
+ logger.error("Encountered error while retrieving S3 object: {}", e)
164
151
  raise e
165
152
 
166
153
 
@@ -171,8 +158,7 @@ def generic_delete_from_s3(
171
158
  auth_method: str,
172
159
  ) -> None:
173
160
  """
174
- Deletes arbitrary data from s3. If file_key ends with a filename, deletes just that file.
175
- If file_key ends with a '/', deletes all objects with that prefix.
161
+ Deletes arbitrary data from s3
176
162
 
177
163
  :param storage_secrets: S3 storage secrets
178
164
  :param bucket_name: Name of the S3 bucket
@@ -183,17 +169,6 @@ def generic_delete_from_s3(
183
169
 
184
170
  s3_client = maybe_get_s3_client(auth_method, storage_secrets)
185
171
  try:
186
- # If the file_key ends with a '/', it's a folder prefix
187
- if file_key.endswith("/"):
188
- # List all objects with the prefix, handling pagination
189
- paginator = s3_client.get_paginator("list_objects_v2")
190
- for page in paginator.paginate(Bucket=bucket_name, Prefix=file_key):
191
- if "Contents" in page:
192
- for obj in page["Contents"]:
193
- s3_client.delete_object(Bucket=bucket_name, Key=obj["Key"])
194
- return
195
-
196
- # Delete single object
197
172
  s3_client.delete_object(Bucket=bucket_name, Key=file_key)
198
173
  except Exception as e:
199
174
  logger.error("Encountered error while deleting s3 object: {}", e)
@@ -11,7 +11,6 @@ from botocore.exceptions import ClientError, ParamValidationError
11
11
  from fideslang.validation import AnyHttpUrlString
12
12
  from loguru import logger
13
13
 
14
- from fides.api.common_exceptions import StorageUploadError
15
14
  from fides.api.cryptography.cryptographic_util import bytes_to_b64_str
16
15
  from fides.api.schemas.storage.storage import ResponseFormat, StorageSecrets
17
16
  from fides.api.service.privacy_request.dsr_package.dsr_report_builder import (
@@ -31,7 +30,7 @@ from fides.api.util.cache import get_cache, get_encryption_cache_key
31
30
  from fides.api.util.encryption.aes_gcm_encryption_scheme import (
32
31
  encrypt_to_bytes_verify_secrets_length,
33
32
  )
34
- from fides.api.util.storage_util import StorageJSONEncoder
33
+ from fides.api.util.storage_util import storage_json_encoder
35
34
  from fides.config import CONFIG
36
35
 
37
36
  if TYPE_CHECKING:
@@ -76,7 +75,7 @@ def write_to_in_memory_buffer(
76
75
  logger.debug("Writing data to in-memory buffer")
77
76
 
78
77
  if resp_format == ResponseFormat.json.value:
79
- json_str = json.dumps(data, indent=2, default=StorageJSONEncoder().default)
78
+ json_str = json.dumps(data, indent=2, default=storage_json_encoder)
80
79
  return BytesIO(
81
80
  encrypt_access_request_results(json_str, privacy_request.id).encode(
82
81
  CONFIG.security.encoding
@@ -161,9 +160,9 @@ def upload_to_s3( # pylint: disable=R0913
161
160
  logger.error(
162
161
  "Encountered error while uploading and generating link for s3 object: {}", e
163
162
  )
164
- raise StorageUploadError(f"Error uploading to S3: {e}")
163
+ raise e
165
164
  except ParamValidationError as e:
166
- raise StorageUploadError(f"The parameters you provided are incorrect: {e}")
165
+ raise ValueError(f"The parameters you provided are incorrect: {e}")
167
166
 
168
167
 
169
168
  def upload_to_gcs(
@@ -206,7 +205,7 @@ def upload_to_gcs(
206
205
  "Encountered error while uploading and generating link for Google Cloud Storage object: {}",
207
206
  e,
208
207
  )
209
- raise StorageUploadError(f"Error uploading to Google Cloud Storage: {e}")
208
+ raise e
210
209
 
211
210
 
212
211
  def upload_to_local(
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Any, Union
2
+ from typing import Any, Dict, Union
3
3
 
4
4
  from bson import ObjectId
5
5
  from pydantic import ValidationError
@@ -11,7 +11,6 @@ from fides.api.schemas.storage.storage import (
11
11
  StorageType,
12
12
  )
13
13
  from fides.api.schemas.storage.storage_secrets_docs_only import possible_storage_secrets
14
- from fides.api.util.custom_json_encoder import CustomJSONEncoder
15
14
 
16
15
 
17
16
  def get_schema_for_secrets(
@@ -49,15 +48,10 @@ def get_schema_for_secrets(
49
48
  raise ValueError(errors)
50
49
 
51
50
 
52
- class StorageJSONEncoder(CustomJSONEncoder):
53
- """
54
- A JSON encoder specifically for storage operations that maintains the original
55
- format for datetime and ObjectId while inheriting other functionality from CustomJSONEncoder.
56
- """
57
-
58
- def default(self, o: Any) -> Any:
59
- if isinstance(o, datetime):
60
- return o.strftime("%Y-%m-%dT%H:%M:%S")
61
- if isinstance(o, ObjectId):
62
- return {"$oid": str(o)}
63
- return super().default(o)
51
+ def storage_json_encoder(field: Any) -> Union[str, Dict[str, str]]:
52
+ """Specify str format for datetime objects"""
53
+ if isinstance(field, datetime):
54
+ return field.strftime("%Y-%m-%dT%H:%M:%S")
55
+ if isinstance(field, ObjectId):
56
+ return {"$oid": str(field)}
57
+ return field
@@ -37,7 +37,6 @@ EXEC = "exec"
37
37
  FIDES_TAXONOMY = "fides_taxonomy"
38
38
  GENERATE = "generate"
39
39
  INSTANTIATE = "instantiate"
40
- MANUAL_STEPS = "manual-steps"
41
40
  MASKING = "masking"
42
41
  MESSAGING = "messaging"
43
42
  ORGANIZATION = "organization"
@@ -52,7 +51,6 @@ PRIVACY_REQUEST_NOTIFICATIONS = "privacy-request-notifications"
52
51
  READ = "read"
53
52
  REGISTER = "register"
54
53
  RESET = "reset"
55
- RESPOND = "respond"
56
54
  RESUME = "resume"
57
55
  REVIEW = "review"
58
56
  RULE = "rule"
@@ -176,8 +174,6 @@ PRIVACY_PREFERENCE_HISTORY_READ = f"{PRIVACY_PREFERENCE_HISTORY}:{READ}"
176
174
  PRIVACY_REQUEST_CALLBACK_RESUME = f"{PRIVACY_REQUEST}:{RESUME}" # User has permission to restart a paused privacy request
177
175
  PRIVACY_REQUEST_CREATE = f"{PRIVACY_REQUEST}:{CREATE}"
178
176
  PRIVACY_REQUEST_DELETE = f"{PRIVACY_REQUEST}:{DELETE}"
179
- PRIVACY_REQUEST_MANUAL_STEPS_REVIEW = f"{PRIVACY_REQUEST}:{MANUAL_STEPS}:{REVIEW}"
180
- PRIVACY_REQUEST_MANUAL_STEPS_RESPOND = f"{PRIVACY_REQUEST}:{MANUAL_STEPS}:{RESPOND}"
181
177
  PRIVACY_REQUEST_NOTIFICATIONS_CREATE_OR_UPDATE = (
182
178
  f"{PRIVACY_REQUEST_NOTIFICATIONS}:{CREATE_OR_UPDATE}"
183
179
  )
@@ -316,8 +312,6 @@ SCOPE_DOCS = {
316
312
  PRIVACY_REQUEST_CALLBACK_RESUME: "Restart paused privacy requests",
317
313
  PRIVACY_REQUEST_READ_ACCESS_RESULTS: "Download access data for the privacy request",
318
314
  PRIVACY_REQUEST_DELETE: "Remove privacy requests",
319
- PRIVACY_REQUEST_MANUAL_STEPS_RESPOND: "Respond to manual steps for the privacy request",
320
- PRIVACY_REQUEST_MANUAL_STEPS_REVIEW: "Review manual steps for the privacy request",
321
315
  PRIVACY_REQUEST_NOTIFICATIONS_CREATE_OR_UPDATE: "",
322
316
  PRIVACY_REQUEST_NOTIFICATIONS_READ: "",
323
317
  PRIVACY_REQUEST_READ: "View privacy requests",
@@ -106,6 +106,7 @@ class ExecutionSettingsProxy(ConfigProxyBase):
106
106
  subject_identity_verification_required: bool
107
107
  disable_consent_identity_verification: bool
108
108
  require_manual_request_approval: bool
109
+ masking_strict: bool
109
110
 
110
111
  def __getattribute__(self, name: str) -> Any:
111
112
  """
@@ -11,6 +11,10 @@ ENV_PREFIX = "FIDES__EXECUTION__"
11
11
  class ExecutionSettings(FidesSettings):
12
12
  """Configuration settings for DSR execution."""
13
13
 
14
+ masking_strict: bool = Field(
15
+ default=True,
16
+ description="If set to True, only use UPDATE requests to mask data. If False, Fides will use any defined DELETE or GDPR DELETE endpoints to remove PII, which may extend beyond the specific data categories that configured in your execution policy.",
17
+ )
14
18
  privacy_request_delay_timeout: int = Field(
15
19
  default=3600,
16
20
  description="The amount of time to wait for actions which delay privacy requests (e.g., pre- and post-processing webhooks).",
File without changes
@@ -0,0 +1,202 @@
1
+ from functools import wraps
2
+ from typing import Any, Callable, Optional, TypeVar
3
+
4
+ from fastapi import HTTPException
5
+ from loguru import logger
6
+ from starlette.status import HTTP_400_BAD_REQUEST, HTTP_422_UNPROCESSABLE_ENTITY
7
+
8
+ T = TypeVar("T")
9
+
10
+
11
+ class ErrorHandler:
12
+ """Utility class for handling errors consistently throughout the application.
13
+
14
+ Usage Examples:
15
+ -----------------------------------------------------------------------------
16
+
17
+ 1. Basic Validation:
18
+ ```python
19
+ from fastapi import FastAPI
20
+ from fides.service.error_handling.error_handler import ErrorHandler
21
+
22
+ app = FastAPI()
23
+
24
+ @app.post("/users")
25
+ def create_user(age: int):
26
+ # Simple validation
27
+ ErrorHandler.validate(age >= 18, "User must be 18 or older")
28
+ return {"message": "User created"}
29
+
30
+ @app.get("/items/{item_id}")
31
+ def get_item(item_id: str):
32
+ # Direct error raising
33
+ if not item_id:
34
+ ErrorHandler.raise_error("Item ID is required", status_code=400)
35
+ return {"item_id": item_id}
36
+ ```
37
+
38
+ 2. Exception Handling Decorator:
39
+ ```python
40
+ @app.post("/orders")
41
+ @ErrorHandler.handle_exceptions("Failed to create order")
42
+ def create_order(order_data: dict):
43
+ if not order_data.get("items"):
44
+ raise ValueError("Order must contain items")
45
+ # Process order...
46
+ return {"message": "Order created"}
47
+
48
+ @app.get("/products/{product_id}")
49
+ @ErrorHandler.handle_exceptions("Failed to fetch product", status_code=404)
50
+ def get_product(product_id: str):
51
+ product = database.get_product(product_id)
52
+ if not product:
53
+ raise ValueError("Product not found")
54
+ return product
55
+ ```
56
+
57
+ 3. Complex Validation:
58
+ ```python
59
+ @app.post("/payments")
60
+ @ErrorHandler.handle_exceptions("Payment processing failed")
61
+ def process_payment(payment: dict):
62
+ # Validate amount
63
+ ErrorHandler.validate(
64
+ payment.get("amount", 0) > 0,
65
+ "Payment amount must be positive",
66
+ HTTP_400_BAD_REQUEST
67
+ )
68
+
69
+ # Validate currency
70
+ ErrorHandler.validate(
71
+ payment.get("currency") in ["USD", "EUR"],
72
+ "Invalid currency",
73
+ HTTP_400_BAD_REQUEST,
74
+ "Unsupported currency provided" # Optional log message
75
+ )
76
+
77
+ # Custom error for insufficient funds
78
+ if payment.get("amount", 0) > get_balance():
79
+ ErrorHandler.raise_error(
80
+ "Insufficient funds",
81
+ status_code=HTTP_400_BAD_REQUEST,
82
+ log_message="User attempted payment exceeding balance"
83
+ )
84
+
85
+ return {"status": "payment processed"}
86
+ ```
87
+
88
+ 4. Error Logging:
89
+ ```python
90
+ @app.post("/imports")
91
+ @ErrorHandler.handle_exceptions("Import failed")
92
+ def import_data(data: dict):
93
+ try:
94
+ process_import(data)
95
+ except Exception as e:
96
+ # Log error with custom message before raising
97
+ ErrorHandler.raise_error(
98
+ "Import failed: invalid format",
99
+ status_code=400,
100
+ log_message=f"Import failed with error: {str(e)}"
101
+ )
102
+ return {"status": "import complete"}
103
+ ```
104
+
105
+ Key Features:
106
+ - Simple validation with custom error messages
107
+ - Consistent error handling across endpoints
108
+ - Built-in error logging
109
+ - HTTP status code customization
110
+ - Exception handling decorator for common patterns
111
+ """
112
+
113
+ @staticmethod
114
+ def raise_error(
115
+ detail: str,
116
+ status_code: int = HTTP_422_UNPROCESSABLE_ENTITY,
117
+ log_message: Optional[str] = None,
118
+ ) -> None:
119
+ """Raise an HTTPException with consistent logging.
120
+
121
+ Args:
122
+ detail: Error message to include in the HTTPException
123
+ status_code: HTTP status code to use (default: 422)
124
+ log_message: Optional message to log before raising the exception
125
+
126
+ Raises:
127
+ HTTPException: Always raised with the provided details
128
+ """
129
+ if log_message:
130
+ logger.error(log_message)
131
+ raise HTTPException(status_code=status_code, detail=detail)
132
+
133
+ @staticmethod
134
+ def validate(
135
+ condition: bool,
136
+ detail: str,
137
+ status_code: int = HTTP_400_BAD_REQUEST,
138
+ log_message: Optional[str] = None,
139
+ ) -> None:
140
+ """Validate a condition and raise an error if it's False.
141
+
142
+ Args:
143
+ condition: The condition to check
144
+ detail: Error message if condition is False
145
+ status_code: HTTP status code to use if condition is False
146
+ log_message: Optional message to log before raising the exception
147
+
148
+ Raises:
149
+ HTTPException: If the condition is False
150
+ """
151
+ if not condition:
152
+ ErrorHandler.raise_error(detail, status_code, log_message)
153
+
154
+ @classmethod
155
+ def handle_exceptions(
156
+ cls, error_message: str, status_code: int = HTTP_422_UNPROCESSABLE_ENTITY
157
+ ) -> Callable[[Callable[..., T]], Callable[..., T]]:
158
+ """Decorator to handle exceptions consistently.
159
+
160
+ Args:
161
+ error_message: Base error message to use
162
+ status_code: HTTP status code to use for unexpected errors
163
+
164
+ Returns:
165
+ Callable: The decorated function that handles exceptions
166
+
167
+ Note:
168
+ This decorator will catch specific exceptions and convert them to HTTPExceptions.
169
+ HTTPExceptions are re-raised as is, while other exceptions are wrapped with
170
+ additional context.
171
+ """
172
+
173
+ def decorator(func: Callable[..., T]) -> Callable[..., T]:
174
+ @wraps(func)
175
+ def wrapper(*args: Any, **kwargs: Any) -> Optional[T]:
176
+ try:
177
+ return func(*args, **kwargs)
178
+ except HTTPException:
179
+ # Re-raise HTTP exceptions without modification
180
+ raise
181
+ except (ValueError, TypeError, AttributeError, KeyError) as e:
182
+ # Handle common validation and data access errors
183
+ cls.raise_error(
184
+ f"{error_message}: {str(e)}",
185
+ status_code,
186
+ f"{error_message}: {e}",
187
+ )
188
+ except Exception as e: # pylint: disable=broad-except
189
+ # Log unexpected errors with full context but present a sanitized message
190
+ logger.error(
191
+ f"Unexpected error in {func.__name__}: {str(e)}", exc_info=True
192
+ )
193
+ cls.raise_error(
194
+ f"{error_message}: An unexpected error occurred",
195
+ status_code,
196
+ f"{error_message}: Unexpected {type(e).__name__}",
197
+ )
198
+ return None # This line is never reached but satisfies the return type checker
199
+
200
+ return wrapper # type: ignore[return-value]
201
+
202
+ return decorator
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/1b227ba7eabbfe2f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1b227ba7eabbfe2f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3a61b934ba2fb620.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-f1add6386651ca3d.js" defer=""></script><script src="/_next/static/chunks/pages/404-e868487119cd14fc.js" defer=""></script><script src="/_next/static/D-B-G-FV05_6iwXWBGS0J/_buildManifest.js" defer=""></script><script src="/_next/static/D-B-G-FV05_6iwXWBGS0J/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"D-B-G-FV05_6iwXWBGS0J","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/c0c2eb63ad3e7390.css" as="style"/><link rel="stylesheet" href="/_next/static/css/c0c2eb63ad3e7390.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-abd3efcb23c0bb03.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-371b155655c83a1e.js" defer=""></script><script src="/_next/static/chunks/pages/404-c00773c4c6e930af.js" defer=""></script><script src="/_next/static/K1_4-1GhwfL7h4fYYQBvB/_buildManifest.js" defer=""></script><script src="/_next/static/K1_4-1GhwfL7h4fYYQBvB/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"K1_4-1GhwfL7h4fYYQBvB","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(s,e,t,a,c,n,i,d,o,r,p,u,g,f,m,b,j,k,h,y,l,v,I,F,x,_,U,w,q,N,A,S,B,C,z,D,E,L,M,T,P,G,H,J,K,O,Q,R,V,W){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[_,"static/chunks/pages/index-868b60407eae35da.js"],"/404":["static/chunks/pages/404-c00773c4c6e930af.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[_,"static/chunks/pages/add-systems-a69f8946466471aa.js"],"/add-systems/manual":[s,e,a,c,n,b,t,o,u,j,y,U,w,"static/chunks/pages/add-systems/manual-7d789458fb296270.js"],"/add-systems/multiple":[s,e,t,u,l,q,"static/chunks/pages/add-systems/multiple-90320455052466cd.js"],"/consent":["static/chunks/pages/consent-7797e367dd946a18.js"],"/consent/configure":[s,e,t,u,l,"static/chunks/pages/consent/configure-49b9f1b56262dfdc.js"],"/consent/configure/add-vendors":[s,e,t,u,l,q,"static/chunks/pages/consent/configure/add-vendors-bcc515a765c0119d.js"],"/consent/privacy-experience":[s,e,b,t,N,"static/chunks/pages/consent/privacy-experience-5ef03041a530b0e2.js"],"/consent/privacy-experience/new":[a,c,g,A,i,k,S,"static/chunks/pages/consent/privacy-experience/new-7f38473ce267348a.js"],"/consent/privacy-experience/[id]":[a,c,g,A,i,k,S,"static/chunks/pages/consent/privacy-experience/[id]-d4137bb7fdc1ac6e.js"],"/consent/privacy-notices":[s,e,t,N,"static/chunks/pages/consent/privacy-notices-12f3ba4609bc2ba5.js"],"/consent/privacy-notices/new":[a,c,g,B,i,k,C,"static/chunks/pages/consent/privacy-notices/new-946ce1a2aa1500d4.js"],"/consent/privacy-notices/[id]":[a,c,g,B,i,k,C,"static/chunks/pages/consent/privacy-notices/[id]-a5a95ac63b1ce206.js"],"/consent/properties":[s,e,t,z,"static/chunks/pages/consent/properties-ffa15d7ff64a9f05.js"],"/consent/reporting":[s,e,a,t,"static/chunks/pages/consent/reporting-b959d61c2a3682b3.js"],"/data-catalog":[s,e,a,c,n,t,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-e950d41b75f86c85.js"],"/data-catalog/[systemId]/projects":[s,e,a,c,n,t,f,d,"static/chunks/pages/data-catalog/[systemId]/projects-79f8e613827c55c1.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[s,e,t,D,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-ecf23116a845188a.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,e,a,c,n,t,r,f,E,d,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-7ddf45ffd49533b0.js"],"/data-catalog/[systemId]/resources":[s,e,t,D,"static/chunks/pages/data-catalog/[systemId]/resources-1f033ca5a0702018.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,e,a,c,n,t,r,f,E,d,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-ed213bc1b7041aa2.js"],"/data-discovery/action-center":[s,e,t,"static/chunks/pages/data-discovery/action-center-4b820a3173f35504.js"],"/data-discovery/action-center/[monitorId]":[s,e,a,c,n,t,L,v,"static/chunks/pages/data-discovery/action-center/[monitorId]-90f1975f559fff3e.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,e,a,c,n,t,y,L,"static/css/81642473e38c67a5.css","static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-84ead584a88ab662.js"],"/data-discovery/activity":[s,e,t,"static/chunks/pages/data-discovery/activity-beedbc38ee2b0094.js"],"/data-discovery/detection":[s,e,t,r,h,M,"static/chunks/pages/data-discovery/detection-29fd0d5a73f13a00.js"],"/data-discovery/detection/[resourceUrn]":[s,e,t,r,h,M,"static/chunks/pages/data-discovery/detection/[resourceUrn]-f38b3ef885a29ea6.js"],"/data-discovery/discovery":[s,e,a,c,n,t,r,f,h,T,d,"static/chunks/pages/data-discovery/discovery-c58333981b1522c9.js"],"/data-discovery/discovery/[resourceUrn]":[s,e,a,c,n,t,r,f,h,T,d,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-9a80241f1028c470.js"],"/datamap":[s,e,"static/chunks/255-7db55b0e3a0f9dea.js",t,o,j,P,"static/chunks/pages/datamap-2d6f95b2769a0936.js"],"/dataset":[s,e,p,t,m,"static/chunks/pages/dataset-1f0c4e2e5d0b5bf6.js"],"/dataset/new":[p,m,"static/chunks/pages/dataset/new-1e26702b1a7e0e12.js"],"/dataset/[datasetId]":[s,e,"static/chunks/9729-fcf6ff4e3534e4a8.js",t,I,"static/chunks/pages/dataset/[datasetId]-b8dca4298b5bb085.js"],"/dataset/[datasetId]/[collectionName]":[s,e,a,c,n,F,t,I,d,"static/chunks/pages/dataset/[datasetId]/[collectionName]-8b5afe14cf42a4ac.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,e,a,c,n,F,t,I,d,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-3536ae978741b659.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-9db81467fa254996.js"],"/datastore-connection/new":[p,b,m,G,"static/chunks/pages/datastore-connection/new-c39e8e2269883796.js"],"/datastore-connection/[id]":[p,m,G,"static/chunks/pages/datastore-connection/[id]-ebf54ea9874c59ae.js"],"/fides-js-docs":["static/chunks/2fbcc6de-a6c61724c327e9fa.js","static/chunks/e3251fe7-5777b5d778e6fffa.js",a,c,n,p,F,H,"static/css/ab65b8cc3144bfc8.css","static/chunks/905-8ab919e7b274ed50.js","static/chunks/pages/fides-js-docs-80b241bf6cddb72e.js"],"/integrations":[a,c,n,"static/chunks/6834-dcda0a8ed484775e.js",J,"static/chunks/pages/integrations-b89b9f68ccc69c1b.js"],"/integrations/[id]":[s,e,a,c,n,t,J,"static/css/92c81f666644c594.css","static/chunks/pages/integrations/[id]-ebc41649161f7fb9.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,e,a,c,n,t,"static/chunks/pages/messaging-5f41afae411cd8a4.js"],"/messaging/add-template":[i,K,"static/chunks/pages/messaging/add-template-ca22869201847ccc.js"],"/messaging/[id]":[i,K,"static/chunks/pages/messaging/[id]-22812f08e81bd4f3.js"],"/poc/ant-components":["static/chunks/pages/poc/ant-components-173bd3ad45ea61c6.js"],"/poc/form-experiments/AntForm":["static/chunks/pages/poc/form-experiments/AntForm-4dfe984ad80927cd.js"],"/poc/form-experiments/FormikAntFormItem":["static/chunks/pages/poc/form-experiments/FormikAntFormItem-f790e1ea5cbc26c0.js"],"/poc/form-experiments/FormikControlled":["static/chunks/pages/poc/form-experiments/FormikControlled-af9e682ec620e990.js"],"/poc/form-experiments/FormikField":["static/chunks/pages/poc/form-experiments/FormikField-6ce407101daa6000.js"],"/poc/form-experiments/FormikSpreadField":[O,"static/chunks/pages/poc/form-experiments/FormikSpreadField-af097d661f6abcf4.js"],"/poc/forms":[O,"static/chunks/pages/poc/forms-9ee8cf14a93eaa4a.js"],"/privacy-requests":[s,e,t,Q,"static/chunks/pages/privacy-requests-b3384299166bcd1e.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-25a3add8e7982e43.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-07ef58b04404479d.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-595ed9f6ca438020.js"],"/privacy-requests/[id]":[a,c,n,Q,"static/css/b89fc4b36b501cf6.css","static/chunks/pages/privacy-requests/[id]-928430cd40c35ef2.js"],"/properties":[s,e,t,z,"static/chunks/pages/properties-f00530710b699afd.js"],"/properties/add-property":[i,R,"static/chunks/pages/properties/add-property-17fb474e458b63e7.js"],"/properties/[id]":[i,R,"static/chunks/pages/properties/[id]-081f13526443e0a6.js"],"/reporting/datamap":[s,e,a,c,n,H,t,o,j,P,"static/chunks/pages/reporting/datamap-6a6016708efb5f4f.js"],"/settings/about":["static/chunks/pages/settings/about-177919b4ccf8f660.js"],"/settings/consent":["static/chunks/pages/settings/consent-0f2daeec241bd1a2.js"],"/settings/consent/[configuration_id]/[purpose_id]":[s,e,t,"static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-ba15c12c89ee10f8.js"],"/settings/custom-fields":[s,e,t,o,"static/chunks/pages/settings/custom-fields-0401208a3128fa4d.js"],"/settings/domain-records":[s,e,t,"static/chunks/pages/settings/domain-records-0daa256958675a23.js"],"/settings/domains":["static/chunks/pages/settings/domains-26810d1ffedcd156.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-eb78b645d0c1d4ea.js"],"/settings/locations":[s,V,v,"static/chunks/pages/settings/locations-4fbab6716326060d.js"],"/settings/organization":["static/chunks/pages/settings/organization-9404a6b0b2951992.js"],"/settings/regulations":[s,V,v,"static/chunks/pages/settings/regulations-0a3aa951ef4a44ba.js"],"/systems":[s,e,t,"static/chunks/pages/systems-ae591953b24e2fc9.js"],"/systems/configure/[id]":[s,e,a,c,n,b,t,o,u,j,y,U,w,"static/chunks/pages/systems/configure/[id]-b03403fed4dd8805.js"],"/systems/configure/[id]/test-datasets":[p,m,"static/chunks/pages/systems/configure/[id]/test-datasets-48be14ad09ed4133.js"],"/taxonomy":["static/chunks/678d4732-50255cc09048e643.js",a,c,n,g,"static/chunks/570-c99f07161bd339cd.js",o,"static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-913efe5371344de6.js"],"/user-management":[x,"static/chunks/pages/user-management-c0b2113b44f46112.js"],"/user-management/new":[x,W,"static/chunks/pages/user-management/new-69176abe09cf9b52.js"],"/user-management/profile/[id]":[x,W,"static/chunks/pages/user-management/profile/[id]-dc11ba29dbd4708b.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/fides-js-docs","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/poc/ant-components","/poc/form-experiments/AntForm","/poc/form-experiments/FormikAntFormItem","/poc/form-experiments/FormikControlled","/poc/form-experiments/FormikField","/poc/form-experiments/FormikSpreadField","/poc/forms","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/consent","/settings/consent/[configuration_id]/[purpose_id]","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/c78d26b1-88a3e1bacb2a03c2.js","static/chunks/6060-cb1ab5be7067bf7b.js","static/chunks/4481-8398edf74aabb8ea.js","static/chunks/2858-0b44609b6be7850b.js","static/chunks/2866-a73888c17a195cbe.js","static/chunks/9278-9b1b5970f0702668.js","static/chunks/69-dc52e39d26a4ad14.js","static/css/d2d4e9a6923e6730.css","static/chunks/7980-e17dda2f50ec76b8.js","static/chunks/2310-0d63c66c2685e83c.js","static/chunks/6527-0eed08abe252a918.js","static/chunks/355-e4340980d72b4faa.js","static/chunks/4294-5b3aa9d605217915.js","static/chunks/1099-98458e8e9ff67508.js","static/chunks/9327-a25347d72bfbe680.js","static/chunks/5277-e8a036319456127f.js","static/chunks/8499-34a34015c91fc38b.js","static/chunks/6277-c35c8cc806f7571f.js","static/chunks/9494-0df032fe6ee531a5.js","static/chunks/3426-e49cb4766324b2dd.js","static/chunks/4723-4c3c7a375e998c15.js","static/css/eb46b504bb5d980d.css","static/chunks/5487-62955c11bab63734.js","static/chunks/8702-d1c8296f9f6afc10.js","static/chunks/3513-87b54d931698986f.js","static/css/972dc7eef106ee7c.css","static/chunks/5626-1b636798faad78e1.js","static/css/92fc10cc7ed1aba3.css","static/chunks/5826-ce34f25ac2eeb807.js","static/chunks/6853-0cee00c9da26a40e.js","static/chunks/9014-eeae6f581158e645.js","static/chunks/1817-721fdeb29c07c6be.js","static/chunks/3615-5e2d062d684b8fa1.js","static/chunks/6954-d02d474ba30756b2.js","static/chunks/79-e5884e6878fc1bbb.js","static/chunks/3872-6b828cb00fb2ce93.js","static/chunks/3119-e441b14cdab4320e.js","static/chunks/1327-92a38135ee8d55ec.js","static/chunks/5683-44966a05fa5ad566.js","static/chunks/1904-7e5354990377a849.js","static/chunks/5258-e000d07844eccf7e.js","static/chunks/9767-74320abc2e9a4550.js","static/chunks/9187-851756440f79cd75.js","static/chunks/5973-56d90405c3616068.js","static/chunks/1100-4106d99f5e1ebd75.js","static/chunks/2921-ca04a0476e2e56c5.js","static/chunks/8433-a77c2cd1c1a6887e.js","static/chunks/4060-9593a3f98e600487.js","static/chunks/3505-e58b93f9c1cbdcad.js","static/chunks/4121-5c3af879cdd8b3be.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();