ethyca-fides 2.64.1rc0__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 (270) hide show
  1. {ethyca_fides-2.64.1rc0.dist-info → ethyca_fides-2.64.2b0.dist-info}/METADATA +2 -2
  2. {ethyca_fides-2.64.1rc0.dist-info → ethyca_fides-2.64.2b0.dist-info}/RECORD +235 -235
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/6a76a1fa4f3f_add_manual_task_instance_table.py +256 -0
  5. fides/api/alembic/migrations/versions/aadfe83c5644_add_manual_task_to_connectiontype_enum.py +46 -0
  6. fides/api/db/base.py +4 -0
  7. fides/api/db/database.py +27 -2
  8. fides/api/models/attachment.py +15 -3
  9. fides/api/models/comment.py +22 -5
  10. fides/api/models/connectionconfig.py +11 -0
  11. fides/api/models/db_cache.py +1 -1
  12. fides/api/models/detection_discovery/core.py +15 -15
  13. fides/api/models/fides_user_respondent_email_verification.py +27 -2
  14. fides/api/models/manual_tasks/__init__.py +7 -1
  15. fides/api/models/manual_tasks/manual_task.py +68 -4
  16. fides/api/models/manual_tasks/manual_task_config.py +123 -12
  17. fides/api/models/manual_tasks/manual_task_instance.py +294 -0
  18. fides/api/models/manual_tasks/manual_task_log.py +48 -10
  19. fides/api/models/tcf_publisher_restrictions.py +16 -4
  20. fides/api/schemas/manual_tasks/manual_task_schemas.py +42 -0
  21. fides/api/schemas/manual_tasks/manual_task_status.py +107 -46
  22. fides/common/api/v1/urn_registry.py +4 -0
  23. fides/service/manual_tasks/manual_task_config_service.py +17 -5
  24. fides/service/manual_tasks/manual_task_instance_service.py +285 -0
  25. fides/service/manual_tasks/manual_task_service.py +66 -10
  26. fides/ui-build/static/admin/404.html +1 -1
  27. fides/ui-build/static/admin/_next/static/chunks/{1040-630c7f4284dc6f70.js → 1040-fa06cd3b94d97493.js} +1 -1
  28. fides/ui-build/static/admin/_next/static/chunks/1169-f75d7958fbe6e136.js +1 -0
  29. fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/{1817-b4688ba5042ec687.js → 1817-a3813209d7a6d28d.js} +1 -1
  31. fides/ui-build/static/admin/_next/static/chunks/{2921-aabf41bf3d7573f9.js → 2921-81a48418f77bc9a7.js} +1 -1
  32. fides/ui-build/static/admin/_next/static/chunks/{3450-bdaeb35442d810b4.js → 3450-2bb9f1b5a23fb520.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/{3855-0dec3e7d9e886550.js → 3855-b85ad4e52433d519.js} +1 -1
  35. fides/ui-build/static/admin/_next/static/chunks/{3872-ffa16c2df7ef0ab6.js → 3872-09f81435f7905d76.js} +1 -1
  36. fides/ui-build/static/admin/_next/static/chunks/{3923-5d580fbb1dd6ae01.js → 3923-2565d952c662555c.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{401-fceaae662cfca5a5.js → 401-8ea41700c5437d38.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/{409-037cfc3f096150f0.js → 409-e0d39af1d9ce8ff2.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/4121-55f5b0bcb5ba41fb.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/{4230-1cdb7ea1be370ed3.js → 4230-b3fe52af1035dff5.js} +1 -1
  41. fides/ui-build/static/admin/_next/static/chunks/{431-f72599f01b98f07d.js → 431-c74dab231c8ac968.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/{5309-4511df9708d5a63c.js → 5309-0e44dbd914896514.js} +1 -1
  43. fides/ui-build/static/admin/_next/static/chunks/{5574-3cd33b3a6c937899.js → 5574-917c5ff63d222308.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/6084-57446e3c99078be8.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/6662-45b8977f48a219f5.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/{6853-a4097260e402980e.js → 6853-8d0a099f61c758d1.js} +1 -1
  48. fides/ui-build/static/admin/_next/static/chunks/{6882-3cc73d407a088d7d.js → 6882-13d6f8d95b1e404f.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/{6954-13a25cef3a8fdd76.js → 6954-4e106b3f7097fe6e.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/7476-b5fb1c0cf4ad8f63.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/7630-e3d06546f9dfeb91.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/787-381156db4e81dbe8.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/{79-5670e31eb65d0a53.js → 79-3f742fe4efd9893f.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/{796-9a6b13c838e25538.js → 796-83a8bbdcdb67f2ba.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/{9046-fdf53cc7e926a8c1.js → 9046-6995482a030e323c.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/{905-742074a074be1055.js → 905-ffdbd0b14167e8bd.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/{9226-ba6587e46ec7659a.js → 9226-2be3a6efb127148f.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/{9392.25024e070026343d.js → 9392.9a948112de74781b.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/{9676.e60a53f1f5890847.js → 9676.cc515c853b8cf578.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/9767-980699a4d0f56acc.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/9826-303b14ef4fc7ab4a.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/{9951-f9ab5cac7e2c05ab.js → 9951-57c0a671463e0ebb.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/pages/{404-ac2f0844e5c4b4cd.js → 404-488f8f03fe0ffbc7.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-8ec6e466f3373ac0.js → _app-5e6fbbf17a62ac76.js} +68 -65
  67. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-0a5f2310ce6b1059.js → manual-1e88ac28bc7a41b6.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-00cb904825aad7e3.js → multiple-f2c9451fffaaa529.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-40a6b572d49c2b68.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-fa7305b88c1afd20.js → add-vendors-b17d160147365cf3.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-f140ec9d8e8a0f7a.js → configure-8e168d78acdf0cfe.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-0edb7c92518e7d21.js → [id]-5ca2467de7986929.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a0039f216fb3eb93.js → new-06bb3b0bf097fcdb.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-d8d926f0735a2546.js → privacy-experience-3c11fecc2797ab68.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-5c949f2e3cef2398.js → [id]-92bc6c7b82a679b4.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-130155cfb4a0bcc7.js → new-a3da3243526b7ecb.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-1135ad8924d32c36.js → privacy-notices-b7d82386e7521041.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-776855e370414beb.js → properties-20a2029b7e7fc895.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-21c23f75ff1135d9.js → reporting-0ce299131db4c3e5.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-4d5ea70a77df1bb8.js → consent-9f6a7a231bba17b7.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-c623d6f1a61c8ea9.js → [resourceUrn]-11d52f1570759c4d.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-030ee304cbe5e530.js → [projectUrn]-fd705968b357e99a.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-cfac259a30641e68.js → projects-45b585deee0b2371.js} +1 -1
  84. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-57bd5cdf784f059f.js → [resourceUrn]-b83afa5565d0c84e.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-51d99174c8006eb5.js → resources-d8db234a44a2ddf4.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-7b5aec33da578745.js → data-catalog-4fd60a74c0369e3e.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-c948f93c833d4358.js → [systemId]-e861699a8866c64b.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-333f53caab751428.js → [monitorId]-5dd2fbf33e228f9c.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-27205f8457a1ecb0.js → action-center-806cae6bc128cd38.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-20a1043f6a06198f.js → activity-487285bd5eca2595.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-06edce289876dea1.js → [resourceUrn]-393e20924c83373e.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-faf326a6200637d0.js → detection-8733807dad4bc96e.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-64acf269256ee74f.js → [resourceUrn]-14bd7500362ff224.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-8c3e4be6d36da66d.js → discovery-9e7dfd5a6acc2e8f.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-fb50de22f83edd4a.js → datamap-c9509d72c538d22b.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-41ab27c4195cfa93.js → [...subfieldNames]-4e8a436297a055b2.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-6e2caba24b3e78c2.js → [collectionName]-6ce02295bb7f5b6d.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-904d43e31157aa55.js → [datasetId]-9eaa907437fde063.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-de5e9ccfecdf31b1.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-8f7d16bc5e9229c8.js → dataset-dcdec3644f05188d.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-4a33dd0371dbaebc.js → [id]-81ab412e337d2888.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-e88509346b2d2851.js → new-34dfc172165dbb1c.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cdb77886d7fd4f44.js +1 -0
  104. fides/ui-build/static/admin/_next/static/chunks/pages/{index-1adb6bcb71701ac2.js → index-de954b741cbca022.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-fdc2964fa7d1d8fd.js → [id]-dba625eddca48f69.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-40a3cd14264796e2.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-9b4d1d61c7c97509.js → [id]-42edcab11e8b5c3c.js} +1 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-f8fd4795e260887c.js → add-template-333e54ac8c3ad57a.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-aa744ae8b61e5ff2.js → messaging-8e1e6f3782983225.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-3407158757fb3627.js → ant-components-25c74d51a49b2403.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-47e947c02ae90fd0.js → AntForm-920338760f5a71b5.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-24f9a44512ce8827.js → FormikAntFormItem-7462fb387a9de3f8.js} +1 -1
  113. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-e567a69f8c37fb9a.js → FormikControlled-6148fce7a4e2e9ca.js} +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-35a33f9c7def2220.js → FormikField-30efd8c937bf19e4.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-780e18dde8e38099.js → forms-c44de83e0952d1e0.js} +1 -1
  116. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7852aa60090c8c9a.js +1 -0
  117. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11dd6152bf6607cc.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-83a548813fec4f90.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a087847d6cbccc65.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-1a1aa83a3f88844c.js → configure-1d981663e1a84166.js} +1 -1
  121. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a5794999a1cc0b6.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-19737d4f21aadbee.js → [id]-b08a69b1c460c7fe.js} +1 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-9ccb295110feee20.js → add-property-a5d1c65ec21df69d.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-3a1037a2e036212a.js → properties-3a75c6ed8308d126.js} +1 -1
  125. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-4cdbbb8cd1d8698e.js → datamap-911996819aa16e04.js} +1 -1
  126. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-965cc21889b25e44.js → alpha-6773158ba6ccf4b0.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-0e1c381d488a7ada.js → about-2e046d177d52465c.js} +1 -1
  128. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-d0e350d2a2667883.js → [purpose_id]-a5420c3ba02fe6a5.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-2a95eb36aa2b47a6.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-6f866bc799a5f67f.js → custom-fields-06075fbf122c98d0.js} +1 -1
  131. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-0b44b2b224077dcd.js → domain-records-2c7ecff0a8a74c42.js} +1 -1
  132. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-afed8ba5498a9f93.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-c1d3f3cb9c6ca463.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-811dadb489f23d7d.js → locations-8d4383584c72eb5a.js} +1 -1
  135. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-aae79a344a96a367.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-54f142bc3e4c95ba.js → regulations-29892065d99ff113.js} +1 -1
  137. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9669fa6b20545530.js +1 -0
  138. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-6eb886e7b7e6785b.js → [id]-8fa8a2f238e08791.js} +1 -1
  139. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-7b71274334c559a4.js → systems-acdbdd3dfd21162f.js} +1 -1
  140. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-9b4d28f02df3a238.js +1 -0
  141. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-b124cc24b930c9e1.js → new-a2524414e968f862.js} +1 -1
  142. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-75d41fde668b9025.js → [id]-87ed17fa1d9f8f72.js} +1 -1
  143. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-dd43755b687c09a7.js → user-management-6b4e0764bb8816b8.js} +1 -1
  144. fides/ui-build/static/admin/_next/static/chunks/webpack-da78c536f3d86d06.js +1 -0
  145. fides/ui-build/static/admin/_next/static/css/{c693338e3bc8dcc6.css → 67ac3d00a5f134a2.css} +1 -1
  146. fides/ui-build/static/admin/_next/static/jg8bMUMFAG7KlEnEbTRct/_buildManifest.js +1 -0
  147. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  148. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  149. fides/ui-build/static/admin/add-systems.html +1 -1
  150. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  151. fides/ui-build/static/admin/consent/configure.html +1 -1
  152. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  153. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  154. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  155. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  156. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  157. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  158. fides/ui-build/static/admin/consent/properties.html +1 -1
  159. fides/ui-build/static/admin/consent/reporting.html +1 -1
  160. fides/ui-build/static/admin/consent.html +1 -1
  161. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  162. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  163. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  164. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  165. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  166. fides/ui-build/static/admin/data-catalog.html +1 -1
  167. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  168. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  169. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  170. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  171. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  172. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  173. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  174. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  175. fides/ui-build/static/admin/datamap.html +1 -1
  176. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  177. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  178. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  179. fides/ui-build/static/admin/dataset/new.html +1 -1
  180. fides/ui-build/static/admin/dataset.html +1 -1
  181. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  182. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  183. fides/ui-build/static/admin/datastore-connection.html +1 -1
  184. fides/ui-build/static/admin/index.html +1 -1
  185. fides/ui-build/static/admin/integrations/[id].html +1 -1
  186. fides/ui-build/static/admin/integrations.html +1 -1
  187. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  188. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  189. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  190. fides/ui-build/static/admin/lib/fides.js +2 -2
  191. fides/ui-build/static/admin/login/[provider].html +1 -1
  192. fides/ui-build/static/admin/login.html +1 -1
  193. fides/ui-build/static/admin/messaging/[id].html +1 -1
  194. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  195. fides/ui-build/static/admin/messaging.html +1 -1
  196. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  197. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  198. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  199. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  200. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  201. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  202. fides/ui-build/static/admin/poc/forms.html +1 -1
  203. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  204. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  205. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  206. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  207. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  208. fides/ui-build/static/admin/privacy-requests.html +1 -1
  209. fides/ui-build/static/admin/properties/[id].html +1 -1
  210. fides/ui-build/static/admin/properties/add-property.html +1 -1
  211. fides/ui-build/static/admin/properties.html +1 -1
  212. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  213. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  214. fides/ui-build/static/admin/settings/about.html +1 -1
  215. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  216. fides/ui-build/static/admin/settings/consent.html +1 -1
  217. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  218. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  219. fides/ui-build/static/admin/settings/domains.html +1 -1
  220. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  221. fides/ui-build/static/admin/settings/locations.html +1 -1
  222. fides/ui-build/static/admin/settings/organization.html +1 -1
  223. fides/ui-build/static/admin/settings/regulations.html +1 -1
  224. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  225. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  226. fides/ui-build/static/admin/systems.html +1 -1
  227. fides/ui-build/static/admin/taxonomy.html +1 -1
  228. fides/ui-build/static/admin/user-management/new.html +1 -1
  229. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  230. fides/ui-build/static/admin/user-management.html +1 -1
  231. fides/ui-build/static/admin/_next/static/chunks/1100-d43cb04522a6505c.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/3505-a79256cd851dfab4.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/3513-8677ee280eaef0da.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/4060-71cd041e5a57ca5a.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/4121-78a76e980acbd539.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/4481-f597a7cf03f8c9e1.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +0 -4
  241. fides/ui-build/static/admin/_next/static/chunks/6277-3fb4c7fc790a6d20.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/6662-6a6b90fc8f11558f.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/69-6889d6674c95e7b5.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/7553-a95939c32d54b5b7.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/8433-adb1fcb29d82f1b7.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/9767-e49b065d03ce4e80.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-587e21d14e0a5196.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d4e31a1c4a58800e.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adc286ff254e7f41.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7a17dffa515e5560.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-91dd0039cc2b70bc.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-b01cbbaac34dadbc.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a15410de7f1d0f84.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c4e1b69fb5bab61a.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-7796fbf458f8f159.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-5d00e1155bd11178.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-d2cdbe770683e9df.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-24108f615ff5e1e7.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-18534d2a79a3850b.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +0 -1
  265. fides/ui-build/static/admin/_next/static/hCJxUAFBWobWrps6RkP0K/_buildManifest.js +0 -1
  266. {ethyca_fides-2.64.1rc0.dist-info → ethyca_fides-2.64.2b0.dist-info}/WHEEL +0 -0
  267. {ethyca_fides-2.64.1rc0.dist-info → ethyca_fides-2.64.2b0.dist-info}/entry_points.txt +0 -0
  268. {ethyca_fides-2.64.1rc0.dist-info → ethyca_fides-2.64.2b0.dist-info}/licenses/LICENSE +0 -0
  269. {ethyca_fides-2.64.1rc0.dist-info → ethyca_fides-2.64.2b0.dist-info}/top_level.txt +0 -0
  270. /fides/ui-build/static/admin/_next/static/{hCJxUAFBWobWrps6RkP0K → 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-24T11:20:40-0400",
11
+ "date": "2025-06-26T17:32:16+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "21463b495627cf56ebf6405ae00a63c0c1184d53",
15
- "version": "2.64.1rc0"
14
+ "full-revisionid": "a393007f54ae4f6f6660c0eadb35ad167a869be7",
15
+ "version": "2.64.2b0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,256 @@
1
+ """add_manual_task_instance_table
2
+
3
+ Revision ID: 6a76a1fa4f3f
4
+ Revises: ba414a58ba90
5
+ Create Date: 2025-06-10 22:45:27.591492
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects.postgresql import JSONB
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "6a76a1fa4f3f"
15
+ down_revision = "ba414a58ba90"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ # Add execution_timing column to manual_task_config
22
+ op.add_column(
23
+ "manual_task_config",
24
+ sa.Column(
25
+ "execution_timing",
26
+ sa.String(),
27
+ nullable=False,
28
+ server_default="pre_execution",
29
+ ),
30
+ )
31
+
32
+ # Remove due_date column from manual_task
33
+ op.drop_column("manual_task", "due_date")
34
+
35
+ # Create manual_task_instance table
36
+ op.create_table(
37
+ "manual_task_instance",
38
+ sa.Column("id", sa.String(), nullable=False),
39
+ sa.Column(
40
+ "created_at",
41
+ sa.DateTime(timezone=True),
42
+ server_default=sa.text("now()"),
43
+ nullable=False,
44
+ ),
45
+ sa.Column(
46
+ "updated_at",
47
+ sa.DateTime(timezone=True),
48
+ server_default=sa.text("now()"),
49
+ nullable=False,
50
+ ),
51
+ sa.Column("task_id", sa.String(), nullable=False),
52
+ sa.Column("config_id", sa.String(), nullable=False),
53
+ sa.Column("entity_id", sa.String(), nullable=False),
54
+ sa.Column("entity_type", sa.String(), nullable=False),
55
+ sa.Column("status", sa.String(), nullable=False, server_default="pending"),
56
+ sa.Column("due_date", sa.DateTime(timezone=True), nullable=True),
57
+ sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True),
58
+ sa.Column("completed_by_id", sa.String(), nullable=True),
59
+ sa.ForeignKeyConstraint(
60
+ ["config_id"], ["manual_task_config.id"], ondelete="CASCADE"
61
+ ),
62
+ sa.ForeignKeyConstraint(["task_id"], ["manual_task.id"], ondelete="CASCADE"),
63
+ sa.PrimaryKeyConstraint("id"),
64
+ )
65
+
66
+ # Create indexes for manual_task_instance
67
+ op.create_index(
68
+ "ix_manual_task_instance_task_id", "manual_task_instance", ["task_id"]
69
+ )
70
+ op.create_index(
71
+ "ix_manual_task_instance_config_id", "manual_task_instance", ["config_id"]
72
+ )
73
+ op.create_index(
74
+ "ix_manual_task_instance_entity_id", "manual_task_instance", ["entity_id"]
75
+ )
76
+ op.create_index(
77
+ "ix_manual_task_instance_entity_type", "manual_task_instance", ["entity_type"]
78
+ )
79
+ op.create_index(
80
+ "ix_manual_task_instance_status", "manual_task_instance", ["status"]
81
+ )
82
+ op.create_index(
83
+ "ix_manual_task_instance_completed_at", "manual_task_instance", ["completed_at"]
84
+ )
85
+ # Composite index for common query pattern
86
+ op.create_index(
87
+ "ix_manual_task_instance_entity",
88
+ "manual_task_instance",
89
+ ["entity_type", "entity_id"],
90
+ )
91
+
92
+ # Create manual_task_submission table
93
+ op.create_table(
94
+ "manual_task_submission",
95
+ sa.Column("id", sa.String(), nullable=False),
96
+ sa.Column(
97
+ "created_at",
98
+ sa.DateTime(timezone=True),
99
+ server_default=sa.text("now()"),
100
+ nullable=False,
101
+ ),
102
+ sa.Column(
103
+ "updated_at",
104
+ sa.DateTime(timezone=True),
105
+ server_default=sa.text("now()"),
106
+ nullable=False,
107
+ ),
108
+ sa.Column("task_id", sa.String(), nullable=False),
109
+ sa.Column("config_id", sa.String(), nullable=False),
110
+ sa.Column("field_id", sa.String(), nullable=False),
111
+ sa.Column("instance_id", sa.String(), nullable=False),
112
+ sa.Column("submitted_by", sa.String(), nullable=True),
113
+ sa.Column("submitted_at", sa.DateTime(timezone=True), nullable=False),
114
+ sa.Column("data", JSONB, nullable=False),
115
+ sa.ForeignKeyConstraint(
116
+ ["config_id"], ["manual_task_config.id"], ondelete="CASCADE"
117
+ ),
118
+ sa.ForeignKeyConstraint(
119
+ ["field_id"], ["manual_task_config_field.id"], ondelete="CASCADE"
120
+ ),
121
+ sa.ForeignKeyConstraint(
122
+ ["instance_id"], ["manual_task_instance.id"], ondelete="CASCADE"
123
+ ),
124
+ sa.ForeignKeyConstraint(["task_id"], ["manual_task.id"], ondelete="CASCADE"),
125
+ sa.ForeignKeyConstraint(
126
+ ["submitted_by"], ["fidesuser.id"], ondelete="SET NULL"
127
+ ),
128
+ sa.PrimaryKeyConstraint("id"),
129
+ )
130
+
131
+ # Create indexes for manual_task_submission
132
+ op.create_index(
133
+ "ix_manual_task_submission_task_id", "manual_task_submission", ["task_id"]
134
+ )
135
+ op.create_index(
136
+ "ix_manual_task_submission_config_id", "manual_task_submission", ["config_id"]
137
+ )
138
+ op.create_index(
139
+ "ix_manual_task_submission_field_id", "manual_task_submission", ["field_id"]
140
+ )
141
+ op.create_index(
142
+ "ix_manual_task_submission_instance_id",
143
+ "manual_task_submission",
144
+ ["instance_id"],
145
+ )
146
+ op.create_index(
147
+ "ix_manual_task_submission_submitted_by",
148
+ "manual_task_submission",
149
+ ["submitted_by"],
150
+ )
151
+ op.create_index(
152
+ "ix_manual_task_submission_submitted_at",
153
+ "manual_task_submission",
154
+ ["submitted_at"],
155
+ )
156
+ # Composite index for common query pattern
157
+ op.create_index(
158
+ "ix_manual_task_submission_instance_field",
159
+ "manual_task_submission",
160
+ ["instance_id", "field_id"],
161
+ )
162
+
163
+ # Add foreign key constraint to manual_task_log.instance_id
164
+ op.create_foreign_key(
165
+ "fk_manual_task_log_instance_id",
166
+ "manual_task_log",
167
+ "manual_task_instance",
168
+ ["instance_id"],
169
+ ["id"],
170
+ ondelete="CASCADE",
171
+ )
172
+
173
+ # Update foreign key constraint for manual_task_log.config_id to use CASCADE
174
+ op.drop_constraint(
175
+ "fk_manual_task_log_config_id", "manual_task_log", type_="foreignkey"
176
+ )
177
+ op.create_foreign_key(
178
+ "fk_manual_task_log_config_id",
179
+ "manual_task_log",
180
+ "manual_task_config",
181
+ ["config_id"],
182
+ ["id"],
183
+ ondelete="CASCADE",
184
+ )
185
+
186
+
187
+ def downgrade():
188
+ # Drop execution_timing column from manual_task_config
189
+ op.drop_column("manual_task_config", "execution_timing")
190
+
191
+ # Add due_date column to manual_task
192
+ op.add_column(
193
+ "manual_task",
194
+ sa.Column("due_date", sa.DateTime(timezone=True), nullable=True),
195
+ )
196
+
197
+ # Drop foreign key constraint from manual_task_log.instance_id
198
+ op.drop_constraint(
199
+ "fk_manual_task_log_instance_id", "manual_task_log", type_="foreignkey"
200
+ )
201
+
202
+ # Revert foreign key constraint for manual_task_log.config_id back to SET NULL
203
+ op.drop_constraint(
204
+ "fk_manual_task_log_config_id", "manual_task_log", type_="foreignkey"
205
+ )
206
+ op.create_foreign_key(
207
+ "fk_manual_task_log_config_id",
208
+ "manual_task_log",
209
+ "manual_task_config",
210
+ ["config_id"],
211
+ ["id"],
212
+ ondelete="SET NULL",
213
+ )
214
+
215
+ # Drop indexes first
216
+ op.drop_index(
217
+ "ix_manual_task_submission_instance_field", table_name="manual_task_submission"
218
+ )
219
+ op.drop_index(
220
+ "ix_manual_task_submission_submitted_at", table_name="manual_task_submission"
221
+ )
222
+ op.drop_index(
223
+ "ix_manual_task_submission_submitted_by", table_name="manual_task_submission"
224
+ )
225
+ op.drop_index(
226
+ "ix_manual_task_submission_instance_id", table_name="manual_task_submission"
227
+ )
228
+ op.drop_index(
229
+ "ix_manual_task_submission_field_id", table_name="manual_task_submission"
230
+ )
231
+ op.drop_index(
232
+ "ix_manual_task_submission_config_id", table_name="manual_task_submission"
233
+ )
234
+ op.drop_index(
235
+ "ix_manual_task_submission_task_id", table_name="manual_task_submission"
236
+ )
237
+
238
+ op.drop_index("ix_manual_task_instance_entity", table_name="manual_task_instance")
239
+ op.drop_index(
240
+ "ix_manual_task_instance_completed_at", table_name="manual_task_instance"
241
+ )
242
+ op.drop_index("ix_manual_task_instance_status", table_name="manual_task_instance")
243
+ op.drop_index(
244
+ "ix_manual_task_instance_entity_type", table_name="manual_task_instance"
245
+ )
246
+ op.drop_index(
247
+ "ix_manual_task_instance_entity_id", table_name="manual_task_instance"
248
+ )
249
+ op.drop_index(
250
+ "ix_manual_task_instance_config_id", table_name="manual_task_instance"
251
+ )
252
+ op.drop_index("ix_manual_task_instance_task_id", table_name="manual_task_instance")
253
+
254
+ # Drop tables in reverse order to handle foreign key constraints
255
+ op.drop_table("manual_task_submission")
256
+ op.drop_table("manual_task_instance")
@@ -0,0 +1,46 @@
1
+ """add_manual_task_to_connectiontype_enum
2
+
3
+ Revision ID: aadfe83c5644
4
+ Revises: 6a76a1fa4f3f
5
+ Create Date: 2025-06-19 18:55:08.131278
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "aadfe83c5644"
14
+ down_revision = "6a76a1fa4f3f"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade():
20
+ # Add manual_task to ConnectionType enum
21
+ op.execute("alter type connectiontype rename to connectiontype_old")
22
+ op.execute(
23
+ "create type connectiontype as enum('attentive_email', 'bigquery', 'datahub', 'dynamodb', 'fides', 'generic_consent_email', 'generic_erasure_email', 'dynamic_erasure_email', 'google_cloud_sql_mysql', 'google_cloud_sql_postgres', 'https', 'manual', 'manual_webhook', 'manual_task', 'mariadb', 'mongodb', 'mssql', 'mysql', 'okta', 'postgres', 'rds_mysql', 'rds_postgres', 'redshift', 's3', 'saas', 'scylla', 'snowflake', 'sovrn', 'timescale', 'website')"
24
+ )
25
+ op.execute(
26
+ (
27
+ "alter table connectionconfig alter column connection_type type connectiontype using "
28
+ "connection_type::text::connectiontype"
29
+ )
30
+ )
31
+ op.execute("drop type connectiontype_old")
32
+
33
+
34
+ def downgrade():
35
+ # Remove manual_task from ConnectionType enum
36
+ op.execute("alter type connectiontype rename to connectiontype_old")
37
+ op.execute(
38
+ "create type connectiontype as enum('attentive_email', 'bigquery', 'datahub', 'dynamodb', 'fides', 'generic_consent_email', 'generic_erasure_email', 'dynamic_erasure_email', 'google_cloud_sql_mysql', 'google_cloud_sql_postgres', 'https', 'manual', 'manual_webhook', 'mariadb', 'mongodb', 'mssql', 'mysql', 'okta', 'postgres', 'rds_mysql', 'rds_postgres', 'redshift', 's3', 'saas', 'scylla', 'snowflake', 'sovrn', 'timescale', 'website')"
39
+ )
40
+ op.execute(
41
+ (
42
+ "alter table connectionconfig alter column connection_type type connectiontype using "
43
+ "connection_type::text::connectiontype"
44
+ )
45
+ )
46
+ op.execute("drop type connectiontype_old")
fides/api/db/base.py CHANGED
@@ -36,6 +36,10 @@ from fides.api.models.manual_tasks.manual_task_config import (
36
36
  ManualTaskConfig,
37
37
  ManualTaskConfigField,
38
38
  )
39
+ from fides.api.models.manual_tasks.manual_task_instance import (
40
+ ManualTaskInstance,
41
+ ManualTaskSubmission,
42
+ )
39
43
  from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
40
44
  from fides.api.models.manual_webhook import AccessManualWebhook
41
45
  from fides.api.models.messaging import MessagingConfig
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
  )
