ethyca-fides 2.64.1b2__py2.py3-none-any.whl → 2.64.2b0__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 (259) hide show
  1. {ethyca_fides-2.64.1b2.dist-info → ethyca_fides-2.64.2b0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.64.1b2.dist-info → ethyca_fides-2.64.2b0.dist-info}/RECORD +224 -228
  3. fides/_version.py +3 -3
  4. fides/api/db/database.py +27 -2
  5. fides/api/models/attachment.py +15 -3
  6. fides/api/models/comment.py +22 -5
  7. fides/api/models/db_cache.py +1 -1
  8. fides/api/models/detection_discovery/core.py +15 -15
  9. fides/api/models/fides_user_respondent_email_verification.py +27 -2
  10. fides/api/models/manual_tasks/manual_task.py +50 -2
  11. fides/api/models/manual_tasks/manual_task_config.py +83 -5
  12. fides/api/models/manual_tasks/manual_task_instance.py +116 -9
  13. fides/api/models/manual_tasks/manual_task_log.py +28 -3
  14. fides/api/models/tcf_publisher_restrictions.py +16 -4
  15. fides/ui-build/static/admin/404.html +1 -1
  16. fides/ui-build/static/admin/_next/static/chunks/{1040-630c7f4284dc6f70.js → 1040-fa06cd3b94d97493.js} +1 -1
  17. fides/ui-build/static/admin/_next/static/chunks/1169-f75d7958fbe6e136.js +1 -0
  18. fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +1 -0
  19. fides/ui-build/static/admin/_next/static/chunks/{1817-b4688ba5042ec687.js → 1817-a3813209d7a6d28d.js} +1 -1
  20. fides/ui-build/static/admin/_next/static/chunks/{2921-aabf41bf3d7573f9.js → 2921-81a48418f77bc9a7.js} +1 -1
  21. fides/ui-build/static/admin/_next/static/chunks/{3450-bdaeb35442d810b4.js → 3450-2bb9f1b5a23fb520.js} +1 -1
  22. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
  23. fides/ui-build/static/admin/_next/static/chunks/{3855-0dec3e7d9e886550.js → 3855-b85ad4e52433d519.js} +1 -1
  24. fides/ui-build/static/admin/_next/static/chunks/{3872-ffa16c2df7ef0ab6.js → 3872-09f81435f7905d76.js} +1 -1
  25. fides/ui-build/static/admin/_next/static/chunks/{3923-5d580fbb1dd6ae01.js → 3923-2565d952c662555c.js} +1 -1
  26. fides/ui-build/static/admin/_next/static/chunks/{401-fceaae662cfca5a5.js → 401-8ea41700c5437d38.js} +1 -1
  27. fides/ui-build/static/admin/_next/static/chunks/{409-037cfc3f096150f0.js → 409-e0d39af1d9ce8ff2.js} +1 -1
  28. fides/ui-build/static/admin/_next/static/chunks/4121-55f5b0bcb5ba41fb.js +1 -0
  29. fides/ui-build/static/admin/_next/static/chunks/{4230-1cdb7ea1be370ed3.js → 4230-b3fe52af1035dff5.js} +1 -1
  30. fides/ui-build/static/admin/_next/static/chunks/{431-f72599f01b98f07d.js → 431-c74dab231c8ac968.js} +1 -1
  31. fides/ui-build/static/admin/_next/static/chunks/{5309-4511df9708d5a63c.js → 5309-0e44dbd914896514.js} +1 -1
  32. fides/ui-build/static/admin/_next/static/chunks/{5574-3cd33b3a6c937899.js → 5574-917c5ff63d222308.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/6084-57446e3c99078be8.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/6662-45b8977f48a219f5.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{6853-a4097260e402980e.js → 6853-8d0a099f61c758d1.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{6882-3cc73d407a088d7d.js → 6882-13d6f8d95b1e404f.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/{6954-13a25cef3a8fdd76.js → 6954-4e106b3f7097fe6e.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/7476-b5fb1c0cf4ad8f63.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/7630-e3d06546f9dfeb91.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/787-381156db4e81dbe8.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/{79-5670e31eb65d0a53.js → 79-3f742fe4efd9893f.js} +1 -1
  43. fides/ui-build/static/admin/_next/static/chunks/{796-9a6b13c838e25538.js → 796-83a8bbdcdb67f2ba.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/{9046-fdf53cc7e926a8c1.js → 9046-6995482a030e323c.js} +1 -1
  47. fides/ui-build/static/admin/_next/static/chunks/{905-742074a074be1055.js → 905-ffdbd0b14167e8bd.js} +1 -1
  48. fides/ui-build/static/admin/_next/static/chunks/{9226-ba6587e46ec7659a.js → 9226-2be3a6efb127148f.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/{9392.25024e070026343d.js → 9392.9a948112de74781b.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/{9676.e60a53f1f5890847.js → 9676.cc515c853b8cf578.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/9767-980699a4d0f56acc.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/9826-303b14ef4fc7ab4a.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/{9951-f9ab5cac7e2c05ab.js → 9951-57c0a671463e0ebb.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/pages/{404-ac2f0844e5c4b4cd.js → 404-488f8f03fe0ffbc7.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-8ec6e466f3373ac0.js → _app-5e6fbbf17a62ac76.js} +68 -65
  56. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-0a5f2310ce6b1059.js → manual-1e88ac28bc7a41b6.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-00cb904825aad7e3.js → multiple-f2c9451fffaaa529.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-40a6b572d49c2b68.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-fa7305b88c1afd20.js → add-vendors-b17d160147365cf3.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-f140ec9d8e8a0f7a.js → configure-8e168d78acdf0cfe.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-0edb7c92518e7d21.js → [id]-5ca2467de7986929.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a0039f216fb3eb93.js → new-06bb3b0bf097fcdb.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-d8d926f0735a2546.js → privacy-experience-3c11fecc2797ab68.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-5c949f2e3cef2398.js → [id]-92bc6c7b82a679b4.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-130155cfb4a0bcc7.js → new-a3da3243526b7ecb.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-1135ad8924d32c36.js → privacy-notices-b7d82386e7521041.js} +1 -1
  67. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-776855e370414beb.js → properties-20a2029b7e7fc895.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-21c23f75ff1135d9.js → reporting-0ce299131db4c3e5.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-4d5ea70a77df1bb8.js → consent-9f6a7a231bba17b7.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-c623d6f1a61c8ea9.js → [resourceUrn]-11d52f1570759c4d.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-030ee304cbe5e530.js → [projectUrn]-fd705968b357e99a.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-cfac259a30641e68.js → projects-45b585deee0b2371.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-57bd5cdf784f059f.js → [resourceUrn]-b83afa5565d0c84e.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-51d99174c8006eb5.js → resources-d8db234a44a2ddf4.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-7b5aec33da578745.js → data-catalog-4fd60a74c0369e3e.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-c948f93c833d4358.js → [systemId]-e861699a8866c64b.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-333f53caab751428.js → [monitorId]-5dd2fbf33e228f9c.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-27205f8457a1ecb0.js → action-center-806cae6bc128cd38.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-20a1043f6a06198f.js → activity-487285bd5eca2595.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-06edce289876dea1.js → [resourceUrn]-393e20924c83373e.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-faf326a6200637d0.js → detection-8733807dad4bc96e.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-64acf269256ee74f.js → [resourceUrn]-14bd7500362ff224.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-8c3e4be6d36da66d.js → discovery-9e7dfd5a6acc2e8f.js} +1 -1
  84. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-fb50de22f83edd4a.js → datamap-c9509d72c538d22b.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-41ab27c4195cfa93.js → [...subfieldNames]-4e8a436297a055b2.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-6e2caba24b3e78c2.js → [collectionName]-6ce02295bb7f5b6d.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-904d43e31157aa55.js → [datasetId]-9eaa907437fde063.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-de5e9ccfecdf31b1.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-8f7d16bc5e9229c8.js → dataset-dcdec3644f05188d.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-4a33dd0371dbaebc.js → [id]-81ab412e337d2888.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-e88509346b2d2851.js → new-34dfc172165dbb1c.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cdb77886d7fd4f44.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/{index-1adb6bcb71701ac2.js → index-de954b741cbca022.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-fdc2964fa7d1d8fd.js → [id]-dba625eddca48f69.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-40a3cd14264796e2.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-9b4d1d61c7c97509.js → [id]-42edcab11e8b5c3c.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-f8fd4795e260887c.js → add-template-333e54ac8c3ad57a.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-aa744ae8b61e5ff2.js → messaging-8e1e6f3782983225.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-3407158757fb3627.js → ant-components-25c74d51a49b2403.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-47e947c02ae90fd0.js → AntForm-920338760f5a71b5.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-24f9a44512ce8827.js → FormikAntFormItem-7462fb387a9de3f8.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-e567a69f8c37fb9a.js → FormikControlled-6148fce7a4e2e9ca.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-35a33f9c7def2220.js → FormikField-30efd8c937bf19e4.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-780e18dde8e38099.js → forms-c44de83e0952d1e0.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7852aa60090c8c9a.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11dd6152bf6607cc.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-83a548813fec4f90.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a087847d6cbccc65.js +1 -0
  109. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-1a1aa83a3f88844c.js → configure-1d981663e1a84166.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a5794999a1cc0b6.js +1 -0
  111. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-19737d4f21aadbee.js → [id]-b08a69b1c460c7fe.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-9ccb295110feee20.js → add-property-a5d1c65ec21df69d.js} +1 -1
  113. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-3a1037a2e036212a.js → properties-3a75c6ed8308d126.js} +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-4cdbbb8cd1d8698e.js → datamap-911996819aa16e04.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-965cc21889b25e44.js → alpha-6773158ba6ccf4b0.js} +1 -1
  116. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-0e1c381d488a7ada.js → about-2e046d177d52465c.js} +1 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-d0e350d2a2667883.js → [purpose_id]-a5420c3ba02fe6a5.js} +1 -1
  118. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-2a95eb36aa2b47a6.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-6f866bc799a5f67f.js → custom-fields-06075fbf122c98d0.js} +1 -1
  120. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-0b44b2b224077dcd.js → domain-records-2c7ecff0a8a74c42.js} +1 -1
  121. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-afed8ba5498a9f93.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-c1d3f3cb9c6ca463.js +1 -0
  123. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-811dadb489f23d7d.js → locations-8d4383584c72eb5a.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-aae79a344a96a367.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-54f142bc3e4c95ba.js → regulations-29892065d99ff113.js} +1 -1
  126. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9669fa6b20545530.js +1 -0
  127. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-6eb886e7b7e6785b.js → [id]-8fa8a2f238e08791.js} +1 -1
  128. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-7b71274334c559a4.js → systems-acdbdd3dfd21162f.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-9b4d28f02df3a238.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-b124cc24b930c9e1.js → new-a2524414e968f862.js} +1 -1
  131. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-75d41fde668b9025.js → [id]-87ed17fa1d9f8f72.js} +1 -1
  132. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-dd43755b687c09a7.js → user-management-6b4e0764bb8816b8.js} +1 -1
  133. fides/ui-build/static/admin/_next/static/chunks/webpack-da78c536f3d86d06.js +1 -0
  134. fides/ui-build/static/admin/_next/static/css/{c693338e3bc8dcc6.css → 67ac3d00a5f134a2.css} +1 -1
  135. fides/ui-build/static/admin/_next/static/jg8bMUMFAG7KlEnEbTRct/_buildManifest.js +1 -0
  136. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  137. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  138. fides/ui-build/static/admin/add-systems.html +1 -1
  139. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  140. fides/ui-build/static/admin/consent/configure.html +1 -1
  141. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  142. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  143. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  144. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  145. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  146. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  147. fides/ui-build/static/admin/consent/properties.html +1 -1
  148. fides/ui-build/static/admin/consent/reporting.html +1 -1
  149. fides/ui-build/static/admin/consent.html +1 -1
  150. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  151. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  152. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  153. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  154. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  155. fides/ui-build/static/admin/data-catalog.html +1 -1
  156. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  157. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  158. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  159. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  160. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  161. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  162. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  163. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  164. fides/ui-build/static/admin/datamap.html +1 -1
  165. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  166. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  167. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  168. fides/ui-build/static/admin/dataset/new.html +1 -1
  169. fides/ui-build/static/admin/dataset.html +1 -1
  170. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  171. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  172. fides/ui-build/static/admin/datastore-connection.html +1 -1
  173. fides/ui-build/static/admin/index.html +1 -1
  174. fides/ui-build/static/admin/integrations/[id].html +1 -1
  175. fides/ui-build/static/admin/integrations.html +1 -1
  176. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  177. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  178. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  179. fides/ui-build/static/admin/lib/fides.js +2 -2
  180. fides/ui-build/static/admin/login/[provider].html +1 -1
  181. fides/ui-build/static/admin/login.html +1 -1
  182. fides/ui-build/static/admin/messaging/[id].html +1 -1
  183. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  184. fides/ui-build/static/admin/messaging.html +1 -1
  185. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  186. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  187. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  188. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  189. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  190. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  191. fides/ui-build/static/admin/poc/forms.html +1 -1
  192. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  193. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  194. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  195. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  196. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  197. fides/ui-build/static/admin/privacy-requests.html +1 -1
  198. fides/ui-build/static/admin/properties/[id].html +1 -1
  199. fides/ui-build/static/admin/properties/add-property.html +1 -1
  200. fides/ui-build/static/admin/properties.html +1 -1
  201. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  202. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  203. fides/ui-build/static/admin/settings/about.html +1 -1
  204. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  205. fides/ui-build/static/admin/settings/consent.html +1 -1
  206. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  207. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  208. fides/ui-build/static/admin/settings/domains.html +1 -1
  209. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  210. fides/ui-build/static/admin/settings/locations.html +1 -1
  211. fides/ui-build/static/admin/settings/organization.html +1 -1
  212. fides/ui-build/static/admin/settings/regulations.html +1 -1
  213. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  214. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  215. fides/ui-build/static/admin/systems.html +1 -1
  216. fides/ui-build/static/admin/taxonomy.html +1 -1
  217. fides/ui-build/static/admin/user-management/new.html +1 -1
  218. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  219. fides/ui-build/static/admin/user-management.html +1 -1
  220. fides/ui-build/static/admin/_next/static/chunks/1100-d43cb04522a6505c.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/3505-a79256cd851dfab4.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/3513-8677ee280eaef0da.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +0 -1
  226. fides/ui-build/static/admin/_next/static/chunks/4060-71cd041e5a57ca5a.js +0 -1
  227. fides/ui-build/static/admin/_next/static/chunks/4121-78a76e980acbd539.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/4481-f597a7cf03f8c9e1.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +0 -4
  230. fides/ui-build/static/admin/_next/static/chunks/6277-3fb4c7fc790a6d20.js +0 -1
  231. fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/6662-cb11881dcaabe5e2.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/69-6889d6674c95e7b5.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/7553-a95939c32d54b5b7.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/8433-adb1fcb29d82f1b7.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/9767-e49b065d03ce4e80.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-587e21d14e0a5196.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d4e31a1c4a58800e.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adc286ff254e7f41.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7a17dffa515e5560.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-91dd0039cc2b70bc.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-b01cbbaac34dadbc.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a15410de7f1d0f84.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c4e1b69fb5bab61a.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-7796fbf458f8f159.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-5d00e1155bd11178.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-d2cdbe770683e9df.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-24108f615ff5e1e7.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-18534d2a79a3850b.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +0 -1
  254. fides/ui-build/static/admin/_next/static/xYqpgK9yFhQK_wL_F_kAF/_buildManifest.js +0 -1
  255. {ethyca_fides-2.64.1b2.dist-info → ethyca_fides-2.64.2b0.dist-info}/WHEEL +0 -0
  256. {ethyca_fides-2.64.1b2.dist-info → ethyca_fides-2.64.2b0.dist-info}/entry_points.txt +0 -0
  257. {ethyca_fides-2.64.1b2.dist-info → ethyca_fides-2.64.2b0.dist-info}/licenses/LICENSE +0 -0
  258. {ethyca_fides-2.64.1b2.dist-info → ethyca_fides-2.64.2b0.dist-info}/top_level.txt +0 -0
  259. /fides/ui-build/static/admin/_next/static/{xYqpgK9yFhQK_wL_F_kAF → jg8bMUMFAG7KlEnEbTRct}/_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-19T19:04:31-0600",
