ethyca-fides 2.64.3b0__py2.py3-none-any.whl → 2.64.5rc1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ethyca-fides might be problematic. Click here for more details.

Files changed (284) hide show
  1. {ethyca_fides-2.64.3b0.dist-info → ethyca_fides-2.64.5rc1.dist-info}/METADATA +3 -3
  2. {ethyca_fides-2.64.3b0.dist-info → ethyca_fides-2.64.5rc1.dist-info}/RECORD +245 -237
  3. fides/_version.py +3 -3
  4. fides/api/api/v1/api.py +0 -2
  5. fides/api/db/base.py +3 -6
  6. fides/api/db/database.py +2 -27
  7. fides/api/graph/config.py +9 -16
  8. fides/api/models/attachment.py +3 -15
  9. fides/api/models/comment.py +5 -23
  10. fides/api/models/connectionconfig.py +0 -11
  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 +2 -27
  14. fides/api/models/manual_tasks/__init__.py +14 -0
  15. fides/api/models/manual_tasks/manual_task.py +120 -0
  16. fides/api/models/manual_tasks/manual_task_config.py +136 -0
  17. fides/api/models/manual_tasks/manual_task_log.py +104 -0
  18. fides/api/models/tcf_publisher_restrictions.py +4 -16
  19. fides/api/schemas/manual_tasks/__init__.py +0 -0
  20. fides/api/schemas/manual_tasks/manual_task_config.py +311 -0
  21. fides/api/schemas/manual_tasks/manual_task_schemas.py +79 -0
  22. fides/api/schemas/manual_tasks/manual_task_status.py +151 -0
  23. fides/api/service/connectors/query_configs/bigquery_query_config.py +22 -44
  24. fides/api/service/connectors/query_configs/query_config.py +2 -5
  25. fides/api/util/connection_util.py +2 -25
  26. fides/common/api/v1/urn_registry.py +0 -4
  27. fides/service/manual_tasks/__init__.py +0 -0
  28. fides/service/manual_tasks/manual_task_config_service.py +370 -0
  29. fides/service/manual_tasks/manual_task_service.py +294 -0
  30. fides/service/manual_tasks/utils.py +185 -0
  31. fides/ui-build/static/admin/404.html +1 -1
  32. fides/ui-build/static/admin/_next/static/chunks/{1040-3def3c62138371bb.js → 1040-c1c1372a7f909aef.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/1100-3fdbdf211c3c2a5b.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/{1817-a3813209d7a6d28d.js → 1817-96182c1558f80b63.js} +1 -1
  35. fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{2921-81a48418f77bc9a7.js → 2921-f5608275555bd7d9.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{3450-3a1f0e80ead8d1b0.js → 3450-272f26c102f3510d.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/3505-192986c86dc47869.js +1 -0
  39. fides/ui-build/static/admin/_next/static/chunks/3513-a563133845dc990f.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/{3855-b85ad4e52433d519.js → 3855-beb58821d1ddba89.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/{3872-09f81435f7905d76.js → 3872-82482e55e69b5a93.js} +1 -1
  43. fides/ui-build/static/admin/_next/static/chunks/{3923-565a852f322fdadc.js → 3923-a54c286a2ba0a47a.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/{401-c3f586a23a061526.js → 401-d2ce0a5a9120e056.js} +1 -1
  46. fides/ui-build/static/admin/_next/static/chunks/4060-3486b45081151b69.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/{409-e0d39af1d9ce8ff2.js → 409-86f4f687105917fb.js} +1 -1
  48. fides/ui-build/static/admin/_next/static/chunks/4121-f0aecb2abd384945.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/{4230-d80ae2430aca784a.js → 4230-63abbdfb9e9016b9.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/{431-c74dab231c8ac968.js → 431-77d59d43e90058ca.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/4481-d181a9db72984adf.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/{5309-0e44dbd914896514.js → 5309-10f68cf805817cfb.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/{5574-917c5ff63d222308.js → 5574-b6db9d62362e72d9.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +4 -0
  55. fides/ui-build/static/admin/_next/static/chunks/6277-ccdb50f676a1b336.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/6662-42940a2b00933e79.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/{6853-8d0a099f61c758d1.js → 6853-8a1b8e1c8b249f2f.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/{6882-13d6f8d95b1e404f.js → 6882-6c94583bffe85ba7.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/69-943b19d39da339d9.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/{6954-882b87698c5ed4fb.js → 6954-dc3540389daf94da.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/7553-e7ae268701f3dcfe.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/{79-3f742fe4efd9893f.js → 79-26ccd45dfd6653a7.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/{796-83a8bbdcdb67f2ba.js → 796-38c0f7e6755ad359.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/8433-1e065c55c8da73b0.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/{9046-6995482a030e323c.js → 9046-bbce3c73af16daf9.js} +1 -1
  67. fides/ui-build/static/admin/_next/static/chunks/{905-ffdbd0b14167e8bd.js → 905-742074a074be1055.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/{9226-8a3be36ad1a9c1e7.js → 9226-5e0ce31cfdedd5ee.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/{9392.9a948112de74781b.js → 9392.25024e070026343d.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/{9676.cc515c853b8cf578.js → 9676.e60a53f1f5890847.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/9767-96ed554a043c3c4d.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/{9951-b5b77bfcc8efb493.js → 9951-d3d5d0fe4c4edb86.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +1 -0
  74. fides/ui-build/static/admin/_next/static/chunks/pages/{404-488f8f03fe0ffbc7.js → 404-d41660858638adee.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-030b20295bb61f96.js → _app-6b3539f8d82ce9ae.js} +89 -92
  76. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-1e88ac28bc7a41b6.js → manual-7c5e1e845372c99b.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-f2c9451fffaaa529.js → multiple-87e78f52af21c4a9.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-68955d8441e60668.js +1 -0
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-b17d160147365cf3.js → add-vendors-6374a3a7747df964.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-8e168d78acdf0cfe.js → configure-0512151e2ed0f4c1.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-5ca2467de7986929.js → [id]-09435f4ab2deafd2.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-06bb3b0bf097fcdb.js → new-a0039f216fb3eb93.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-3c11fecc2797ab68.js → privacy-experience-cd036518b5d4efbe.js} +1 -1
  84. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-92bc6c7b82a679b4.js → [id]-0e534580abf670be.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-a3da3243526b7ecb.js → new-bb1790eb87b63109.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-b7d82386e7521041.js → privacy-notices-67e9846f877a3f38.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-20a2029b7e7fc895.js → properties-69a92b6ddbc2bae2.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-0ce299131db4c3e5.js → reporting-d07d05f4b898a5ed.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-9f6a7a231bba17b7.js → consent-23e886d692ab6d1a.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-11d52f1570759c4d.js → [resourceUrn]-c623d6f1a61c8ea9.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-fd705968b357e99a.js → [projectUrn]-6c766c766dc97c5c.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-45b585deee0b2371.js → projects-28937a8da3d73145.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b83afa5565d0c84e.js → [resourceUrn]-57bd5cdf784f059f.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-d8db234a44a2ddf4.js → resources-51d99174c8006eb5.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-2810fa2b519a076b.js → data-catalog-627fbf19dce88e81.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-e861699a8866c64b.js → [systemId]-ed1629b05519a370.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-5dd2fbf33e228f9c.js → [monitorId]-ad307bfc5f51fd9d.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-806cae6bc128cd38.js → action-center-07cbd61ede6e18ac.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-487285bd5eca2595.js → activity-6a2aaed8d0e66d82.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-393e20924c83373e.js → [resourceUrn]-06edce289876dea1.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-8733807dad4bc96e.js → detection-faf326a6200637d0.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-14bd7500362ff224.js → [resourceUrn]-64acf269256ee74f.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9e7dfd5a6acc2e8f.js → discovery-8c3e4be6d36da66d.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-c9509d72c538d22b.js → datamap-b576a94b583a7940.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-4e8a436297a055b2.js → [...subfieldNames]-4912858ffde4621a.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-6ce02295bb7f5b6d.js → [collectionName]-df21dd7ca0f35718.js} +1 -1
  107. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-9eaa907437fde063.js → [datasetId]-5ce28a329e8f667f.js} +1 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-5287c76ecf600281.js +1 -0
  109. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-b328595abf20ea5d.js → dataset-c6fab547396df6ac.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-81ab412e337d2888.js → [id]-d04c9925d324eee1.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-34dfc172165dbb1c.js → new-656abd09ea5ee39a.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-23fbec0590c8d192.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/{index-de954b741cbca022.js → index-b66687e8194495a2.js} +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-16dd6eff8f5dcc81.js → [id]-906bc5f05702efb0.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-024a1facb9be04d0.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-42edcab11e8b5c3c.js → [id]-b74db8488e2e4b58.js} +1 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-333e54ac8c3ad57a.js → add-template-a607018ff097b6c2.js} +1 -1
  118. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-8e1e6f3782983225.js → messaging-4a1a04c5179d2053.js} +1 -1
  119. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-1567c9770a5f05aa.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-920338760f5a71b5.js → AntForm-4949fe7f1815462b.js} +1 -1
  121. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-7462fb387a9de3f8.js → FormikAntFormItem-6085f73850302d55.js} +1 -1
  122. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-6148fce7a4e2e9ca.js → FormikControlled-a3158e8217c13850.js} +1 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-30efd8c937bf19e4.js → FormikField-8576f1ef5c67d87d.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-c44de83e0952d1e0.js → forms-341e67462b5e3352.js} +1 -1
  125. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-6f0e64f0c52bd68f.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-6971c7773dbf9b51.js +1 -0
  127. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-303bd2182da03088.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-831572cc7f42615f.js +1 -0
  129. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-1d981663e1a84166.js → configure-d24230b890b13762.js} +1 -1
  130. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-569ff31eff637034.js +1 -0
  131. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-b08a69b1c460c7fe.js → [id]-2bedc5013e13ab52.js} +1 -1
  132. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-a5d1c65ec21df69d.js → add-property-9d68bd70299dd945.js} +1 -1
  133. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-3a75c6ed8308d126.js → properties-c3116b6bfe2e695e.js} +1 -1
  134. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-dda59a7105ee609b.js → datamap-6dfa7091b99d8321.js} +1 -1
  135. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-6773158ba6ccf4b0.js → alpha-9751059905bba190.js} +1 -1
  136. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-2e046d177d52465c.js → about-ad29d77012ec9dba.js} +1 -1
  137. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-91f2ec72f9654cbd.js → [purpose_id]-32e3190c1ad00b40.js} +1 -1
  138. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13a17a4ace7293d1.js +1 -0
  139. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-94d97e3eb964c494.js → custom-fields-d2c0aac32f5d2930.js} +1 -1
  140. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-2c7ecff0a8a74c42.js → domain-records-a10674380f94d014.js} +1 -1
  141. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-78449b0e02bced88.js +1 -0
  142. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-7d299c4cb3199036.js +1 -0
  143. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-8d4383584c72eb5a.js → locations-cc7d629433fa6d44.js} +1 -1
  144. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a9fa55c40fa570a6.js +1 -0
  145. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-29892065d99ff113.js → regulations-64a813cb2741683b.js} +1 -1
  146. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-547b0cfe1e49e6d2.js +1 -0
  147. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-8fa8a2f238e08791.js → [id]-fb3d094e4f4585f6.js} +1 -1
  148. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-acdbdd3dfd21162f.js → systems-c2df5b7b0596a9cb.js} +1 -1
  149. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-261deb6fb3e51cb3.js +1 -0
  150. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-a2524414e968f862.js → new-b124cc24b930c9e1.js} +1 -1
  151. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-87ed17fa1d9f8f72.js → [id]-fd2ff6b13052c54e.js} +1 -1
  152. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-6b4e0764bb8816b8.js → user-management-fa052b0439920ef6.js} +1 -1
  153. fides/ui-build/static/admin/_next/static/chunks/{webpack-da78c536f3d86d06.js → webpack-e61d457474e00565.js} +1 -1
  154. fides/ui-build/static/admin/_next/static/css/{1994066ec907b7df.css → c693338e3bc8dcc6.css} +1 -1
  155. fides/ui-build/static/admin/_next/static/wyqNbL8A-USLbXV5z1vV0/_buildManifest.js +1 -0
  156. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  157. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  158. fides/ui-build/static/admin/add-systems.html +1 -1
  159. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  160. fides/ui-build/static/admin/consent/configure.html +1 -1
  161. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  162. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  163. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  164. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  165. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  166. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  167. fides/ui-build/static/admin/consent/properties.html +1 -1
  168. fides/ui-build/static/admin/consent/reporting.html +1 -1
  169. fides/ui-build/static/admin/consent.html +1 -1
  170. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  171. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  172. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  173. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  174. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  175. fides/ui-build/static/admin/data-catalog.html +1 -1
  176. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  177. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  178. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  179. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  180. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  181. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  182. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  183. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  184. fides/ui-build/static/admin/datamap.html +1 -1
  185. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  186. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  187. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  188. fides/ui-build/static/admin/dataset/new.html +1 -1
  189. fides/ui-build/static/admin/dataset.html +1 -1
  190. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  191. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  192. fides/ui-build/static/admin/datastore-connection.html +1 -1
  193. fides/ui-build/static/admin/index.html +1 -1
  194. fides/ui-build/static/admin/integrations/[id].html +1 -1
  195. fides/ui-build/static/admin/integrations.html +1 -1
  196. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  197. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  198. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  199. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  200. fides/ui-build/static/admin/lib/fides.js +2 -2
  201. fides/ui-build/static/admin/login/[provider].html +1 -1
  202. fides/ui-build/static/admin/login.html +1 -1
  203. fides/ui-build/static/admin/messaging/[id].html +1 -1
  204. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  205. fides/ui-build/static/admin/messaging.html +1 -1
  206. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  207. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  208. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  209. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  210. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  211. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  212. fides/ui-build/static/admin/poc/forms.html +1 -1
  213. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  214. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  215. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  216. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  217. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  218. fides/ui-build/static/admin/privacy-requests.html +1 -1
  219. fides/ui-build/static/admin/properties/[id].html +1 -1
  220. fides/ui-build/static/admin/properties/add-property.html +1 -1
  221. fides/ui-build/static/admin/properties.html +1 -1
  222. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  223. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  224. fides/ui-build/static/admin/settings/about.html +1 -1
  225. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  226. fides/ui-build/static/admin/settings/consent.html +1 -1
  227. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  228. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  229. fides/ui-build/static/admin/settings/domains.html +1 -1
  230. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  231. fides/ui-build/static/admin/settings/locations.html +1 -1
  232. fides/ui-build/static/admin/settings/organization.html +1 -1
  233. fides/ui-build/static/admin/settings/regulations.html +1 -1
  234. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  235. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  236. fides/ui-build/static/admin/systems.html +1 -1
  237. fides/ui-build/static/admin/taxonomy.html +1 -1
  238. fides/ui-build/static/admin/user-management/new.html +1 -1
  239. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  240. fides/ui-build/static/admin/user-management.html +1 -1
  241. fides/api/alembic/migrations/versions/41a634d8c669_manual_task_restrict_deletes.py +0 -257
  242. fides/api/alembic/migrations/versions/6a76a1fa4f3f_add_manual_task_instance_table.py +0 -256
  243. fides/api/alembic/migrations/versions/aadfe83c5644_add_manual_task_to_connectiontype_enum.py +0 -46
  244. fides/api/api/v1/endpoints/partitioning_endpoints.py +0 -108
  245. fides/api/models/manual_task.py +0 -965
  246. fides/api/schemas/partitioning/__init__.py +0 -17
  247. fides/api/schemas/partitioning/bigquery_time_based_partitioning.py +0 -31
  248. fides/api/schemas/partitioning/time_based_partitioning.py +0 -1376
  249. fides/ui-build/static/admin/_next/static/chunks/1169-76bbada4f3d16538.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/4121-de4ca969faf2b9f4.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/6084-40d5d94561a6093e.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/6662-6a915300505fd9c0.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/7476-aaf8970dbbbe4864.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/7630-c558dc3a199a633d.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/787-9c751615f5816094.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/9767-1dca308466dce863.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/9826-303b14ef4fc7ab4a.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a8e0bc7b6674f47e.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-55243db34cf77b7e.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cdb77886d7fd4f44.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-40a3cd14264796e2.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-3f62dd959a039fe9.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7852aa60090c8c9a.js +0 -1
  269. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11dd6152bf6607cc.js +0 -1
  270. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-c50c2ee7d7d2a585.js +0 -1
  271. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-282de19599d67aaf.js +0 -1
  272. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-3f962ade5df86380.js +0 -1
  273. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-0a87f29768425a37.js +0 -1
  274. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-b9e77c75c6b77c88.js +0 -1
  275. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-bb60c397a03558d8.js +0 -1
  276. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-4b835393f5274379.js +0 -1
  277. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9669fa6b20545530.js +0 -1
  278. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-c9510a1eb612323d.js +0 -1
  279. fides/ui-build/static/admin/_next/static/ezJVaZ_Oi_0J2-wPEOvj1/_buildManifest.js +0 -1
  280. {ethyca_fides-2.64.3b0.dist-info → ethyca_fides-2.64.5rc1.dist-info}/WHEEL +0 -0
  281. {ethyca_fides-2.64.3b0.dist-info → ethyca_fides-2.64.5rc1.dist-info}/entry_points.txt +0 -0
  282. {ethyca_fides-2.64.3b0.dist-info → ethyca_fides-2.64.5rc1.dist-info}/licenses/LICENSE +0 -0
  283. {ethyca_fides-2.64.3b0.dist-info → ethyca_fides-2.64.5rc1.dist-info}/top_level.txt +0 -0
  284. /fides/ui-build/static/admin/_next/static/{ezJVaZ_Oi_0J2-wPEOvj1 → wyqNbL8A-USLbXV5z1vV0}/_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-30T18:45:24-0400",
