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
@@ -39,6 +39,9 @@ from fides.api.service.connectors.google_cloud_postgres_connector import (
39
39
  GoogleCloudSQLPostgresConnector as GoogleCloudSQLPostgresConnector,
40
40
  )
41
41
  from fides.api.service.connectors.http_connector import HTTPSConnector as HTTPSConnector
42
+ from fides.api.service.connectors.manual_task_connector import (
43
+ ManualTaskConnector as ManualTaskConnector,
44
+ )
42
45
  from fides.api.service.connectors.manual_webhook_connector import (
43
46
  ManualWebhookConnector as ManualWebhookConnector,
44
47
  )
@@ -93,6 +96,7 @@ supported_connectors: Dict[str, Any] = {
93
96
  ConnectionType.google_cloud_sql_postgres.value: GoogleCloudSQLPostgresConnector,
94
97
  ConnectionType.https.value: HTTPSConnector,
95
98
  ConnectionType.manual_webhook.value: ManualWebhookConnector,
99
+ ConnectionType.manual_task.value: ManualTaskConnector,
96
100
  ConnectionType.mariadb.value: MariaDBConnector,
97
101
  ConnectionType.mongodb.value: MongoDBConnector,
98
102
  ConnectionType.mssql.value: MicrosoftSQLServerConnector,
@@ -0,0 +1,96 @@
1
+ """
2
+ Manual Task Connector - A minimal connector for manual task operations.
3
+
4
+ Since manual tasks don't actually connect to external systems, this connector
5
+ provides no-op implementations of the BaseConnector interface.
6
+ """
7
+
8
+ from typing import Any, Dict, List, Optional
9
+
10
+ from fides.api.graph.execution import ExecutionNode
11
+ from fides.api.models.connectionconfig import ConnectionTestStatus
12
+ from fides.api.models.policy import Policy
13
+ from fides.api.models.privacy_request import PrivacyRequest, RequestTask
14
+ from fides.api.service.connectors.base_connector import BaseConnector
15
+ from fides.api.service.connectors.query_configs.query_config import QueryConfig
16
+ from fides.api.util.collection_util import Row
17
+
18
+
19
+ class ManualTaskQueryConfig(QueryConfig):
20
+ """Minimal query config for manual tasks - not actually used"""
21
+
22
+ def generate_query(
23
+ self, input_data: Dict[str, List[Any]], policy: Optional[Policy]
24
+ ) -> str:
25
+ return "Manual task: no query needed"
26
+
27
+ def dry_run_query(self) -> str:
28
+ return "Manual task: no query needed"
29
+
30
+ def query_to_str(self, t: Any, input_data: Dict[str, List[Any]]) -> str:
31
+ """Convert query to string - not used for manual tasks"""
32
+ return "Manual task: no query needed"
33
+
34
+ def generate_update_stmt(
35
+ self, row: Row, policy: Policy, request: PrivacyRequest
36
+ ) -> Any:
37
+ """Generate update statement - not used for manual tasks"""
38
+ return None
39
+
40
+
41
+ class ManualTaskConnector(BaseConnector):
42
+ """
43
+ Minimal connector for manual tasks.
44
+
45
+ This connector provides no-op implementations since manual tasks don't
46
+ actually connect to external systems. The actual manual task logic
47
+ is handled by ManualTaskGraphTask.access_request()
48
+ """
49
+
50
+ def query_config(self, node: ExecutionNode) -> QueryConfig[Any]:
51
+ """Return a minimal query config - not actually used for manual tasks"""
52
+ return ManualTaskQueryConfig(node)
53
+
54
+ def test_connection(self) -> Optional[ConnectionTestStatus]:
55
+ """Manual tasks don't have connections to test"""
56
+ return ConnectionTestStatus.succeeded
57
+
58
+ def create_client(self) -> None:
59
+ """Manual tasks don't need database clients"""
60
+ return None
61
+
62
+ def retrieve_data(
63
+ self,
64
+ node: ExecutionNode,
65
+ policy: Policy,
66
+ privacy_request: PrivacyRequest,
67
+ request_task: RequestTask,
68
+ input_data: Dict[str, List[Any]],
69
+ ) -> List[Row]:
70
+ """
71
+ This method is not used for manual tasks.
72
+ Manual task data retrieval is handled by ManualTaskGraphTask.access_request()
73
+ """
74
+ return []
75
+
76
+ def mask_data(
77
+ self,
78
+ node: ExecutionNode,
79
+ policy: Policy,
80
+ privacy_request: PrivacyRequest,
81
+ request_task: RequestTask,
82
+ rows: List[Row],
83
+ ) -> int:
84
+ """
85
+ Manual tasks don't support erasure operations.
86
+ Manual tasks are for data collection, not data modification.
87
+ """
88
+ return 0
89
+
90
+ def close(self) -> None:
91
+ """No resources to close for manual tasks"""
92
+
93
+ @property
94
+ def requires_primary_keys(self) -> bool:
95
+ """Manual tasks don't require primary keys since they don't modify data"""
96
+ return False
@@ -5,8 +5,9 @@ from fideslang.models import MaskingStrategies
5
5
  from loguru import logger
6
6
  from sqlalchemy import MetaData, Table, text
7
7
  from sqlalchemy.engine import Engine
8
- from sqlalchemy.sql import Delete, Update # type: ignore
8
+ from sqlalchemy.sql import Delete, Update
9
9
  from sqlalchemy.sql.elements import ColumnElement, TextClause
10
+ from sqlalchemy_bigquery import BigQueryDialect
10
11
 
11
12
  from fides.api.graph.config import Field, FieldPath
12
13
  from fides.api.graph.execution import ExecutionNode
@@ -15,6 +16,8 @@ from fides.api.models.privacy_request import PrivacyRequest
15
16
  from fides.api.schemas.namespace_meta.bigquery_namespace_meta import (
16
17
  BigQueryNamespaceMeta,
17
18
  )
19
+ from fides.api.schemas.partitioning import TIME_BASED_REQUIRED_KEYS, combine_partitions
20
+ from fides.api.schemas.partitioning.time_based_partitioning import TimeBasedPartitioning
18
21
  from fides.api.service.connectors.query_configs.query_config import (
19
22
  QueryStringWithoutTuplesOverrideQueryConfig,
20
23
  )
@@ -36,40 +39,59 @@ class BigQueryQueryConfig(QueryStringWithoutTuplesOverrideQueryConfig):
36
39
  namespace_meta_schema = BigQueryNamespaceMeta
37
40
 
38
41
  @property
39
- def partitioning(self) -> Optional[Dict]:
40
- # Overriden from base implementation to allow for _only_ BQ partitioning, for now
42
+ def partitioning(
43
+ self,
44
+ ) -> Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]]:
45
+ # Overridden from base implementation to allow for _only_ BQ partitioning, for now
41
46
  return self.node.collection.partitioning
