ethyca-fides 2.64.5rc4__py2.py3-none-any.whl → 2.64.6b1__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 (301) hide show
  1. {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/METADATA +3 -3
  2. {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/RECORD +252 -257
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/41a634d8c669_manual_task_restrict_deletes.py +257 -0
  5. fides/api/alembic/migrations/versions/6a76a1fa4f3f_add_manual_task_instance_table.py +256 -0
  6. fides/api/alembic/migrations/versions/aadfe83c5644_add_manual_task_to_connectiontype_enum.py +46 -0
  7. fides/api/api/v1/api.py +2 -0
  8. fides/api/api/v1/endpoints/partitioning_endpoints.py +108 -0
  9. fides/api/db/base.py +6 -3
  10. fides/api/db/database.py +27 -2
  11. fides/api/graph/config.py +16 -9
  12. fides/api/graph/traversal.py +18 -0
  13. fides/api/models/attachment.py +15 -3
  14. fides/api/models/comment.py +23 -5
  15. fides/api/models/connectionconfig.py +11 -0
  16. fides/api/models/db_cache.py +1 -1
  17. fides/api/models/detection_discovery/core.py +15 -15
  18. fides/api/models/fides_user_respondent_email_verification.py +27 -2
  19. fides/api/models/manual_task.py +965 -0
  20. fides/api/models/tcf_publisher_restrictions.py +16 -4
  21. fides/api/schemas/partitioning/__init__.py +17 -0
  22. fides/api/schemas/partitioning/bigquery_time_based_partitioning.py +31 -0
  23. fides/api/schemas/partitioning/time_based_partitioning.py +1376 -0
  24. fides/api/service/connectors/__init__.py +4 -0
  25. fides/api/service/connectors/manual_task_connector.py +96 -0
  26. fides/api/service/connectors/query_configs/bigquery_query_config.py +44 -22
  27. fides/api/service/connectors/query_configs/query_config.py +5 -2
  28. fides/api/service/privacy_request/dsr_package/templates/collection_index.html +9 -1
  29. fides/api/service/privacy_request/dsr_package/templates/main.css +6 -2
  30. fides/api/service/privacy_request/request_runner_service.py +7 -0
  31. fides/api/task/create_request_tasks.py +16 -0
  32. fides/api/task/execute_request_tasks.py +10 -1
  33. fides/api/task/filter_results.py +6 -0
  34. fides/api/task/graph_task.py +1 -0
  35. fides/api/task/manual/manual_task_graph_task.py +300 -0
  36. fides/api/task/manual/manual_task_utils.py +322 -0
  37. fides/api/task/task_resources.py +3 -0
  38. fides/api/util/connection_util.py +25 -2
  39. fides/common/api/v1/urn_registry.py +4 -0
  40. fides/ui-build/static/admin/404.html +1 -1
  41. fides/ui-build/static/admin/_next/static/chunks/{1040-c1c1372a7f909aef.js → 1040-d246ed641088a416.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/1169-ae67fde0c6d69abc.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/{1817-96182c1558f80b63.js → 1817-60f08a3619b9139c.js} +1 -1
  45. fides/ui-build/static/admin/_next/static/chunks/{2921-f5608275555bd7d9.js → 2921-85515257dd94ef4d.js} +1 -1
  46. fides/ui-build/static/admin/_next/static/chunks/{3450-272f26c102f3510d.js → 3450-4e472b9e2754fa47.js} +1 -1
  47. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/{3855-beb58821d1ddba89.js → 3855-2d045674fbf72a3c.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/{3872-82482e55e69b5a93.js → 3872-056ddf3ed9d10b51.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/{3923-a54c286a2ba0a47a.js → 3923-257df982a95371b5.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/{401-d2ce0a5a9120e056.js → 401-3f2160e3910d075b.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/{409-86f4f687105917fb.js → 409-3e2248a63dd60e58.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/4121-10bfa009892586fa.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/{4230-63abbdfb9e9016b9.js → 4230-38c6e446801a8729.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/{431-77d59d43e90058ca.js → 431-13b0ef67d5a3df2f.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/{5309-10f68cf805817cfb.js → 5309-fd8cd5aedd45f7c1.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/{5574-b6db9d62362e72d9.js → 5574-028ef28c3cf16995.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/6084-fa1c82d03f6c256a.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/6662-d8ae12f69d325004.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/{6853-8a1b8e1c8b249f2f.js → 6853-2644f28976b46c25.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/{6882-6c94583bffe85ba7.js → 6882-ea071425d25dd2b0.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/{6954-dc3540389daf94da.js → 6954-bb360fb60aac9440.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/7476-7073ec015f84a3e0.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/7630-302a13c63f9bfb45.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/787-b393c03ade9d93dc.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/{79-26ccd45dfd6653a7.js → 79-b67ba449b0f2cc9c.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/{796-38c0f7e6755ad359.js → 796-b7608f09607288b8.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/{9046-bbce3c73af16daf9.js → 9046-ece5efe762b810cb.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/{905-742074a074be1055.js → 905-ffdbd0b14167e8bd.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/{9226-5e0ce31cfdedd5ee.js → 9226-c9111590692341b1.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/{9392.25024e070026343d.js → 9392.9a948112de74781b.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/{9676.e60a53f1f5890847.js → 9676.cc515c853b8cf578.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/9767-277a0229aae7662a.js +1 -0
  77. fides/ui-build/static/admin/_next/static/chunks/9826-82c473dcaf892d00.js +1 -0
  78. fides/ui-build/static/admin/_next/static/chunks/{9951-d3d5d0fe4c4edb86.js → 9951-dbd76d7f3a7f1b9a.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/{404-d41660858638adee.js → 404-ef01376efb8427e1.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-6b3539f8d82ce9ae.js → _app-7430e1499432b029.js} +92 -89
  81. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-7c5e1e845372c99b.js → manual-4057c399f58d331e.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-87e78f52af21c4a9.js → multiple-2726ca51f0327347.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a2457d5da25aa854.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-6374a3a7747df964.js → add-vendors-9fe46ed10a7e7a1a.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-0512151e2ed0f4c1.js → configure-095828301f22cdaa.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-09435f4ab2deafd2.js → [id]-de60a5b74f6b20ff.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a0039f216fb3eb93.js → new-06bb3b0bf097fcdb.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-cd036518b5d4efbe.js → privacy-experience-1ee05fd0bc012ec6.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-0e534580abf670be.js → [id]-5a2e61c7d88bdda1.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-bb1790eb87b63109.js → new-1bc69669215fa55c.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-67e9846f877a3f38.js → privacy-notices-fa8394d2e1072aba.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-69a92b6ddbc2bae2.js → properties-213c5405e9e4219c.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-d07d05f4b898a5ed.js → reporting-44aa77149d71a6fe.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-23e886d692ab6d1a.js → consent-23ab7bd613a0ad53.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-c623d6f1a61c8ea9.js → [resourceUrn]-11d52f1570759c4d.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-6c766c766dc97c5c.js → [projectUrn]-dae11464a091537f.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-28937a8da3d73145.js → projects-7442023478422295.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-57bd5cdf784f059f.js → [resourceUrn]-b83afa5565d0c84e.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-51d99174c8006eb5.js → resources-d8db234a44a2ddf4.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-627fbf19dce88e81.js → data-catalog-5597d2e691313bb0.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-ed1629b05519a370.js → [systemId]-da06d05d255d0cd0.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-ad307bfc5f51fd9d.js → [monitorId]-895591fe32af0f4c.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-07cbd61ede6e18ac.js → action-center-a932a39e29ac3489.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-6a2aaed8d0e66d82.js → activity-2cfdf4d55a7594ba.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-06edce289876dea1.js → [resourceUrn]-393e20924c83373e.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-faf326a6200637d0.js → detection-8733807dad4bc96e.js} +1 -1
  107. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-64acf269256ee74f.js → [resourceUrn]-14bd7500362ff224.js} +1 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-8c3e4be6d36da66d.js → discovery-9e7dfd5a6acc2e8f.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-b576a94b583a7940.js → datamap-07881d1a5fc03d41.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-4912858ffde4621a.js → [...subfieldNames]-57be9d40c67b0acb.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-df21dd7ca0f35718.js → [collectionName]-bd78d6c6264e2467.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-5ce28a329e8f667f.js → [datasetId]-3c9103487b55e76f.js} +1 -1
  113. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-e30a546a8cfb6658.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-c6fab547396df6ac.js → dataset-500610c0b60f9e7e.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-d04c9925d324eee1.js → [id]-34958fe8183d9479.js} +1 -1
  116. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-656abd09ea5ee39a.js → new-761294dbaf59bbe1.js} +1 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-59abd36059863e05.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/pages/{index-b66687e8194495a2.js → index-ae100a873eb66d59.js} +1 -1
  119. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-8eee4d0314c83e50.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-bf3b87b0dd702551.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-b74db8488e2e4b58.js → [id]-2aada2c7b9156053.js} +1 -1
  122. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-a607018ff097b6c2.js → add-template-fbb7b0c43dedf072.js} +1 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-4a1a04c5179d2053.js → messaging-7230d7ee21368cef.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-1567c9770a5f05aa.js → ant-components-7c234412502f8102.js} +1 -1
  125. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-4949fe7f1815462b.js → AntForm-72791aab60f3a4bf.js} +1 -1
  126. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-6085f73850302d55.js → FormikAntFormItem-da7d11d6146fa746.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-a3158e8217c13850.js → FormikControlled-3045d24344e99017.js} +1 -1
  128. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-8576f1ef5c67d87d.js → FormikField-5b5b165d3f41a1de.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-341e67462b5e3352.js → forms-3afd8b6ba6234366.js} +1 -1
  130. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-52d50286216bcb8c.js +1 -0
  131. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-00fb442c4adb7371.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-535b6e5003d892eb.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-7ded688a1e832c63.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d24230b890b13762.js → configure-08e0863d432b3348.js} +1 -1
  135. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c8b02ae92dd7e45b.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-2bedc5013e13ab52.js → [id]-b8dcb1f5213521ef.js} +1 -1
  137. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-9d68bd70299dd945.js → add-property-7d8418bb7cb9e1fd.js} +1 -1
  138. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-c3116b6bfe2e695e.js → properties-537003822f360ae7.js} +1 -1
  139. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-6dfa7091b99d8321.js → datamap-ac25749935da453b.js} +1 -1
  140. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-9751059905bba190.js → alpha-647d59bb0aa060bf.js} +1 -1
  141. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-ad29d77012ec9dba.js → about-73adc03fe0182e3f.js} +1 -1
  142. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-32e3190c1ad00b40.js → [purpose_id]-ffa9e9e79ad75828.js} +1 -1
  143. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4fb6c8c4bd9cdb3f.js +1 -0
  144. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-d2c0aac32f5d2930.js → custom-fields-94c1b7bfc6cec4d2.js} +1 -1
  145. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-a10674380f94d014.js → domain-records-e9838b8e49e64e57.js} +1 -1
  146. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-0de16778ad2f8865.js +1 -0
  147. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-aac71677024210ad.js +1 -0
  148. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-cc7d629433fa6d44.js → locations-f43e238571b21643.js} +1 -1
  149. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-f5e0a34f6ae473ad.js +1 -0
  150. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-64a813cb2741683b.js → regulations-05d3c86ca3ca4d5d.js} +1 -1
  151. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-31fcf7b52d8028b0.js +1 -0
  152. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-fb3d094e4f4585f6.js → [id]-6db01a1afe2f82d5.js} +1 -1
  153. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-c2df5b7b0596a9cb.js → systems-8ec7472a7032301f.js} +1 -1
  154. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-84caae0fc02f8ae1.js +1 -0
  155. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-b124cc24b930c9e1.js → new-a2524414e968f862.js} +1 -1
  156. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-fd2ff6b13052c54e.js → [id]-e452541827698b1f.js} +1 -1
  157. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-fa052b0439920ef6.js → user-management-530be849391d2425.js} +1 -1
  158. fides/ui-build/static/admin/_next/static/chunks/{webpack-e61d457474e00565.js → webpack-e25ccaae1ef867a2.js} +1 -1
  159. fides/ui-build/static/admin/_next/static/css/23391a3311f80cfe.css +1 -0
  160. fides/ui-build/static/admin/_next/static/css/399d4757862a3982.css +1 -0
  161. fides/ui-build/static/admin/_next/static/z7GzAZhoGiO521zm7WPYX/_buildManifest.js +1 -0
  162. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  163. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  164. fides/ui-build/static/admin/add-systems.html +1 -1
  165. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  166. fides/ui-build/static/admin/consent/configure.html +1 -1
  167. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  168. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  169. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  170. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  171. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  172. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  173. fides/ui-build/static/admin/consent/properties.html +1 -1
  174. fides/ui-build/static/admin/consent/reporting.html +1 -1
  175. fides/ui-build/static/admin/consent.html +1 -1
  176. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  177. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  178. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  179. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  180. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  181. fides/ui-build/static/admin/data-catalog.html +1 -1
  182. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  183. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  184. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  185. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  186. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  187. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  188. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  189. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  190. fides/ui-build/static/admin/datamap.html +1 -1
  191. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  192. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  193. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  194. fides/ui-build/static/admin/dataset/new.html +1 -1
  195. fides/ui-build/static/admin/dataset.html +1 -1
  196. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  197. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  198. fides/ui-build/static/admin/datastore-connection.html +1 -1
  199. fides/ui-build/static/admin/index.html +1 -1
  200. fides/ui-build/static/admin/integrations/[id].html +1 -1
  201. fides/ui-build/static/admin/integrations.html +1 -1
  202. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  203. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  204. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  205. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  206. fides/ui-build/static/admin/lib/fides.js +2 -2
  207. fides/ui-build/static/admin/login/[provider].html +1 -1
  208. fides/ui-build/static/admin/login.html +1 -1
  209. fides/ui-build/static/admin/messaging/[id].html +1 -1
  210. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  211. fides/ui-build/static/admin/messaging.html +1 -1
  212. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  213. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  214. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  215. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  216. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  217. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  218. fides/ui-build/static/admin/poc/forms.html +1 -1
  219. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  220. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  221. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  222. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  223. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  224. fides/ui-build/static/admin/privacy-requests.html +1 -1
  225. fides/ui-build/static/admin/properties/[id].html +1 -1
  226. fides/ui-build/static/admin/properties/add-property.html +1 -1
  227. fides/ui-build/static/admin/properties.html +1 -1
  228. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  229. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  230. fides/ui-build/static/admin/settings/about.html +1 -1
  231. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  232. fides/ui-build/static/admin/settings/consent.html +1 -1
  233. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  234. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  235. fides/ui-build/static/admin/settings/domains.html +1 -1
  236. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  237. fides/ui-build/static/admin/settings/locations.html +1 -1
  238. fides/ui-build/static/admin/settings/organization.html +1 -1
  239. fides/ui-build/static/admin/settings/regulations.html +1 -1
  240. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  241. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  242. fides/ui-build/static/admin/systems.html +1 -1
  243. fides/ui-build/static/admin/taxonomy.html +1 -1
  244. fides/ui-build/static/admin/user-management/new.html +1 -1
  245. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  246. fides/ui-build/static/admin/user-management.html +1 -1
  247. fides/api/models/manual_tasks/__init__.py +0 -14
  248. fides/api/models/manual_tasks/manual_task.py +0 -120
  249. fides/api/models/manual_tasks/manual_task_config.py +0 -136
  250. fides/api/models/manual_tasks/manual_task_log.py +0 -104
  251. fides/api/schemas/manual_tasks/manual_task_config.py +0 -311
  252. fides/api/schemas/manual_tasks/manual_task_schemas.py +0 -79
  253. fides/api/schemas/manual_tasks/manual_task_status.py +0 -151
  254. fides/service/manual_tasks/__init__.py +0 -0
  255. fides/service/manual_tasks/manual_task_config_service.py +0 -370
  256. fides/service/manual_tasks/manual_task_service.py +0 -294
  257. fides/service/manual_tasks/utils.py +0 -185
  258. fides/ui-build/static/admin/_next/static/TUIhCXaasOCEZxPYTqsV5/_buildManifest.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/1100-3fdbdf211c3c2a5b.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/3505-192986c86dc47869.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/3513-a563133845dc990f.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/4060-3486b45081151b69.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/4121-f0aecb2abd384945.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/4481-d181a9db72984adf.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +0 -4
  269. fides/ui-build/static/admin/_next/static/chunks/6277-ccdb50f676a1b336.js +0 -1
  270. fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +0 -1
  271. fides/ui-build/static/admin/_next/static/chunks/6662-42940a2b00933e79.js +0 -1
  272. fides/ui-build/static/admin/_next/static/chunks/69-943b19d39da339d9.js +0 -1
  273. fides/ui-build/static/admin/_next/static/chunks/7553-e7ae268701f3dcfe.js +0 -1
  274. fides/ui-build/static/admin/_next/static/chunks/8433-1e065c55c8da73b0.js +0 -1
  275. fides/ui-build/static/admin/_next/static/chunks/9767-96ed554a043c3c4d.js +0 -1
  276. fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +0 -1
  277. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-68955d8441e60668.js +0 -1
  278. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-5287c76ecf600281.js +0 -1
  279. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-23fbec0590c8d192.js +0 -1
  280. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-906bc5f05702efb0.js +0 -1
  281. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-024a1facb9be04d0.js +0 -1
  282. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-6f0e64f0c52bd68f.js +0 -1
  283. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-6971c7773dbf9b51.js +0 -1
  284. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-303bd2182da03088.js +0 -1
  285. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-831572cc7f42615f.js +0 -1
  286. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-569ff31eff637034.js +0 -1
  287. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13a17a4ace7293d1.js +0 -1
  288. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-78449b0e02bced88.js +0 -1
  289. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-7d299c4cb3199036.js +0 -1
  290. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a9fa55c40fa570a6.js +0 -1
  291. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-547b0cfe1e49e6d2.js +0 -1
  292. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-261deb6fb3e51cb3.js +0 -1
  293. fides/ui-build/static/admin/_next/static/css/5ded47c57dae5baf.css +0 -1
  294. fides/ui-build/static/admin/_next/static/css/c693338e3bc8dcc6.css +0 -1
  295. fides/ui-build/static/admin/_next/static/css/e458b5f1afdbb7fc.css +0 -1
  296. {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/WHEEL +0 -0
  297. {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/entry_points.txt +0 -0
  298. {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/licenses/LICENSE +0 -0
  299. {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/top_level.txt +0 -0
  300. /fides/api/{schemas/manual_tasks → task/manual}/__init__.py +0 -0
  301. /fides/ui-build/static/admin/_next/static/{TUIhCXaasOCEZxPYTqsV5 → z7GzAZhoGiO521zm7WPYX}/_ssgManifest.js +0 -0
@@ -1,311 +0,0 @@
1
- from datetime import datetime
2
- from enum import Enum
3
- from typing import TYPE_CHECKING, Annotated, Literal, Optional, Union
4
-
5
- from pydantic import ConfigDict, Field, ValidationInfo, field_validator, model_validator
6
-
7
- from fides.api.schemas.base_class import FidesSchema
8
-
9
- if TYPE_CHECKING: # pragma: no cover
10
- from fides.api.models.manual_tasks.manual_task import ManualTask # pragma: no cover
11
-
12
-
13
- class ManualTaskConfigurationType(str, Enum):
14
- """Enum for manual task configuration types."""
15
-
16
- access_privacy_request = "access_privacy_request"
17
- erasure_privacy_request = "erasure_privacy_request"
18
- # Add more configuration types as needed
19
-
20
-
21
- class ManualTaskFieldType(str, Enum):
22
- """Enum for manual task field types."""
23
-
24
- text = "text" # Key-value pairs
25
- checkbox = "checkbox" # Boolean value
26
- attachment = "attachment" # File upload
27
- # Add more field types as needed
28
-
29
-
30
- class ManualTaskFieldMetadata(FidesSchema):
31
- """Base schema for manual task field metadata."""
32
-
33
- model_config = ConfigDict(extra="allow")
34
-
35
- label: Annotated[str, Field(description="Display label for the field")]
36
- required: Annotated[
37
- bool, Field(default=False, description="Whether the field is required")
38
- ]
39
- help_text: Annotated[
40
- Optional[str],
41
- Field(default=None, description="Help text to display with the field"),
42
- ]
43
- data_uses: Annotated[
44
- Optional[list[str]],
45
- Field(
46
- default=None,
47
- description="List of data uses associated with this field",
48
- ),
49
- ]
50
-
51
-
52
- class ManualTaskTextFieldMetadata(ManualTaskFieldMetadata):
53
- """Schema text field metadata."""
54
-
55
- placeholder: Annotated[
56
- Optional[str], Field(default=None, description="Placeholder text for the field")
57
- ]
58
- default_value: Annotated[
59
- Optional[str], Field(default=None, description="Default value for the field")
60
- ]
61
- max_length: Annotated[
62
- Optional[int], Field(default=None, description="Maximum length for text fields")
63
- ]
64
- min_length: Annotated[
65
- Optional[int], Field(default=None, description="Minimum length for text fields")
66
- ]
67
- pattern: Annotated[
68
- Optional[str],
69
- Field(
70
- default=None,
71
- description=(
72
- "Regex pattern for validation, for example if the field is an email address, "
73
- r"you could use: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
74
- ),
75
- ),
76
- ]
77
-
78
- @field_validator("min_length", "max_length")
79
- @classmethod
80
- def validate_lengths(cls, v: Optional[int], info: ValidationInfo) -> Optional[int]:
81
- """Validate that min_length is not greater than max_length."""
82
- if v is None:
83
- return v
84
-
85
- if info.field_name == "min_length":
86
- max_length = info.data.get("max_length")
87
- if max_length is not None and v > max_length:
88
- raise ValueError("min_length cannot be greater than max_length")
89
- elif info.field_name == "max_length":
90
- min_length = info.data.get("min_length")
91
- if min_length is not None and v < min_length:
92
- raise ValueError("min_length cannot be greater than max_length")
93
-
94
- return v
95
-
96
-
97
- class ManualTaskCheckboxFieldMetadata(ManualTaskFieldMetadata):
98
- """Schema for checkbox field metadata."""
99
-
100
- default_value: Annotated[
101
- Optional[bool],
102
- Field(default=False, description="Default value for the checkbox"),
103
- ]
104
- label_true: Annotated[
105
- Optional[str], Field(default=None, description="Label for checked state")
106
- ]
107
- label_false: Annotated[
108
- Optional[str], Field(default=None, description="Label for unchecked state")
109
- ]
110
-
111
-
112
- class ManualTaskAttachmentFieldMetadata(ManualTaskFieldMetadata):
113
- """Schema for attachment field metadata."""
114
-
115
- file_types: Annotated[
116
- list[str], Field(description="Allowed file types for upload fields")
117
- ]
118
- max_file_size: Annotated[
119
- int, Field(description="Maximum file size in bytes for upload fields")
120
- ]
121
- multiple: Annotated[
122
- bool, Field(default=False, description="Whether multiple files can be uploaded")
123
- ]
124
- max_files: Annotated[
125
- Optional[int],
126
- Field(
127
- default=None,
128
- description="Maximum number of files allowed when multiple is true",
129
- ),
130
- ]
131
- require_attachment_id: Annotated[
132
- bool,
133
- Field(
134
- default=True,
135
- description="Whether an attachment ID is required for this field",
136
- ),
137
- ]
138
- attachment_ids: Annotated[
139
- Optional[list[str]],
140
- Field(
141
- default=None,
142
- description="List of attachment IDs associated with this field",
143
- ),
144
- ]
145
-
146
- @model_validator(mode="after")
147
- def validate_multiple_max_files(self) -> "ManualTaskAttachmentFieldMetadata":
148
- """Validate that max_files is set when multiple is True."""
149
- if self.multiple and self.max_files is None:
150
- raise ValueError("max_files must be set when multiple is True")
151
- return self
152
-
153
-
154
- class ManualTaskFieldBase(FidesSchema):
155
- """Base schema for all field definitions."""
156
-
157
- model_config = ConfigDict(extra="allow")
158
-
159
- field_key: Annotated[
160
- str, Field(description="Unique key for the field", min_length=1)
161
- ]
162
- field_type: Annotated[ManualTaskFieldType, Field(description="Type of the field")]
163
- field_metadata: Annotated[
164
- ManualTaskFieldMetadata, Field(description="Field metadata and configuration")
165
- ]
166
-
167
- @classmethod
168
- def get_field_model_for_type(
169
- cls, field_type: Union[str, ManualTaskFieldType]
170
- ) -> type["ManualTaskFieldBase"]:
171
- """Get the appropriate field model class for a given field type.
172
-
173
- Args:
174
- field_type: The field type as a string or ManualTaskFieldType enum value
175
-
176
- Returns:
177
- The appropriate field model class
178
-
179
- Raises:
180
- ValueError: If the field type is not recognized
181
- """
182
- # Handle non-string/non-enum types
183
- if not isinstance(field_type, (str, ManualTaskFieldType)):
184
- raise ValueError(
185
- f"Invalid field type: expected string or ManualTaskFieldType, got {type(field_type).__name__}"
186
- )
187
-
188
- # Convert string to enum if needed
189
- if isinstance(field_type, str):
190
- try:
191
- field_type = ManualTaskFieldType(field_type)
192
- except ValueError:
193
- raise ValueError(
194
- f"Invalid field type: '{field_type}' is not a valid ManualTaskFieldType"
195
- )
196
-
197
- # Map field types to their model classes
198
- field_type_to_model = {
199
- ManualTaskFieldType.text: ManualTaskTextField,
200
- ManualTaskFieldType.checkbox: ManualTaskCheckboxField,
201
- ManualTaskFieldType.attachment: ManualTaskAttachmentField,
202
- }
203
-
204
- model_class = field_type_to_model.get(field_type)
205
- if not model_class:
206
- raise ValueError(f"No model class found for field type: {field_type}")
207
-
208
- return model_class
209
-
210
-
211
- class ManualTaskTextField(ManualTaskFieldBase):
212
- """Schema for text field definition."""
213
-
214
- field_type: Annotated[
215
- Literal[ManualTaskFieldType.text], Field(description="Type of the field")
216
- ]
217
- field_metadata: Annotated[
218
- ManualTaskTextFieldMetadata,
219
- Field(description="Field metadata and configuration"),
220
- ]
221
-
222
-
223
- class ManualTaskCheckboxField(ManualTaskFieldBase):
224
- """Schema for checkbox field definition."""
225
-
226
- field_type: Annotated[
227
- Literal[ManualTaskFieldType.checkbox], Field(description="Type of the field")
228
- ]
229
- field_metadata: Annotated[
230
- ManualTaskCheckboxFieldMetadata,
231
- Field(description="Field metadata and configuration"),
232
- ]
233
-
234
-
235
- class ManualTaskAttachmentField(ManualTaskFieldBase):
236
- """Schema for attachment field definition."""
237
-
238
- field_type: Annotated[
239
- Literal[ManualTaskFieldType.attachment], Field(description="Type of the field")
240
- ]
241
- field_metadata: Annotated[
242
- ManualTaskAttachmentFieldMetadata,
243
- Field(description="Field metadata and configuration"),
244
- ]
245
-
246
-
247
- # Type alias for all field types
248
- ManualTaskField = ManualTaskFieldBase
249
-
250
-
251
- class ManualTaskConfigCreate(FidesSchema):
252
- """Schema for creating a manual task configuration."""
253
-
254
- model_config = ConfigDict(extra="forbid")
255
-
256
- task_id: Annotated[
257
- str, Field(description="ID of the task this configuration belongs to")
258
- ]
259
- config_type: Annotated[
260
- ManualTaskConfigurationType, Field(description="Type of configuration")
261
- ]
262
- fields: Annotated[
263
- list[ManualTaskFieldBase], Field(description="List of field definitions")
264
- ]
265
-
266
-
267
- class ManualTaskConfigResponse(FidesSchema):
268
- """Schema for manual task configuration response."""
269
-
270
- model_config = ConfigDict(extra="forbid")
271
-
272
- id: Annotated[str, Field(description="Configuration ID")]
273
- task_id: Annotated[str, Field(description="Task ID")]
274
- config_type: Annotated[
275
- ManualTaskConfigurationType, Field(description="Type of configuration")
276
- ]
277
- version: Annotated[int, Field(description="Version of the configuration")]
278
- is_current: Annotated[
279
- bool, Field(description="Whether this is the current version")
280
- ]
281
- fields: Annotated[
282
- list[ManualTaskFieldBase], Field(description="List of field definitions")
283
- ]
284
- created_at: Annotated[datetime, Field(description="Creation timestamp")]
285
- updated_at: Annotated[datetime, Field(description="Last update timestamp")]
286
-
287
-
288
- class ManualTaskConfigUpdate(FidesSchema):
289
- """Schema for updating a manual task configuration."""
290
-
291
- model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
292
-
293
- task_id: Annotated[str, Field(description="ID of the task")]
294
- config_type: Annotated[
295
- ManualTaskConfigurationType, Field(description="Type of configuration")
296
- ]
297
- fields: Annotated[
298
- list[ManualTaskFieldBase], Field(description="List of field definitions")
299
- ]
300
-
301
-
302
- class ManualTaskConfigFieldResponse(FidesSchema):
303
- """Schema for manual task configuration field response."""
304
-
305
- model_config = ConfigDict(extra="forbid")
306
-
307
- field_key: Annotated[str, Field(description="Unique key for the field")]
308
- field_type: Annotated[ManualTaskFieldType, Field(description="Type of the field")]
309
- field_metadata: Annotated[
310
- ManualTaskFieldMetadata, Field(description="Field metadata and configuration")
311
- ]
@@ -1,79 +0,0 @@
1
- from datetime import datetime
2
- from enum import Enum
3
- from typing import Annotated, Any, Optional
4
-
5
- from pydantic import ConfigDict, Field
6
-
7
- from fides.api.schemas.base_class import FidesSchema
8
-
9
-
10
- class ManualTaskType(str, Enum):
11
- """Enum for manual task types."""
12
-
13
- privacy_request = "privacy_request"
14
- # Add more task types as needed
15
-
16
-
17
- class ManualTaskParentEntityType(str, Enum):
18
- """Enum for manual task parent entity types."""
19
-
20
- connection_config = (
21
- "connection_config" # used for access and erasure privacy requests
22
- )
23
- # Add more parent entity types as needed
24
-
25
-
26
- class ManualTaskReferenceType(str, Enum):
27
- """Enum for manual task reference types."""
28
-
29
- privacy_request = "privacy_request"
30
- connection_config = "connection_config"
31
- manual_task_config = "manual_task_config"
32
- assigned_user = "assigned_user" # Reference to the user assigned to the task
33
- # Add more reference types as needed
34
-
35
-
36
- class ManualTaskLogStatus(str, Enum):
37
- """Enum for manual task log status."""
38
-
39
- created = "created"
40
- updated = "updated"
41
- in_progress = "in_progress"
42
- complete = "complete"
43
- error = "error"
44
- retrying = "retrying"
45
- paused = "paused"
46
- awaiting_input = "awaiting_input"
47
-
48
-
49
- class ManualTaskLogCreate(FidesSchema):
50
- """Schema for creating a manual task log entry."""
51
-
52
- model_config = ConfigDict(extra="forbid")
53
-
54
- task_id: Annotated[str, Field(..., description="ID of the task")]
55
- status: Annotated[ManualTaskLogStatus, Field(..., description="Log status")]
56
- message: Annotated[Optional[str], Field(None, description="Log message")]
57
- details: Annotated[
58
- Optional[dict[str, Any]], Field(None, description="Additional details")
59
- ]
60
- config_id: Annotated[Optional[str], Field(None, description="Configuration ID")]
61
- instance_id: Annotated[Optional[str], Field(None, description="Instance ID")]
62
-
63
-
64
- class ManualTaskLogResponse(FidesSchema):
65
- """Schema for manual task log response."""
66
-
67
- model_config = ConfigDict(extra="forbid")
68
-
69
- id: Annotated[str, Field(..., description="Log ID")]
70
- task_id: Annotated[str, Field(..., description="Task ID")]
71
- status: Annotated[ManualTaskLogStatus, Field(..., description="Log status")]
72
- message: Annotated[Optional[str], Field(None, description="Log message")]
73
- details: Annotated[
74
- Optional[dict[str, Any]], Field(None, description="Additional details")
75
- ]
76
- config_id: Annotated[Optional[str], Field(None, description="Configuration ID")]
77
- instance_id: Annotated[Optional[str], Field(None, description="Instance ID")]
78
- created_at: Annotated[datetime, Field(..., description="Creation timestamp")]
79
- updated_at: Annotated[datetime, Field(..., description="Last update timestamp")]
@@ -1,151 +0,0 @@
1
- from datetime import datetime, timezone
2
- from enum import Enum as EnumType
3
- from typing import Optional
4
-
5
- from sqlalchemy.orm import Session
6
-
7
-
8
- class StatusTransitionNotAllowed(Exception):
9
- """Exception raised when a status transition is not allowed."""
10
-
11
- def __init__(self, message: str):
12
- self.message = message
13
- super().__init__(self.message)
14
-
15
-
16
- class StatusType(str, EnumType):
17
- """Enum for manual task status."""
18
-
19
- pending = "pending"
20
- in_progress = "in_progress"
21
- completed = "completed"
22
- failed = "failed"
23
-
24
- @classmethod
25
- def get_valid_transitions(cls, current_status: "StatusType") -> list["StatusType"]:
26
- """Get valid transitions from the current status.
27
-
28
- Args:
29
- current_status: The current status
30
-
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 []
43
-
44
-
45
- class StatusTransitionMixin:
46
- """Mixin for handling status transitions.
47
-
48
- This mixin provides methods for managing status transitions and completion tracking.
49
- It can be used by any model that needs status management.
50
- """
51
-
52
- # These should be overridden by the implementing class
53
- status: StatusType
54
- completed_at: Optional[datetime]
55
- completed_by_id: Optional[str]
56
-
57
- def _get_valid_transitions(self) -> list[StatusType]:
58
- """Get valid transitions from the current status.
59
-
60
- Returns:
61
- list[StatusType]: List of valid transitions
62
- """
63
- return StatusType.get_valid_transitions(self.status)
64
-
65
- def _validate_status_transition(self, new_status: StatusType) -> None:
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
75
- if new_status == self.status:
76
- raise StatusTransitionNotAllowed(
77
- f"Invalid status transition: already in status {new_status}"
78
- )
79
-
80
- # Get valid transitions for current status
81
- valid_transitions = self._get_valid_transitions()
82
- if new_status not in valid_transitions:
83
- raise StatusTransitionNotAllowed(
84
- f"Invalid status transition from {self.status} to {new_status}. "
85
- f"Valid transitions are: {valid_transitions}"
86
- )
87
-
88
- def update_status(
89
- self, db: Session, new_status: StatusType, user_id: Optional[str] = None
90
- ) -> None:
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
- """
98
- self._validate_status_transition(new_status)
99
-
100
- if new_status == StatusType.completed:
101
- self.completed_at = datetime.now(timezone.utc)
102
- self.completed_by_id = user_id
103
- elif new_status == StatusType.pending:
104
- # Reset completion fields if going back to pending
105
- self.completed_at = None
106
- self.completed_by_id = None
107
-
108
- self.status = new_status
109
- db.add(self)
110
- db.commit()
111
-
112
- def mark_completed(self, db: Session, user_id: str) -> None:
113
- """Mark as completed.
114
-
115
- Args:
116
- db: Database session
117
- user_id: user ID who completed the task
118
- """
119
- self.update_status(db, StatusType.completed, user_id)
120
-
121
- def mark_failed(self, db: Session) -> None:
122
- """Mark as failed."""
123
- self.update_status(db, StatusType.failed)
124
-
125
- def start_progress(self, db: Session) -> None:
126
- """Mark as in progress."""
127
- self.update_status(db, StatusType.in_progress)
128
-
129
- def reset_to_pending(self, db: Session) -> None:
130
- """Reset to pending status."""
131
- self.update_status(db, StatusType.pending)
132
-
133
- @property
134
- def is_completed(self) -> bool:
135
- """Check if completed."""
136
- return self.status == StatusType.completed
137
-
138
- @property
139
- def is_failed(self) -> bool:
140
- """Check if failed."""
141
- return self.status == StatusType.failed
142
-
143
- @property
144
- def is_in_progress(self) -> bool:
145
- """Check if in progress."""
146
- return self.status == StatusType.in_progress
147
-
148
- @property
149
- def is_pending(self) -> bool:
150
- """Check if pending."""
151
- return self.status == StatusType.pending
File without changes