11
+ "date": "2025-06-26T17:32:16+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "087f9ed16cb93d2b16e48ffe667e7350f4984229",
15
- "version": "2.64.1b2"
14
+ "full-revisionid": "a393007f54ae4f6f6660c0eadb35ad167a869be7",
15
+ "version": "2.64.2b0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
fides/api/db/database.py CHANGED
@@ -15,8 +15,8 @@ from sqlalchemy_utils.types.encrypted.encrypted_type import InvalidCiphertextErr
15
15
 
16
16
  from fides.api.db.base import Base # type: ignore[attr-defined]
17
17
  from fides.api.db.seed import load_default_resources
18
+ from fides.api.db.session import get_db_engine
18
19
  from fides.api.util.errors import get_full_exception_name
19
- from fides.core.utils import get_db_engine
20
20
 
21
21
  DatabaseHealth = Literal["healthy", "unhealthy", "needs migration"]
22
22
 
@@ -41,6 +41,14 @@ def upgrade_db(alembic_config: Config, revision: str = "head") -> None:
41
41
  command.upgrade(alembic_config, revision)
42
42
 
43
43
 
44
+ def init_db(database_url: str) -> None:
45
+ """
46
+ Runs the migrations and creates all of the database objects.
47
+ """
48
+ alembic_config = get_alembic_config(database_url)
49
+ upgrade_db(alembic_config)
50
+
51
+
44
52
  def downgrade_db(alembic_config: Config, revision: str = "head") -> None:
