ethyca-fides 2.62.1rc0__py2.py3-none-any.whl → 2.63.0__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 (358) hide show
  1. {ethyca_fides-2.62.1rc0.dist-info → ethyca_fides-2.63.0.dist-info}/METADATA +2 -1
  2. {ethyca_fides-2.62.1rc0.dist-info → ethyca_fides-2.63.0.dist-info}/RECORD +250 -238
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/2263583b0e44_add_shared_monitor_config.py +82 -0
  5. fides/api/alembic/migrations/versions/440a5b9a3493_add_fides_user_respondent_email_.py +80 -0
  6. fides/api/alembic/migrations/versions/5474a47c77da_create_staged_resource_ancestor_link_table.py +72 -0
  7. fides/api/alembic/migrations/versions/bf713b5a021d_staged_resource_ancestor_link_data_.py +259 -0
  8. fides/api/alembic/migrations/versions/c586a56c25e7_remove_child_diff_statuses.py +40 -0
  9. fides/api/api/v1/endpoints/privacy_request_endpoints.py +2 -2
  10. fides/api/db/base.py +3 -0
  11. fides/api/main.py +4 -1
  12. fides/api/migrations/post_upgrade_index_creation.py +269 -0
  13. fides/api/models/attachment.py +117 -10
  14. fides/api/models/audit_log.py +0 -3
  15. fides/api/models/detection_discovery.py +189 -24
  16. fides/api/models/fides_user.py +51 -4
  17. fides/api/models/fides_user_permissions.py +25 -7
  18. fides/api/models/fides_user_respondent_email_verification.py +112 -0
  19. fides/api/models/privacy_request/privacy_request.py +40 -1
  20. fides/api/oauth/roles.py +19 -0
  21. fides/api/service/connectors/query_configs/saas_query_config.py +3 -8
  22. fides/api/service/connectors/saas_connector.py +7 -4
  23. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +4 -2
  24. fides/api/service/privacy_request/request_runner_service.py +47 -18
  25. fides/api/service/privacy_request/request_service.py +4 -15
  26. fides/api/service/storage/s3.py +40 -15
  27. fides/api/tasks/storage.py +6 -5
  28. fides/api/util/lock.py +44 -0
  29. fides/api/util/storage_util.py +14 -8
  30. fides/common/api/scope_registry.py +6 -0
  31. fides/config/config_proxy.py +0 -1
  32. fides/config/execution_settings.py +0 -4
  33. fides/ui-build/static/admin/404.html +1 -1
  34. fides/ui-build/static/admin/_next/static/chunks/1099-667e84655846e78c.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/1100-0b01f500b1eaf60d.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{1817-721fdeb29c07c6be.js → 1817-951f58ddd5d46081.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{1904-7e5354990377a849.js → 1904-361e37a5811ed7fc.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/2310-744354001d01f366.js +1 -0
  39. fides/ui-build/static/admin/_next/static/chunks/2921-49af55ad7c631c93.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/3119-e36ae5071c8f27a5.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/3505-113f9c95d34b7aae.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/3513-5c2d412a84a78971.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/3662-f6a1ddca5ee42076.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/3872-45cc725e241211f0.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/3923-b4f701ada3ef0ee0.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/401-7e800aed05537126.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/4060-90a52a9afc655bfc.js +1 -0
  50. fides/ui-build/static/admin/_next/static/chunks/4121-66b0e00d5e7ae817.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/4132-9b1731bfec6ee537.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/4481-7f6710c928bb0cb0.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/5258-2079138c8cc34f6c.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/5404-2694509cf5fa96da.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/5487-2cbd8d2169eb2a65.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/5683-37137111b3e769fb.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/6202-081545c7822d09af.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/6277-459e054b2702c60e.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/641-7e4eef3222cbda70.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/{6853-0cee00c9da26a40e.js → 6853-688df0b88fe65fd5.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/69-00cba94689b9e740.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/6954-4e313b4599b8763d.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/7553-08bc3d9f66695111.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/79-fc548561beed136f.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/796-d6586308ed44334b.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/7980-736f9fd1e749ddd2.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/8032-74d94f7bd5b81c89.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/8433-51870336908fb253.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/8499-1fd392d0be9e8ee4.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/9033-fdd87182c15b91e2.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/9327-6a53461c9764b16f.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/{9392.bfca299d4f39a9e0.js → 9392.81edc11e3a175275.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/9494-1ffb888b95289891.js +1 -0
  75. fides/ui-build/static/admin/_next/static/chunks/9676.61cf5f6d6a083175.js +1 -0
  76. fides/ui-build/static/admin/_next/static/chunks/9767-afd674014a1d1152.js +1 -0
  77. fides/ui-build/static/admin/_next/static/chunks/pages/404-ec04f826f3dd79ea.js +1 -0
  78. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-371b155655c83a1e.js → _app-33bc23b79bffe07c.js} +69 -69
  79. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-1bec086d567aacff.js +1 -0
  80. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-f68bf100e4e60e88.js +1 -0
  81. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-effde5cfe49de55f.js +1 -0
  82. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-ec95ed8cb0712828.js +1 -0
  83. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-4cc195e15e0c3cc8.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-be8972c79fb39705.js +1 -0
  85. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-7f38473ce267348a.js → new-a0039f216fb3eb93.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-ccf96207de3b74ea.js +1 -0
  87. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-b9823cc008372cee.js +1 -0
  88. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-373f5772ab41bc93.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-b9beeee1bde5ca79.js +1 -0
  90. fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-6ab3a5baafebd199.js +1 -0
  91. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-8562790ae07f17c9.js +1 -0
  92. fides/ui-build/static/admin/_next/static/chunks/pages/consent-42d4d2d6e0253671.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-7ddf45ffd49533b0.js → [resourceUrn]-18e3faf7963962e4.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-9d1df6d890671b0c.js +1 -0
  95. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-7eb08af333baaa8e.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-ed213bc1b7041aa2.js → [resourceUrn]-7320524a47104798.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-1f033ca5a0702018.js → resources-51d99174c8006eb5.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-bb57eed84f59a932.js +1 -0
  99. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-47eb34aef3e31ac6.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-76cefefc53e84c7f.js +1 -0
  101. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9d8e84a8b4bf568d.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-c3eaadd88a2e6caa.js +1 -0
  103. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-f38b3ef885a29ea6.js → [resourceUrn]-4c526db0c30c488a.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-29fd0d5a73f13a00.js → detection-6f27dbb7c8edc69d.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-9a80241f1028c470.js → [resourceUrn]-562d2b8ae90dd1f0.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-c58333981b1522c9.js → discovery-fe7f51502eda57c9.js} +1 -1
  107. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-db45aa864e9dda8a.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-d5cfdebc74654337.js +1 -0
  109. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-618b89228f83435e.js +1 -0
  110. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-12fc86f15a4c764e.js +1 -0
  111. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-c23d18a9b56c2e3c.js +1 -0
  112. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-e3b2d8e3980ab093.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-6e27257eccf65f01.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-bbac1f624424282d.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-84eb56f5a07bdf4f.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/index-773182b5e35d0045.js +1 -0
  117. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-eb28c927da5bd653.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-781808bca01f8048.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-b51bee8680d66b20.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-1de479533f733fbd.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-7dc295b3ed3d2224.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-f64dac3392f5ded7.js +1 -0
  123. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-eb020bfac4bee532.js +1 -0
  124. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-0bd62e28b539e114.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-936877004113c2a6.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-6416f01524482af9.js +1 -0
  127. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-3f4e1313d1f2969b.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-1db7a54437db7db0.js +1 -0
  129. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-64236fd0141414fd.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-8cab04871908cfeb.js +1 -0
  131. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-150d40428245ee0c.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b6c876dceb16ad1b.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-20cdb2c8a03deae1.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-54bcc875592d1fb9.js +1 -0
  135. fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-644dc669b508a79a.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/pages/properties-9a88220d03e7e02f.js +1 -0
  137. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-70dc1081df37ea69.js +1 -0
  138. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-3c71b4dbcb6fd6c9.js +1 -0
  139. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-7cb16e0000dd16c9.js +1 -0
  140. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-a18d8f12ee8dcf5d.js +1 -0
  141. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-dc220e116ad5c09e.js +1 -0
  142. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-55ddc5f25b86f28e.js +1 -0
  143. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-5ca7decded228bc8.js +1 -0
  144. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-a6fafa1be2834c40.js +1 -0
  145. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-e633750d2b45ddd6.js +1 -0
  146. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-4fbab6716326060d.js → locations-3948686cbd372969.js} +1 -1
  147. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-04ece499c22d23f4.js +1 -0
  148. fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-7752305084280cca.js +1 -0
  149. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9e5f9066be6f218d.js +1 -0
  150. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-86de9e6d72098e45.js +1 -0
  151. fides/ui-build/static/admin/_next/static/chunks/pages/systems-cac52e6c3abf6a15.js +1 -0
  152. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-60d5930b6855679b.js +1 -0
  153. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-b0f4c34752d32c73.js +1 -0
  154. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-c0b2113b44f46112.js → user-management-7dee83dd6d9292aa.js} +1 -1
  155. fides/ui-build/static/admin/_next/static/chunks/{webpack-abd3efcb23c0bb03.js → webpack-8457bad7859c44f0.js} +1 -1
  156. fides/ui-build/static/admin/_next/static/css/1fdf5c593349dbc6.css +1 -0
  157. fides/ui-build/static/admin/_next/static/css/5ded47c57dae5baf.css +1 -0
  158. fides/ui-build/static/admin/_next/static/css/e458b5f1afdbb7fc.css +1 -0
  159. fides/ui-build/static/admin/_next/static/lb6RRZ8JumokYwsENumlw/_buildManifest.js +1 -0
  160. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  161. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  162. fides/ui-build/static/admin/add-systems.html +1 -1
  163. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  164. fides/ui-build/static/admin/consent/configure.html +1 -1
  165. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  166. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  167. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  168. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  169. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  170. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  171. fides/ui-build/static/admin/consent/properties.html +1 -1
  172. fides/ui-build/static/admin/consent/reporting.html +1 -1
  173. fides/ui-build/static/admin/consent.html +1 -1
  174. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  175. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  176. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  177. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  178. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  179. fides/ui-build/static/admin/data-catalog.html +1 -1
  180. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  181. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  182. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  183. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  184. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  185. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  186. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  187. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  188. fides/ui-build/static/admin/datamap.html +1 -1
  189. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  190. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  191. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  192. fides/ui-build/static/admin/dataset/new.html +1 -1
  193. fides/ui-build/static/admin/dataset.html +1 -1
  194. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  195. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  196. fides/ui-build/static/admin/datastore-connection.html +1 -1
  197. fides/ui-build/static/admin/index.html +1 -1
  198. fides/ui-build/static/admin/integrations/[id].html +1 -1
  199. fides/ui-build/static/admin/integrations.html +1 -1
  200. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  201. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  202. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  203. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  204. fides/ui-build/static/admin/lib/fides.js +2 -2
  205. fides/ui-build/static/admin/login/[provider].html +1 -1
  206. fides/ui-build/static/admin/login.html +1 -1
  207. fides/ui-build/static/admin/messaging/[id].html +1 -1
  208. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  209. fides/ui-build/static/admin/messaging.html +1 -1
  210. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  211. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  212. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  213. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  214. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  215. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  216. fides/ui-build/static/admin/poc/forms.html +1 -1
  217. fides/ui-build/static/admin/poc/table-migration.html +1 -0
  218. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  219. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  220. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  221. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  222. fides/ui-build/static/admin/privacy-requests.html +1 -1
  223. fides/ui-build/static/admin/properties/[id].html +1 -1
  224. fides/ui-build/static/admin/properties/add-property.html +1 -1
  225. fides/ui-build/static/admin/properties.html +1 -1
  226. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  227. fides/ui-build/static/admin/settings/about/alpha.html +1 -0
  228. fides/ui-build/static/admin/settings/about.html +1 -1
  229. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  230. fides/ui-build/static/admin/settings/consent.html +1 -1
  231. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  232. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  233. fides/ui-build/static/admin/settings/domains.html +1 -1
  234. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  235. fides/ui-build/static/admin/settings/locations.html +1 -1
  236. fides/ui-build/static/admin/settings/organization.html +1 -1
  237. fides/ui-build/static/admin/settings/regulations.html +1 -1
  238. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  239. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  240. fides/ui-build/static/admin/systems.html +1 -1
  241. fides/ui-build/static/admin/taxonomy.html +1 -1
  242. fides/ui-build/static/admin/user-management/new.html +1 -1
  243. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  244. fides/ui-build/static/admin/user-management.html +1 -1
  245. fides/service/error_handling/__init__.py +0 -0
  246. fides/service/error_handling/error_handler.py +0 -202
  247. fides/ui-build/static/admin/_next/static/K1_4-1GhwfL7h4fYYQBvB/_buildManifest.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/1099-98458e8e9ff67508.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/1100-4106d99f5e1ebd75.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/1327-92a38135ee8d55ec.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/2310-0d63c66c2685e83c.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/2921-ca04a0476e2e56c5.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/3119-e441b14cdab4320e.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/3426-e49cb4766324b2dd.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/3505-e58b93f9c1cbdcad.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/3513-87b54d931698986f.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/355-e4340980d72b4faa.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/3872-6b828cb00fb2ce93.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/4060-9593a3f98e600487.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/4121-5c3af879cdd8b3be.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/4294-5b3aa9d605217915.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/4481-8398edf74aabb8ea.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/4723-4c3c7a375e998c15.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/5258-e000d07844eccf7e.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/5487-62955c11bab63734.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/5626-1b636798faad78e1.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/5683-44966a05fa5ad566.js +0 -1
  269. fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +0 -1
  270. fides/ui-build/static/admin/_next/static/chunks/5826-ce34f25ac2eeb807.js +0 -1
  271. fides/ui-build/static/admin/_next/static/chunks/5973-56d90405c3616068.js +0 -1
  272. fides/ui-build/static/admin/_next/static/chunks/6277-c35c8cc806f7571f.js +0 -1
  273. fides/ui-build/static/admin/_next/static/chunks/6834-dcda0a8ed484775e.js +0 -1
  274. fides/ui-build/static/admin/_next/static/chunks/69-dc52e39d26a4ad14.js +0 -1
  275. fides/ui-build/static/admin/_next/static/chunks/6954-d02d474ba30756b2.js +0 -1
  276. fides/ui-build/static/admin/_next/static/chunks/79-e5884e6878fc1bbb.js +0 -1
  277. fides/ui-build/static/admin/_next/static/chunks/7980-e17dda2f50ec76b8.js +0 -1
  278. fides/ui-build/static/admin/_next/static/chunks/8433-a77c2cd1c1a6887e.js +0 -1
  279. fides/ui-build/static/admin/_next/static/chunks/8499-34a34015c91fc38b.js +0 -1
  280. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +0 -1
  281. fides/ui-build/static/admin/_next/static/chunks/9327-a25347d72bfbe680.js +0 -1
  282. fides/ui-build/static/admin/_next/static/chunks/9494-0df032fe6ee531a5.js +0 -1
  283. fides/ui-build/static/admin/_next/static/chunks/9676.97fdbec9c2a48c68.js +0 -1
  284. fides/ui-build/static/admin/_next/static/chunks/9767-74320abc2e9a4550.js +0 -1
  285. fides/ui-build/static/admin/_next/static/chunks/pages/404-c00773c4c6e930af.js +0 -1
  286. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-7d789458fb296270.js +0 -1
  287. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-90320455052466cd.js +0 -1
  288. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a69f8946466471aa.js +0 -1
  289. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-bcc515a765c0119d.js +0 -1
  290. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-49b9f1b56262dfdc.js +0 -1
  291. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-d4137bb7fdc1ac6e.js +0 -1
  292. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-5ef03041a530b0e2.js +0 -1
  293. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-a5a95ac63b1ce206.js +0 -1
  294. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-946ce1a2aa1500d4.js +0 -1
  295. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-12f3ba4609bc2ba5.js +0 -1
  296. fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-ffa15d7ff64a9f05.js +0 -1
  297. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-b959d61c2a3682b3.js +0 -1
  298. fides/ui-build/static/admin/_next/static/chunks/pages/consent-7797e367dd946a18.js +0 -1
  299. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-ecf23116a845188a.js +0 -1
  300. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-79f8e613827c55c1.js +0 -1
  301. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-e950d41b75f86c85.js +0 -1
  302. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-84ead584a88ab662.js +0 -1
  303. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-90f1975f559fff3e.js +0 -1
  304. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-4b820a3173f35504.js +0 -1
  305. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-beedbc38ee2b0094.js +0 -1
  306. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-2d6f95b2769a0936.js +0 -1
  307. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-3536ae978741b659.js +0 -1
  308. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-8b5afe14cf42a4ac.js +0 -1
  309. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-b8dca4298b5bb085.js +0 -1
  310. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-1e26702b1a7e0e12.js +0 -1
  311. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-1f0c4e2e5d0b5bf6.js +0 -1
  312. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-ebf54ea9874c59ae.js +0 -1
  313. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-c39e8e2269883796.js +0 -1
  314. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-9db81467fa254996.js +0 -1
  315. fides/ui-build/static/admin/_next/static/chunks/pages/index-868b60407eae35da.js +0 -1
  316. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-ebc41649161f7fb9.js +0 -1
  317. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-b89b9f68ccc69c1b.js +0 -1
  318. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-22812f08e81bd4f3.js +0 -1
  319. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-ca22869201847ccc.js +0 -1
  320. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-5f41afae411cd8a4.js +0 -1
  321. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-173bd3ad45ea61c6.js +0 -1
  322. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-4dfe984ad80927cd.js +0 -1
  323. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-f790e1ea5cbc26c0.js +0 -1
  324. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-af9e682ec620e990.js +0 -1
  325. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-6ce407101daa6000.js +0 -1
  326. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-9ee8cf14a93eaa4a.js +0 -1
  327. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-928430cd40c35ef2.js +0 -1
  328. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-07ef58b04404479d.js +0 -1
  329. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-595ed9f6ca438020.js +0 -1
  330. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-25a3add8e7982e43.js +0 -1
  331. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-b3384299166bcd1e.js +0 -1
  332. fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-081f13526443e0a6.js +0 -1
  333. fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-17fb474e458b63e7.js +0 -1
  334. fides/ui-build/static/admin/_next/static/chunks/pages/properties-f00530710b699afd.js +0 -1
  335. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-6a6016708efb5f4f.js +0 -1
  336. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-177919b4ccf8f660.js +0 -1
  337. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-ba15c12c89ee10f8.js +0 -1
  338. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-0f2daeec241bd1a2.js +0 -1
  339. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-0401208a3128fa4d.js +0 -1
  340. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-0daa256958675a23.js +0 -1
  341. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-26810d1ffedcd156.js +0 -1
  342. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-eb78b645d0c1d4ea.js +0 -1
  343. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-9404a6b0b2951992.js +0 -1
  344. fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-0a3aa951ef4a44ba.js +0 -1
  345. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-48be14ad09ed4133.js +0 -1
  346. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-b03403fed4dd8805.js +0 -1
  347. fides/ui-build/static/admin/_next/static/chunks/pages/systems-ae591953b24e2fc9.js +0 -1
  348. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-913efe5371344de6.js +0 -1
  349. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-dc11ba29dbd4708b.js +0 -1
  350. fides/ui-build/static/admin/_next/static/css/92c81f666644c594.css +0 -1
  351. fides/ui-build/static/admin/_next/static/css/b89fc4b36b501cf6.css +0 -1
  352. fides/ui-build/static/admin/_next/static/css/c0c2eb63ad3e7390.css +0 -1
  353. {ethyca_fides-2.62.1rc0.dist-info → ethyca_fides-2.63.0.dist-info}/WHEEL +0 -0
  354. {ethyca_fides-2.62.1rc0.dist-info → ethyca_fides-2.63.0.dist-info}/entry_points.txt +0 -0
  355. {ethyca_fides-2.62.1rc0.dist-info → ethyca_fides-2.63.0.dist-info}/licenses/LICENSE +0 -0
  356. {ethyca_fides-2.62.1rc0.dist-info → ethyca_fides-2.63.0.dist-info}/top_level.txt +0 -0
  357. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-69176abe09cf9b52.js → new-b124cc24b930c9e1.js} +0 -0
  358. /fides/ui-build/static/admin/_next/static/{K1_4-1GhwfL7h4fYYQBvB → lb6RRZ8JumokYwsENumlw}/_ssgManifest.js +0 -0
