ethyca-fides 2.64.2b0__py2.py3-none-any.whl → 2.64.2rc0__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 (271) hide show
  1. {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/METADATA +2 -2
  2. {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/RECORD +235 -235
  3. fides/_version.py +3 -3
  4. fides/api/db/base.py +0 -4
  5. fides/api/db/database.py +2 -27
  6. fides/api/models/attachment.py +3 -15
  7. fides/api/models/comment.py +5 -22
  8. fides/api/models/connectionconfig.py +0 -11
  9. fides/api/models/db_cache.py +1 -1
  10. fides/api/models/detection_discovery/core.py +15 -15
  11. fides/api/models/fides_user_respondent_email_verification.py +2 -27
  12. fides/api/models/manual_tasks/__init__.py +1 -7
  13. fides/api/models/manual_tasks/manual_task.py +4 -68
  14. fides/api/models/manual_tasks/manual_task_config.py +12 -123
  15. fides/api/models/manual_tasks/manual_task_log.py +10 -48
  16. fides/api/models/tcf_publisher_restrictions.py +4 -16
  17. fides/api/schemas/manual_tasks/manual_task_schemas.py +0 -42
  18. fides/api/schemas/manual_tasks/manual_task_status.py +46 -107
  19. fides/common/api/v1/urn_registry.py +0 -4
  20. fides/service/manual_tasks/manual_task_config_service.py +5 -17
  21. fides/service/manual_tasks/manual_task_service.py +10 -66
  22. fides/ui-build/static/admin/404.html +1 -1
  23. fides/ui-build/static/admin/_next/static/chunks/{1040-fa06cd3b94d97493.js → 1040-af383f535c11eb24.js} +1 -1
  24. fides/ui-build/static/admin/_next/static/chunks/1100-2dfb464ef0359d6d.js +1 -0
  25. fides/ui-build/static/admin/_next/static/chunks/{1817-a3813209d7a6d28d.js → 1817-b4688ba5042ec687.js} +1 -1
  26. fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +1 -0
  27. fides/ui-build/static/admin/_next/static/chunks/{2921-81a48418f77bc9a7.js → 2921-aabf41bf3d7573f9.js} +1 -1
  28. fides/ui-build/static/admin/_next/static/chunks/3450-f6fc4ed04a63935f.js +1 -0
  29. fides/ui-build/static/admin/_next/static/chunks/3505-a79256cd851dfab4.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/3513-24db696153a0778b.js +1 -0
  31. fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +1 -0
  32. fides/ui-build/static/admin/_next/static/chunks/{3855-b85ad4e52433d519.js → 3855-0dec3e7d9e886550.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/{3872-09f81435f7905d76.js → 3872-ffa16c2df7ef0ab6.js} +1 -1
  34. fides/ui-build/static/admin/_next/static/chunks/{3923-2565d952c662555c.js → 3923-b0fb0989671407b7.js} +1 -1
  35. fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{401-8ea41700c5437d38.js → 401-6721f8bcb14a6537.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/4060-cb74476245af456e.js +1 -0
  38. fides/ui-build/static/admin/_next/static/chunks/{409-e0d39af1d9ce8ff2.js → 409-037cfc3f096150f0.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/4121-8a791c8cc79d28c4.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/{4230-b3fe52af1035dff5.js → 4230-18f4849f9db58a08.js} +1 -1
  41. fides/ui-build/static/admin/_next/static/chunks/{431-c74dab231c8ac968.js → 431-f72599f01b98f07d.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/4481-f597a7cf03f8c9e1.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/{5309-0e44dbd914896514.js → 5309-4511df9708d5a63c.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/{5574-917c5ff63d222308.js → 5574-3cd33b3a6c937899.js} +1 -1
  45. fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +4 -0
  46. fides/ui-build/static/admin/_next/static/chunks/6277-32adfa799bfd1616.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/6662-0ce35f1a7a4d07b0.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/{6853-8d0a099f61c758d1.js → 6853-a4097260e402980e.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/{6882-13d6f8d95b1e404f.js → 6882-3cc73d407a088d7d.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/69-9952d261ca57275e.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/{6954-4e106b3f7097fe6e.js → 6954-8bac07b8278ded5c.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/7553-a95939c32d54b5b7.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/{79-3f742fe4efd9893f.js → 79-5670e31eb65d0a53.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/{796-83a8bbdcdb67f2ba.js → 796-9a6b13c838e25538.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/8433-0acacfca722ce475.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/{9046-6995482a030e323c.js → 9046-fdf53cc7e926a8c1.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/{905-ffdbd0b14167e8bd.js → 905-742074a074be1055.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/{9226-2be3a6efb127148f.js → 9226-50427ff861ffa8bf.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/{9392.9a948112de74781b.js → 9392.25024e070026343d.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/{9676.cc515c853b8cf578.js → 9676.e60a53f1f5890847.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/9767-118e4abca85bbd97.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/{9951-57c0a671463e0ebb.js → 9951-7de52d41dc1319f7.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/pages/{404-488f8f03fe0ffbc7.js → 404-ac2f0844e5c4b4cd.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-5e6fbbf17a62ac76.js → _app-8310662c216e8f04.js} +65 -68
  67. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-1e88ac28bc7a41b6.js → manual-0a5f2310ce6b1059.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-f2c9451fffaaa529.js → multiple-00cb904825aad7e3.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-9fee3bc13b393070.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-b17d160147365cf3.js → add-vendors-fa7305b88c1afd20.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-8e168d78acdf0cfe.js → configure-f140ec9d8e8a0f7a.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-5ca2467de7986929.js → [id]-0edb7c92518e7d21.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-06bb3b0bf097fcdb.js → new-a0039f216fb3eb93.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-3c11fecc2797ab68.js → privacy-experience-d8d926f0735a2546.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-92bc6c7b82a679b4.js → [id]-5c949f2e3cef2398.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-a3da3243526b7ecb.js → new-130155cfb4a0bcc7.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-b7d82386e7521041.js → privacy-notices-1135ad8924d32c36.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-20a2029b7e7fc895.js → properties-776855e370414beb.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-0ce299131db4c3e5.js → reporting-21c23f75ff1135d9.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-9f6a7a231bba17b7.js → consent-4d5ea70a77df1bb8.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-11d52f1570759c4d.js → [resourceUrn]-c623d6f1a61c8ea9.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-fd705968b357e99a.js → [projectUrn]-030ee304cbe5e530.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-45b585deee0b2371.js → projects-cfac259a30641e68.js} +1 -1
  84. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b83afa5565d0c84e.js → [resourceUrn]-57bd5cdf784f059f.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-d8db234a44a2ddf4.js → resources-51d99174c8006eb5.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-4fd60a74c0369e3e.js → data-catalog-132e54310cd047af.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-e861699a8866c64b.js → [systemId]-c948f93c833d4358.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-5dd2fbf33e228f9c.js → [monitorId]-333f53caab751428.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-806cae6bc128cd38.js → action-center-27205f8457a1ecb0.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-487285bd5eca2595.js → activity-20a1043f6a06198f.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-393e20924c83373e.js → [resourceUrn]-06edce289876dea1.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-8733807dad4bc96e.js → detection-faf326a6200637d0.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-14bd7500362ff224.js → [resourceUrn]-64acf269256ee74f.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9e7dfd5a6acc2e8f.js → discovery-8c3e4be6d36da66d.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-c9509d72c538d22b.js → datamap-fb50de22f83edd4a.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-4e8a436297a055b2.js → [...subfieldNames]-41ab27c4195cfa93.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-6ce02295bb7f5b6d.js → [collectionName]-6e2caba24b3e78c2.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-9eaa907437fde063.js → [datasetId]-904d43e31157aa55.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-3f997c29f6d8cb24.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-dcdec3644f05188d.js → dataset-5a24f549246605b2.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-81ab412e337d2888.js → [id]-4a33dd0371dbaebc.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-34dfc172165dbb1c.js → new-e88509346b2d2851.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js +1 -0
  104. fides/ui-build/static/admin/_next/static/chunks/pages/{index-de954b741cbca022.js → index-1adb6bcb71701ac2.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-dba625eddca48f69.js → [id]-41c4f321da3c6169.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adc286ff254e7f41.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-42edcab11e8b5c3c.js → [id]-9b4d1d61c7c97509.js} +1 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-333e54ac8c3ad57a.js → add-template-f8fd4795e260887c.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-8e1e6f3782983225.js → messaging-aa744ae8b61e5ff2.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-25c74d51a49b2403.js → ant-components-3407158757fb3627.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-920338760f5a71b5.js → AntForm-47e947c02ae90fd0.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-7462fb387a9de3f8.js → FormikAntFormItem-24f9a44512ce8827.js} +1 -1
  113. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-6148fce7a4e2e9ca.js → FormikControlled-e567a69f8c37fb9a.js} +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-30efd8c937bf19e4.js → FormikField-35a33f9c7def2220.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-c44de83e0952d1e0.js → forms-780e18dde8e38099.js} +1 -1
  116. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7a17dffa515e5560.js +1 -0
  117. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-91dd0039cc2b70bc.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-dda47b868cf8ea27.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-53acc4a492d160ab.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-1d981663e1a84166.js → configure-1a1aa83a3f88844c.js} +1 -1
  121. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-138e4697e269d339.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-b08a69b1c460c7fe.js → [id]-19737d4f21aadbee.js} +1 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-a5d1c65ec21df69d.js → add-property-9ccb295110feee20.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-3a75c6ed8308d126.js → properties-3a1037a2e036212a.js} +1 -1
  125. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-911996819aa16e04.js → datamap-959d2a35ca015976.js} +1 -1
  126. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-6773158ba6ccf4b0.js → alpha-965cc21889b25e44.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-2e046d177d52465c.js → about-0e1c381d488a7ada.js} +1 -1
  128. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-a5420c3ba02fe6a5.js → [purpose_id]-1ad018d87c79a9d6.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4c56222e847986ff.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-06075fbf122c98d0.js → custom-fields-9d5310145cbdc8ba.js} +1 -1
  131. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-2c7ecff0a8a74c42.js → domain-records-0b44b2b224077dcd.js} +1 -1
  132. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-50bdc72e2f34c39e.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-983fbf2cf335b945.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-8d4383584c72eb5a.js → locations-811dadb489f23d7d.js} +1 -1
  135. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-5ae1bdd93c5bd72a.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-29892065d99ff113.js → regulations-54f142bc3e4c95ba.js} +1 -1
  137. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js +1 -0
  138. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-8fa8a2f238e08791.js → [id]-6eb886e7b7e6785b.js} +1 -1
  139. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-acdbdd3dfd21162f.js → systems-7b71274334c559a4.js} +1 -1
  140. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-88178d29a15ba479.js +1 -0
  141. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-a2524414e968f862.js → new-b124cc24b930c9e1.js} +1 -1
  142. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-87ed17fa1d9f8f72.js → [id]-75d41fde668b9025.js} +1 -1
  143. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-6b4e0764bb8816b8.js → user-management-dd43755b687c09a7.js} +1 -1
  144. fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +1 -0
  145. fides/ui-build/static/admin/_next/static/css/{67ac3d00a5f134a2.css → c693338e3bc8dcc6.css} +1 -1
  146. fides/ui-build/static/admin/_next/static/rJbP2kuATyoki-YIQWFdS/_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/api/alembic/migrations/versions/6a76a1fa4f3f_add_manual_task_instance_table.py +0 -256
  232. fides/api/alembic/migrations/versions/aadfe83c5644_add_manual_task_to_connectiontype_enum.py +0 -46
  233. fides/api/models/manual_tasks/manual_task_instance.py +0 -294
  234. fides/service/manual_tasks/manual_task_instance_service.py +0 -285
  235. fides/ui-build/static/admin/_next/static/chunks/1169-f75d7958fbe6e136.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/3450-2bb9f1b5a23fb520.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/4121-55f5b0bcb5ba41fb.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/6084-57446e3c99078be8.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/6662-45b8977f48a219f5.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/7476-b5fb1c0cf4ad8f63.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/7630-e3d06546f9dfeb91.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/787-381156db4e81dbe8.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/9767-980699a4d0f56acc.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/9826-303b14ef4fc7ab4a.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-40a6b572d49c2b68.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-de5e9ccfecdf31b1.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cdb77886d7fd4f44.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-40a3cd14264796e2.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7852aa60090c8c9a.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11dd6152bf6607cc.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-83a548813fec4f90.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a087847d6cbccc65.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a5794999a1cc0b6.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-2a95eb36aa2b47a6.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-afed8ba5498a9f93.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-c1d3f3cb9c6ca463.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-aae79a344a96a367.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9669fa6b20545530.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-9b4d28f02df3a238.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/webpack-da78c536f3d86d06.js +0 -1
  266. fides/ui-build/static/admin/_next/static/jg8bMUMFAG7KlEnEbTRct/_buildManifest.js +0 -1
  267. {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/WHEEL +0 -0
  268. {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/entry_points.txt +0 -0
  269. {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/licenses/LICENSE +0 -0
  270. {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/top_level.txt +0 -0
  271. /fides/ui-build/static/admin/_next/static/{jg8bMUMFAG7KlEnEbTRct → rJbP2kuATyoki-YIQWFdS}/_ssgManifest.js +0 -0
@@ -1,21 +1,11 @@
1
- from typing import TYPE_CHECKING, Any, Optional, cast
2
-
3
- from sqlalchemy import (
4
- Boolean,
5
- Column,
6
- DateTime,
7
- ForeignKey,
8
- Index,
9
- Integer,
10
- String,
11
- UniqueConstraint,
12
- )
1
+ from typing import TYPE_CHECKING, Any, Optional
2
+
3
+ from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
13
4
  from sqlalchemy.dialects.postgresql import JSONB
14
5
  from sqlalchemy.ext.declarative import declared_attr
15
6
  from sqlalchemy.orm import Session, relationship
16
- from sqlalchemy.sql import func
17
7
 
18
- from fides.api.db.base_class import Base, FidesBase
8
+ from fides.api.db.base_class import Base
19
9
  from fides.api.db.util import EnumColumn
20
10
  from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
21
11
  from fides.api.schemas.manual_tasks.manual_task_config import (
@@ -23,19 +13,10 @@ from fides.api.schemas.manual_tasks.manual_task_config import (
23
13
  ManualTaskFieldMetadata,
24
14
  ManualTaskFieldType,
25
15
  )
26
- from fides.api.schemas.manual_tasks.manual_task_schemas import (
27
- ManualTaskExecutionTiming,
28
- ManualTaskLogStatus,
29
- )
16
+ from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
30
17
 
31
18
  if TYPE_CHECKING: # pragma: no cover
32
19
  from fides.api.models.manual_tasks.manual_task import ManualTask # pragma: no cover
33
- from fides.api.models.manual_tasks.manual_task_instance import (
34
- ManualTaskInstance, # pragma: no cover
35
- )
36
- from fides.api.models.manual_tasks.manual_task_instance import (
37
- ManualTaskSubmission, # pragma: no cover
38
- )
39
20
 
40
21
 
41
22
  class ManualTaskConfig(Base):
@@ -47,53 +28,13 @@ class ManualTaskConfig(Base):
47
28
  def __tablename__(cls) -> str:
48
29
  return "manual_task_config"
49
30
 
50
- # redefined here because there's a minor, unintended discrepancy between
51
- # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
52
- # TODO: we likely should _not_ be setting `index=True` on the `id`
53
- # attribute of the `Base` class, as `primary_key=True` already specifies a
54
- # primary key constraint, which will implicitly create an index for the field.
55
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
56
- created_at = Column(
57
- DateTime(timezone=True), server_default=func.now(), nullable=False
58
- )
59
- updated_at = Column(
60
- DateTime(timezone=True),
61
- server_default=func.now(),
62
- onupdate=func.now(),
63
- nullable=False,
64
- )
65
-
66
- task_id = Column(
67
- String,
68
- ForeignKey(
69
- "manual_task.id",
70
- name="manual_task_config_task_id_fkey",
71
- ondelete="CASCADE",
72
- ),
73
- nullable=False,
74
- )
31
+ task_id = Column(String, ForeignKey("manual_task.id"), nullable=False)
75
32
  config_type = Column(EnumColumn(ManualTaskConfigurationType), nullable=False)
76
33
  version = Column(Integer, nullable=False, default=1)
77
34
  is_current = Column(Boolean, nullable=False, default=True)
78
- execution_timing = Column(
79
- EnumColumn(ManualTaskExecutionTiming),
80
- nullable=False,
81
- default=ManualTaskExecutionTiming.pre_execution,
82
- )
83
-
84
- __table_args__ = (
85
- Index("ix_manual_task_config_config_type", "config_type"),
86
- Index("ix_manual_task_config_task_id", "task_id"),
87
- )
88
35
 
89
36
  # Relationships
90
- task = relationship("ManualTask", back_populates="configs", viewonly=True)
91
- instances = relationship(
92
- "ManualTaskInstance", back_populates="config", uselist=True, viewonly=True
93
- )
94
- submissions = relationship(
95
- "ManualTaskSubmission", back_populates="config", uselist=True, viewonly=True
96
- )
37
+ task = relationship("ManualTask", back_populates="configs")
97
38
  field_definitions = relationship(
98
39
  "ManualTaskConfigField",
99
40
  back_populates="config",
@@ -104,7 +45,7 @@ class ManualTaskConfig(Base):
104
45
  "ManualTaskLog",
105
46
  back_populates="config",
106
47
  primaryjoin="ManualTaskConfig.id == ManualTaskLog.config_id",
107
- cascade="all, delete-orphan",
48
+ viewonly=True,
108
49
  )
109
50
 
110
51
  @classmethod
@@ -148,72 +89,20 @@ class ManualTaskConfigField(Base):
148
89
  def __tablename__(cls) -> str:
149
90
  return "manual_task_config_field"
150
91
 
151
- # redefined here because there's a minor, unintended discrepancy between
152
- # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
153
- # TODO: we likely should _not_ be setting `index=True` on the `id`
154
- # attribute of the `Base` class, as `primary_key=True` already specifies a
155
- # primary key constraint, which will implicitly create an index for the field.
156
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
157
- created_at = Column(
158
- DateTime(timezone=True), server_default=func.now(), nullable=False
159
- )
160
- updated_at = Column(
161
- DateTime(timezone=True),
162
- server_default=func.now(),
163
- onupdate=func.now(),
164
- nullable=False,
165
- )
166
-
167
- task_id = Column(
168
- String,
169
- ForeignKey(
170
- "manual_task.id",
171
- name="manual_task_config_field_task_id_fkey",
172
- ondelete="CASCADE",
173
- ),
174
- nullable=False,
175
- )
176
- config_id = Column(
177
- String,
178
- ForeignKey(
179
- "manual_task_config.id",
180
- name="manual_task_config_field_config_id_fkey",
181
- ondelete="CASCADE",
182
- ),
183
- nullable=False,
184
- )
92
+ task_id = Column(String, ForeignKey("manual_task.id"), nullable=False)
93
+ config_id = Column(String, ForeignKey("manual_task_config.id"), nullable=False)
185
94
  field_key = Column(String, nullable=False)
186
95
  field_type = Column(
187
96
  EnumColumn(ManualTaskFieldType), nullable=False
188
97
  ) # Using ManualTaskFieldType
189
- field_metadata: dict[str, Any] = cast(
190
- dict[str, Any], Column(JSONB, nullable=False, default={})
191
- )
192
-
193
- __table_args__ = (
194
- UniqueConstraint("config_id", "field_key", name="unique_field_key_per_config"),
195
- Index("ix_manual_task_config_field_config_id", "config_id"),
196
- Index("ix_manual_task_config_field_field_key", "field_key"),
197
- Index("ix_manual_task_config_field_task_id", "task_id"),
198
- )
98
+ field_metadata = Column(JSONB, nullable=False, default={})
199
99
 
200
100
  # Relationships
201
- config = relationship(
202
- "ManualTaskConfig", back_populates="field_definitions", viewonly=True
203
- )
204
- submissions = relationship(
205
- "ManualTaskSubmission",
206
- back_populates="field",
207
- uselist=True,
208
- cascade="all, delete-orphan",
209
- )
101
+ config = relationship("ManualTaskConfig", back_populates="field_definitions")
210
102
 
211
103
  @property
212
104
  def field_metadata_model(self) -> ManualTaskFieldMetadata:
213
105
  """Get the field metadata as a Pydantic model."""
214
- assert isinstance(
215
- self.field_metadata, dict
216
- ), "field_metadata must be a dictionary"
217
106
  return ManualTaskFieldMetadata.model_validate(self.field_metadata)
218
107
 
219
108
  @classmethod
@@ -1,12 +1,11 @@
1
1
  from typing import TYPE_CHECKING, Any, Optional
2
2
 
3
- from sqlalchemy import Column, DateTime, ForeignKey, Index, String
3
+ from sqlalchemy import Column, ForeignKey, String
4
4
  from sqlalchemy.dialects.postgresql import JSONB
5
5
  from sqlalchemy.ext.declarative import declared_attr
6
6
  from sqlalchemy.orm import Session, relationship
7
- from sqlalchemy.sql import func
8
7
 
9
- from fides.api.db.base_class import Base, FidesBase
8
+ from fides.api.db.base_class import Base
10
9
  from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
11
10
 
12
11
  if TYPE_CHECKING: # pragma: no cover
@@ -14,9 +13,6 @@ if TYPE_CHECKING: # pragma: no cover
14
13
  from fides.api.models.manual_tasks.manual_task_config import (
15
14
  ManualTaskConfig, # pragma: no cover
16
15
  )
17
- from fides.api.models.manual_tasks.manual_task_instance import ( # pragma: no cover
18
- ManualTaskInstance,
19
- )
20
16
 
21
17
 
22
18
  class ManualTaskLog(Base):
@@ -27,56 +23,22 @@ class ManualTaskLog(Base):
27
23
  """Overriding base class method to set the table name."""
28
24
  return "manual_task_log"
29
25
 
30
- # redefined here because there's a minor, unintended discrepancy between
31
- # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
32
- # TODO: we likely should _not_ be setting `index=True` on the `id`
33
- # attribute of the `Base` class, as `primary_key=True` already specifies a
34
- # primary key constraint, which will implicitly create an index for the field.
35
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
36
- created_at = Column(
37
- DateTime(timezone=True), server_default=func.now(), nullable=False
38
- )
39
- updated_at = Column(
40
- DateTime(timezone=True),
41
- server_default=func.now(),
42
- onupdate=func.now(),
43
- nullable=False,
44
- )
45
-
46
26
  task_id = Column(
47
27
  String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
48
28
  )
49
- config_id = Column(
50
- String, ForeignKey("manual_task_config.id", ondelete="CASCADE"), nullable=True
51
- )
52
- instance_id = Column(
53
- String,
54
- ForeignKey("manual_task_instance.id", ondelete="CASCADE"),
55
- nullable=True,
56
- )
29
+ config_id = Column(String, ForeignKey("manual_task_config.id"), nullable=True)
30
+ instance_id = Column(String, nullable=True)
57
31
  status = Column(String, nullable=False)
58
- message = Column(String, nullable=True)
32
+ message = Column(String, nullable=False)
59
33
  details = Column(JSONB, nullable=True)
60
34
 
61
- __table_args__ = (
62
- Index("ix_manual_task_log_config_id", "config_id"),
63
- Index("ix_manual_task_log_created_at", "created_at"),
64
- Index("ix_manual_task_log_instance_id", "instance_id"),
65
- Index("ix_manual_task_log_status", "status"),
66
- Index("ix_manual_task_log_task_id", "task_id"),
67
- )
68
-
69
- # Relationships
70
- task = relationship(
71
- "ManualTask", back_populates="logs", foreign_keys=[task_id], viewonly=True
72
- )
35
+ # Relationships - using string references to avoid circular imports
36
+ task = relationship("ManualTask", back_populates="logs", foreign_keys=[task_id])
73
37
  config = relationship(
74
- "ManualTaskConfig",
75
- back_populates="logs",
76
- foreign_keys=[config_id],
77
- viewonly=True,
38
+ "ManualTaskConfig", back_populates="logs", foreign_keys=[config_id]
78
39
  )
79
- instance = relationship("ManualTaskInstance", back_populates="logs", viewonly=True)
40
+ # TODO: Add instance relationship when it is implemented
41
+ # instance = relationship("ManualTaskInstance", back_populates="logs")
80
42
 
81
43
  @classmethod
82
44
  def create_log(
@@ -10,7 +10,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
10
10
  from sqlalchemy.ext.declarative import declared_attr
11
11
  from sqlalchemy.orm import Session, relationship
12
12
 
13
- from fides.api.db.base_class import Base, FidesBase
13
+ from fides.api.db.base_class import Base
14
14
 
15
15
  if TYPE_CHECKING:
16
16
  from fides.api.models.privacy_experience import PrivacyExperienceConfig
@@ -83,13 +83,7 @@ class TCFConfiguration(Base):
83
83
  def __tablename__(self) -> str:
84
84
  return "tcf_configuration"
85
85
 
86
- # redefined here because there's a minor, unintended discrepancy between
87
- # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
88
- # TODO: we likely should _not_ be setting `index=True` on the `id`
89
- # attribute of the `Base` class, as `primary_key=True` already specifies a
90
- # primary key constraint, which will implicitly create an index for the field.
91
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
92
- name = Column(String, nullable=False, unique=True)
86
+ name = Column(String, nullable=False, index=True, unique=True)
93
87
 
94
88
  privacy_experience_configs = relationship(
95
89
  "PrivacyExperienceConfig",
@@ -109,17 +103,11 @@ class TCFPublisherRestriction(Base):
109
103
  def __tablename__(self) -> str:
110
104
  return "tcf_publisher_restriction"
111
105
 
112
- # redefined here because there's a minor, unintended discrepancy between
113
- # this `id` field and that of the `Base` class, which explicitly sets `index=True`.
114
- # TODO: we likely should _not_ be setting `index=True` on the `id`
115
- # attribute of the `Base` class, as `primary_key=True` already specifies a
116
- # primary key constraint, which will implicitly create an index for the field.
117
- id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
118
-
119
106
  tcf_configuration_id = Column(
120
107
  String(255),
121
108
  ForeignKey("tcf_configuration.id", ondelete="CASCADE"),
122
109
  nullable=False,
110
+ index=True,
123
111
  )
124
112
  purpose_id = Column(Integer, nullable=False)
125
113
  restriction_type = Column(EnumColumn(TCFRestrictionType), nullable=False)
@@ -133,7 +121,7 @@ class TCFPublisherRestriction(Base):
133
121
  # can be inferred from the presence of the end_vendor_id.
134
122
  range_entries = Column(
135
123
  ARRAY(JSONB),
136
- nullable=False,
124
+ nullable=True,
137
125
  server_default="{}",
138
126
  default=list,
139
127
  )
@@ -5,15 +5,6 @@ from typing import Annotated, Any, Optional
5
5
  from pydantic import ConfigDict, Field
6
6
 
7
7
  from fides.api.schemas.base_class import FidesSchema
8
- from fides.api.schemas.manual_tasks.manual_task_status import StatusType
9
-
10
-
11
- class ManualTaskExecutionTiming(str, Enum):
12
- """Enum for when a manual task should be executed in the privacy request DAG."""
13
-
14
- pre_execution = "pre_execution" # Execute before the main DAG
15
- post_execution = "post_execution" # Execute after the main DAG
16
- parallel = "parallel" # Execute in parallel with the main DAG
17
8
 
18
9
 
19
10
  class ManualTaskType(str, Enum):
@@ -32,13 +23,6 @@ class ManualTaskParentEntityType(str, Enum):
32
23
  # Add more parent entity types as needed
33
24
 
34
25
 
35
- class ManualTaskEntityType(str, Enum):
36
- """Enum for manual task entity types."""
37
-
38
- privacy_request = "privacy_request"
39
- # Add more entity types as needed
40
-
41
-
42
26
  class ManualTaskReferenceType(str, Enum):
43
27
  """Enum for manual task reference types."""
44
28
 
@@ -62,32 +46,6 @@ class ManualTaskLogStatus(str, Enum):
62
46
  awaiting_input = "awaiting_input"
63
47
 
64
48
 
65
- class ManualTaskResponse(FidesSchema):
66
- """Schema for manual task response."""
67
-
68
- model_config = ConfigDict(extra="forbid")
69
-
70
- id: Annotated[str, Field(..., description="Task ID")]
71
- parent_entity_id: Annotated[str, Field(..., description="Parent entity ID")]
72
- parent_entity_type: Annotated[
73
- ManualTaskParentEntityType, Field(..., description="Parent entity type")
74
- ]
75
- status: Annotated[StatusType, Field(..., description="Task status")]
76
- created_at: Annotated[datetime, Field(..., description="Creation timestamp")]
77
- updated_at: Annotated[datetime, Field(..., description="Last update timestamp")]
78
-
79
-
80
- class ManualTaskCreate(FidesSchema):
81
- """Schema for creating a manual task."""
82
-
83
- model_config = ConfigDict(extra="forbid")
84
-
85
- parent_entity_id: Annotated[str, Field(..., description="Parent entity ID")]
86
- parent_entity_type: Annotated[
87
- ManualTaskParentEntityType, Field(..., description="Parent entity type")
88
- ]
89
-
90
-
91
49
  class ManualTaskLogCreate(FidesSchema):
92
50
  """Schema for creating a manual task log entry."""
93
51
 
@@ -1,6 +1,6 @@
1
1
  from datetime import datetime, timezone
2
2
  from enum import Enum as EnumType
3
- from typing import Optional, Protocol
3
+ from typing import Optional
4
4
 
5
5
  from sqlalchemy.orm import Session
6
6
 
@@ -23,133 +23,61 @@ class StatusType(str, EnumType):
23
23
 
24
24
  @classmethod
25
25
  def get_valid_transitions(cls, current_status: "StatusType") -> list["StatusType"]:
26
- """Get valid transitions from the current status."""
27
- transitions = {
28
- cls.pending: [cls.in_progress, cls.failed, cls.completed],
29
- cls.in_progress: [cls.completed, cls.failed],
30
- cls.completed: [],
31
- cls.failed: [cls.pending, cls.in_progress],
32
- }
33
- return transitions.get(current_status, [])
34
-
35
-
36
- class StatusTransitionProtocol(Protocol):
37
- """Protocol for objects that support status transitions.
38
-
39
- This protocol defines the interface that any object supporting status transitions
40
- must implement. It includes both the required attributes and methods.
41
-
42
- Example:
43
- ```python
44
- # Any class that implements this protocol can be used interchangeably
45
- def process_status_update(obj: StatusTransitionProtocol, db: Session) -> None:
46
- if obj.is_pending:
47
- obj.start_progress(db)
48
- elif obj.is_in_progress:
49
- obj.mark_completed(db, user_id="user123")
50
-
51
- # This works with ManualTaskInstance or any other class implementing the protocol
52
- instance = ManualTaskInstance(...)
53
- process_status_update(instance, db)
54
- ```
55
- """
26
+ """Get valid transitions from the current status.
56
27
 
57
- # Required attributes - using runtime types that work with SQLAlchemy
58
- status: StatusType
59
- completed_at: Optional[datetime] # Can be None when resetting to pending
60
- completed_by_id: Optional[str] # Can be None when resetting to pending
28
+ Args:
29
+ current_status: The current status
61
30
 
62
- # Required methods
63
- # pylint does not understand the Protocol abstract syntax and will complain about the ellipsis
64
- def update_status(
65
- self, db: Session, new_status: StatusType, user_id: Optional[str] = None
66
- ) -> None:
67
- """Update the status with validation and completion handling."""
68
- ... # pylint: disable=unnecessary-ellipsis
69
-
70
- def mark_completed(self, db: Session, user_id: str) -> None:
71
- """Mark as completed."""
72
- ... # pylint: disable=unnecessary-ellipsis
73
-
74
- def mark_failed(self, db: Session) -> None:
75
- """Mark as failed."""
76
- ... # pylint: disable=unnecessary-ellipsis
77
-
78
- def start_progress(self, db: Session) -> None:
79
- """Mark as in progress."""
80
- ... # pylint: disable=unnecessary-ellipsis
81
-
82
- def reset_to_pending(self, db: Session) -> None:
83
- """Reset to pending status."""
84
- ... # pylint: disable=unnecessary-ellipsis
85
-
86
- @property
87
- def is_completed(self) -> bool:
88
- """Check if completed."""
89
- ... # pylint: disable=unnecessary-ellipsis
90
-
91
- @property
92
- def is_failed(self) -> bool:
93
- """Check if failed."""
94
- ... # pylint: disable=unnecessary-ellipsis
95
-
96
- @property
97
- def is_in_progress(self) -> bool:
98
- """Check if in progress."""
99
- ... # pylint: disable=unnecessary-ellipsis
100
-
101
- @property
102
- def is_pending(self) -> bool:
103
- """Check if pending."""
104
- ... # pylint: disable=unnecessary-ellipsis
105
-
106
-
107
- def validate_status_transition_object(obj: StatusTransitionProtocol) -> bool:
108
- """Validate that an object properly implements the StatusTransitionProtocol.
109
-
110
- This function demonstrates how the Protocol can be used for runtime validation
111
- and type checking.
112
- """
113
- required_attrs = ["status", "completed_at", "completed_by_id"]
114
- required_methods = [
115
- "update_status",
116
- "mark_completed",
117
- "mark_failed",
118
- "start_progress",
119
- "reset_to_pending",
120
- ]
121
- required_properties = ["is_completed", "is_failed", "is_in_progress", "is_pending"]
122
-
123
- # Check all required elements
124
- all_required = required_attrs + required_methods + required_properties
125
- return all(hasattr(obj, attr) for attr in all_required) and all(
126
- callable(getattr(obj, method)) for method in required_methods
127
- )
31
+ Returns:
32
+ list[StatusType]: List of valid transitions
33
+ """
34
+ if current_status == cls.pending:
35
+ return [cls.in_progress, cls.failed, cls.completed]
36
+ if current_status == cls.in_progress:
37
+ return [cls.completed, cls.failed]
38
+ if current_status == cls.completed:
39
+ return []
40
+ if current_status == cls.failed:
41
+ return [cls.pending, cls.in_progress]
42
+ return []
128
43
 
129
44
 
130
45
  class StatusTransitionMixin:
131
46
  """Mixin for handling status transitions.
132
47
 
133
48
  This mixin provides methods for managing status transitions and completion tracking.
134
- It implements the StatusTransitionProtocol and can be used by any model that needs status management.
49
+ It can be used by any model that needs status management.
135
50
  """
136
51
 
137
- # Type annotations to match the Protocol
52
+ # These should be overridden by the implementing class
138
53
  status: StatusType
139
54
  completed_at: Optional[datetime]
140
55
  completed_by_id: Optional[str]
141
56
 
142
57
  def _get_valid_transitions(self) -> list[StatusType]:
143
- """Get valid transitions from the current status."""
58
+ """Get valid transitions from the current status.
59
+
60
+ Returns:
61
+ list[StatusType]: List of valid transitions
62
+ """
144
63
  return StatusType.get_valid_transitions(self.status)
145
64
 
146
65
  def _validate_status_transition(self, new_status: StatusType) -> None:
147
- """Validate that a status transition is allowed."""
66
+ """Validate that a status transition is allowed.
67
+
68
+ Args:
69
+ new_status: The new status to transition to
70
+
71
+ Raises:
72
+ StatusTransitionNotAllowed: If the transition is not allowed
73
+ """
74
+ # Don't allow transitions to the same status
148
75
  if new_status == self.status:
149
76
  raise StatusTransitionNotAllowed(
150
77
  f"Invalid status transition: already in status {new_status}"
151
78
  )
152
79
 
80
+ # Get valid transitions for current status
153
81
  valid_transitions = self._get_valid_transitions()
154
82
  if new_status not in valid_transitions:
155
83
  raise StatusTransitionNotAllowed(
@@ -160,7 +88,13 @@ class StatusTransitionMixin:
160
88
  def update_status(
161
89
  self, db: Session, new_status: StatusType, user_id: Optional[str] = None
162
90
  ) -> None:
163
- """Update the status with validation and completion handling."""
91
+ """Update the status with validation and completion handling.
92
+
93
+ Args:
94
+ db: Database session
95
+ new_status: New status to set
96
+ user_id: Optional user ID who is making the change
97
+ """
164
98
  self._validate_status_transition(new_status)
165
99
 
166
100
  if new_status == StatusType.completed:
@@ -176,7 +110,12 @@ class StatusTransitionMixin:
176
110
  db.commit()
177
111
 
178
112
  def mark_completed(self, db: Session, user_id: str) -> None:
179
- """Mark as completed."""
113
+ """Mark as completed.
114
+
115
+ Args:
116
+ db: Database session
117
+ user_id: user ID who completed the task
118
+ """
180
119
  self.update_status(db, StatusType.completed, user_id)
181
120
 
182
121
  def mark_failed(self, db: Session) -> None:
@@ -155,10 +155,6 @@ AUTHORIZE = "/connection/{connection_key}/authorize"
155
155
  ACCESS_MANUAL_WEBHOOKS = "/access_manual_webhook"
156
156
  ACCESS_MANUAL_WEBHOOK = CONNECTION_BY_KEY + "/access_manual_webhook"
157
157
 
158
- # Manual Tasks
159
- MANUAL_TASKS = "/manual-tasks"
160
- MANUAL_TASK = CONNECTION_BY_KEY + "/manual-task"
161
-
162
158
  # Collection URLs
163
159
  DATASETS = "/dataset"
164
160
  DATASET_CONFIG = "/datasetconfig"
@@ -15,14 +15,6 @@ from fides.api.schemas.manual_tasks.manual_task_config import (
15
15
  from fides.service.manual_tasks.utils import validate_fields, with_task_logging
16
16
 
17
17
 
18
- class ManualTaskConfigError(Exception):
19
- """Exception raised when a manual task config error occurs."""
20
-
21
- def __init__(self, message: str):
22
- self.message = message
23
- super().__init__(self.message)
24
-
25
-
26
18
  class ManualTaskConfigService:
27
19
  def __init__(self, db: Session):
28
20
  self.db = db
@@ -59,8 +51,8 @@ class ManualTaskConfigService:
59
51
  """
60
52
  try:
61
53
  ManualTaskConfigurationType(config_type)
62
- except ManualTaskConfigError:
63
- raise ManualTaskConfigError(f"Invalid config type: {config_type}")
54
+ except ValueError:
55
+ raise ValueError(f"Invalid config type: {config_type}")
64
56
 
65
57
  # Set all existing versions to non-current
66
58
  if is_current:
@@ -104,11 +96,7 @@ class ManualTaskConfigService:
104
96
  modified_keys = set(fields_to_remove or [])
105
97
 
106
98
  if field_updates:
107
- try:
108
- validate_fields(field_updates, is_submission=False)
109
- except ValueError as e:
110
- raise ManualTaskConfigError(f"Invalid field updates: {e}") from e
111
-
99
+ validate_fields(field_updates, is_submission=False)
112
100
  fields_to_create = [
113
101
  {
114
102
  "task_id": config.task_id,
@@ -179,7 +167,7 @@ class ManualTaskConfigService:
179
167
  )
180
168
 
181
169
  if not config:
182
- raise ManualTaskConfigError(
170
+ raise ValueError(
183
171
  f"No current config found for task {task.id} and type {config_type}"
184
172
  )
185
173
  return config
@@ -367,7 +355,7 @@ class ManualTaskConfigService:
367
355
  """
368
356
  config = self.db.query(ManualTaskConfig).filter_by(id=config_id).first()
369
357
  if not config:
370
- raise ManualTaskConfigError(f"Config with ID {config_id} not found")
358
+ raise ValueError(f"Config with ID {config_id} not found")
371
359
 
372
360
  log_data = self._create_log_data(
373
361
  task.id,