45
53
  """Downgrade the database to the specified migration revision."""
46
54
  log.info(f"Running database downgrade to revision {revision}")
@@ -78,7 +86,7 @@ def reset_db(database_url: str) -> None:
78
86
  Drops all tables/metadata from the database.
79
87
  """
80
88
  log.info("Resetting database...")
81
- engine = get_db_engine(database_url)
89
+ engine = get_db_engine(database_uri=database_url)
82
90
  with engine.connect() as connection:
83
91
  log.info("Dropping tables...")
84
92
  Base.metadata.drop_all(connection)
@@ -136,3 +144,20 @@ def configure_db(database_url: str, revision: Optional[str] = "head") -> None:
136
144
  log.error("Unable to configure database: {}: {}", error_type, error)
137
145
  log.opt(exception=True).error(error)
138
146
  raise
147
+
148
+
149
+ def check_missing_migrations(database_url: str) -> None:
150
+ """
151
+ Tries to autogenerate migrations, returns True if a migration
152
+ was generated.
153
+ """
154
+
155
+ engine = get_db_engine(database_uri=database_url)
156
+ connection = engine.connect()
157
+
158
+ migration_context = migration.MigrationContext.configure(connection)
159
+ result = command.autogen.compare_metadata(migration_context, Base.metadata) # type: ignore[attr-defined]
160
+
161
+ if result:
162
+ raise SystemExit("Migrations needs to be generated!")
163
+ print("No migrations need to be generated.")
@@ -5,9 +5,9 @@ from typing import IO, TYPE_CHECKING, Any, Tuple
5
5
 
6
6
  from fideslang.validation import AnyHttpUrlString
7
7
  from loguru import logger as log
8
- from sqlalchemy import Column
8
+ from sqlalchemy import Column, DateTime
9
9
  from sqlalchemy import Enum as EnumColumn
10
- from sqlalchemy import ForeignKey, String, UniqueConstraint, orm
10
+ from sqlalchemy import ForeignKey, Index, String, UniqueConstraint, func, orm
11
11
  from sqlalchemy.ext.declarative import declared_attr
12
12
  from sqlalchemy.orm import Session, relationship
13
13
 
@@ -64,8 +64,14 @@ class AttachmentReference(Base):
64
64
  """Overriding base class method to set the table name."""
65
65
  return "attachment_reference"
66
66
 
67
+ created_at = Column(
68
+ DateTime(timezone=True), server_default=func.now(), nullable=False
69
+ )
70
+
67
71
  attachment_id = Column(
68
- String, ForeignKey("attachment.id", ondelete="CASCADE"), nullable=False
72
+ String,
73
+ ForeignKey("attachment.id", name="attachment_reference_attachment_id_fkey"),
74
+ nullable=False,
69
75
  )
70
76
  reference_id = Column(String, nullable=False)
71
77
  reference_type = Column(EnumColumn(AttachmentReferenceType), nullable=False)
@@ -74,6 +80,8 @@ class AttachmentReference(Base):
74
80
  UniqueConstraint(
75
81
  "attachment_id", "reference_id", name="_attachment_reference_uc"
76
82
  ),
83
+ Index("ix_attachment_reference_reference_id", "reference_id"),
84
+ Index("ix_attachment_reference_reference_type", "reference_type"),
77
85
  )
78
86
 
79
87
  # Relationships
@@ -92,6 +100,10 @@ class Attachment(Base):
92
100
  Stores information about an Attachment.
93
101
  """
