ethyca-fides 2.63.3b0__py2.py3-none-any.whl → 2.64.0rc0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/RECORD +228 -225
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/ba414a58ba90_create_manual_task_config_tables.py +121 -0
  5. fides/api/db/base.py +4 -0
  6. fides/api/models/attachment.py +1 -0
  7. fides/api/models/manual_tasks/__init__.py +6 -0
  8. fides/api/models/manual_tasks/manual_task.py +11 -1
  9. fides/api/models/manual_tasks/manual_task_config.py +136 -0
  10. fides/api/models/manual_tasks/manual_task_log.py +13 -9
  11. fides/api/schemas/manual_tasks/manual_task_config.py +311 -0
  12. fides/api/schemas/manual_tasks/manual_task_schemas.py +1 -1
  13. fides/api/schemas/manual_tasks/manual_task_status.py +1 -1
  14. fides/api/schemas/privacy_request.py +2 -0
  15. fides/api/util/cache.py +6 -3
  16. fides/config/redis_settings.py +105 -44
  17. fides/service/manual_tasks/manual_task_config_service.py +370 -0
  18. fides/service/manual_tasks/manual_task_service.py +231 -87
  19. fides/service/manual_tasks/utils.py +185 -0
  20. fides/ui-build/static/admin/404.html +1 -1
  21. fides/ui-build/static/admin/_next/static/chunks/1040-630c7f4284dc6f70.js +1 -0
  22. fides/ui-build/static/admin/_next/static/chunks/1316-6cc72a45ebf7ff81.js +1 -0
  23. fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +1 -0
  24. fides/ui-build/static/admin/_next/static/chunks/2599-6c4d22e75028d8b6.js +1 -0
  25. fides/ui-build/static/admin/_next/static/chunks/3450-bdaeb35442d810b4.js +1 -0
  26. fides/ui-build/static/admin/_next/static/chunks/3855-0dec3e7d9e886550.js +1 -0
  27. fides/ui-build/static/admin/_next/static/chunks/401-fceaae662cfca5a5.js +1 -0
  28. fides/ui-build/static/admin/_next/static/chunks/409-037cfc3f096150f0.js +1 -0
  29. fides/ui-build/static/admin/_next/static/chunks/4230-1cdb7ea1be370ed3.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/431-f72599f01b98f07d.js +1 -0
  31. fides/ui-build/static/admin/_next/static/chunks/5309-4511df9708d5a63c.js +1 -0
  32. fides/ui-build/static/admin/_next/static/chunks/5574-3cd33b3a6c937899.js +1 -0
  33. fides/ui-build/static/admin/_next/static/chunks/6662-cb11881dcaabe5e2.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/6882-3cc73d407a088d7d.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/9046-fdf53cc7e926a8c1.js +1 -0
  37. fides/ui-build/static/admin/_next/static/chunks/{905-5fe5124abfb5c542.js → 905-742074a074be1055.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/9226-ba6587e46ec7659a.js +1 -0
  39. fides/ui-build/static/admin/_next/static/chunks/9767-e49b065d03ce4e80.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/9951-f9ab5cac7e2c05ab.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-0e0fdbcc0ec1c76b.js → _app-8ec6e466f3373ac0.js} +6 -6
  42. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-3065022f370ec055.js → manual-0a5f2310ce6b1059.js} +1 -1
  43. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-18e3faf7963962e4.js → [resourceUrn]-c623d6f1a61c8ea9.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-cfac259a30641e68.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-7320524a47104798.js → [resourceUrn]-57bd5cdf784f059f.js} +1 -1
  46. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-7b5aec33da578745.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-c948f93c833d4358.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-333f53caab751428.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-18c144223277bc2e.js → action-center-27205f8457a1ecb0.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-20a1043f6a06198f.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-4c526db0c30c488a.js → [resourceUrn]-06edce289876dea1.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-6f27dbb7c8edc69d.js → detection-faf326a6200637d0.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-562d2b8ae90dd1f0.js → [resourceUrn]-64acf269256ee74f.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-fe7f51502eda57c9.js → discovery-8c3e4be6d36da66d.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-9af01b6cf4cbe8af.js → datamap-fb50de22f83edd4a.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-41ab27c4195cfa93.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-6e2caba24b3e78c2.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-904d43e31157aa55.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d4e31a1c4a58800e.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-8f7d16bc5e9229c8.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-18ff06fc09c22c33.js → [id]-4a33dd0371dbaebc.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-979eff6888e42b6b.js → new-e88509346b2d2851.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-80b241bf6cddb72e.js → fides-js-docs-5d8fd1af75f19e2f.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-fdc2964fa7d1d8fd.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adc286ff254e7f41.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-4cdbbb8cd1d8698e.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-d0e350d2a2667883.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-7796fbf458f8f159.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-6f866bc799a5f67f.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-24108f615ff5e1e7.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-2b540203a2d7b59d.js → [id]-6eb886e7b7e6785b.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-18534d2a79a3850b.js +1 -0
  74. fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +1 -0
  75. fides/ui-build/static/admin/_next/static/css/c693338e3bc8dcc6.css +1 -0
  76. fides/ui-build/static/admin/_next/static/lDN8BtGGiw3b60__SDnAa/_buildManifest.js +1 -0
  77. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  78. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  79. fides/ui-build/static/admin/add-systems.html +1 -1
  80. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  81. fides/ui-build/static/admin/consent/configure.html +1 -1
  82. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  83. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  84. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  85. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  86. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  87. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  88. fides/ui-build/static/admin/consent/properties.html +1 -1
  89. fides/ui-build/static/admin/consent/reporting.html +1 -1
  90. fides/ui-build/static/admin/consent.html +1 -1
  91. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  92. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  93. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  94. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  95. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  96. fides/ui-build/static/admin/data-catalog.html +1 -1
  97. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  98. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  99. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  100. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  101. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  102. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  103. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  104. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  105. fides/ui-build/static/admin/datamap.html +1 -1
  106. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  107. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  108. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  109. fides/ui-build/static/admin/dataset/new.html +1 -1
  110. fides/ui-build/static/admin/dataset.html +1 -1
  111. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  112. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  113. fides/ui-build/static/admin/datastore-connection.html +1 -1
  114. fides/ui-build/static/admin/index.html +1 -1
  115. fides/ui-build/static/admin/integrations/[id].html +1 -1
  116. fides/ui-build/static/admin/integrations.html +1 -1
  117. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  118. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  119. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  120. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  121. fides/ui-build/static/admin/lib/fides.js +2 -2
  122. fides/ui-build/static/admin/login/[provider].html +1 -1
  123. fides/ui-build/static/admin/login.html +1 -1
  124. fides/ui-build/static/admin/messaging/[id].html +1 -1
  125. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  126. fides/ui-build/static/admin/messaging.html +1 -1
  127. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  128. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  129. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  130. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  131. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  132. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  133. fides/ui-build/static/admin/poc/forms.html +1 -1
  134. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  135. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  136. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  137. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  138. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  139. fides/ui-build/static/admin/privacy-requests.html +1 -1
  140. fides/ui-build/static/admin/properties/[id].html +1 -1
  141. fides/ui-build/static/admin/properties/add-property.html +1 -1
  142. fides/ui-build/static/admin/properties.html +1 -1
  143. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  144. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  145. fides/ui-build/static/admin/settings/about.html +1 -1
  146. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  147. fides/ui-build/static/admin/settings/consent.html +1 -1
  148. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  149. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  150. fides/ui-build/static/admin/settings/domains.html +1 -1
  151. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  152. fides/ui-build/static/admin/settings/locations.html +1 -1
  153. fides/ui-build/static/admin/settings/organization.html +1 -1
  154. fides/ui-build/static/admin/settings/regulations.html +1 -1
  155. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  156. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  157. fides/ui-build/static/admin/systems.html +1 -1
  158. fides/ui-build/static/admin/taxonomy.html +1 -1
  159. fides/ui-build/static/admin/user-management/new.html +1 -1
  160. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  161. fides/ui-build/static/admin/user-management.html +1 -1
  162. fides/ui-build/static/admin/_next/static/0S8UTwc7FKVdi3Eb4LgFK/_buildManifest.js +0 -1
  163. fides/ui-build/static/admin/_next/static/chunks/1099-f2199d5b88dd98b4.js +0 -1
  164. fides/ui-build/static/admin/_next/static/chunks/155-8ad794121fef6281.js +0 -1
  165. fides/ui-build/static/admin/_next/static/chunks/1904-e33cb75edb93d3d3.js +0 -1
  166. fides/ui-build/static/admin/_next/static/chunks/2310-efaa2a52fc487db4.js +0 -1
  167. fides/ui-build/static/admin/_next/static/chunks/3119-9be74ade1504a7e7.js +0 -1
  168. fides/ui-build/static/admin/_next/static/chunks/401-710009c2a7408818.js +0 -1
  169. fides/ui-build/static/admin/_next/static/chunks/4132-76ca1bcf79bf1d77.js +0 -1
  170. fides/ui-build/static/admin/_next/static/chunks/5258-8a1f7feddee7a960.js +0 -1
  171. fides/ui-build/static/admin/_next/static/chunks/5404-a8a82985736363f4.js +0 -1
  172. fides/ui-build/static/admin/_next/static/chunks/5487-483a111405f678e0.js +0 -1
  173. fides/ui-build/static/admin/_next/static/chunks/5683-7144f557d701406c.js +0 -1
  174. fides/ui-build/static/admin/_next/static/chunks/6202-86a62d94744e2c18.js +0 -1
  175. fides/ui-build/static/admin/_next/static/chunks/641-7e4eef3222cbda70.js +0 -1
  176. fides/ui-build/static/admin/_next/static/chunks/7980-3da0fe6938b0b758.js +0 -1
  177. fides/ui-build/static/admin/_next/static/chunks/8032-4b8bda7166eff954.js +0 -1
  178. fides/ui-build/static/admin/_next/static/chunks/8499-a65187ae77b7307b.js +0 -1
  179. fides/ui-build/static/admin/_next/static/chunks/8702-d1c8296f9f6afc10.js +0 -1
  180. fides/ui-build/static/admin/_next/static/chunks/9187-851756440f79cd75.js +0 -1
  181. fides/ui-build/static/admin/_next/static/chunks/9327-eb3b84680abcc660.js +0 -1
  182. fides/ui-build/static/admin/_next/static/chunks/9494-04a0483ed0ddad7c.js +0 -1
  183. fides/ui-build/static/admin/_next/static/chunks/9767-a3ed98edff04e6ed.js +0 -1
  184. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-b02050eb3b7113d4.js +0 -1
  185. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-ff211c7a968bda47.js +0 -1
  186. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-7f7435f28861ee78.js +0 -1
  187. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-ec4b981fd9cff542.js +0 -1
  188. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-e18f14b8d598e942.js +0 -1
  189. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-1987ef0d3c687aaa.js +0 -1
  190. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-979828f48148b37c.js +0 -1
  191. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e85c3537d3aade4a.js +0 -1
  192. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-6d44abbe7d454435.js +0 -1
  193. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-42f276660c107e1c.js +0 -1
  194. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-63361d914d70d647.js +0 -1
  195. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-fd73f276dad7a06c.js +0 -1
  196. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-f85f92726a61a668.js +0 -1
  197. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-e090903a572cba68.js +0 -1
  198. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-f0c8e4eced9f5cc5.js +0 -1
  199. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-f7a271ee53cb4e51.js +0 -1
  200. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-dd903f6e03c4ee4e.js +0 -1
  201. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-493dc9b4595c9fb4.js +0 -1
  202. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-6d790458dd21dde7.js +0 -1
  203. fides/ui-build/static/admin/_next/static/chunks/webpack-abfd03ce7f1e55ac.js +0 -1
  204. fides/ui-build/static/admin/_next/static/css/c3377f99bf988d68.css +0 -1
  205. {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/WHEEL +0 -0
  206. {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/entry_points.txt +0 -0
  207. {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/licenses/LICENSE +0 -0
  208. {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/top_level.txt +0 -0
  209. /fides/ui-build/static/admin/_next/static/chunks/{1100-d617215143d70d3d.js → 1100-d43cb04522a6505c.js} +0 -0
  210. /fides/ui-build/static/admin/_next/static/chunks/{1817-ddfdd6ed9529bba6.js → 1817-b4688ba5042ec687.js} +0 -0
  211. /fides/ui-build/static/admin/_next/static/chunks/{2921-19664dd93e2bf1ea.js → 2921-aabf41bf3d7573f9.js} +0 -0
  212. /fides/ui-build/static/admin/_next/static/chunks/{3505-f6d55694ca5c9816.js → 3505-a79256cd851dfab4.js} +0 -0
  213. /fides/ui-build/static/admin/_next/static/chunks/{3513-656df06b45fedba3.js → 3513-8677ee280eaef0da.js} +0 -0
  214. /fides/ui-build/static/admin/_next/static/chunks/{3872-09df90521f7db611.js → 3872-ffa16c2df7ef0ab6.js} +0 -0
  215. /fides/ui-build/static/admin/_next/static/chunks/{3923-3d80020d02819c33.js → 3923-5d580fbb1dd6ae01.js} +0 -0
  216. /fides/ui-build/static/admin/_next/static/chunks/{4060-4e196835f56cc326.js → 4060-71cd041e5a57ca5a.js} +0 -0
  217. /fides/ui-build/static/admin/_next/static/chunks/{4121-80ac9bcd08f9cd7a.js → 4121-78a76e980acbd539.js} +0 -0
  218. /fides/ui-build/static/admin/_next/static/chunks/{4481-be144b50994f5135.js → 4481-f597a7cf03f8c9e1.js} +0 -0
  219. /fides/ui-build/static/admin/_next/static/chunks/{6277-0b1e3d23e97f5e19.js → 6277-3fb4c7fc790a6d20.js} +0 -0
  220. /fides/ui-build/static/admin/_next/static/chunks/{6853-d9c6c55d8562bc9b.js → 6853-a4097260e402980e.js} +0 -0
  221. /fides/ui-build/static/admin/_next/static/chunks/{69-a4d64cabe750b286.js → 69-6889d6674c95e7b5.js} +0 -0
  222. /fides/ui-build/static/admin/_next/static/chunks/{6954-8ed05ffdbf2ec086.js → 6954-13a25cef3a8fdd76.js} +0 -0
  223. /fides/ui-build/static/admin/_next/static/chunks/{7553-77c9715868d6ad13.js → 7553-a95939c32d54b5b7.js} +0 -0
  224. /fides/ui-build/static/admin/_next/static/chunks/{79-6c977013b6bedc23.js → 79-5670e31eb65d0a53.js} +0 -0
  225. /fides/ui-build/static/admin/_next/static/chunks/{796-1d77aa88b776ee4e.js → 796-9a6b13c838e25538.js} +0 -0
  226. /fides/ui-build/static/admin/_next/static/chunks/{8433-88fd946149dd1f27.js → 8433-adb1fcb29d82f1b7.js} +0 -0
  227. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-c50dccc133b332a9.js → 404-ac2f0844e5c4b4cd.js} +0 -0
  228. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-357ef3b269c576bb.js → multiple-00cb904825aad7e3.js} +0 -0
  229. /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-e8ae218a9d124ba7.js → add-systems-587e21d14e0a5196.js} +0 -0
  230. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-488507bb244cce9d.js → add-vendors-fa7305b88c1afd20.js} +0 -0
  231. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-6f0b46ac2b112bfe.js → configure-f140ec9d8e8a0f7a.js} +0 -0
  232. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-5024b4ab40ba024c.js → [id]-0edb7c92518e7d21.js} +0 -0
  233. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-2b62e5facfc51808.js → privacy-experience-d8d926f0735a2546.js} +0 -0
  234. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-71791459da78e35d.js → [id]-5c949f2e3cef2398.js} +0 -0
  235. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-26a7d52615b1ebb8.js → new-130155cfb4a0bcc7.js} +0 -0
  236. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-25836dd5142f37e8.js → privacy-notices-1135ad8924d32c36.js} +0 -0
  237. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-3a9021850242c78f.js → properties-776855e370414beb.js} +0 -0
  238. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-9a5d3cc5cbb4ef27.js → reporting-21c23f75ff1135d9.js} +0 -0
  239. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-9e21184279f8e126.js → consent-4d5ea70a77df1bb8.js} +0 -0
  240. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-64cea013d41e348a.js → [projectUrn]-030ee304cbe5e530.js} +0 -0
  241. /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-343a3830b2d4cf22.js → datastore-connection-8f9b8890018e1ea5.js} +0 -0
  242. /fides/ui-build/static/admin/_next/static/chunks/pages/{index-737b0c430bf2f7a0.js → index-1adb6bcb71701ac2.js} +0 -0
  243. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-91e865a65a88d1a4.js → [id]-9b4d1d61c7c97509.js} +0 -0
  244. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-529c7e09b073edd2.js → add-template-f8fd4795e260887c.js} +0 -0
  245. /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-6226faba9595da71.js → messaging-aa744ae8b61e5ff2.js} +0 -0
  246. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-0f7d4390e01f4ffb.js → ant-components-3407158757fb3627.js} +0 -0
  247. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-a4e470f75a5553f8.js → AntForm-47e947c02ae90fd0.js} +0 -0
  248. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-d814c1c56b4b04d8.js → FormikAntFormItem-24f9a44512ce8827.js} +0 -0
  249. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-0f68f2be09df2c76.js → FormikControlled-e567a69f8c37fb9a.js} +0 -0
  250. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-6b63d5c992466891.js → FormikField-35a33f9c7def2220.js} +0 -0
  251. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-88eb9b98e8e4b426.js → forms-780e18dde8e38099.js} +0 -0
  252. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-a3da91fd04eec8f5.js → table-migration-7a17dffa515e5560.js} +0 -0
  253. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-b2ea863afce1d7f0.js → [id]-91dd0039cc2b70bc.js} +0 -0
  254. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-0831dfaa65ce0d50.js → messaging-b01cbbaac34dadbc.js} +0 -0
  255. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-709676f00a491bca.js → storage-a15410de7f1d0f84.js} +0 -0
  256. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-0eac9951504b46a7.js → configure-1a1aa83a3f88844c.js} +0 -0
  257. /fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-88e20023c30113df.js → privacy-requests-c4e1b69fb5bab61a.js} +0 -0
  258. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-3acc3107e9a21260.js → [id]-19737d4f21aadbee.js} +0 -0
  259. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-2bf13ee02d8d5ab9.js → add-property-9ccb295110feee20.js} +0 -0
  260. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-822eac07220f55f8.js → properties-3a1037a2e036212a.js} +0 -0
  261. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-88999260f855b448.js → alpha-965cc21889b25e44.js} +0 -0
  262. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-928b0b69e05fd430.js → about-0e1c381d488a7ada.js} +0 -0
  263. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-611980eee1ce9c8a.js → domain-records-0b44b2b224077dcd.js} +0 -0
  264. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-382cb6df12684bf8.js → domains-5d00e1155bd11178.js} +0 -0
  265. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-5d664f2a0f11b626.js → email-templates-d2cdbe770683e9df.js} +0 -0
  266. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-ba569d22e1e3f6df.js → locations-811dadb489f23d7d.js} +0 -0
  267. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-fae8ecf7878bad2d.js → regulations-54f142bc3e4c95ba.js} +0 -0
  268. /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-a278608ba0ddc66c.js → systems-7b71274334c559a4.js} +0 -0
  269. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-eb30c9230a9ce9cc.js → [id]-75d41fde668b9025.js} +0 -0
  270. /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-381146aa81e3ffea.js → user-management-dd43755b687c09a7.js} +0 -0
  271. /fides/ui-build/static/admin/_next/static/{0S8UTwc7FKVdi3Eb4LgFK → lDN8BtGGiw3b60__SDnAa}/_ssgManifest.js +0 -0