11
+ "date": "2025-07-01T14:34:23-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "25f89cf50afcac815c38422d299fb39b35cd76a3",
15
- "version": "2.64.3b0"
14
+ "full-revisionid": "9bd466c63833c2d7121e94da227bc32ae47e587d",
15
+ "version": "2.64.5rc1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
fides/api/api/v1/api.py CHANGED
@@ -11,7 +11,6 @@ from fides.api.api.v1.endpoints import (
11
11
  masking_endpoints,
12
12
  messaging_endpoints,
13
13
  oauth_endpoints,
14
- partitioning_endpoints,
15
14
  policy_endpoints,
16
15
  policy_webhook_endpoints,
17
16
  pre_approval_webhook_endpoints,
@@ -43,7 +42,6 @@ api_router.include_router(identity_verification_endpoints.router)
43
42
  api_router.include_router(storage_endpoints.router)
44
43
  api_router.include_router(messaging_endpoints.router)
45
44
  api_router.include_router(saas_config_endpoints.router)
46
- api_router.include_router(partitioning_endpoints.router)
47
45
  api_router.include_router(user_endpoints.router)
48
46
  api_router.include_router(user_permission_endpoints.router)
49
47
  api_router.include_router(manual_webhook_endpoints.router)
fides/api/db/base.py CHANGED
@@ -31,15 +31,12 @@ from fides.api.models.fides_user_respondent_email_verification import (
31
31
  )
32
32
  from fides.api.models.identity_salt import IdentitySalt
33
33
  from fides.api.models.location_regulation_selections import LocationRegulationSelections
34
- from fides.api.models.manual_task import (
35
- ManualTask,
34
+ from fides.api.models.manual_tasks.manual_task import ManualTask, ManualTaskReference
35
+ from fides.api.models.manual_tasks.manual_task_config import (
36
36
  ManualTaskConfig,
37
37
  ManualTaskConfigField,
38
- ManualTaskInstance,
39
- ManualTaskLog,
40
- ManualTaskReference,
41
- ManualTaskSubmission,
42
38
  )
39
+ from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
43
40
  from fides.api.models.manual_webhook import AccessManualWebhook
44
41
  from fides.api.models.messaging import MessagingConfig
45
42
  from fides.api.models.messaging_template import MessagingTemplate
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
19
18
  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,14 +41,6 @@ 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
-
52
44
  def downgrade_db(alembic_config: Config, revision: str = "head") -> None:
53
45
  """Downgrade the database to the specified migration revision."""
54
46
  log.info(f"Running database downgrade to revision {revision}")
@@ -86,7 +78,7 @@ def reset_db(database_url: str) -> None:
86
78
  Drops all tables/metadata from the database.
87
79
  """
88
80
  log.info("Resetting database...")
89
- engine = get_db_engine(database_uri=database_url)
81
+ engine = get_db_engine(database_url)
90
82
  with engine.connect() as connection:
91
83
  log.info("Dropping tables...")
92
84
  Base.metadata.drop_all(connection)
@@ -144,20 +136,3 @@ def configure_db(database_url: str, revision: Optional[str] = "head") -> None:
144
136
  log.error("Unable to configure database: {}: {}", error_type, error)
145
137
  log.opt(exception=True).error(error)
146
138
  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.")
fides/api/graph/config.py CHANGED
@@ -95,10 +95,6 @@ from fides.api.graph.data_type import (
95
95
  DataTypeConverter,
96
96
  get_data_type_converter,
97
97
  )
98
- from fides.api.schemas.partitioning import TimeBasedPartitioning
99
- from fides.api.schemas.partitioning.time_based_partitioning import (
100
- validate_partitioning_list,
101
- )
102
98
  from fides.api.util.collection_util import merge_dicts
103
99
  from fides.api.util.querytoken import QueryToken
104
100
 
@@ -463,7 +459,7 @@ class Collection(BaseModel):
463
459
  grouped_inputs: Set[str] = set()
464
460
  data_categories: Set[FidesKey] = set()
465
461
  masking_strategy_override: Optional[MaskingStrategyOverride] = None
466
- partitioning: Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]] = None
462
+ partitioning: Optional[Dict] = None
467
463
 
468
464
  @property
469
465
  def field_dict(self) -> Dict[FieldPath, Field]:
@@ -659,12 +655,14 @@ class Collection(BaseModel):
659
655
  @field_validator("partitioning")
660
656
  @classmethod
661
657
  def validate_partitioning(
662
- cls, partitioning: Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]]
663
- ) -> Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]]:
658
+ cls, partitioning: Optional[Dict[str, Any]]
659
+ ) -> Optional[Dict[str, Any]]:
664
660
  """
665
- Validates the `partitioning` field, which may be either a single dict
666
- or a list of dicts. Each dict must describe either legacy
667
- `where_clauses` or the required keys for time-based partitioning.
661
+ Validates the `partitioning` dict field.
662
+
663
+ The `partitioning` dict field is untyped in Fideslang, but here we enforce
664
+ that it has the required and expected `where_clauses` key, whose value must be
665
+ a list of strings.
668
666
 
669
667
  The string values are validated to ensure they match the expected syntax, which
670
668
  is strictly prescribed. The string values MUST be a valid SQL clause that defines
@@ -685,12 +683,7 @@ class Collection(BaseModel):
685
683
  in its conditional
686
684
 
687
685
  """
688
-
689
- if partitioning is None:
690
- return partitioning
691
-
692
- if isinstance(partitioning, list):
693
- validate_partitioning_list(partitioning)
686
+ if not partitioning:
694
687
  return partitioning
695
688
 
696
689
  # NOTE: when we deprecate `where_clause` partitioning in favor of a more proper partitioning DSL,
@@ -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, DateTime
8
+ from sqlalchemy import Column
9
9
  from sqlalchemy import Enum as EnumColumn
10
- from sqlalchemy import ForeignKey, Index, String, UniqueConstraint, func, orm
10
+ from sqlalchemy import ForeignKey, String, UniqueConstraint, orm
11
11
  from sqlalchemy.ext.declarative import declared_attr
12
12
  from sqlalchemy.orm import Session, relationship
13
13
 
@@ -64,14 +64,8 @@ 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
-
71
67
  attachment_id = Column(
72
- String,
73
- ForeignKey("attachment.id", name="attachment_reference_attachment_id_fkey"),
74
- nullable=False,
68
+ String, ForeignKey("attachment.id", ondelete="CASCADE"), nullable=False
75
69
  )
76
70
  reference_id = Column(String, nullable=False)
77
71
  reference_type = Column(EnumColumn(AttachmentReferenceType), nullable=False)
@@ -80,8 +74,6 @@ class AttachmentReference(Base):
80
74
  UniqueConstraint(
81
75
  "attachment_id", "reference_id", name="_attachment_reference_uc"
82
76
  ),
83
- Index("ix_attachment_reference_reference_id", "reference_id"),
84
- Index("ix_attachment_reference_reference_type", "reference_type"),
85
77
  )
86
78
 
87
79
  # Relationships
@@ -100,10 +92,6 @@ class Attachment(Base):
100
92
  Stores information about an Attachment.
101
93
  """
102
94
 
103
- created_at = Column(
104
- DateTime(timezone=True), server_default=func.now(), nullable=False
105
- )
106
-
107
95
  user_id = Column(
108
96
  String, ForeignKey("fidesuser.id", ondelete="SET NULL"), nullable=True
109
97
  )
@@ -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, DateTime
4
+ from sqlalchemy import Column
5
5
  from sqlalchemy import Enum as EnumColumn
6
- from sqlalchemy import ForeignKey, Index, String, func, orm
6
+ from sqlalchemy import ForeignKey, String, UniqueConstraint, 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, FidesBase
10
+ from fides.api.db.base_class import Base
11
11
  from fides.api.models.attachment import Attachment, AttachmentReferenceType
12
12
 
13
13
  if TYPE_CHECKING:
@@ -36,7 +36,6 @@ class CommentReferenceType(str, EnumType):
36
36
  access_manual_webhook = "access_manual_webhook"
37
37
  erasure_manual_webhook = "erasure_manual_webhook"
38
38
  privacy_request = "privacy_request"
39
- manual_task_submission = "manual_task_submission"
40
39
 
41
40
 
42
41
  class CommentReference(Base):
@@ -49,24 +48,12 @@ class CommentReference(Base):
49
48
  """Overriding base class method to set the table name."""
50
49
  return "comment_reference"
51
50
 
52
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
53
- created_at = Column(
54
- DateTime(timezone=True), server_default=func.now(), nullable=False
55
- )
56
-
57
- comment_id = Column(
58
- String,
59
- ForeignKey(
60
- "comment.id", name="comment_reference_comment_id_fkey", ondelete="CASCADE"
61
- ),
62
- nullable=False,
63
- )
51
+ comment_id = Column(String, ForeignKey("comment.id"), nullable=False)
64
52
  reference_id = Column(String, nullable=False)
65
53
  reference_type = Column(EnumColumn(CommentReferenceType), nullable=False)
66
54
 
67
55
  __table_args__ = (
68
- Index("ix_comment_reference_reference_id", "reference_id"),
69
- Index("ix_comment_reference_reference_type", "reference_type"),
56
+ UniqueConstraint("comment_id", "reference_id", name="comment_reference_uc"),
70
57
  )
71
58
 
72
59
  comment = relationship(
@@ -88,11 +75,6 @@ class Comment(Base):
88
75
  Stores information about a Comment.
89
76
  """
90
77
 
91
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
92
- created_at = Column(
93
- DateTime(timezone=True), server_default=func.now(), nullable=False
94
- )
95
-
96
78
  user_id = Column(
97
79
  String, ForeignKey("fidesuser.id", ondelete="SET NULL"), nullable=True
98
80
  )
@@ -53,7 +53,6 @@ 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
57
56
  mariadb = "mariadb"
58
57
  mongodb = "mongodb"
59
58
  mssql = "mssql"
@@ -89,7 +88,6 @@ class ConnectionType(enum.Enum):
89
88
  ConnectionType.google_cloud_sql_postgres.value: "Google Cloud SQL for Postgres",
90
89
  ConnectionType.https.value: "Policy Webhook",
91
90
  ConnectionType.manual_webhook.value: "Manual Process",
92
- ConnectionType.manual_task.value: "Manual Task",
93
91
  ConnectionType.manual.value: "Manual Connector",
94
92
  ConnectionType.mariadb.value: "MariaDB",
95
93
  ConnectionType.mongodb.value: "MongoDB",
@@ -134,7 +132,6 @@ class ConnectionType(enum.Enum):
134
132
  ConnectionType.google_cloud_sql_postgres.value: SystemType.database,
135
133
  ConnectionType.https.value: SystemType.manual,
136
134
  ConnectionType.manual_webhook.value: SystemType.manual,
137
- ConnectionType.manual_task.value: SystemType.manual,
138
135
  ConnectionType.manual.value: SystemType.manual,
139
136
  ConnectionType.mariadb.value: SystemType.database,
140
137
  ConnectionType.mongodb.value: SystemType.database,
@@ -232,14 +229,6 @@ class ConnectionConfig(Base):
232
229
  uselist=False,
233
230
  )
234
231
 
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
-
243
232
  pre_approval_webhooks = relationship( # type: ignore[misc]
244
233
  "PreApprovalWebhook",
245
234
  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", unique=True),
35
+ Index("ix_dbcache_namespace_cache_key", "namespace", "cache_key"),
36
36
  )
37
37
 
38
38
  @classmethod
@@ -159,8 +159,6 @@ 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,
164
162
  )
165
163
 
166
164
  shared_config_id = Column(
@@ -344,16 +342,16 @@ class StagedResourceAncestor(Base):
344
342
  Its entries should be deleted when the staged resource is deleted, via cascade.
345
343
  """
346
344
 
347
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
348
-
349
345
  ancestor_urn = Column(
350
346
  String,
351
347
  ForeignKey("stagedresource.urn", ondelete="CASCADE"),
348
+ primary_key=True,
352
349
  nullable=False,
353
350
  )
354
351
  descendant_urn = Column(
355
352
  String,
356
353
  ForeignKey("stagedresource.urn", ondelete="CASCADE"),
354
+ primary_key=True,
357
355
  nullable=False,
358
356
  )
359
357
 
@@ -374,7 +372,6 @@ class StagedResourceAncestor(Base):
374
372
  UniqueConstraint(
375
373
  "ancestor_urn", "descendant_urn", name="uq_staged_resource_ancestor"
376
374
  ),
377
- Index("ix_staged_resource_ancestor_pkey", "id", unique=True),
378
375
  Index("ix_staged_resource_ancestor_ancestor", "ancestor_urn"),
379
376
  Index("ix_staged_resource_ancestor_descendant", "descendant_urn"),
380
377
  )
@@ -473,7 +470,12 @@ class StagedResource(Base):
473
470
  server_default="{}",
474
471
  default=dict,
475
472
  )
476
- user_assigned_system_id = Column(String, nullable=True, index=True)
473
+ user_assigned_system_id = Column(
474
+ String,
475
+ ForeignKey(System.id_field_path),
476
+ nullable=True,
477
+ index=True,
478
+ )
477
479
 
478
480
  # pointers to child and parent URNs
479
481
  children = Column(
@@ -525,7 +527,7 @@ class StagedResource(Base):
525
527
 
526
528
  data_uses = Column(
527
529
  ARRAY(String),
528
- nullable=True,
530
+ nullable=False,
529
531
  server_default="{}",
530
532
  default=dict,
531
533
  )
@@ -586,14 +588,12 @@ class MonitorExecution(Base):
586
588
  configuration details used in connecting to the external data store.
587
589
  """
588
590
 
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)
591
+ monitor_config_key = Column(
592
+ String,
593
+ ForeignKey(MonitorConfig.key),
594
+ nullable=False,
595
+ index=True,
596
+ )
597
597
  status = Column(String, nullable=True)
598
598
  started = Column(
599
599
  DateTime(timezone=True),
@@ -3,13 +3,12 @@ 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, Index, String
6
+ from sqlalchemy import Column, DateTime, ForeignKey, String
7
7
  from sqlalchemy.ext.declarative import declared_attr
8
8
  from sqlalchemy.orm import Session, relationship
9
- from sqlalchemy.sql import func
10
9
 
11
10
  from fides.api.cryptography.cryptographic_util import generate_secure_random_string
12
- from fides.api.db.base_class import Base, FidesBase
11
+ from fides.api.db.base_class import Base
13
12
  from fides.api.util.identity_verification import IdentityVerificationMixin
14
13
  from fides.config import get_config
15
14
 
@@ -41,22 +40,6 @@ class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
41
40
  def __tablename__(self) -> str:
42
41
  return "fides_user_respondent_email_verification"
43
42
 
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
-
60
43
  user_id = Column(
61
44
  String,
62
45
  ForeignKey("fidesuser.id", ondelete="CASCADE"),
@@ -76,14 +59,6 @@ class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
76
59
  foreign_keys=[user_id],
77
60
  )
78
61
 
79
- __table_args__ = (
80
- Index(
81
- "ix_fides_user_respondent_email_verification_id",
82
- "id",
83
- unique=True,
84
- ),
85
- )
86
-
87
62
  @classmethod
88
63
  def create(
89
64
  cls, db: Session, *, data: dict[str, Any], check_name: bool = False
@@ -0,0 +1,14 @@
1
+ from fides.api.models.manual_tasks.manual_task import ManualTask, ManualTaskReference
2
+ from fides.api.models.manual_tasks.manual_task_config import (
3
+ ManualTaskConfig,
4
+ ManualTaskConfigField,
5
+ )
6
+ from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
7
+
8
+ __all__ = [
9
+ "ManualTask",
10
+ "ManualTaskConfig",
11
+ "ManualTaskConfigField",
12
+ "ManualTaskReference",
13
+ "ManualTaskLog",
14
+ ]
@@ -0,0 +1,120 @@
1
+ from typing import TYPE_CHECKING, Any
2
+
3
+ from sqlalchemy import Column, DateTime, ForeignKey, String
4
+ from sqlalchemy.ext.declarative import declared_attr
5
+ from sqlalchemy.orm import Session, relationship
6
+
7
+ from fides.api.db.base_class import Base
8
+ from fides.api.db.util import EnumColumn
9
+ from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
10
+ from fides.api.schemas.manual_tasks.manual_task_schemas import (
11
+ ManualTaskLogStatus,
12
+ ManualTaskParentEntityType,
13
+ ManualTaskReferenceType,
14
+ ManualTaskType,
15
+ )
16
+
17
+ if TYPE_CHECKING: # pragma: no cover
18
+ from fides.api.models.manual_tasks.manual_task_config import ( # pragma: no cover
19
+ ManualTaskConfig,
20
+ )
21
+
22
+
23
+ class ManualTask(Base):
24
+ """Model for storing manual tasks.
25
+
26
+ This model can be used for both privacy request tasks and general tasks.
27
+ For privacy requests, it replaces the functionality of manual webhooks.
28
+ For other use cases, it provides a flexible task management system.
29
+
30
+ There can only be one ManualTask per parent entity.
31
+ You can create multiple Configs for the same ManualTask.
32
+ """
33
+
34
+ @declared_attr
35
+ def __tablename__(cls) -> str:
36
+ """Overriding base class method to set the table name."""
37
+ return "manual_task"
38
+
39
+ # Database columns
40
+ task_type = Column(
41
+ EnumColumn(ManualTaskType),
42
+ nullable=False,
43
+ default=ManualTaskType.privacy_request,
44
+ )
45
+ parent_entity_id = Column(String, nullable=False)
46
+ parent_entity_type = Column(
47
+ EnumColumn(ManualTaskParentEntityType),
48
+ nullable=False,
49
+ default=ManualTaskParentEntityType.connection_config,
50
+ )
51
+ due_date = Column(DateTime, nullable=True)
52
+
53
+ # Relationships
54
+ references = relationship(
55
+ "ManualTaskReference",
56
+ back_populates="task",
57
+ uselist=True,
58
+ cascade="all, delete-orphan",
59
+ )
60
+ logs = relationship(
61
+ "ManualTaskLog",
62
+ back_populates="task",
63
+ primaryjoin="and_(ManualTask.id == ManualTaskLog.task_id)",
64
+ viewonly=True,
65
+ order_by="ManualTaskLog.created_at",
66
+ )
67
+ configs = relationship(
68
+ "ManualTaskConfig",
69
+ back_populates="task",
70
+ cascade="all, delete-orphan",
71
+ )
72
+
73
+ # Properties
74
+ @property
75
+ def assigned_users(self) -> list[str]:
76
+ """Get all users assigned to this task."""
77
+ if not self.references:
78
+ return []
79
+ return [
80
+ ref.reference_id
81
+ for ref in self.references
82
+ if ref.reference_type == ManualTaskReferenceType.assigned_user
83
+ ]
84
+
85
+ # CRUD Operations
86
+ @classmethod
87
+ def create(
88
+ cls, db: Session, *, data: dict[str, Any], check_name: bool = True
89
+ ) -> "ManualTask":
90
+ """Create a new manual task."""
91
+ task = super().create(db=db, data=data, check_name=check_name)
92
+ ManualTaskLog.create_log(
93
+ db=db,
94
+ task_id=task.id,
95
+ status=ManualTaskLogStatus.created,
96
+ message=f"Created manual task for {data['task_type']}",
97
+ )
98
+ return task
99
+
100
+
101
+ class ManualTaskReference(Base):
102
+ """Join table to associate manual tasks with multiple references.
103
+
104
+ A single task may have many references including privacy requests, configurations, and assigned users.
105
+ """
106
+
107
+ @declared_attr
108
+ def __tablename__(cls) -> str:
109
+ """Overriding base class method to set the table name."""
110
+ return "manual_task_reference"
111
+
112
+ # Database columns
113
+ task_id = Column(
114
+ String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
115
+ )
116
+ reference_id = Column(String, nullable=False)
117
+ reference_type = Column(EnumColumn(ManualTaskReferenceType), nullable=False)
118
+
119
+ # Relationships
120
+ task = relationship("ManualTask", back_populates="references")