94
102
 
103
+ created_at = Column(
104
+ DateTime(timezone=True), server_default=func.now(), nullable=False
105
+ )
106
+
95
107
  user_id = Column(
96
108
  String, ForeignKey("fidesuser.id", ondelete="SET NULL"), nullable=True
97
109
  )
@@ -1,13 +1,13 @@
1
1
  from enum import Enum as EnumType
2
2
  from typing import TYPE_CHECKING, Any
3
3
 
4
- from sqlalchemy import Column
4
+ from sqlalchemy import Column, DateTime
5
5
  from sqlalchemy import Enum as EnumColumn
6
- from sqlalchemy import ForeignKey, String, UniqueConstraint, orm
6
+ from sqlalchemy import ForeignKey, Index, String, func, orm
7
7
  from sqlalchemy.ext.declarative import declared_attr
8
8
  from sqlalchemy.orm import Session, relationship
9
9
 
10
- from fides.api.db.base_class import Base
10
+ from fides.api.db.base_class import Base, FidesBase
11
11
  from fides.api.models.attachment import Attachment, AttachmentReferenceType
12
12
 
13
13
  if TYPE_CHECKING:
@@ -48,12 +48,24 @@ class CommentReference(Base):
48
48
  """Overriding base class method to set the table name."""
49
49
  return "comment_reference"
