ethyca-fides 2.68.1b1__py2.py3-none-any.whl → 2.68.1b3__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 (309) hide show
  1. {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/METADATA +3 -1
  2. {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/RECORD +247 -224
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/3baf42d251a6_add_generic_taxonomy_models.py +239 -0
  5. fides/api/alembic/migrations/versions/90502bcda282_update_request_tasks_add_polling_async.py +35 -0
  6. fides/api/api/v1/endpoints/generic_overrides.py +64 -167
  7. fides/api/api/v1/endpoints/privacy_request_endpoints.py +1 -1
  8. fides/api/common_exceptions.py +12 -3
  9. fides/api/db/base.py +6 -0
  10. fides/api/models/detection_discovery/core.py +6 -0
  11. fides/api/models/privacy_request/request_task.py +25 -0
  12. fides/api/models/taxonomy.py +275 -0
  13. fides/api/schemas/privacy_center_config.py +48 -19
  14. fides/api/schemas/storage/storage.py +2 -0
  15. fides/api/service/async_dsr/__init__.py +0 -0
  16. fides/api/service/async_dsr/async_dsr_service.py +75 -0
  17. fides/api/service/connectors/saas_connector.py +5 -6
  18. fides/api/service/deps.py +5 -0
  19. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +6 -4
  20. fides/api/service/privacy_request/request_service.py +56 -3
  21. fides/api/service/storage/storage_uploader_service.py +80 -5
  22. fides/api/service/storage/streaming/__init__.py +42 -0
  23. fides/api/service/storage/streaming/base_storage_client.py +61 -0
  24. fides/api/service/storage/streaming/dsr_storage.py +98 -0
  25. fides/api/service/storage/streaming/retry.py +282 -0
  26. fides/api/service/storage/streaming/s3/__init__.py +5 -0
  27. fides/api/service/storage/streaming/s3/s3_storage_client.py +113 -0
  28. fides/api/service/storage/streaming/s3/streaming_s3.py +196 -0
  29. fides/api/service/storage/streaming/schemas.py +173 -0
  30. fides/api/service/storage/streaming/smart_open_client.py +265 -0
  31. fides/api/service/storage/streaming/smart_open_streaming_storage.py +998 -0
  32. fides/api/service/storage/streaming/storage_client_factory.py +60 -0
  33. fides/api/task/graph_task.py +4 -4
  34. fides/api/task/manual/manual_task_graph_task.py +14 -4
  35. fides/api/util/connection_type.py +68 -33
  36. fides/config/execution_settings.py +4 -0
  37. fides/data/sample_project/docker-compose.yml +3 -3
  38. fides/service/privacy_request/privacy_request_service.py +1 -9
  39. fides/service/taxonomy/__init__.py +0 -0
  40. fides/service/taxonomy/handlers/__init__.py +11 -0
  41. fides/service/taxonomy/handlers/base.py +42 -0
  42. fides/service/taxonomy/handlers/legacy_handler.py +95 -0
  43. fides/service/taxonomy/taxonomy_service.py +261 -0
  44. fides/service/taxonomy/utils.py +160 -0
  45. fides/ui-build/static/admin/404.html +1 -1
  46. fides/ui-build/static/admin/_next/static/_BLI2ArqQzY5XnXbrcxa2/_buildManifest.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/1099-7b2085a3931da9e4.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/1138-0d846ffef62c580f.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/1345-ab756811e19ff4fc.js +1 -0
  50. fides/ui-build/static/admin/_next/static/chunks/{1817-c90365325f8a3d75.js → 1817-fd21f1f5ef0faffa.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/{1975.e5cc7a1ccd477671.js → 1975.16126463309143e3.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/{2921-46f9465c2852a46b.js → 2921-0e5cc63a82e31830.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/3620-6cceae71bae5b531.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/3729-7d2d52400f1f7413.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/3855-64541570e2f838fb.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/3872-7a18d18a5e287e4e.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/{3923-a33633feba5e655e.js → 3923-5c87b3d7f1626678.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/{401-741bb31b586b7c96.js → 401-3902e3e98790d401.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/{4121-94354b50a41f8497.js → 4121-64ef70ef906bbdd0.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/431-86ad2beeb93c95c9.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/4608-70521532195124de.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/4786-53ef1662f2d0d98c.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/4808-8713433c84a62efe.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/4844-351f99b6644b654e.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/5258-c6f96dc740eb5fb1.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/5487-338800277d36b8d7.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/549-e6453a3526023e85.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/602-80d113e801d7407d.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/{6084-02abe12327fc3dbc.js → 6084-da63f20d9416a982.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/{6853-270261ef5537a106.js → 6853-1d947b75eb07188c.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/6954-24f9a4f27d67b732.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/7476-a0dd03bfccf60d0c.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/7630-9fbe06cfb98266fe.js +1 -0
  74. fides/ui-build/static/admin/_next/static/chunks/{787-5ba991cad1f7664a.js → 787-3dd31844cf7fec55.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/79-dcd20e8b09501c17.js +1 -0
  76. fides/ui-build/static/admin/_next/static/chunks/796-8773e04b64ce2260.js +1 -0
  77. fides/ui-build/static/admin/_next/static/chunks/8002-dcd02da6e5649a1c.js +1 -0
  78. fides/ui-build/static/admin/_next/static/chunks/9046-57eab238570b8bf4.js +1 -0
  79. fides/ui-build/static/admin/_next/static/chunks/9676.bf0a8a6ff6dfd2af.js +1 -0
  80. fides/ui-build/static/admin/_next/static/chunks/{9826-8c81c97a72510fcf.js → 9826-756c958aecab59a2.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/9951-cdf73904a3adb27b.js +1 -0
  82. fides/ui-build/static/admin/_next/static/chunks/pages/{404-9174cdb70126c2c5.js → 404-dd625a559ada46ca.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-65723cd4b8fc36ac.js → _app-b6b09b2878b77b21.js} +136 -135
  84. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-621416493c89ef01.js → manual-92cf5e313be1f9e2.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-0b9908c3e1dfe49e.js → multiple-d6c525ee731a2993.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-5664a3ea796e5ffb.js +1 -0
  87. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-5bb1b31ae8752250.js → add-vendors-78f13de90111fd80.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-0fc678f3d6d2fcec.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-4e4d9426743b5cb4.js → [id]-126db59dc25ca326.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-d72460348fadcab8.js → privacy-experience-289605267d6cce7e.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-3e7ddc252da00c98.js → [id]-e9fd9b28ac9705af.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-35a7c305beee9428.js → new-28c003b6043bd16c.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-c643eff04525298e.js +1 -0
  94. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-ab96939421639153.js → properties-3ef5d01779a26455.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-baa4a2f8f08ac224.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-13240e3ca77acfeb.js → consent-8d4be9e7ec7d2a35.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-aad6047a4604b945.js → [resourceUrn]-f27ec4578c674181.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-bd37b407c80c6986.js → [projectUrn]-27b6c255bd9e73b6.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-0f66dac32040519c.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b6b98cea25dd94fa.js → [resourceUrn]-3b938562df81c4b0.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-ebf5e7fa4e2ffb49.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-b27c660039d951c9.js +1 -0
  103. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-8ce5d24af470888e.js +1 -0
  104. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8e35e33928abbcdc.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-21c141279e66237a.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-31e6c54794a9883e.js → [resourceUrn]-3bc6a207693fd175.js} +1 -1
  107. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-2822a423a7ad0550.js → detection-da16e73df395ad1d.js} +1 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-f98dd251babb7e28.js → [resourceUrn]-04b242632a114405.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-56eb4c014f0d96a3.js → discovery-900fe50183a40d72.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-8f88dc31c5144ea8.js → datamap-4f1f7c3a9531a8f4.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-343294dcb10d9532.js +1 -0
  112. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-1c097a0809fa5b6f.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-b47fa2498b534719.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-a31f881cab25704a.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-858c59c9e67e318d.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-67a7fe58b96ea739.js → [id]-16c28d272225afb6.js} +1 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-90a8df230cb89877.js → new-68f502d8b0b5792c.js} +1 -1
  118. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-1eb9acb17b133fd1.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/pages/{index-876bfd7210040cec.js → index-fec557d99211f577.js} +1 -1
  120. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-766e57bcf38b5b1e.js → [id]-e613543818d6cbd2.js} +1 -1
  121. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-8069f7c33695fd45.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-6e796c3fe632280b.js → [id]-4a08ca7762a19700.js} +1 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-fa0f3841c5bdfdeb.js → add-template-343a965dcdb3d11e.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-3ade4c54b1c8a11e.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-9103bfb854f71410.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-11503454a62d8d7b.js → AntForm-3b97029bd4d3c3ea.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-a504941807bdb7f1.js → FormikAntFormItem-9d9beb8f0d8a278c.js} +1 -1
  128. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-0119403c8ff97f83.js → FormikControlled-84a4d8fc60f839ed.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-94f6d57d6c94ddf7.js → FormikField-1fccf542ab2e33bf.js} +1 -1
  130. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-ed1a3ae09d72df89.js → forms-aa75263ae1ba67bb.js} +1 -1
  131. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-db334a1cbb102255.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11c1e4545c8f528c.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-192a986f61c23268.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-9216ac993d71387e.js +1 -0
  135. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-e55ec84d5380401d.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-48f447b31c786b80.js +1 -0
  137. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-41976b28503623cd.js → [id]-a74b51b704b80cb2.js} +1 -1
  138. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-cb438d8f5ec6007a.js → add-property-8d23f0c55ff6510a.js} +1 -1
  139. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-b6db7036993709b3.js → properties-77acceac4f99e7af.js} +1 -1
  140. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-4bc3e281409265cc.js → datamap-e60d398e255f4e00.js} +1 -1
  141. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-6aad3f563ed03b3f.js +1 -0
  142. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-c1b8f3606d160bb1.js +1 -0
  143. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-d9f7f78810d58d08.js +1 -0
  144. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-ee2c7dde99b1dafb.js +1 -0
  145. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-a4dad8ca9de2d07b.js +1 -0
  146. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-386368bf7cb31771.js → domain-records-31c270d228e00581.js} +1 -1
  147. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-996b3f250dd3ea1f.js +1 -0
  148. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-ee94981326ddcbf4.js +1 -0
  149. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-b41fb5ad277088ab.js → locations-0b831c58966782b8.js} +1 -1
  150. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-94271ba4a224a353.js +1 -0
  151. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-a94dfeea43fbca7d.js → regulations-41b8136e50320fd3.js} +1 -1
  152. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-52b45569cbc82e60.js +1 -0
  153. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-18b316e2dad73731.js → [id]-36d74e93e54aabaf.js} +1 -1
  154. fides/ui-build/static/admin/_next/static/chunks/pages/systems-24dfc8e2279ced2e.js +1 -0
  155. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-d9675cf5e6083b27.js +1 -0
  156. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-3237881945acc0ee.js → [id]-866826d7959df487.js} +1 -1
  157. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-a3a50d9d79066935.js → user-management-e63b61a8f99ccd57.js} +1 -1
  158. fides/ui-build/static/admin/_next/static/chunks/{webpack-69658aeaf6155d89.js → webpack-6d0a487039bcf30c.js} +1 -1
  159. fides/ui-build/static/admin/_next/static/css/92441453b27e9c34.css +1 -0
  160. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  161. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  162. fides/ui-build/static/admin/add-systems.html +1 -1
  163. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  164. fides/ui-build/static/admin/consent/configure.html +1 -1
  165. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  166. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  167. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  168. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  169. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  170. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  171. fides/ui-build/static/admin/consent/properties.html +1 -1
  172. fides/ui-build/static/admin/consent/reporting.html +1 -1
  173. fides/ui-build/static/admin/consent.html +1 -1
  174. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  175. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  176. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  177. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  178. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  179. fides/ui-build/static/admin/data-catalog.html +1 -1
  180. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  181. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  182. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  183. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  184. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  185. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  186. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  187. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  188. fides/ui-build/static/admin/datamap.html +1 -1
  189. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  190. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  191. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  192. fides/ui-build/static/admin/dataset/new.html +1 -1
  193. fides/ui-build/static/admin/dataset.html +1 -1
  194. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  195. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  196. fides/ui-build/static/admin/datastore-connection.html +1 -1
  197. fides/ui-build/static/admin/index.html +1 -1
  198. fides/ui-build/static/admin/integrations/[id].html +1 -1
  199. fides/ui-build/static/admin/integrations.html +1 -1
  200. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  201. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  202. fides/ui-build/static/admin/lib/fides.js +1 -1
  203. fides/ui-build/static/admin/login/[provider].html +1 -1
  204. fides/ui-build/static/admin/login.html +1 -1
  205. fides/ui-build/static/admin/messaging/[id].html +1 -1
  206. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  207. fides/ui-build/static/admin/messaging.html +1 -1
  208. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  209. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  210. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  211. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  212. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  213. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  214. fides/ui-build/static/admin/poc/forms.html +1 -1
  215. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  216. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  217. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  218. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  219. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  220. fides/ui-build/static/admin/privacy-requests.html +1 -1
  221. fides/ui-build/static/admin/properties/[id].html +1 -1
  222. fides/ui-build/static/admin/properties/add-property.html +1 -1
  223. fides/ui-build/static/admin/properties.html +1 -1
  224. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  225. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  226. fides/ui-build/static/admin/settings/about.html +1 -1
  227. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  228. fides/ui-build/static/admin/settings/consent.html +1 -1
  229. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  230. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  231. fides/ui-build/static/admin/settings/domains.html +1 -1
  232. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  233. fides/ui-build/static/admin/settings/locations.html +1 -1
  234. fides/ui-build/static/admin/settings/organization.html +1 -1
  235. fides/ui-build/static/admin/settings/regulations.html +1 -1
  236. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  237. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  238. fides/ui-build/static/admin/systems.html +1 -1
  239. fides/ui-build/static/admin/taxonomy.html +1 -1
  240. fides/ui-build/static/admin/user-management/new.html +1 -1
  241. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  242. fides/ui-build/static/admin/user-management.html +1 -1
  243. fides/ui-build/static/admin/_next/static/chunks/203-0c6cadcda98bdd33.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/3450-9314e1b15df8a8da.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/3855-4267fd8193e7f525.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/3872-ac5feefd40b61ae3.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/409-5bc4369b80a8c11d.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/4230-1ebc8c0ab293a077.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/431-a34d7ceff17c2169.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/4608-557fb24665b2e4bf.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/5309-ffdec884eec79d29.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/5574-831167a8da90e2e6.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/6662-499c189f932a35aa.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/6780-7d28e030f6516e5d.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/6882-7cc1d14e27a80c10.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/6954-7784e8d5ad6b8110.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/7476-4de465016d3433b4.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/7630-2a5c57787632693d.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/7725-c79513b04113112b.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/79-98cfab20bb831137.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/796-0b768155bf20505f.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/8735-f84afcc50885883c.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/9046-97a972cc8a8ed24d.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/9226-318dadf1c050ecda.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/9676.9e6828b42ef05e06.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/9951-4df2b67e0def5500.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-18e96ce81dab51a4.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-54d7c7310763c66d.js +0 -1
  269. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-6bc3b73a21576869.js +0 -1
  270. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-fe3d6887fecf0f86.js +0 -1
  271. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-e4770acf7044e2f5.js +0 -1
  272. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-0db635c3483c9da8.js +0 -1
  273. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-0c0e0a7798345541.js +0 -1
  274. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-3c56e5fe072a44c6.js +0 -1
  275. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-53a763e49ce34a74.js +0 -1
  276. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6a90131dcecd694c.js +0 -1
  277. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-145fe9e4cfcb231d.js +0 -1
  278. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-8a1e5d140785c1e9.js +0 -1
  279. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-227b5db4b472a6a7.js +0 -1
  280. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-8401f17fe5d9a1dc.js +0 -1
  281. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-7d77b3ad069be268.js +0 -1
  282. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cfb25b02abb8da71.js +0 -1
  283. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-3fdc55d4c129e618.js +0 -1
  284. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-8f9c006b6166f002.js +0 -1
  285. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-6ba7ae4f26c06cb0.js +0 -1
  286. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-e8db3ad525e7ddbd.js +0 -1
  287. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-c14dd24592369467.js +0 -1
  288. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-100d7d03930629a8.js +0 -1
  289. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-6f8d1b3ec83cfcf0.js +0 -1
  290. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-3ce15577435d47cb.js +0 -1
  291. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-f43a988542813110.js +0 -1
  292. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-1ea40fcd6b4268bf.js +0 -1
  293. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-65c7600fadc6e55a.js +0 -1
  294. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-33dab986141b3663.js +0 -1
  295. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-1195042727c399ed.js +0 -1
  296. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-71b98858ecb4e097.js +0 -1
  297. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-cf427e04f862b5d2.js +0 -1
  298. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-eabeeec5bf2773c6.js +0 -1
  299. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-ee56698ae3a6a78b.js +0 -1
  300. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-0e2e98cc38ee5499.js +0 -1
  301. fides/ui-build/static/admin/_next/static/chunks/pages/systems-c32589c86081b750.js +0 -1
  302. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-a8f09bf8f3204ca7.js +0 -1
  303. fides/ui-build/static/admin/_next/static/css/e1628f15dd5f019b.css +0 -1
  304. fides/ui-build/static/admin/_next/static/tzF4yti8NslASlGnxnZ8m/_buildManifest.js +0 -1
  305. {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/WHEEL +0 -0
  306. {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/entry_points.txt +0 -0
  307. {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/licenses/LICENSE +0 -0
  308. {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/top_level.txt +0 -0
  309. /fides/ui-build/static/admin/_next/static/{tzF4yti8NslASlGnxnZ8m → _BLI2ArqQzY5XnXbrcxa2}/_ssgManifest.js +0 -0
@@ -0,0 +1,60 @@
1
+ """Factory for creating provider-specific storage clients."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from fides.api.service.storage.streaming.base_storage_client import BaseStorageClient
8
+ from fides.api.service.storage.streaming.s3.s3_storage_client import S3StorageClient
9
+
10
+
11
+ class StorageClientFactory:
12
+ """Factory for creating provider-specific storage clients.
13
+
14
+ This factory creates the appropriate storage client implementation based on
15
+ the storage type, providing a clean separation between the main client and
16
+ provider-specific logic.
17
+ """
18
+
19
+ @staticmethod
20
+ def create_client(storage_type: str, storage_secrets: Any) -> BaseStorageClient:
21
+ """Create a provider-specific storage client.
22
+
23
+ Args:
24
+ storage_type: Type of storage ('s3', 'gcs', 'azure')
25
+ storage_secrets: Storage credentials and configuration.
26
+ Will be passed to the specific storage client implementation.
27
+
28
+ Returns:
29
+ Provider-specific storage client implementation
30
+
31
+ Raises:
32
+ ValueError: If the storage type is not supported
33
+ """
34
+ normalized_type = StorageClientFactory._normalize_storage_type(storage_type)
35
+
36
+ if normalized_type == "s3":
37
+ return S3StorageClient(storage_secrets)
38
+ if normalized_type == "gcs":
39
+ raise NotImplementedError("GCS storage is not yet supported")
40
+ raise ValueError(f"Unsupported storage type: {storage_type}")
41
+
42
+ @staticmethod
43
+ def _normalize_storage_type(storage_type: str) -> str:
44
+ """Normalize storage type to standard values.
45
+
46
+ Args:
47
+ storage_type: Raw storage type string
48
+
49
+ Returns:
50
+ Normalized storage type string
51
+ """
52
+ storage_type = storage_type.lower()
53
+
54
+ # Normalize storage type
55
+ if storage_type in {"gcs", "gcp", "google"}:
56
+ return "gcs"
57
+ if storage_type == "s3":
58
+ return "s3"
59
+
60
+ return storage_type
@@ -13,7 +13,7 @@ from sqlalchemy.orm import Session
13
13
  from fides.api.api.deps import get_autoclose_db_session as get_db
14
14
  from fides.api.common_exceptions import (
15
15
  ActionDisabled,
16
- AwaitingAsyncTaskCallback,
16
+ AwaitingAsyncTask,
17
17
  CollectionDisabled,
18
18
  NotSupportedForCollection,
19
19
  PrivacyRequestErasureEmailSendRequired,
@@ -114,17 +114,17 @@ def retry(
114
114
  self.log_start(action_type)
115
115
  # Run access or erasure request
116
116
  return func(*args, **kwargs)
117
- except AwaitingAsyncTaskCallback as ex:
117
+ except AwaitingAsyncTask as ex:
118
118
  traceback.print_exc()
119
119
  logger.warning(
120
- "Request Task {} {} {} awaiting async callback",
120
+ "Request Task {} {} {} awaiting async continuation",
121
121
  self.request_task.id if self.request_task.id else None,
122
122
  method_name,
123
123
  self.execution_node.address,
124
124
  )
125
125
  # Log the awaiting processing status and exit without retrying.
126
126
  self.log_awaiting_processing(action_type, ex)
127
- # Request Task put in "awaiting_processing" status and exited, awaiting Async Callback
127
+ # Request Task put in "awaiting_processing" status and exited, awaiting for Async continuation
128
128
  return None
129
129
  except PrivacyRequestErasureEmailSendRequired as exc:
130
130
  traceback.print_exc()
@@ -3,7 +3,7 @@ from typing import Any, Optional
3
3
  from loguru import logger
4
4
  from pydantic.v1.utils import deep_update
5
5
 
6
- from fides.api.common_exceptions import AwaitingAsyncTaskCallback
6
+ from fides.api.common_exceptions import AwaitingAsyncTask
7
7
  from fides.api.models.attachment import AttachmentType
8
8
  from fides.api.models.manual_task import (
9
9
  ManualTask,
@@ -63,6 +63,17 @@ class ManualTaskGraphTask(GraphTask):
63
63
  Calls _run_request with ACCESS configs.
64
64
  Returns data if submitted, raise AwaitingAsyncTaskCallback if not
65
65
  """
66
+ if self.resources.request.policy.get_action_type() == ActionType.erasure:
67
+ # We're in an erasure privacy request's access phase - complete access task immediately
68
+ # since access is just for data collection to support erasure, not for user data access
69
+ self.update_status(
70
+ "Access task completed immediately for erasure privacy request (data collection only)",
71
+ [],
72
+ ActionType.access,
73
+ ExecutionLogStatus.complete,
74
+ )
75
+ return []
76
+
66
77
  result = self._run_request(
67
78
  ManualTaskConfigurationType.access_privacy_request,
68
79
  ActionType.access,
@@ -127,7 +138,7 @@ class ManualTaskGraphTask(GraphTask):
127
138
  Execute manual task logic following the standard GraphTask pattern:
128
139
  1. Create ManualTaskInstances if they don't exist
129
140
  2. Check if all required submissions are present
130
- 3. Return data if submitted, raise AwaitingAsyncTaskCallback if not
141
+ 3. Return data if submitted, raise AwaitingAsyncTask if not
131
142
  """
132
143
  manual_task = self._get_manual_task_or_none()
133
144
  if manual_task is None:
@@ -254,7 +265,7 @@ class ManualTaskGraphTask(GraphTask):
254
265
  base_msg = f"Manual task for {self.connection_key} requires user input"
255
266
  if awaiting_detail_message:
256
267
  base_msg = f"{base_msg}. {awaiting_detail_message}"
257
- raise AwaitingAsyncTaskCallback(base_msg)
268
+ raise AwaitingAsyncTask(base_msg)
258
269
 
259
270
  def _ensure_manual_task_instances(
260
271
  self,
@@ -424,7 +435,6 @@ class ManualTaskGraphTask(GraphTask):
424
435
  ]
425
436
 
426
437
  if instances_to_remove:
427
-
428
438
  # Remove instances from the database
429
439
  for instance in instances_to_remove:
430
440
  instance.delete(self.resources.session)
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, Set
3
+ from typing import Any, Dict, Optional, Set
4
4
 
5
5
  from fides.api.common_exceptions import NoSuchConnectionTypeSecretSchemaError
6
6
  from fides.api.models.connectionconfig import ConnectionType
@@ -141,7 +141,9 @@ def get_connection_type_secret_schema(*, connection_type: str) -> dict[str, Any]
141
141
  Note that this does not return actual secrets, instead we return the *types* of
142
142
  secret fields needed to authenticate.
143
143
  """
144
- connection_system_types: list[ConnectionSystemTypeMap] = get_connection_types()
144
+ connection_system_types: list[ConnectionSystemTypeMap] = get_connection_types(
145
+ include_test_connections=True
146
+ )
145
147
  if not any(item.identifier == connection_type for item in connection_system_types):
146
148
  raise NoSuchConnectionTypeSecretSchemaError(
147
149
  f"No connection type found with name '{connection_type}'."
@@ -189,15 +191,15 @@ def get_connection_type_secret_schema(*, connection_type: str) -> dict[str, Any]
189
191
  return schema
190
192
 
191
193
 
192
- def get_connection_types(
193
- search: str | None = None,
194
- system_type: SystemType | None = None,
194
+ def _is_match(elem: str, search: Optional[str] = None) -> bool:
195
+ """If a search query param was included, is it a substring of an available connector type?"""
196
+ return search.lower() in elem.lower() if search else True
197
+
198
+
199
+ def get_saas_connection_types(
195
200
  action_types: Set[ActionType] = SUPPORTED_ACTION_TYPES,
201
+ search: Optional[str] = None,
196
202
  ) -> list[ConnectionSystemTypeMap]:
197
- def is_match(elem: str) -> bool:
198
- """If a search query param was included, is it a substring of an available connector type?"""
199
- return search.lower() in elem.lower() if search else True
200
-
201
203
  def saas_request_type_filter(connection_type: str) -> bool:
202
204
  """
203
205
  If any of the request type filters are set to true,
@@ -216,6 +218,45 @@ def get_connection_types(
216
218
  action_type in template.supported_actions for action_type in action_types
217
219
  )
218
220
 
221
+ saas_connection_types: list[ConnectionSystemTypeMap] = []
222
+ saas_types: list[str] = sorted(
223
+ [
224
+ saas_type
225
+ for saas_type in ConnectorRegistry.connector_types()
226
+ if _is_match(saas_type, search) and saas_request_type_filter(saas_type)
227
+ ]
228
+ )
229
+
230
+ for item in saas_types:
231
+ connector_template = ConnectorRegistry.get_connector_template(item)
232
+ if connector_template is not None:
233
+ saas_connection_types.append(
234
+ ConnectionSystemTypeMap(
235
+ identifier=item,
236
+ type=SystemType.saas,
237
+ human_readable=connector_template.human_readable,
238
+ encoded_icon=connector_template.icon,
239
+ authorization_required=connector_template.authorization_required,
240
+ user_guide=connector_template.user_guide,
241
+ supported_actions=connector_template.supported_actions,
242
+ )
243
+ )
244
+
245
+ return saas_connection_types
246
+
247
+
248
+ # FIXME: this function needs a refactor
249
+ def get_connection_types(
250
+ search: str | None = None,
251
+ system_type: SystemType | None = None,
252
+ action_types: Set[ActionType] = SUPPORTED_ACTION_TYPES,
253
+ include_test_connections: bool = False,
254
+ ) -> list[ConnectionSystemTypeMap]:
255
+ """
256
+ Returns a list of ConnectionSystemTypeMap objects that match the given search and system type.
257
+
258
+ If include_test_connections is True, test connections like test_website will be included in the response.
259
+ """
219
260
  connection_system_types: list[ConnectionSystemTypeMap] = []
220
261
  if (system_type == SystemType.database or system_type is None) and (
221
262
  ActionType.access in action_types or ActionType.erasure in action_types
@@ -238,7 +279,7 @@ def get_connection_types(
238
279
  ConnectionType.sovrn,
239
280
  ConnectionType.test_website,
240
281
  ]
241
- and is_match(conn_type.value)
282
+ and _is_match(conn_type.value, search)
242
283
  ],
243
284
  key=lambda x: x.value,
244
285
  )
@@ -254,28 +295,10 @@ def get_connection_types(
254
295
  ]
255
296
  )
256
297
  if system_type == SystemType.saas or system_type is None:
257
- saas_types: list[str] = sorted(
258
- [
259
- saas_type
260
- for saas_type in ConnectorRegistry.connector_types()
261
- if is_match(saas_type) and saas_request_type_filter(saas_type)
262
- ]
298
+ saas_connection_types = get_saas_connection_types(
299
+ action_types=action_types, search=search
263
300
  )
264
-
265
- for item in saas_types:
266
- connector_template = ConnectorRegistry.get_connector_template(item)
267
- if connector_template is not None:
268
- connection_system_types.append(
269
- ConnectionSystemTypeMap(
270
- identifier=item,
271
- type=SystemType.saas,
272
- human_readable=connector_template.human_readable,
273
- encoded_icon=connector_template.icon,
274
- authorization_required=connector_template.authorization_required,
275
- user_guide=connector_template.user_guide,
276
- supported_actions=connector_template.supported_actions,
277
- )
278
- )
301
+ connection_system_types.extend(saas_connection_types)
279
302
 
280
303
  if (system_type == SystemType.manual or system_type is None) and (
281
304
  ActionType.access in action_types or ActionType.erasure in action_types
@@ -285,7 +308,7 @@ def get_connection_types(
285
308
  manual_type.value
286
309
  for manual_type in ConnectionType
287
310
  if manual_type == ConnectionType.manual_webhook
288
- and is_match(manual_type.value)
311
+ and _is_match(manual_type.value, search)
289
312
  ]
290
313
  )
291
314
  connection_system_types.extend(
@@ -307,7 +330,7 @@ def get_connection_types(
307
330
  for email_type in ConnectionType
308
331
  if email_type
309
332
  in ERASURE_EMAIL_CONNECTOR_TYPES + CONSENT_EMAIL_CONNECTOR_TYPES
310
- and is_match(email_type.value)
333
+ and _is_match(email_type.value, search)
311
334
  and ( # include consent or erasure connectors if requested, respectively
312
335
  (
313
336
  ActionType.consent in action_types
@@ -339,4 +362,16 @@ def get_connection_types(
339
362
  ]
340
363
  )
341
364
 
365
+ if include_test_connections and (
366
+ system_type == SystemType.website or system_type is None
367
+ ):
368
+ connection_system_types.append(
369
+ ConnectionSystemTypeMap(
370
+ identifier=ConnectionType.test_website.value,
371
+ type=SystemType.website,
372
+ human_readable=ConnectionType.test_website.human_readable,
373
+ supported_actions=[],
374
+ )
375
+ )
376
+
342
377
  return connection_system_types
@@ -61,6 +61,10 @@ class ExecutionSettings(FidesSettings):
61
61
  default=3,
62
62
  description="The number of times a privacy request will be requeued when its tasks are interrupted before being marked as error",
63
63
  )
64
+ async_tasks_status_polling_interval_seconds: int = Field(
65
+ default=3600,
66
+ description="Seconds between polling for async tasks to requeue",
67
+ )
64
68
  use_dsr_3_0: bool = Field(
65
69
  default=False,
66
70
  description="Temporary flag to switch to using DSR 3.0 to process your tasks.",
@@ -87,7 +87,7 @@ services:
87
87
 
88
88
  fides-db:
89
89
  container_name: fides-db
90
- image: postgres:12
90
+ image: postgres:16
91
91
  healthcheck:
92
92
  test: ["CMD-SHELL", "pg_isready -U postgres"]
93
93
  interval: 15s
@@ -104,14 +104,14 @@ services:
104
104
 
105
105
  redis:
106
106
  container_name: fides-redis
107
- image: redis:6.2-alpine
107
+ image: redis:8.0-alpine
108
108
  command: redis-server --requirepass redispassword
109
109
  ports:
110
110
  - "7379:6379"
111
111
 
112
112
  postgres-test:
113
113
  container_name: fides-postgres-example-db
114
- image: postgres:12
114
+ image: postgres:16
115
115
  healthcheck:
116
116
  test: ["CMD-SHELL", "pg_isready -U postgres"]
117
117
  interval: 15s
@@ -7,6 +7,7 @@ from sqlalchemy.orm import Session
7
7
  from fides.api.common_exceptions import (
8
8
  FidesopsException,
9
9
  MessageDispatchException,
10
+ PrivacyRequestError,
10
11
  RedisNotConfigured,
11
12
  )
12
13
  from fides.api.models.audit_log import AuditLog, AuditLogAction
@@ -51,15 +52,6 @@ from fides.service.messaging.messaging_service import (
51
52
  )
52
53
 
53
54
 
54
- class PrivacyRequestError(Exception):
55
- """Base exception for privacy request operations."""
56
-
57
- def __init__(self, message: str, data: Optional[Dict] = None):
58
- self.message = message
59
- self.data = data
60
- super().__init__(message)
61
-
62
-
63
55
  class PrivacyRequestService:
64
56
  def __init__(
65
57
  self,
File without changes
@@ -0,0 +1,11 @@
1
+ """
2
+ Taxonomy handlers package.
3
+ """
4
+
5
+ from .base import TaxonomyHandler
6
+ from .legacy_handler import LegacyTaxonomyHandler
7
+
8
+ __all__ = [
9
+ "TaxonomyHandler",
10
+ "LegacyTaxonomyHandler",
11
+ ]
@@ -0,0 +1,42 @@
1
+ """
2
+ Base taxonomy handler and core validation functions.
3
+ """
4
+
5
+ from abc import ABC, abstractmethod
6
+ from typing import Any, Dict, List, Optional, Type
7
+
8
+ from sqlalchemy.orm import Session
9
+
10
+ from fides.api.db.base_class import FidesBase
11
+
12
+
13
+ class TaxonomyHandler(ABC):
14
+ """Abstract handler for taxonomy CRUD operations."""
15
+
16
+ def __init__(self, db: Session, taxonomy_type: str):
17
+ self.db = db
18
+ self.taxonomy_type = taxonomy_type
19
+
20
+ @abstractmethod
21
+ def get_model(self) -> Type[FidesBase]:
22
+ pass
23
+
24
+ @abstractmethod
25
+ def get_elements(self, active_only: bool, parent_key: Optional[str]) -> List[Any]:
26
+ pass
27
+
28
+ @abstractmethod
29
+ def get_element(self, fides_key: str) -> Optional[Any]:
30
+ pass
31
+
32
+ @abstractmethod
33
+ def create_element(self, element_data: Dict) -> Any:
34
+ pass
35
+
36
+ @abstractmethod
37
+ def update_element(self, fides_key: str, element_data: Dict) -> Optional[Any]:
38
+ pass
39
+
40
+ @abstractmethod
41
+ def delete_element(self, fides_key: str) -> None:
42
+ pass
@@ -0,0 +1,95 @@
1
+ """
2
+ Legacy taxonomy handler for DataCategory, DataUse, and DataSubject models.
3
+ """
4
+
5
+ from typing import Dict, List, Optional, Type, Union
6
+
7
+ from sqlalchemy.orm import Query, Session
8
+
9
+ from fides.api.models.sql_models import ( # type:ignore[attr-defined]
10
+ DataCategory,
11
+ DataSubject,
12
+ DataUse,
13
+ )
14
+
15
+ from .base import TaxonomyHandler
16
+
17
+
18
+ class LegacyTaxonomyHandler(TaxonomyHandler):
19
+ """Handler for legacy taxonomy models (DataCategory, DataUse, DataSubject)."""
20
+
21
+ def __init__(self, db: Session, taxonomy_type: str) -> None:
22
+ super().__init__(db, taxonomy_type)
23
+ self.models = {
24
+ "data_categories": DataCategory,
25
+ "data_uses": DataUse,
26
+ "data_subjects": DataSubject,
27
+ }
28
+ if taxonomy_type not in self.models:
29
+ raise ValueError(
30
+ f"Taxonomy type '{taxonomy_type}' not supported. Supported types: {list(self.models.keys())}"
31
+ )
32
+
33
+ def get_elements(
34
+ self, active_only: bool, parent_key: Optional[str]
35
+ ) -> List[Union[DataCategory, DataUse, DataSubject]]:
36
+ model_class = self.get_model()
37
+ query = self._build_query(model_class, active_only, parent_key)
38
+ return query.all()
39
+
40
+ def get_element(
41
+ self, fides_key: str
42
+ ) -> Optional[Union[DataCategory, DataUse, DataSubject]]:
43
+ model_class = self.get_model()
44
+ element = (
45
+ self.db.query(model_class)
46
+ .filter(model_class.fides_key == fides_key)
47
+ .first()
48
+ )
49
+ return element
50
+
51
+ def create_element(
52
+ self, element_data: Dict
53
+ ) -> Union[DataCategory, DataUse, DataSubject]:
54
+ model_class = self.get_model()
55
+ element = model_class.create(self.db, data=element_data)
56
+ return element
57
+
58
+ def update_element(
59
+ self, fides_key: str, element_data: Dict
60
+ ) -> Optional[Union[DataCategory, DataUse, DataSubject]]:
61
+ model_class = self.get_model()
62
+ element = (
63
+ self.db.query(model_class)
64
+ .filter(model_class.fides_key == fides_key)
65
+ .first()
66
+ )
67
+
68
+ if not element:
69
+ return None
70
+
71
+ return element.update(db=self.db, data=element_data)
72
+
73
+ def delete_element(self, fides_key: str) -> None:
74
+ model_class = self.get_model()
75
+ element = (
76
+ self.db.query(model_class)
77
+ .filter(model_class.fides_key == fides_key)
78
+ .first()
79
+ )
80
+
81
+ if element:
82
+ self.db.delete(element)
83
+
84
+ def get_model(self) -> Type[Union[DataCategory, DataUse, DataSubject]]:
85
+ return self.models[self.taxonomy_type]
86
+
87
+ def _build_query(
88
+ self, model_class: Type, active_only: bool, parent_key: Optional[str]
89
+ ) -> Query:
90
+ query = self.db.query(model_class)
91
+ if active_only:
92
+ query = query.filter(model_class.active.is_(True))
93
+ if parent_key and hasattr(model_class, "parent_key"):
94
+ query = query.filter(model_class.parent_key == parent_key)
95
+ return query