@@ -53,6 +53,7 @@ class ConnectionType(enum.Enum):
53
53
  https = "https"
54
54
  manual = "manual" # Deprecated - use manual_webhook instead
55
55
  manual_webhook = "manual_webhook" # Runs upfront before the traversal
56
+ manual_task = "manual_task" # Manual task integration
56
57
  mariadb = "mariadb"
57
58
  mongodb = "mongodb"
58
59
  mssql = "mssql"
@@ -88,6 +89,7 @@ class ConnectionType(enum.Enum):
88
89
  ConnectionType.google_cloud_sql_postgres.value: "Google Cloud SQL for Postgres",
89
90
  ConnectionType.https.value: "Policy Webhook",
90
91
  ConnectionType.manual_webhook.value: "Manual Process",
92
+ ConnectionType.manual_task.value: "Manual Task",
91
93
  ConnectionType.manual.value: "Manual Connector",
92
94
  ConnectionType.mariadb.value: "MariaDB",
93
95
  ConnectionType.mongodb.value: "MongoDB",
@@ -132,6 +134,7 @@ class ConnectionType(enum.Enum):
132
134
  ConnectionType.google_cloud_sql_postgres.value: SystemType.database,
133
135
  ConnectionType.https.value: SystemType.manual,
134
136
  ConnectionType.manual_webhook.value: SystemType.manual,
137
+ ConnectionType.manual_task.value: SystemType.manual,
135
138
  ConnectionType.manual.value: SystemType.manual,
136
139
  ConnectionType.mariadb.value: SystemType.database,
137
140
  ConnectionType.mongodb.value: SystemType.database,
@@ -229,6 +232,14 @@ class ConnectionConfig(Base):
229
232
  uselist=False,
230
233
  )
231
234
 
235
+ manual_task = relationship( # type: ignore[misc]
236
+ "ManualTask",
237
+ primaryjoin="and_(ConnectionConfig.id == foreign(ManualTask.parent_entity_id), "
238
+ "ManualTask.parent_entity_type == 'connection_config')",
239
+ cascade="delete",
240
+ uselist=False,
241
+ )
242
+
232
243
  pre_approval_webhooks = relationship( # type: ignore[misc]
233
244
  "PreApprovalWebhook",
234
245
  back_populates="connection_config",
@@ -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