50
50
 
51
- comment_id = Column(String, ForeignKey("comment.id"), nullable=False)
51
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
52
+ created_at = Column(
53
+ DateTime(timezone=True), server_default=func.now(), nullable=False
54
+ )
55
+
56
+ comment_id = Column(
57
+ String,
58
+ ForeignKey(
59
+ "comment.id", name="comment_reference_comment_id_fkey", ondelete="CASCADE"
60
+ ),
61
+ nullable=False,
62
+ )
52
63
  reference_id = Column(String, nullable=False)
53
64
  reference_type = Column(EnumColumn(CommentReferenceType), nullable=False)
54
65
 
55
66
  __table_args__ = (
56
- UniqueConstraint("comment_id", "reference_id", name="comment_reference_uc"),
67
+ Index("ix_comment_reference_reference_id", "reference_id"),
68
+ Index("ix_comment_reference_reference_type", "reference_type"),
57
69
  )
58
70
 
59
71
  comment = relationship(
@@ -75,6 +87,11 @@ class Comment(Base):
75
87
  Stores information about a Comment.
76
88
  """
77
89
 
90
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
91
+ created_at = Column(
92
+ DateTime(timezone=True), server_default=func.now(), nullable=False
93
+ )
94
+
78
95
  user_id = Column(
79
96
  String, ForeignKey("fidesuser.id", ondelete="SET NULL"), nullable=True
80
97
  )
@@ -32,7 +32,7 @@ class DBCache(Base):
32
32
  cache_value = Column(BYTEA, nullable=False)
33
33
 
34
34
  __table_args__ = (
35
- Index("ix_dbcache_namespace_cache_key", "namespace", "cache_key"),
35
+ Index("ix_dbcache_namespace_cache_key", "namespace", "cache_key", unique=True),
36
36
  )
37
37
 
38
38
  @classmethod
@@ -159,6 +159,8 @@ class MonitorConfig(Base):
159
159
  "MonitorExecution",
160
160
  cascade="all, delete-orphan",
161
161
  backref="monitor_config",
162
+ primaryjoin="MonitorExecution.monitor_config_key == foreign(MonitorConfig.key)",
163
+ single_parent=True,
162
164
  )
163
165
 
164
166
  shared_config_id = Column(
@@ -342,16 +344,16 @@ class StagedResourceAncestor(Base):
342
344
  Its entries should be deleted when the staged resource is deleted, via cascade.
343
345
  """
344
346
 
347
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
348
+
345
349
  ancestor_urn = Column(
346
350
  String,
347
351
  ForeignKey("stagedresource.urn", ondelete="CASCADE"),
348
- primary_key=True,
349
352
  nullable=False,
350
353
  )
351
354
  descendant_urn = Column(
352
355
  String,
353
356
  ForeignKey("stagedresource.urn", ondelete="CASCADE"),
354
- primary_key=True,
355
357
  nullable=False,
356
358
  )
357
359
 
@@ -372,6 +374,7 @@ class StagedResourceAncestor(Base):
372
374
  UniqueConstraint(
373
375
  "ancestor_urn", "descendant_urn", name="uq_staged_resource_ancestor"
374
376
  ),
377
+ Index("ix_staged_resource_ancestor_pkey", "id", unique=True),
375
378
  Index("ix_staged_resource_ancestor_ancestor", "ancestor_urn"),
376
379
  Index("ix_staged_resource_ancestor_descendant", "descendant_urn"),
377
380
  )