@@ -0,0 +1,370 @@
1
+ from typing import Any, Optional
2
+
3
+ from loguru import logger
4
+ from sqlalchemy.orm import Query, Session, selectinload
5
+
6
+ from fides.api.models.manual_tasks.manual_task import ManualTask
7
+ from fides.api.models.manual_tasks.manual_task_config import (
8
+ ManualTaskConfig,
9
+ ManualTaskConfigField,
10
+ )
11
+ from fides.api.schemas.manual_tasks.manual_task_config import (
12
+ ManualTaskConfigResponse,
13
+ ManualTaskConfigurationType,
14
+ )
15
+ from fides.service.manual_tasks.utils import validate_fields, with_task_logging
16
+
17
+
18
+ class ManualTaskConfigService:
19
+ def __init__(self, db: Session):
20
+ self.db = db
21
+
22
+ def _create_log_data(
23
+ self, task_id: str, config_id: Optional[str], details: dict[str, Any]
24
+ ) -> dict[str, Any]:
25
+ """Create standard log data structure."""
26
+ return {"task_id": task_id, "config_id": config_id, "details": details}
27
+
28
+ def _get_base_config_query(self) -> Query:
29
+ """Get base config query with field definitions loaded."""
30
+ return self.db.query(ManualTaskConfig).options(
31
+ selectinload(ManualTaskConfig.field_definitions)
32
+ )
33
+
34
+ def _create_config_version(
35
+ self,
36
+ task: ManualTask,
37
+ config_type: str,
38
+ version: int,
39
+ is_current: bool = True,
40
+ ) -> ManualTaskConfig:
41
+ """Create a new config version. This is a helper method that creates a new config
42
+ version and sets it as the current version.
43
+
44
+ Args:
45
+ task: The task to create the config for
46
+ config_type: The type of config to create
47
+ version: The version number of the config
48
+ is_current: Whether the config is the current version
49
+ Returns:
50
+ The new config
51
+ """
52
+ try:
53
+ ManualTaskConfigurationType(config_type)
54
+ except ValueError:
55
+ raise ValueError(f"Invalid config type: {config_type}")
56
+
57
+ # Set all existing versions to non-current
58
+ if is_current:
59
+ self.db.query(ManualTaskConfig).filter(
60
+ ManualTaskConfig.task_id == task.id,
61
+ ManualTaskConfig.config_type == config_type,
62
+ ).update({"is_current": False})
63
+ self.db.flush()
64
+
65
+ return ManualTaskConfig.create(
66
+ db=self.db,
67
+ data={
68
+ "task_id": task.id,
69
+ "config_type": config_type,
70
+ "version": version,
71
+ "is_current": is_current,
72
+ },
73
+ )
74
+
75
+ def _handle_field_updates(
76
+ self,
77
+ config: ManualTaskConfig,
78
+ field_updates: Optional[list[dict[str, Any]]] = None,
79
+ fields_to_remove: Optional[list[str]] = None,
80
+ previous_config: Optional[ManualTaskConfig] = None,
81
+ ) -> set[str]:
82
+ """Handle field updates, removals, and recreation from previous version. This is a helper
83
+ function that:
84
+ - Creates new fields from field_updates
85
+ - Recreates unmodified fields from previous version so they will remain in the config
86
+ - Removes fields that are no longer in the config
87
+
88
+ Args:
89
+ config: The config to update
90
+ field_updates: The fields to update
91
+ fields_to_remove: The fields to remove
92
+ previous_config: The previous config
93
+ Returns:
94
+ The modified keys
95
+ """
96
+ modified_keys = set(fields_to_remove or [])
97
+
98
+ if field_updates:
99
+ validate_fields(field_updates, is_submission=False)
100
+ fields_to_create = [
101
+ {
102
+ "task_id": config.task_id,
103
+ "config_id": config.id,
104
+ "field_key": f["field_key"],
105
+ "field_type": f.get("field_type"),
106
+ "field_metadata": f.get("field_metadata", {}),
107
+ }
108
+ for f in field_updates
109
+ ]
110
+ if fields_to_create:
111
+ self.db.bulk_insert_mappings(ManualTaskConfigField, fields_to_create)
112
+ modified_keys.update(f["field_key"] for f in field_updates)
113
+
114
+ if previous_config:
115
+ # Recreate unmodified fields from previous version
116
+ unmodified = [
117
+ {
118
+ "task_id": config.task_id,
119
+ "config_id": config.id,
120
+ "field_key": f.field_key,
121
+ "field_type": f.field_type,
122
+ "field_metadata": f.field_metadata,
123
+ }
124
+ for f in previous_config.field_definitions
125
+ if f.field_key not in modified_keys
126
+ ]
127
+ if unmodified:
128
+ self.db.bulk_insert_mappings(ManualTaskConfigField, unmodified)
129
+
130
+ self.db.flush()
131
+ return modified_keys
132
+
133
+ def to_response(self, config: ManualTaskConfig) -> ManualTaskConfigResponse:
134
+ """Convert config model to response object."""
135
+ return ManualTaskConfigResponse.model_validate(
136
+ {
137
+ "id": config.id,
138
+ "task_id": config.task_id,
139
+ "config_type": config.config_type,
140
+ "version": config.version,
141
+ "is_current": config.is_current,
142
+ "fields": [
143
+ {
144
+ "field_key": f.field_key,
145
+ "field_type": f.field_type,
146
+ "field_metadata": f.field_metadata,
147
+ }
148
+ for f in config.field_definitions
149
+ ],
150
+ "created_at": config.created_at,
151
+ "updated_at": config.updated_at,
152
+ }
153
+ )
154
+
155
+ def get_current_config(
156
+ self, task: ManualTask, config_type: str
157
+ ) -> ManualTaskConfig:
158
+ """Get current config for task by type."""
159
+ config = (
160
+ self._get_base_config_query()
161
+ .filter(
162
+ ManualTaskConfig.task_id == task.id,
163
+ ManualTaskConfig.config_type == config_type,
164
+ ManualTaskConfig.is_current.is_(True),
165
+ )
166
+ .first()
167
+ )
168
+
169
+ if not config:
170
+ raise ValueError(
171
+ f"No current config found for task {task.id} and type {config_type}"
172
+ )
173
+ return config
174
+
175
+ def list_config_type_versions(
176
+ self, task: ManualTask, config_type: str
177
+ ) -> list[ManualTaskConfig]:
178
+ """List all versions of a config type for a task."""
179
+ return (
180
+ self._get_base_config_query()
181
+ .filter(
182
+ ManualTaskConfig.task_id == task.id,
183
+ ManualTaskConfig.config_type == config_type,
184
+ )
185
+ .order_by(ManualTaskConfig.version.desc())
186
+ .all()
187
+ )
188
+
189
+ def get_config(
190
+ self,
191
+ task: ManualTask,
192
+ config_type: str,
193
+ field_id: str,
194
+ config_id: str,
195
+ field_key: str,
196
+ version: int,
197
+ ) -> Optional[ManualTaskConfig]:
198
+ """Get config by various filters. This is a flexible lookup method that can find configs based on various filters.
199
+
200
+ Args:
201
+ task: The task to get the config for
202
+ config_type: The type of config to get
203
+ field_id: The ID of a field in the config
204
+ config_id: The ID of the config
205
+ field_key: The key of a field in the config
206
+ version: The version number of the config
207
+ Returns:
208
+ The matching config if found, None otherwise
209
+ """
210
+ if not any([task, config_id, field_id, config_type]):
211
+ logger.debug("No filters provided to get_config")
212
+ return None
213
+
214
+ query = self._get_base_config_query()
215
+ if field_id or field_key:
216
+ query = query.join(ManualTaskConfig.field_definitions)
217
+
218
+ filters = [
219
+ f
220
+ for f in [
221
+ task and ManualTaskConfig.task_id == task.id,
222
+ config_id and ManualTaskConfig.id == config_id,
223
+ field_id and ManualTaskConfigField.id == field_id,
224
+ field_key and ManualTaskConfigField.field_key == field_key,
225
+ version and ManualTaskConfig.version == version,
226
+ config_type and ManualTaskConfig.config_type == config_type,
227
+ ]
228
+ if f
229
+ ]
230
+
231
+ return query.filter(*filters).first()
232
+
233
+ @with_task_logging("Creating new configuration version")
234
+ def create_new_version(
235
+ self,
236
+ task: ManualTask,
237
+ config_type: str,
238
+ field_updates: Optional[list[dict[str, Any]]] = None,
239
+ fields_to_remove: Optional[list[str]] = None,
240
+ previous_config: Optional[ManualTaskConfig] = None,
241
+ ) -> tuple[ManualTaskConfig, dict[str, Any]]:
242
+ """Create new version of configuration.
243
+
244
+ Args:
245
+ task: The task to create the config for
246
+ config_type: The type of config to create
247
+ field_updates: The fields to update
248
+ fields_to_remove: The fields to remove
249
+ previous_config: The previous config
250
+
251
+ Returns:
252
+ Tuple containing the new config and log data, the log data is
253
+ captured by the with_task_logging decorator. and the new config is
254
+ returned to the caller.
255
+ """
256
+ new_config = self._create_config_version(
257
+ task, config_type, (previous_config.version + 1 if previous_config else 1)
258
+ )
259
+
260
+ self._handle_field_updates(
261
+ new_config, field_updates, fields_to_remove, previous_config
262
+ )
263
+
264
+ return new_config, self._create_log_data(
265
+ task.id,
266
+ new_config.id,
267
+ {
268
+ "config_type": config_type,
269
+ "version": new_config.version,
270
+ "added_field_keys": [f.get("field_key") for f in (field_updates or [])],
271
+ "removed_field_keys": fields_to_remove or [],
272
+ },
273
+ )
274
+
275
+ @with_task_logging("Adding fields to configuration")
276
+ def add_fields(
277
+ self, task: ManualTask, config_type: str, fields: list[dict[str, Any]]
278
+ ) -> tuple[ManualTaskConfig, dict[str, Any]]:
279
+ """Add fields to configuration.
280
+
281
+ Args:
282
+ task: The task to add the fields to
283
+ config_type: The type of config to add the fields to
284
+ fields: The fields to add
285
+
286
+ Returns:
287
+ Tuple containing the new config and log data, the log data is
288
+ captured by the with_task_logging decorator. and the new config is
289
+ returned to the caller.
290
+ """
291
+ current = self.get_current_config(task, config_type)
292
+ self.create_new_version(task, config_type, fields, previous_config=current)
293
+ new_config = self.get_current_config(task, config_type)
294
+
295
+ return new_config, self._create_log_data(
296
+ task.id,
297
+ current.id,
298
+ {
299
+ "config_type": config_type,
300
+ "previous_version": current.version,
301
+ "added_field_keys": [f.get("field_key") for f in fields],
302
+ "new_config_id": new_config.id,
303
+ "new_config_version": new_config.version,
304
+ },
305
+ )
306
+
307
+ @with_task_logging("Removing fields from configuration")
308
+ def remove_fields(
309
+ self, task: ManualTask, config_type: str, field_keys: list[str]
310
+ ) -> tuple[ManualTaskConfig, dict[str, Any]]:
311
+ """Remove fields from configuration.
312
+
313
+ Args:
314
+ task: The task to remove the fields from
315
+ config_type: The type of config to remove the fields from
316
+ field_keys: The keys of the fields to remove
317
+
318
+ Returns:
319
+ Tuple containing the new config and log data, the log data is
320
+ captured by the with_task_logging decorator. and the new config is
321
+ returned to the caller.
322
+ """
323
+ current = self.get_current_config(task, config_type)
324
+ self.create_new_version(
325
+ task, config_type, fields_to_remove=field_keys, previous_config=current
326
+ )
327
+ new_config = self.get_current_config(task, config_type)
328
+
329
+ return new_config, self._create_log_data(
330
+ task.id,
331
+ current.id,
332
+ {
333
+ "config_type": config_type,
334
+ "version": current.version,
335
+ "deleted_field_keys": field_keys,
336
+ "new_config_id": new_config.id,
337
+ "new_config_version": new_config.version,
338
+ },
339
+ )
340
+
341
+ @with_task_logging("Deleting Manual Task configuration")
342
+ def delete_config(
343
+ self, task: ManualTask, config_id: str
344
+ ) -> tuple[ManualTaskConfig, dict[str, Any]]:
345
+ """Delete config for task.
346
+
347
+ Args:
348
+ task: The task to delete the config for
349
+ config_id: The ID of the config to delete
350
+
351
+ Returns:
352
+ Tuple containing the deleted config and log data, the log data is
353
+ captured by the with_task_logging decorator. and the deleted config is
354
+ returned to the caller.
355
+ """
356
+ config = self.db.query(ManualTaskConfig).filter_by(id=config_id).first()
357
+ if not config:
358
+ raise ValueError(f"Config with ID {config_id} not found")
359
+
360
+ log_data = self._create_log_data(
361
+ task.id,
362
+ None,
363
+ {
364
+ "config_type": config.config_type,
365
+ "version": config.version,
366
+ "deleted_config_id": config_id,
367
+ },
368
+ )
369
+ config.delete(self.db)
370
+ return config, log_data