42
47
 
43
48
  def get_partition_clauses(
44
49
  self,
45
50
  ) -> List[str]:
46
51
  """
47
- Returns the WHERE clauses specified in the partitioning spec
48
-
49
- Currently, only where-clause based partitioning is supported.
50
-
51
- TODO: derive partitions from a start/end/interval specification
52
+ Build a list of SQL `WHERE` clause strings for the collection's partitioning
53
+ configuration.
52
54
 
55
+ Supported modes:
56
+ 1. `Legacy static` - A list of `where_clauses`.
57
+ 2. `Single time-based` - A single time-based partitioning spec
58
+ 3. `Multiple time-based` - A list of time-based partitioning specs, with different intervals
53
59
 
54
- NOTE: when we deprecate `where_clause` partitioning in favor of a more proper partitioning DSL,
55
- we should be sure to still support the existing `where_clause` partition definition on
56
- any in-progress DSRs so that they can run through to completion.
60
+ Any other combination (e.g. mixing modes or missing keys) raises a
61
+ `ValueError` so that mis-configurations surface early.
57
62
  """
58
- partition_spec = self.partitioning
63
+
64
+ partition_spec: Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]] = (
65
+ self.partitioning
66
+ )
59
67
  if not partition_spec:
60
- logger.error(
61
- "Partitioning clauses cannot be retrieved, no partitioning specification found"
68
+ logger.warning(
69
+ f"No partitioning specification found for node '{self.node.address}', skipping partition clauses"
62
70
  )
63
71
  return []
64
72
 
65
- if where_clauses := partition_spec.get("where_clauses"):
66
- return where_clauses
67
-
68
- # TODO: implement more advanced partitioning support!
73
+ # Legacy mode using `where_clauses`
74
+ if isinstance(partition_spec, dict) and "where_clauses" in partition_spec:
75
+ if any(k in partition_spec for k in TIME_BASED_REQUIRED_KEYS):
76
+ # Mixed mode not allowed
77
+ raise ValueError(
78
+ "Partitioning spec cannot define both `where_clauses` and time-based partitioning."
79
+ )
80
+ where = partition_spec.get("where_clauses") or []
81
+ if not where:
82
+ raise ValueError("`where_clauses` must be a non-empty list.")
83
+ return where
84
+
85
+ # Combine and de-duplicate boundary rows
86
+ combined_expressions = combine_partitions(partition_spec) # type: ignore
87
+
88
+ dialect = BigQueryDialect()
89
+ where_clauses = [
90
+ str(expr.compile(dialect=dialect, compile_kwargs={"literal_binds": True}))
91
+ for expr in combined_expressions
92
+ ]
69
93
 
70
- raise ValueError(
71
- "`where_clauses` must be specified in partitioning specification!"
72
- )
94
+ return where_clauses
73
95
 
74
96
  def _generate_table_name(self) -> str:
75
97
  """
@@ -147,7 +169,7 @@ class BigQueryQueryConfig(QueryStringWithoutTuplesOverrideQueryConfig):
147
169
  nested_result = unflatten_dict(merged_dict)
148
170
 
149
171
  # 5. Replace any arrays containing only None values with empty arrays
150
- nested_result = replace_none_arrays(nested_result) # type: ignore
172
+ nested_result = replace_none_arrays(nested_result)
151
173
 
152
174
  # 6. Only keep top-level keys that are in the update_value_map
153
175
  top_level_keys = {key.split(".")[0] for key in update_value_map}
@@ -1,7 +1,7 @@
1
1
  # pylint: disable=too-many-lines
2
2
  import re
3
3
  from abc import ABC, abstractmethod
4
- from typing import Any, Dict, Generic, List, Optional, Tuple, Type, TypeVar
4
+ from typing import Any, Dict, Generic, List, Optional, Tuple, Type, TypeVar, Union
5
5
 
6
6
  import pydash
7
7
  from loguru import logger
@@ -22,6 +22,7 @@ from fides.api.graph.execution import ExecutionNode
22
22
  from fides.api.models.policy import Policy, Rule
23
23
  from fides.api.models.privacy_request import PrivacyRequest
24
24
  from fides.api.schemas.namespace_meta.namespace_meta import NamespaceMeta
25
+ from fides.api.schemas.partitioning.time_based_partitioning import TimeBasedPartitioning
25
26
  from fides.api.schemas.policy import ActionType
26
27
  from fides.api.service.masking.strategy.masking_strategy import MaskingStrategy
27
28
  from fides.api.service.masking.strategy.masking_strategy_nullify import (
@@ -46,7 +47,9 @@ class QueryConfig(Generic[T], ABC):
46
47
  self.node = node
47
48
 
48
49
  @property
49
- def partitioning(self) -> Optional[Dict]: # pylint: disable=R1711
50
+ def partitioning( # pylint: disable=useless-return
51
+ self,
52
+ ) -> Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]]:
50
53
  # decided to de-scope partitioning support to only bigquery as this grew more complex,
51
54
  # but keeping more generic support stubbed out feels like a reasonable step.
52
55
  if self.node.collection.partitioning:
@@ -26,7 +26,15 @@
26
26
  <div class="table-row">
27
27
  <div class="table-cell">{{ field }}</div>
28
28
  <div class="table-cell">
29
- {% if field == "attachments" and value is mapping and value|length > 0 %}
29
+ {% set _is_attachment_block = false %}
30
+ {% if value is mapping and value|length > 0 %}
31
+ {% set _first_key = (value.keys() | list)[0] %}
32
+ {% if value[_first_key] is mapping and ('url' in value[_first_key]) %}
33
+ {% set _is_attachment_block = true %}
34
+ {% endif %}
35
+ {% endif %}
36
+
37
+ {% if _is_attachment_block %}
30
38
  <p class="expiration-notice">Note: All download links will expire in 7 days.</p>
31
39
  <div class="table table-hover">
32
40
  <div class="table-row">
@@ -23,6 +23,10 @@ h1 {
23
23
  color: var(--text-color);
24
24
  }
25
25
 
26
+ h2 {
27
+ margin-bottom: 12px;
28
+ }
29
+
26
30
  .container {
27
31
  display: flex;
28
32
  flex-direction: column;
@@ -109,8 +113,8 @@ h1 {
109
113
  width: 100%;
110
114
  border-collapse: separate;
111
115
  border-spacing: 0;
112
- padding-top: 20px;
113
- padding-bottom: 100px;
116
+ padding-top: 0;
117
+ padding-bottom: 14px;
114
118
  font-size: 14px;
115
119
  }
116
120
 
@@ -1,3 +1,4 @@
1
+ # pylint: disable=too-many-lines
1
2
  import time
2
3
  from copy import deepcopy
3
4
  from datetime import datetime, timedelta
@@ -71,6 +72,7 @@ from fides.api.task.graph_task import (
71
72
  filter_by_enabled_actions,
72
73
  get_cached_data_for_erasures,
73
74
  )
75
+ from fides.api.task.manual.manual_task_utils import create_manual_task_artificial_graphs
74
76
  from fides.api.tasks import DatabaseTask, celery_app
75
77
  from fides.api.tasks.scheduled.scheduler import scheduler
76
78
  from fides.api.util.collection_util import Row
@@ -450,6 +452,11 @@ def run_privacy_request(
450
452
  for dataset_config in datasets
451
453
  if not dataset_config.connection_config.disabled
452
454
  ]
455
+
456
+ # Add manual task artificial graphs to dataset graphs
457
+ manual_task_graphs = create_manual_task_artificial_graphs(session)
458
+ dataset_graphs.extend(manual_task_graphs)
459
+
453
460
  dataset_graph = DatasetGraph(*dataset_graphs)
454
461
 
455
462
  # Add success log for dataset configuration
@@ -33,6 +33,10 @@ from fides.api.models.worker_task import ExecutionLogStatus
33
33
  from fides.api.schemas.policy import ActionType
34
34
  from fides.api.task.deprecated_graph_task import format_data_use_map_for_caching
35
35
  from fides.api.task.execute_request_tasks import log_task_queued, queue_request_task
36
+ from fides.api.task.manual.manual_task_utils import (
37
+ ManualTaskAddress,
38
+ create_manual_task_instances_for_privacy_request,
39
+ )
36
40
  from fides.api.util.logger_context_utils import log_context
37
41
 
38
42
 
@@ -85,6 +89,14 @@ def build_access_networkx_digraph(
85
89
  # Connect the end nodes, those that have no downstream dependencies, to the terminator node
86
90
  networkx_graph.add_edge(node, TERMINATOR_ADDRESS)
87
91
 
92
+ manual_nodes = [
93
+ addr
94
+ for addr in traversal_nodes.keys()
95
+ if addr.collection == ManualTaskAddress.MANUAL_DATA_COLLECTION
96
+ ]
97
+ for manual_node in manual_nodes:
98
+ networkx_graph.add_edge(ROOT_COLLECTION_ADDRESS, manual_node)
99
+
88
100
  _add_edge_if_no_nodes(traversal_nodes, networkx_graph)
89
101
  return networkx_graph
90
102
 
@@ -458,6 +470,10 @@ def run_access_request(
458
470
  end_nodes: List[CollectionAddress] = traversal.traverse(
459
471
  traversal_nodes, collect_tasks_fn
460
472
  )
473
+
474
+ # Snapshot manual task field instances for this privacy request
475
+ create_manual_task_instances_for_privacy_request(session, privacy_request)
476
+
461
477
  # Save Access Request Tasks to the database
462
478
  ready_tasks = persist_new_access_request_tasks(
463
479
  session, privacy_request, traversal, traversal_nodes, end_nodes, graph
@@ -29,6 +29,8 @@ from fides.api.task.graph_task import (
29
29
  GraphTask,
30
30
  mark_current_and_downstream_nodes_as_failed,
31
31
  )
32
+ from fides.api.task.manual.manual_task_graph_task import ManualTaskGraphTask
33
+ from fides.api.task.manual.manual_task_utils import ManualTaskAddress
32
34
  from fides.api.task.task_resources import TaskResources
33
35
  from fides.api.tasks import DSR_QUEUE_NAME, DatabaseTask, celery_app
34
36
  from fides.api.util.cache import cache_task_tracking_key
@@ -108,7 +110,14 @@ def create_graph_task(
108
110
  to begin with - this may be unrecoverable and a new Privacy Request should be created.
109
111
  """
110
112
  try:
111
- graph_task: GraphTask = GraphTask(resources)
113
+ collection_address = request_task.request_task_address
114
+
115
+ # Check if this is a manual task address
116
+ graph_task: GraphTask
117
+ if ManualTaskAddress.is_manual_task_address(collection_address):
118
+ graph_task = ManualTaskGraphTask(resources)
119
+ else:
120
+ graph_task = GraphTask(resources)
112
121
 
113
122
  except Exception as exc:
114
123
  logger.debug(
@@ -6,6 +6,7 @@ from loguru import logger
6
6
 
7
7
  from fides.api.graph.config import CollectionAddress, FieldPath
8
8
  from fides.api.graph.graph import DatasetGraph
9
+ from fides.api.task.manual.manual_task_utils import ManualTaskAddress
9
10
  from fides.api.util.collection_util import Row
10
11
 
11
12
 
@@ -37,6 +38,11 @@ def filter_data_categories(
37
38
  if not results:
38
39
  continue
39
40
 
41
+ # Skip manual task data - it doesn't need filtering since it's controlled by field definitions
42
+ if f":{ManualTaskAddress.MANUAL_DATA_COLLECTION}" in node_address:
43
+ filtered_access_results[node_address].extend(results)
44
+ continue
45
+
40
46
  # Results from fides connectors are a special case:
41
47
  # they've already been filtered and stored in a dict keyed by rule key.
42
48
  # So here, we simply find the results corresponding to our current rule
@@ -109,6 +109,7 @@ def retry(
109
109
  method_name,
110
110
  self.execution_node.address,
111
111
  )
112
+ # Log the awaiting processing status and exit without retrying.
112
113
  self.log_awaiting_processing(action_type, ex)
113
114
  # Request Task put in "awaiting_processing" status and exited, awaiting Async Callback
114
115
  return None