@@ -470,12 +473,7 @@ class StagedResource(Base):
470
473
  server_default="{}",
471
474
  default=dict,
472
475
  )
473
- user_assigned_system_id = Column(
474
- String,
475
- ForeignKey(System.id_field_path),
476
- nullable=True,
477
- index=True,
478
- )
476
+ user_assigned_system_id = Column(String, nullable=True, index=True)
479
477
 
480
478
  # pointers to child and parent URNs
481
479
  children = Column(
@@ -527,7 +525,7 @@ class StagedResource(Base):
527
525
 
528
526
  data_uses = Column(
529
527
  ARRAY(String),
530
- nullable=False,
528
+ nullable=True,
531
529
  server_default="{}",
532
530
  default=dict,
533
531
  )
@@ -588,12 +586,14 @@ class MonitorExecution(Base):
588
586
  configuration details used in connecting to the external data store.
589
587
  """
590
588
 
591
- monitor_config_key = Column(
592
- String,
593
- ForeignKey(MonitorConfig.key),
594
- nullable=False,
595
- index=True,
596
- )
589
+ # redefined here because there's a minor, unintended discrepancy between
590
+ # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
591
+ # TODO: we likely should _not_ be setting `index=True` on the `id`
592
+ # attribute of the `Base` class, as `primary_key=True` already specifies a
593
+ # primary key constraint, which will implicitly create an index for the field.
594
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
595
+
596
+ monitor_config_key = Column(String, nullable=False, index=True)
597
597
  status = Column(String, nullable=True)
598
598
  started = Column(
599
599
  DateTime(timezone=True),
@@ -3,12 +3,13 @@ from __future__ import annotations
3
3
  from datetime import datetime, timedelta, timezone
4
4
  from typing import TYPE_CHECKING, Any, Optional
5
5
 
6
- from sqlalchemy import Column, DateTime, ForeignKey, String
6
+ from sqlalchemy import Column, DateTime, ForeignKey, Index, String
7
7
  from sqlalchemy.ext.declarative import declared_attr
8
8
  from sqlalchemy.orm import Session, relationship
9
+ from sqlalchemy.sql import func
9
10
 
10
11
  from fides.api.cryptography.cryptographic_util import generate_secure_random_string
11
- from fides.api.db.base_class import Base
12
+ from fides.api.db.base_class import Base, FidesBase
12
13
  from fides.api.util.identity_verification import IdentityVerificationMixin
13
14
  from fides.config import get_config
14
15
 
@@ -40,6 +41,22 @@ class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
40
41
  def __tablename__(self) -> str:
41
42
  return "fides_user_respondent_email_verification"
42
43
 
44
+ # redefined here because there's a minor, unintended discrepancy between
45
+ # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
46
+ # TODO: we likely should _not_ be setting `index=True` on the `id`
47
+ # attribute of the `Base` class, as `primary_key=True` already specifies a
48
+ # primary key constraint, which will implicitly create an index for the field.
49
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
50
+ created_at = Column(
51
+ DateTime(timezone=True), server_default=func.now(), nullable=False
52
+ )
53
+ updated_at = Column(
54
+ DateTime(timezone=True),
55
+ server_default=func.now(),
56
+ onupdate=func.now(),
57
+ nullable=False,
58
+ )
59
+
43
60
  user_id = Column(
44
61
  String,
45
62
  ForeignKey("fidesuser.id", ondelete="CASCADE"),
@@ -59,6 +76,14 @@ class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
59
76
  foreign_keys=[user_id],
60
77
  )
61
78
 
79
+ __table_args__ = (
80
+ Index(
81
+ "ix_fides_user_respondent_email_verification_id",
82
+ "id",
83
+ unique=True,
84
+ ),
85
+ )
86
+
62
87
  @classmethod
63
88
  def create(
64
89
  cls, db: Session, *, data: dict[str, Any], check_name: bool = False
@@ -1,10 +1,11 @@
1
1
  from typing import TYPE_CHECKING, Any
2
2
 
3
- from sqlalchemy import Column, ForeignKey, String
3
+ from sqlalchemy import Column, DateTime, ForeignKey, Index, String, UniqueConstraint
4
4
  from sqlalchemy.ext.declarative import declared_attr
5
5
  from sqlalchemy.orm import Session, relationship
6
+ from sqlalchemy.sql import func
6
7
 
7
- from fides.api.db.base_class import Base
8
+ from fides.api.db.base_class import Base, FidesBase
8
9
  from fides.api.db.util import EnumColumn
9
10
  from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
10
11
  from fides.api.schemas.manual_tasks.manual_task_schemas import (
@@ -40,6 +41,22 @@ class ManualTask(Base):
40
41
  """Overriding base class method to set the table name."""
41
42
  return "manual_task"
42
43
 
44
+ # redefined here because there's a minor, unintended discrepancy between
45
+ # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
46
+ # TODO: we likely should _not_ be setting `index=True` on the `id`
47
+ # attribute of the `Base` class, as `primary_key=True` already specifies a
48
+ # primary key constraint, which will implicitly create an index for the field.
49
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
50
+ created_at = Column(
51
+ DateTime(timezone=True), server_default=func.now(), nullable=False
52
+ )
53
+ updated_at = Column(
54
+ DateTime(timezone=True),
55
+ server_default=func.now(),
56
+ onupdate=func.now(),
57
+ nullable=False,
58
+ )
59
+
43
60
  # Database columns
44
61
  task_type = Column(
45
62
  EnumColumn(ManualTaskType),
@@ -53,6 +70,16 @@ class ManualTask(Base):
53
70
  default=ManualTaskParentEntityType.connection_config,
54
71
  )
55
72
 
73
+ __table_args__ = (
74
+ UniqueConstraint(
75
+ "parent_entity_id",
76
+ "parent_entity_type",
77
+ name="uq_manual_task_parent_entity",
78
+ ),
79
+ Index("ix_manual_task_parent_entity", "parent_entity_type", "parent_entity_id"),
80
+ Index("ix_manual_task_task_type", "task_type"),
81
+ )
82
+
56
83
  # Relationships
57
84
  references = relationship(
58
85
  "ManualTaskReference",
@@ -125,6 +152,22 @@ class ManualTaskReference(Base):
125
152
  """Overriding base class method to set the table name."""
126
153
  return "manual_task_reference"
127
154
 
155
+ # redefined here because there's a minor, unintended discrepancy between
156
+ # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
157
+ # TODO: we likely should _not_ be setting `index=True` on the `id`
158
+ # attribute of the `Base` class, as `primary_key=True` already specifies a
159
+ # primary key constraint, which will implicitly create an index for the field.
160
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
161
+ created_at = Column(
162
+ DateTime(timezone=True), server_default=func.now(), nullable=False
163
+ )
164
+ updated_at = Column(
165
+ DateTime(timezone=True),
166
+ server_default=func.now(),
167
+ onupdate=func.now(),
168
+ nullable=False,
169
+ )
170
+
128
171
  # Database columns
129
172
  task_id = Column(
130
173
  String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
@@ -132,5 +175,10 @@ class ManualTaskReference(Base):
132
175
  reference_id = Column(String, nullable=False)
133
176
  reference_type = Column(EnumColumn(ManualTaskReferenceType), nullable=False)
134
177
 
178
+ __table_args__ = (
179
+ Index("ix_manual_task_reference_reference", "reference_id", "reference_type"),
180
+ Index("ix_manual_task_reference_task_id", "task_id"),
181
+ )
182
+
135
183
  # Relationships
136
184
  task = relationship("ManualTask", back_populates="references", viewonly=True)
@@ -1,11 +1,21 @@
1
1
  from typing import TYPE_CHECKING, Any, Optional, cast
2
2
 
3
- from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
3
+ from sqlalchemy import (
4
+ Boolean,
5
+ Column,
6
+ DateTime,
7
+ ForeignKey,
8
+ Index,
9
+ Integer,
10
+ String,
11
+ UniqueConstraint,
12
+ )
4
13
  from sqlalchemy.dialects.postgresql import JSONB
5
14
  from sqlalchemy.ext.declarative import declared_attr
6
15
  from sqlalchemy.orm import Session, relationship
16
+ from sqlalchemy.sql import func
7
17
 
8
- from fides.api.db.base_class import Base
18
+ from fides.api.db.base_class import Base, FidesBase
9
19
  from fides.api.db.util import EnumColumn
10
20
  from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
11
21
  from fides.api.schemas.manual_tasks.manual_task_config import (
@@ -37,7 +47,31 @@ class ManualTaskConfig(Base):
37
47
  def __tablename__(cls) -> str:
38
48
  return "manual_task_config"
39
49
 
40
- task_id = Column(String, ForeignKey("manual_task.id"), nullable=False)
50
+ # redefined here because there's a minor, unintended discrepancy between
51
+ # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
52
+ # TODO: we likely should _not_ be setting `index=True` on the `id`
53
+ # attribute of the `Base` class, as `primary_key=True` already specifies a
54
+ # primary key constraint, which will implicitly create an index for the field.
55
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
56
+ created_at = Column(
57
+ DateTime(timezone=True), server_default=func.now(), nullable=False
58
+ )
59
+ updated_at = Column(
60
+ DateTime(timezone=True),
61
+ server_default=func.now(),
62
+ onupdate=func.now(),
63
+ nullable=False,
64
+ )
65
+
66
+ task_id = Column(
67
+ String,
68
+ ForeignKey(
69
+ "manual_task.id",
70
+ name="manual_task_config_task_id_fkey",
71
+ ondelete="CASCADE",
72
+ ),
73
+ nullable=False,
74
+ )
41
75
  config_type = Column(EnumColumn(ManualTaskConfigurationType), nullable=False)
42
76
  version = Column(Integer, nullable=False, default=1)
43
77
  is_current = Column(Boolean, nullable=False, default=True)
@@ -47,6 +81,11 @@ class ManualTaskConfig(Base):
47
81
  default=ManualTaskExecutionTiming.pre_execution,
48
82
  )
49
83
 
84
+ __table_args__ = (
85
+ Index("ix_manual_task_config_config_type", "config_type"),
86
+ Index("ix_manual_task_config_task_id", "task_id"),
87
+ )
88
+
50
89
  # Relationships
51
90
  task = relationship("ManualTask", back_populates="configs", viewonly=True)
52
91
  instances = relationship(
@@ -109,8 +148,40 @@ class ManualTaskConfigField(Base):
109
148
  def __tablename__(cls) -> str:
110
149
  return "manual_task_config_field"
111
150
 
112
- task_id = Column(String, ForeignKey("manual_task.id"), nullable=False)
113
- config_id = Column(String, ForeignKey("manual_task_config.id"), nullable=False)
151
+ # redefined here because there's a minor, unintended discrepancy between
152
+ # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
153
+ # TODO: we likely should _not_ be setting `index=True` on the `id`
154
+ # attribute of the `Base` class, as `primary_key=True` already specifies a
155
+ # primary key constraint, which will implicitly create an index for the field.
156
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
157
+ created_at = Column(
158
+ DateTime(timezone=True), server_default=func.now(), nullable=False
159
+ )
160
+ updated_at = Column(
161
+ DateTime(timezone=True),
162
+ server_default=func.now(),
163
+ onupdate=func.now(),
164
+ nullable=False,
165
+ )
166
+
167
+ task_id = Column(
168
+ String,
169
+ ForeignKey(
170
+ "manual_task.id",
171
+ name="manual_task_config_field_task_id_fkey",
172
+ ondelete="CASCADE",
173
+ ),
174
+ nullable=False,
175
+ )
176
+ config_id = Column(
177
+ String,
178
+ ForeignKey(
179
+ "manual_task_config.id",
180
+ name="manual_task_config_field_config_id_fkey",
181
+ ondelete="CASCADE",
182
+ ),
183
+ nullable=False,
184
+ )
114
185
  field_key = Column(String, nullable=False)
115
186
  field_type = Column(
116
187
  EnumColumn(ManualTaskFieldType), nullable=False
@@ -119,6 +190,13 @@ class ManualTaskConfigField(Base):
119
190
  dict[str, Any], Column(JSONB, nullable=False, default={})
120
191
  )
121
192
 
193
+ __table_args__ = (
194
+ UniqueConstraint("config_id", "field_key", name="unique_field_key_per_config"),
195
+ Index("ix_manual_task_config_field_config_id", "config_id"),
196
+ Index("ix_manual_task_config_field_field_key", "field_key"),
197
+ Index("ix_manual_task_config_field_task_id", "task_id"),
198
+ )
199
+
122
200
  # Relationships
123
201
  config = relationship(
124
202
  "ManualTaskConfig", back_populates="field_definitions", viewonly=True