fides/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-06-06T15:00:50-0400",
11
+ "date": "2025-06-09T12:29:37-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "4fca3c3a4592528e57449b8ee9cafed8010d6052",
15
- "version": "2.62.1rc0"
14
+ "full-revisionid": "26ed475edc54d4cc56a7060fbec3ed7c16b647d2",
15
+ "version": "2.63.0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,82 @@
1
+ """add shared monitor config
2
+
3
+ Revision ID: 2263583b0e44
4
+ Revises: d0cbfec0b2dd
5
+ Create Date: 2025-05-12 23:44:11.809581
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "2263583b0e44"
15
+ down_revision = "d0cbfec0b2dd"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ op.create_table(
22
+ "shared_monitor_config",
23
+ sa.Column("id", sa.String(length=255), nullable=False),
24
+ sa.Column(
25
+ "created_at",
26
+ sa.DateTime(timezone=True),
27
+ server_default=sa.text("now()"),
28
+ nullable=True,
29
+ ),
30
+ sa.Column(
31
+ "updated_at",
32
+ sa.DateTime(timezone=True),
33
+ server_default=sa.text("now()"),
34
+ nullable=True,
35
+ ),
36
+ sa.Column("name", sa.String(), nullable=False),
37
+ sa.Column("key", sa.String(), nullable=False),
38
+ sa.Column("description", sa.String(), nullable=True),
39
+ sa.Column(
40
+ "classify_params",
41
+ postgresql.JSONB(astext_type=sa.Text()),
42
+ server_default="{}",
43
+ nullable=False,
44
+ ),
45
+ sa.PrimaryKeyConstraint("id"),
46
+ sa.UniqueConstraint("key"),
47
+ )
48
+ op.create_index(
49
+ op.f("ix_shared_monitor_config_id"),
50
+ "shared_monitor_config",
51
+ ["id"],
52
+ unique=False,
53
+ )
54
+ op.add_column(
55
+ "monitorconfig", sa.Column("shared_config_id", sa.String(), nullable=True)
56
+ )
57
+ op.create_index(
58
+ op.f("ix_monitorconfig_shared_config_id"),
59
+ "monitorconfig",
60
+ ["shared_config_id"],
61
+ unique=False,
62
+ )
63
+ op.create_foreign_key(
64
+ "fk_monitorconfig_shared_config_id",
65
+ "monitorconfig",
66
+ "shared_monitor_config",
67
+ ["shared_config_id"],
68
+ ["id"],
69
+ ondelete="RESTRICT",
70
+ )
71
+
72
+
73
+ def downgrade():
74
+ op.drop_constraint(
75
+ "fk_monitorconfig_shared_config_id", "monitorconfig", type_="foreignkey"
76
+ )
77
+ op.drop_index(op.f("ix_monitorconfig_shared_config_id"), table_name="monitorconfig")
78
+ op.drop_column("monitorconfig", "shared_config_id")
79
+ op.drop_index(
80
+ op.f("ix_shared_monitor_config_id"), table_name="shared_monitor_config"
81
+ )
82
+ op.drop_table("shared_monitor_config")
@@ -0,0 +1,80 @@
1
+ """Add fides_user_respondent_email_verification table
2
+
3
+ Revision ID: 440a5b9a3493
4
+ Revises: 2263583b0e44
5
+ Create Date: 2025-05-29 15:41:59.521940
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "440a5b9a3493"
14
+ down_revision = "2263583b0e44"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade():
20
+ op.create_table(
21
+ "fides_user_respondent_email_verification",
22
+ sa.Column("id", sa.String(), nullable=False),
23
+ sa.Column("user_id", sa.String(), nullable=False),
24
+ sa.Column("access_token", sa.String(), nullable=False),
25
+ sa.Column(
26
+ "access_token_expires_at", sa.DateTime(timezone=True), nullable=False
27
+ ),
28
+ sa.Column("identity_verified_at", sa.DateTime(timezone=True), nullable=True),
29
+ sa.Column(
30
+ "created_at",
31
+ sa.DateTime(timezone=True),
32
+ nullable=False,
33
+ server_default=sa.text("now()"),
34
+ ),
35
+ sa.Column(
36
+ "updated_at",
37
+ sa.DateTime(timezone=True),
38
+ nullable=False,
39
+ server_default=sa.text("now()"),
40
+ ),
41
+ sa.ForeignKeyConstraint(
42
+ ["user_id"],
43
+ ["fidesuser.id"],
44
+ ondelete="CASCADE",
45
+ ),
46
+ sa.PrimaryKeyConstraint("id"),
47
+ )
48
+ op.create_index(
49
+ "ix_fides_user_respondent_email_verification_id",
50
+ "fides_user_respondent_email_verification",
51
+ ["id"],
52
+ unique=True,
53
+ )
54
+ op.create_index(
55
+ "ix_fides_user_respondent_email_verification_access_token",
56
+ "fides_user_respondent_email_verification",
57
+ ["access_token"],
58
+ unique=True,
59
+ )
60
+ op.create_index(
61
+ "ix_fides_user_respondent_email_verification_user_id",
62
+ "fides_user_respondent_email_verification",
63
+ ["user_id"],
64
+ )
65
+
66
+
67
+ def downgrade():
68
+ op.drop_index(
69
+ "ix_fides_user_respondent_email_verification_user_id",
70
+ table_name="fides_user_respondent_email_verification",
71
+ )
72
+ op.drop_index(
73
+ "ix_fides_user_respondent_email_verification_access_token",
74
+ table_name="fides_user_respondent_email_verification",
75
+ )
76
+ op.drop_index(
77
+ "ix_fides_user_respondent_email_verification_id",
78
+ table_name="fides_user_respondent_email_verification",
79
+ )
80
+ op.drop_table("fides_user_respondent_email_verification")
@@ -0,0 +1,72 @@
1
+ """
2
+ Creates staged resource ancestor link table.
3
+
4
+ Does not populate the table with data, that is handled in a separate data migration.
5
+
6
+ Also does not drop the StagedResource.child_diff_statuses column,
7
+ that is handled in a separate migration, _after_ the data migration
8
+ that populates the staged resource ancestor link table, to prevent
9
+ unintended data loss.
10
+
11
+ Revision ID: 5474a47c77da
12
+ Revises: 440a5b9a3493
13
+ Create Date: 2025-05-27 19:02:43.802783
14
+
15
+ """
16
+
17
+ import sqlalchemy as sa
18
+ from alembic import op
19
+ from sqlalchemy.dialects import postgresql
20
+
21
+ # revision identifiers, used by Alembic.
22
+ revision = "5474a47c77da"
23
+ down_revision = "440a5b9a3493"
24
+ branch_labels = None
25
+ depends_on = None
26
+
27
+
28
+ def upgrade():
29
+ # ### commands auto generated by Alembic - please adjust! ###
30
+ op.create_table(
31
+ "stagedresourceancestor",
32
+ sa.Column("id", sa.String(length=255), nullable=False),
33
+ sa.Column(
34
+ "created_at",
35
+ sa.DateTime(timezone=True),
36
+ server_default=sa.text("now()"),
37
+ nullable=True,
38
+ ),
39
+ sa.Column(
40
+ "updated_at",
41
+ sa.DateTime(timezone=True),
42
+ server_default=sa.text("now()"),
43
+ nullable=True,
44
+ ),
45
+ sa.Column("ancestor_urn", sa.String(), nullable=False),
46
+ sa.Column("descendant_urn", sa.String(), nullable=False),
47
+ # primary key, foreign key and unique constraints are deferred
48
+ # until after the data migration that populates the table,
49
+ # to avoid slowing down the data migration
50
+ )
51
+
52
+ # defer creating `stagedresourceancestor` indexes until after the data migration
53
+ # that populates the table, to avoid slowing down the data migration
54
+
55
+ # add an index for StagedResource.diff_status to improve queries against the diff_status field
56
+ op.create_index(
57
+ op.f("ix_stagedresource_diff_status"),
58
+ "stagedresource",
59
+ ["diff_status"],
60
+ unique=False,
61
+ )
62
+
63
+
64
+ def downgrade():
65
+ # ### commands auto generated by Alembic - please adjust! ###
66
+
67
+ # drop the StagedResource.diff_status index created in the migration
68
+ op.drop_index(op.f("ix_stagedresource_diff_status"), table_name="stagedresource")
69
+
70
+ # drop the stagedresourceancestor table (and all its indexes and constraints)
71
+ op.drop_table("stagedresourceancestor")
72
+ # ### end Alembic commands ###
@@ -0,0 +1,259 @@
1
+ """
2
+ Staged resource ancestor link data migration.
3
+
4
+ Indexes and constraints are created on this table _after_ data is populated.
5
+ If > 1,000,000 stagedresourceancestor records are created as part
6
+ of the data migration, the migration will skip creating the indexes
7
+ and constraints, and will instead log a message
8
+ indicating that index migration should be performed as part of app runtime.
9
+
10
+ The data migration has the following steps:
11
+ - Query for all staged resources and their children
12
+ - Build a list in-memory of all ancestor-descendant pairs to insert by recursively
13
+ processing each resource's children
14
+ - Write the ancestor links to a CSV string in-memory
15
+ - Copy the CSV string into the stagedresourceancestor table via a PostgreSQL COPY
16
+ command
17
+ - Create the indexes and constraints on the stagedresourceancestor table if
18
+ < 1,000,000 ancestor links are created
19
+
20
+
21
+ Revision ID: bf713b5a021d
22
+ Revises: 5474a47c77da
23
+ Create Date: 2025-06-03 09:44:58.769535
24
+
25
+ """
26
+
27
+ import csv
28
+ import uuid
29
+ from io import StringIO
30
+ from pathlib import Path
31
+
32
+ import sqlalchemy as sa
33
+ from alembic import op
34
+ from loguru import logger
35
+
36
+ # revision identifiers, used by Alembic.
37
+ revision = "bf713b5a021d"
38
+ down_revision = "5474a47c77da"
39
+
40
+ branch_labels = None
41
+ depends_on = None
42
+
43
+
44
+ def upgrade():
45
+ logger.info("Populating staged resource ancestor links...")
46
+
47
+ conn = op.get_bind()
48
+
49
+ # Get all resources and their children in batches
50
+ BATCH_SIZE = 500000
51
+
52
+ # Query resources in batches using yield_per
53
+ resources_query = sa.text(
54
+ """
55
+ SELECT urn, children
56
+ FROM stagedresource
57
+ """
58
+ )
59
+ resource_children = {}
60
+
61
+ # process resources and populate resource_children map in batches
62
+ # to limit memory usage
63
+ for batch in (
64
+ conn.execution_options(stream_results=True)
65
+ .execute(resources_query)
66
+ .yield_per(BATCH_SIZE)
67
+ .partitions()
68
+ ):
69
+ logger.info(f"Processing batch of {BATCH_SIZE} resources")
70
+
71
+ # Build resource -> children map for this batch
72
+ for result in batch:
73
+ urn = result.urn
74
+ children = result.children
75
+ if children:
76
+ resource_children[urn] = children
77
+ else:
78
+ # even if no children, we still add the resource to the map
79
+ # so that we maintain a record of all resources and can
80
+ # check for orphaned descendant records later
81
+ resource_children[urn] = []
82
+
83
+ # Build list of ancestor-descendant pairs
84
+ ancestor_links = []
85
+
86
+ def process_children(ancestor_urn, children, visited=None):
87
+ """Recursively process children and collect ancestor links"""
88
+ if visited is None:
89
+ visited = set()
90
+
91
+ for child_urn in children:
92
+ if child_urn not in visited:
93
+ visited.add(child_urn)
94
+ if child_urn not in resource_children:
95
+ logger.warning(
96
+ f"Found orphaned descendant URN: {child_urn}, not adding ancestor link"
97
+ )
98
+ else:
99
+ # Add direct ancestor link
100
+ ancestor_links.append(
101
+ {
102
+ "id": f"srl_{uuid.uuid4()}",
103
+ "ancestor_urn": ancestor_urn,
104
+ "descendant_urn": child_urn,
105
+ }
106
+ )
107
+
108
+ # Recursively process this child's children
109
+ process_children(
110
+ ancestor_urn, resource_children[child_urn], visited
111
+ )
112
+
113
+ logger.info(
114
+ f"Recursively processing {len(resource_children)} resources for ancestor links in current batch"
115
+ )
116
+
117
+ # Process each resource's children recursively
118
+ for ancestor_urn, children in resource_children.items():
119
+ process_children(ancestor_urn, children)
120
+
121
+ # remove the resource_children map from memory
122
+ del resource_children
123
+
124
+ ancestor_links_count = len(ancestor_links)
125
+ logger.info(f"Found {ancestor_links_count} ancestor links in current batch")
126
+
127
+ if ancestor_links_count > 0:
128
+ # Create temporary CSV file
129
+ temp_csv_path = Path("staged_resource_ancestors.csv")
130
+ with open(temp_csv_path, "w", newline="") as csv_file:
131
+ writer = csv.DictWriter(
132
+ csv_file, fieldnames=["id", "ancestor_urn", "descendant_urn"]
133
+ )
134
+ writer.writeheader()
135
+ logger.info(f"Writing {ancestor_links_count} ancestor links to CSV file")
136
+ writer.writerows(ancestor_links)
137
+
138
+ del ancestor_links
139
+
140
+ # Copy all data from CSV file into table
141
+ logger.info(
142
+ f"Copying {ancestor_links_count} ancestor links from CSV file into stagedresourceancestor table..."
143
+ )
144
+ with open(temp_csv_path, "r") as csv_file:
145
+ copy_query = """
146
+ COPY stagedresourceancestor (id, ancestor_urn, descendant_urn)
147
+ FROM STDIN
148
+ WITH (FORMAT CSV, HEADER TRUE)
149
+ """
150
+ conn.connection.cursor().copy_expert(copy_query, csv_file)
151
+
152
+ # Clean up temp file
153
+ temp_csv_path.unlink()
154
+
155
+ logger.info(
156
+ f"Completed copying all ancestor links. Total ancestor links created: {ancestor_links_count}"
157
+ )
158
+
159
+ if ancestor_links_count < 1000000:
160
+
161
+ logger.info("Creating primary key index on stagedresourceancestor table...")
162
+
163
+ op.create_index(
164
+ "ix_staged_resource_ancestor_pkey",
165
+ "stagedresourceancestor",
166
+ ["id"],
167
+ unique=True,
168
+ )
169
+
170
+ logger.info("Completed creating primary key index")
171
+
172
+ logger.info("Creating foreign key constraints stagedresourceancestor table...")
173
+
174
+ op.create_foreign_key(
175
+ "fk_staged_resource_ancestor_ancestor",
176
+ "stagedresourceancestor",
177
+ "stagedresource",
178
+ ["ancestor_urn"],
179
+ ["urn"],
180
+ ondelete="CASCADE",
181
+ )
182
+
183
+ op.create_foreign_key(
184
+ "fk_staged_resource_ancestor_descendant",
185
+ "stagedresourceancestor",
186
+ "stagedresource",
187
+ ["descendant_urn"],
188
+ ["urn"],
189
+ ondelete="CASCADE",
190
+ )
191
+
192
+ logger.info("Completed creating foreign key constraints")
193
+
194
+ logger.info("Creating unique constraint on stagedresourceancestor table...")
195
+
196
+ op.create_unique_constraint(
197
+ "uq_staged_resource_ancestor",
198
+ "stagedresourceancestor",
199
+ ["ancestor_urn", "descendant_urn"],
200
+ )
201
+
202
+ logger.info("Completed creating unique constraint")
203
+
204
+ logger.info("Creating indexes on stagedresourceancestor table...")
205
+
206
+ op.create_index(
207
+ "ix_staged_resource_ancestor_ancestor",
208
+ "stagedresourceancestor",
209
+ ["ancestor_urn"],
210
+ unique=False,
211
+ )
212
+ op.create_index(
213
+ "ix_staged_resource_ancestor_descendant",
214
+ "stagedresourceancestor",
215
+ ["descendant_urn"],
216
+ unique=False,
217
+ )
218
+
219
+ logger.info("Completed creating indexes on stagedresourceancestor table")
220
+ else:
221
+ logger.info(
222
+ "Skipping creation of primary key index, foreign key constraints, unique constraint, and indexes on stagedresourceancestor table because there are more than 1,000,000 ancestor links. These will be populated as part of the `post_upgrade_index_creation.py` task kicked off during application startup."
223
+ )
224
+
225
+
226
+ def downgrade():
227
+ logger.info(
228
+ "Downgrading staged resource ancestor link data migration, populating child_diff_statuses..."
229
+ )
230
+
231
+ # Get child diff statuses for each ancestor
232
+ conn = op.get_bind()
233
+ child_diff_statuses_query = """
234
+ UPDATE stagedresource
235
+ SET child_diff_statuses = child_statuses.status_map
236
+ FROM (
237
+ SELECT
238
+ stagedresourceancestor.ancestor_urn,
239
+ jsonb_object_agg(distinct(stagedresource.diff_status), True) as status_map
240
+ FROM stagedresourceancestor
241
+ JOIN stagedresource ON stagedresourceancestor.descendant_urn = stagedresource.urn
242
+ GROUP BY stagedresourceancestor.ancestor_urn
243
+ ) AS child_statuses
244
+ WHERE stagedresource.urn = child_statuses.ancestor_urn
245
+ """
246
+ result = conn.execute(child_diff_statuses_query)
247
+ updated_rows = result.rowcount
248
+
249
+ logger.info(
250
+ f"Downgraded staged resource ancestor link data migration, completed populating child_diff_statuses for {updated_rows} rows"
251
+ )
252
+
253
+ # Intentionally not dropping the stagedresourceancestor indexes here because they
254
+ # may not have been created as part of the data migration above. If they were not created,
255
+ # then the downgrade would fail trying to drop the non-existent indexes.
256
+
257
+ # The indexes and constraints will be dropped as part of the overall table drop that's done
258
+ # as part of the downgrade in the `5474a47c77da_create_staged_resource_ancestor_link_table.py`
259
+ # migration.
@@ -0,0 +1,40 @@
1
+ """
2
+ Removes the stagedresource.child_diff_statuses column.
3
+
4
+ This migration is run _after_ the data migration
5
+ that populates the staged resource ancestor link table,
6
+ to prevent unintended data loss.
7
+
8
+ Revision ID: c586a56c25e7
9
+ Revises: bf713b5a021d
10
+ Create Date: 2025-06-03 09:47:11.389652
11
+
12
+ """
13
+
14
+ import sqlalchemy as sa
15
+ from alembic import op
16
+ from sqlalchemy.dialects import postgresql
17
+
18
+ # revision identifiers, used by Alembic.
19
+ revision = "c586a56c25e7"
20
+ down_revision = "bf713b5a021d"
21
+ branch_labels = None
22
+ depends_on = None
23
+
24
+
25
+ def upgrade():
26
+ # remove the StagedResource.child_diff_statuses column as it's no longer needed
27
+ op.drop_column("stagedresource", "child_diff_statuses")
28
+
29
+
30
+ def downgrade():
31
+ # re-add the StagedResource.child_diff_statuses column
32
+ op.add_column(
33
+ "stagedresource",
34
+ sa.Column(
35
+ "child_diff_statuses",
36
+ postgresql.JSONB(astext_type=sa.Text()),
37
+ server_default="{}",
38
+ nullable=False,
39
+ ),
40
+ )
@@ -120,7 +120,7 @@ from fides.api.util.collection_util import Row
120
120
  from fides.api.util.endpoint_utils import validate_start_and_end_filters
121
121
  from fides.api.util.enums import ColumnSort
122
122
  from fides.api.util.fuzzy_search_utils import get_decrypted_identities_automaton
123
- from fides.api.util.storage_util import storage_json_encoder
123
+ from fides.api.util.storage_util import StorageJSONEncoder
124
124
  from fides.common.api.scope_registry import (
125
125
  PRIVACY_REQUEST_CALLBACK_RESUME,
126
126
  PRIVACY_REQUEST_CREATE,
@@ -2129,7 +2129,7 @@ def get_test_privacy_request_results(
2129
2129
 
2130
2130
  # Escape datetime and ObjectId values
2131
2131
  raw_data = privacy_request.get_raw_access_results()
2132
- escaped_json = json.dumps(raw_data, indent=2, default=storage_json_encoder)
2132
+ escaped_json = json.dumps(raw_data, indent=2, cls=StorageJSONEncoder)
2133
2133
  results = json.loads(escaped_json)
2134
2134
 
2135
2135
  filtered_results: Dict[str, Any] = filter_access_results(
fides/api/db/base.py CHANGED
@@ -22,6 +22,9 @@ from fides.api.models.fides_cloud import FidesCloud
22
22
  from fides.api.models.fides_user import FidesUser
23
23
  from fides.api.models.fides_user_invite import FidesUserInvite
24
24
  from fides.api.models.fides_user_permissions import FidesUserPermissions
25
+ from fides.api.models.fides_user_respondent_email_verification import (
26
+ FidesUserRespondentEmailVerification,
27
+ )
25
28
  from fides.api.models.identity_salt import IdentitySalt
26
29
  from fides.api.models.location_regulation_selections import LocationRegulationSelections
27
30
  from fides.api.models.manual_webhook import AccessManualWebhook
fides/api/main.py CHANGED
@@ -33,6 +33,9 @@ from fides.api.common_exceptions import MalisciousUrlException
33
33
  from fides.api.cryptography.identity_salt import get_identity_salt
34
34
  from fides.api.middleware import handle_audit_log_resource
35
35
  from fides.api.migrations.hash_migration_job import initiate_bcrypt_migration_task
36
+ from fides.api.migrations.post_upgrade_index_creation import (
37
+ initiate_post_upgrade_index_creation,
38
+ )
36
39
  from fides.api.schemas.analytics import Event, ExtraData
37
40
 
38
41
  # pylint: disable=wildcard-import, unused-wildcard-import
@@ -97,6 +100,7 @@ async def lifespan(wrapped_app: FastAPI) -> AsyncGenerator[None, None]:
97
100
  initiate_scheduled_dsr_data_removal()
98
101
  initiate_interrupted_task_requeue_poll()
99
102
  initiate_bcrypt_migration_task()
103
+ initiate_post_upgrade_index_creation()
100
104
 
101
105
  logger.debug("Sending startup analytics events...")
102
106
  # Avoid circular imports
@@ -240,7 +244,6 @@ async def log_request(request: Request, call_next: Callable) -> Response:
240
244
  status_code=response.status_code,
241
245
  handler_time=f"{total_time}ms",
242
246
  path=request.url.path,
243
- fides_client=request.headers.get("Fides-Client", "unknown"),
244
247
  ).info("Request received")
245
248
  return response
246
249