ethyca-fides 2.59.2b3__py2.py3-none-any.whl → 2.59.2rc0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/METADATA +2 -2
  2. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/RECORD +212 -215
  3. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/WHEEL +1 -1
  4. fides/_version.py +3 -3
  5. fides/api/api/v1/endpoints/storage_endpoints.py +6 -7
  6. fides/api/db/system.py +121 -1
  7. fides/api/models/asset.py +2 -1
  8. fides/api/models/privacy_notice.py +19 -14
  9. fides/api/models/sql_models.py +51 -0
  10. fides/api/schemas/application_config.py +0 -1
  11. fides/api/schemas/connection_configuration/connection_secrets_datahub.py +3 -3
  12. fides/api/schemas/connection_configuration/connection_secrets_mysql.py +0 -12
  13. fides/api/schemas/connection_configuration/connection_secrets_postgres.py +4 -0
  14. fides/api/schemas/consentable_item.py +8 -5
  15. fides/api/schemas/messaging/messaging.py +2 -9
  16. fides/api/schemas/storage/storage.py +4 -40
  17. fides/api/schemas/storage/storage_secrets_docs_only.py +2 -8
  18. fides/api/schemas/system.py +2 -1
  19. fides/api/service/connectors/mysql_connector.py +1 -13
  20. fides/api/service/connectors/postgres_connector.py +4 -2
  21. fides/api/service/connectors/saas_connector.py +13 -18
  22. fides/api/service/saas_request/saas_request_override_factory.py +3 -3
  23. fides/api/service/storage/storage_authenticator_service.py +16 -39
  24. fides/api/service/storage/storage_uploader_service.py +1 -25
  25. fides/api/task/graph_task.py +3 -2
  26. fides/api/tasks/storage.py +2 -50
  27. fides/api/util/aws_util.py +17 -28
  28. fides/api/util/consent_util.py +4 -10
  29. fides/api/util/storage_util.py +0 -2
  30. fides/service/messaging/aws_ses_service.py +16 -25
  31. fides/ui-build/static/admin/404.html +1 -1
  32. fides/ui-build/static/admin/_next/static/P3RkpoojridGfvvbDI91a/_buildManifest.js +1 -0
  33. fides/ui-build/static/admin/_next/static/chunks/1100-45c0634b4f51d10c.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/1376-92890c17ce39ca0d.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/146-d1820217dc36d46d.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/{1817-90e54de7c706b571.js → 1817-6abbe957a53026d7.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{1904-e1034674c6eef004.js → 1904-281183a117e26585.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/{2479-b4f7654c27a15c05.js → 2479-b4f7a1c7c711cb65.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/3086-d1ba90bc6ac9174b.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/3244-3d94bf3393366412.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/{3702-8a6360b2deef2a87.js → 3702-3d814671c31eaca3.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/3855-237afbbea7f54707.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/3872-c53d74aebd12cfd3.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/401-50974f107c2712fc.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/4060-52fd85fb1e15a2b8.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/4121-476f657b03a78965.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/4481-288d74a33473cff7.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/5102-626b9ff42e904276.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/5480-1623dbacdf4e6794.js +1 -0
  50. fides/ui-build/static/admin/_next/static/chunks/5487-9a2aecb0ec63d567.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/{5826-8a035114917033bb.js → 5826-1f4f74bf3b5348e4.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/5973-942ce645a4279587.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/{6372-3d6d19a89e1d7a37.js → 6372-2aee10b79089521a.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/6395-4224d6d26d1e8bb7.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/6853-ca5dacd25c9ccb7c.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/6954-127745bfdc5bc0b3.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/7751-3913b8c055f599e5.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/79-77cfed02164241ca.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/8433-c4c765833ab9cc07.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/8934-ffa2b0509bc7a845.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/9282-1a48b10b114d01f4.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/9327-4970d356f7000c0b.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/{9392.9178313b7a01d889.js → 9392.da35a8e778812d91.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/9572-2b9b10e146130c85.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/{9676.d1e42fd1d03c4a76.js → 9676.f297a1347ac09c56.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/9767-bf415d0daea960cd.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/{9951-a0ba5bccbbbd5f33.js → 9951-66aad0602aadfbe2.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/{404-b482dd9e6ba3397d.js → 404-29560aa2e6a60963.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-dc66d9fb6547cb04.js → _app-1ce747bb4aa843da.js} +48 -48
  70. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-58e9256e86916ecd.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-892fc00510cddef8.js → multiple-2392e3a101fae073.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a6926f7ec7ad10cf.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-404f3c9018952800.js +1 -0
  74. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-cc58c1e18966fcfd.js → add-vendors-7dfe37b9f0ff9a3c.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-422f4d002822a5ce.js → configure-dba7848b760ba227.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-cd8bb60adf783c4a.js → [id]-78de4bde88e18b0f.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-300fd2800c417d0b.js → new-c02b14c50b19bd91.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-7eeeee3769e73f78.js +1 -0
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-72dd15bfd87616c9.js → [id]-75c2ed6ba3de48cd.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-8bbccdd747f4100c.js → new-487ae57dc7e2ded2.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-65091908d6296afc.js +1 -0
  82. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-55cc394ebc428e59.js → properties-f67fda6a71d0a46b.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-7a1976c0d1aca8b6.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-ec420ff6cfb82abd.js → consent-75395dfc224cf44b.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-b0b976e8dd5e4cd6.js → [projectUrn]-fa65c67ec8c4b5e6.js} +1 -1
  86. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-4ea56a1c3010ba99.js → projects-e76a07ee6ee8d55f.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-75989f9732d90793.js +1 -0
  88. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-6b3d1fe762c747d8.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-61eafb8444bffb76.js +1 -0
  90. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-38476c697da53480.js +1 -0
  91. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-e7869f658e3017b9.js +1 -0
  92. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-10f789d4ab2b8927.js → [resourceUrn]-1bcaa606739ea1c5.js} +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-f473b2ee1c67be3c.js → detection-22f55dc12354b4c6.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-2569551ae75ea5a2.js → [resourceUrn]-86111c25dc30ef2b.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-ad077f30849fdc0a.js → discovery-853be75f08b9ab5c.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-4b12c6b141f6cda3.js → datamap-423172d31de8e9c6.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-da407b63cd3f5276.js → [...subfieldNames]-704553f5329fb9d4.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-76205fa5ddc5c3ae.js → [collectionName]-06c19dca941edb14.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-ab7c88da427b6396.js → [datasetId]-eac517f43d5f53a8.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-8dba366b1d55a15c.js → new-5aff1d01c6c30ad6.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-ee98d1a24a68f13b.js → dataset-f4d57b3432c57112.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-e39d66c8dfdc4c6f.js → [id]-b2b1168d0361baa8.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-8f2cfc79022cb6d0.js → new-c804349a417a888b.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-0faa9b3c4555e585.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/pages/index-e72904e316ede1b0.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-17191a759e167ca8.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-88e51c81a380ebad.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-1d18e28fa55a149b.js → [id]-66f5fbadd8455805.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-11bdab1b292c6f89.js → add-template-d441abb1f045940f.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-eef56c95b08aa24c.js +1 -0
  111. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-96350050e842bde5.js → [id]-54ea39f203182c53.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-d889076067104e56.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-3355b4803b2916f3.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b8c94b10ab90b061.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-3ac47981f1e2b0aa.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-835b7c4dd2240d16.js → [id]-f4fb941df069b7bf.js} +1 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-984851804558be53.js → add-property-bccb6ffab25aa214.js} +1 -1
  118. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-d2b95b0ebae06804.js → properties-9a7ac623370b7c00.js} +1 -1
  119. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-fe743440d7eb007b.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-4412a7b468b6d4bf.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-cdc866af93898716.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-a7dc8113067dff42.js +1 -0
  123. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-87df4b6493ca8162.js → domain-records-d9088f5cd9fb2822.js} +1 -1
  124. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-2f03e981234c40ad.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-cf09ad896c7396a6.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-a8cd013bdd3aef75.js → locations-759564ca0ae62840.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-5bcc7a6976e01a56.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-5abb227df116c9c4.js → regulations-2dce4501fca920b3.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-0b47ff26897c1d9a.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-693c726f22ae11c5.js → [id]-dd053a3bf2a9ca6c.js} +1 -1
  131. fides/ui-build/static/admin/_next/static/chunks/pages/systems-820893393f1516ee.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-8fccd670220dbf60.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-65ef1bdebb679666.js → new-082c3156175f9267.js} +1 -1
  134. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-28abb07c95f2c7c2.js → [id]-d527d1d1635541df.js} +1 -1
  135. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-facb8c0128a44cb1.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/{webpack-cf42f5a0e9af0ace.js → webpack-03e375f6d6b2c71b.js} +1 -1
  137. fides/ui-build/static/admin/_next/static/css/687135955af5b7e1.css +1 -0
  138. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  139. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  140. fides/ui-build/static/admin/add-systems.html +1 -1
  141. fides/ui-build/static/admin/ant-poc.html +1 -1
  142. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  143. fides/ui-build/static/admin/consent/configure.html +1 -1
  144. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  145. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  146. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  147. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  148. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  149. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  150. fides/ui-build/static/admin/consent/properties.html +1 -1
  151. fides/ui-build/static/admin/consent/reporting.html +1 -1
  152. fides/ui-build/static/admin/consent.html +1 -1
  153. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  154. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  155. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  156. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  157. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  158. fides/ui-build/static/admin/data-catalog.html +1 -1
  159. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  160. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  161. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  162. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  163. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  164. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  165. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  166. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  167. fides/ui-build/static/admin/datamap.html +1 -1
  168. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  169. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  170. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  171. fides/ui-build/static/admin/dataset/new.html +1 -1
  172. fides/ui-build/static/admin/dataset.html +1 -1
  173. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  174. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  175. fides/ui-build/static/admin/datastore-connection.html +1 -1
  176. fides/ui-build/static/admin/index.html +1 -1
  177. fides/ui-build/static/admin/integrations/[id].html +1 -1
  178. fides/ui-build/static/admin/integrations.html +1 -1
  179. fides/ui-build/static/admin/login/[provider].html +1 -1
  180. fides/ui-build/static/admin/login.html +1 -1
  181. fides/ui-build/static/admin/messaging/[id].html +1 -1
  182. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  183. fides/ui-build/static/admin/messaging.html +1 -1
  184. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  185. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  186. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  187. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  188. fides/ui-build/static/admin/privacy-requests.html +1 -1
  189. fides/ui-build/static/admin/properties/[id].html +1 -1
  190. fides/ui-build/static/admin/properties/add-property.html +1 -1
  191. fides/ui-build/static/admin/properties.html +1 -1
  192. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  193. fides/ui-build/static/admin/settings/about.html +1 -1
  194. fides/ui-build/static/admin/settings/consent.html +1 -1
  195. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  196. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  197. fides/ui-build/static/admin/settings/domains.html +1 -1
  198. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  199. fides/ui-build/static/admin/settings/locations.html +1 -1
  200. fides/ui-build/static/admin/settings/organization.html +1 -1
  201. fides/ui-build/static/admin/settings/regulations.html +1 -1
  202. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  203. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  204. fides/ui-build/static/admin/systems.html +1 -1
  205. fides/ui-build/static/admin/taxonomy.html +1 -1
  206. fides/ui-build/static/admin/user-management/new.html +1 -1
  207. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  208. fides/ui-build/static/admin/user-management.html +1 -1
  209. fides/api/alembic/migrations/versions/c9c72b3d550b_data_migration_cookie_asset.py +0 -218
  210. fides/api/service/storage/gcs.py +0 -38
  211. fides/ui-build/static/admin/_next/static/WiKelYdZvuyhqjL7rLRaz/_buildManifest.js +0 -1
  212. fides/ui-build/static/admin/_next/static/chunks/1100-0046887f49e9e7c7.js +0 -1
  213. fides/ui-build/static/admin/_next/static/chunks/3503-2e773a38d4a79c2d.js +0 -1
  214. fides/ui-build/static/admin/_next/static/chunks/3513-2ee2ff13c15af241.js +0 -1
  215. fides/ui-build/static/admin/_next/static/chunks/3855-7a43acdb1f8de2f5.js +0 -1
  216. fides/ui-build/static/admin/_next/static/chunks/3872-53b86dcc7ee3ddec.js +0 -1
  217. fides/ui-build/static/admin/_next/static/chunks/401-a15fcc78cc272c09.js +0 -1
  218. fides/ui-build/static/admin/_next/static/chunks/4060-93514991b84ca46c.js +0 -1
  219. fides/ui-build/static/admin/_next/static/chunks/4121-01e2b9f905b8ca29.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/4481-c19a0c5e273a3ec7.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/5487-b6957c5ba835167b.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/5835-2e2aa29b4a8bf4e6.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/5973-4b83cf367b6d82a2.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/6277-2f2d89b83a19ee67.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/6853-45e8c48ad0fdf1db.js +0 -1
  226. fides/ui-build/static/admin/_next/static/chunks/6954-6de30beefefac64a.js +0 -1
  227. fides/ui-build/static/admin/_next/static/chunks/7751-f83e9877478aafcf.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/79-576004c5ee5116f6.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/8433-234a6feeb457cbb8.js +0 -1
  230. fides/ui-build/static/admin/_next/static/chunks/8934-e357867355f1f924.js +0 -1
  231. fides/ui-build/static/admin/_next/static/chunks/9282-c7f853a8175266bc.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/9327-0bc418b9b16cc2c5.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/9572-c34e18bd40467909.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/9719-d3de30714871f267.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/9767-ee5b0af0e65d3802.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/9965-8880affd11242777.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-e16fcedb2215db13.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-cb85a0014fad7c58.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-2bade915860dd327.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-046051bb82ec1c53.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-1f402b7525f78140.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-de9118ec446ce994.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-7efbc1558febf026.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-cdd23dc94e1fbf89.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-94308fff1468b5e6.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-920ed6df7e0aa3a5.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-7e25ddfe45048b35.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-340e311fa02584dc.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/pages/index-259c1f1281f9b634.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-0fc3ffd11ba163f9.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-d584110d81e5b395.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-de5efa1ff6d0e9ea.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-e8e9ae8d58acceb2.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a76f1d1a19e61fe8.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-6b9a46fef5031a0b.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-630db544f2a27167.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-5d1aededc7523146.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-44f96bcf57cd4cbf.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-0ba66c149139737a.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-943dfe977678edb5.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-39d098cbcb33d4f5.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-45a8a86266308028.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-272eb2c0b7ffd290.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-aaa200f916ba79d8.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-da1b2dd3ec61a08e.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/pages/systems-5eccb5fe50f7aaa9.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-0611d707ce426ec7.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-4eb69d5c6af8581b.js +0 -1
  269. fides/ui-build/static/admin/_next/static/css/e728309361a9758b.css +0 -1
  270. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +0 -1
  271. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/entry_points.txt +0 -0
  272. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/licenses/LICENSE +0 -0
  273. {ethyca_fides-2.59.2b3.dist-info → ethyca_fides-2.59.2rc0.dist-info}/top_level.txt +0 -0
  274. /fides/ui-build/static/admin/_next/static/{WiKelYdZvuyhqjL7rLRaz → P3RkpoojridGfvvbDI91a}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (79.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
fides/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-18T13:02:59-0700",
11
+ "date": "2025-04-21T14:22:11-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "a519c45aafb62a2f424457ed2d702ef4be4af781",
15
- "version": "2.59.2b3"
14
+ "full-revisionid": "5349c2139e880663be7de5d9dcc20d58fabb22ce",
15
+ "version": "2.59.2rc0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -40,7 +40,6 @@ from fides.api.schemas.storage.storage import (
40
40
  FULLY_CONFIGURED_STORAGE_TYPES,
41
41
  AWSAuthMethod,
42
42
  BulkPutStorageConfigResponse,
43
- GCSAuthMethod,
44
43
  StorageConfigStatus,
45
44
  StorageConfigStatusMessage,
46
45
  StorageDestination,
@@ -220,7 +219,7 @@ def put_config_secrets(
220
219
 
221
220
  msg = f"Secrets updated for StorageConfig with key: {config_key}."
222
221
  if verify:
223
- status = secrets_are_valid(secrets_schema, storage_config)
222
+ status = secrets_are_valid(secrets_schema, storage_config.type)
224
223
  if status:
225
224
  logger.info(
226
225
  "Storage secrets are valid for config with key '{}'", config_key
@@ -419,10 +418,10 @@ def get_storage_status(
419
418
 
420
419
 
421
420
  def _storage_config_requires_secrets(storage_config: StorageConfig) -> bool:
422
- return storage_config.details.get(StorageDetails.AUTH_METHOD.value, None) in [
423
- AWSAuthMethod.SECRET_KEYS.value,
424
- GCSAuthMethod.SERVICE_ACCOUNT_KEYS.value,
425
- ]
421
+ return (
422
+ storage_config.details.get(StorageDetails.AUTH_METHOD.value, None)
423
+ == AWSAuthMethod.SECRET_KEYS.value
424
+ )
426
425
 
427
426
 
428
427
  @router.put(
@@ -534,7 +533,7 @@ def put_default_config_secrets(
534
533
 
535
534
  msg = f"Secrets updated for default config of storage type: {storage_type.value}."
536
535
  if verify:
537
- status = secrets_are_valid(secrets_schema, storage_config)
536
+ status = secrets_are_valid(secrets_schema, storage_config.type)
538
537
  if status:
539
538
  logger.info(
540
539
  "Storage secrets are valid for default config of storage type '{}'",
fides/api/db/system.py CHANGED
@@ -8,15 +8,19 @@ from typing import Any, Dict, List, Optional, Tuple, Type, Union
8
8
 
9
9
  from deepdiff import DeepDiff
10
10
  from fastapi import HTTPException
11
+ from fideslang.models import Cookies as CookieSchema
11
12
  from fideslang.models import System as SystemSchema
12
13
  from fideslang.validation import FidesKey
13
14
  from loguru import logger as log
15
+ from sqlalchemy import and_, delete, insert, select, update
14
16
  from sqlalchemy.ext.asyncio import AsyncSession
15
17
  from sqlalchemy.orm import Session
18
+ from sqlalchemy.sql.elements import BinaryExpression
16
19
  from starlette.status import HTTP_400_BAD_REQUEST, HTTP_404_NOT_FOUND
17
20
 
18
21
  from fides.api.db.crud import create_resource, get_resource, update_resource
19
22
  from fides.api.models.sql_models import ( # type: ignore[attr-defined]
23
+ Cookies,
20
24
  DataCategory,
21
25
  DataSubject,
22
26
  DataUse,
@@ -151,6 +155,7 @@ async def upsert_privacy_declarations(
151
155
  for privacy_declaration in resource.privacy_declarations:
152
156
  # prepare our 'payload' for either create or update
153
157
  data = privacy_declaration.model_dump(mode="json")
158
+ privacy_declaration_cookies: List[Dict] = data.pop("cookies", None)
154
159
  data["system_id"] = system.id # include FK back to system
155
160
 
156
161
  # if we find matching declaration, remove it from our map
@@ -163,11 +168,102 @@ async def upsert_privacy_declarations(
163
168
  # otherwise, create a new declaration record
164
169
  declaration = PrivacyDeclaration.create(db, data=data)
165
170
 
171
+ # Upsert cookies for the given privacy declaration
172
+ await upsert_cookies(
173
+ db, privacy_declaration_cookies, declaration, system=None
174
+ )
175
+
166
176
  # delete any existing privacy declarations that have not been "matched" in the request
167
177
  for existing_declarations in existing_declarations.values():
168
178
  await db.delete(existing_declarations)
169
179
 
170
180
 
181
+ async def upsert_cookies(
182
+ async_session: AsyncSession,
183
+ cookies: Optional[List[Dict]],
184
+ privacy_declaration: Optional[PrivacyDeclaration],
185
+ system: Optional[System],
186
+ ) -> None:
187
+ """
188
+ Upsert cookies for the given system or privacy_declaration. Cookies can be attached at the system-level
189
+ or the privacy declaration-level.
190
+
191
+ Remove any existing cookies that aren't specified here.
192
+ """
193
+ if not (privacy_declaration or system):
194
+ # Dev-level error
195
+ raise ValueError(
196
+ "Either system or privacy declaration must be supplied to upsert cookies"
197
+ )
198
+
199
+ if privacy_declaration and system:
200
+ # Dev-level error
201
+ raise ValueError(
202
+ "Supply either system or privacy declaration, not both, to upsert cookies"
203
+ )
204
+
205
+ parsed_cookies = (
206
+ [CookieSchema.model_validate(cookie) for cookie in cookies] if cookies else []
207
+ )
208
+
209
+ resource_filter: BinaryExpression = (
210
+ Cookies.system_id == system.id
211
+ if system
212
+ else Cookies.privacy_declaration_id == privacy_declaration.id # type: ignore[union-attr]
213
+ )
214
+
215
+ for cookie_data in parsed_cookies:
216
+ # Check if cookie exists on the resource
217
+ result = await async_session.execute(
218
+ select(Cookies).where(
219
+ and_(Cookies.name == cookie_data.name, resource_filter)
220
+ )
221
+ )
222
+ row: Optional[Cookies] = result.scalars().first()
223
+ if row:
224
+ # Update existing cookie
225
+ await async_session.execute(
226
+ update(Cookies)
227
+ .where(Cookies.id == row.id)
228
+ .values(cookie_data.model_dump(mode="json"))
229
+ )
230
+
231
+ else:
232
+ # Insert new cookie
233
+ await async_session.execute(
234
+ insert(Cookies).values(
235
+ {
236
+ "name": cookie_data.name,
237
+ "path": cookie_data.path,
238
+ "domain": cookie_data.domain,
239
+ "privacy_declaration_id": (
240
+ privacy_declaration.id if privacy_declaration else None
241
+ ),
242
+ "system_id": system.id if system else None,
243
+ }
244
+ )
245
+ )
246
+
247
+ # Select cookies which are currently on the application resource, but not included in the request
248
+ delete_result = await async_session.execute(
249
+ select(Cookies).where(
250
+ and_(
251
+ Cookies.name.notin_([cookie.name for cookie in parsed_cookies]),
252
+ resource_filter,
253
+ )
254
+ )
255
+ )
256
+
257
+ # Remove those cookies altogether
258
+ await async_session.execute(
259
+ delete(Cookies).where(
260
+ Cookies.id.in_(
261
+ [cookie.id for cookie in delete_result.scalars().unique().all()]
262
+ )
263
+ )
264
+ )
265
+
266
+
171
267
  async def update_system(
172
268
  resource: SystemSchema, db: AsyncSession, current_user_id: Optional[str] = None
173
269
  ) -> Tuple[Dict, bool]:
@@ -192,10 +288,18 @@ async def update_system(
192
288
  resource, "privacy_declarations"
193
289
  ) # remove the attribute on the system since we've already updated declarations
194
290
 
291
+ # Remove system-level cookies from request before updating the system.
292
+ # Cookies are upserted separately
293
+ proposed_system_cookies: Optional[List[Cookies]] = resource.cookies
294
+ delattr(resource, "cookies")
295
+
195
296
  # perform any updates on the system resource itself
196
297
  updated_system = await update_resource(System, resource.model_dump(), db)
197
298
 
198
299
  async with db.begin():
300
+ await upsert_cookies(
301
+ db, proposed_system_cookies, privacy_declaration=None, system=updated_system
302
+ ) # Upsert the associated cookies at the System-level
199
303
 
200
304
  await db.refresh(updated_system)
201
305
 
@@ -296,6 +400,10 @@ async def create_system(
296
400
  # remove the attribute on the system update since the declarations will be created separately
297
401
  delattr(resource, "privacy_declarations")
298
402
 
403
+ # Remove system-level cookies from request; these will be processed after the system is added
404
+ proposed_system_cookies: Optional[List[Cookies]] = resource.cookies
405
+ delattr(resource, "cookies")
406
+
299
407
  # create the system resource using generic creation
300
408
  # the system must be created before the privacy declarations so that it can be referenced
301
409
  resource_dict = resource.model_dump()
@@ -310,15 +418,27 @@ async def create_system(
310
418
  privacy_declaration_exception = None
311
419
  try:
312
420
  async with db.begin():
421
+ await upsert_cookies(
422
+ db,
423
+ proposed_system_cookies,
424
+ privacy_declaration=None,
425
+ system=created_system,
426
+ ) # Create the associated cookies at the System-level
313
427
 
314
428
  # create the specified declarations as records in their own table
315
429
  for privacy_declaration in privacy_declarations:
316
430
  data = privacy_declaration.model_dump(mode="json")
317
431
  data["system_id"] = created_system.id # add FK back to system
432
+ privacy_declaration_cookies: List[Dict] = data.pop("cookies", [])
318
433
  privacy_declaration = PrivacyDeclaration.create(
319
434
  db, data=data
320
435
  ) # create the associated PrivacyDeclaration
321
-
436
+ await upsert_cookies(
437
+ db,
438
+ privacy_declaration_cookies,
439
+ privacy_declaration=privacy_declaration,
440
+ system=None,
441
+ ) # Create the associated cookies on the Privacy Declaration
322
442
  except Exception as e:
323
443
  log.error(
324
444
  f"Error adding privacy declarations, reverting system creation: {str(privacy_declaration_exception)}"
fides/api/models/asset.py CHANGED
@@ -25,7 +25,8 @@ from fides.api.models.sql_models import System # type: ignore[attr-defined]
25
25
 
26
26
  class Asset(Base):
27
27
  """
28
- Web assets associated with a system
28
+ Web assets associated with a system. This model will supersede `Cookies` once we have established
29
+ a migration path and backward compatibility with all `Cookies` related APIs.
29
30
  """
30
31
 
31
32
  # Common attributes
@@ -20,9 +20,10 @@ from fides.api.models import (
20
20
  dry_update_data,
21
21
  update_if_modified,
22
22
  )
23
- from fides.api.models.asset import Asset
24
23
  from fides.api.models.location_regulation_selections import DeprecatedNoticeRegion
25
24
  from fides.api.models.sql_models import ( # type: ignore[attr-defined]
25
+ Cookies,
26
+ PrivacyDeclaration,
26
27
  System,
27
28
  get_system_data_uses,
28
29
  )
@@ -190,20 +191,24 @@ class PrivacyNotice(PrivacyNoticeBase, Base):
190
191
  raise Exception("Invalid notice consent mechanism.")
191
192
 
192
193
  @property
193
- def cookies(self) -> List[Asset]:
194
- """Return relevant assets of type 'cookie' (via the data use)"""
194
+ def cookies(self) -> List[Cookies]:
195
+ """Return relevant cookie names (via the data use)"""
195
196
  db = Session.object_session(self)
196
- or_queries = [
197
- f"array_to_string(data_uses, ',') ILIKE '{data_use}%'"
198
- for data_use in self.data_uses
199
- ]
200
-
201
- query = db.query(Asset).filter(
202
- Asset.asset_type == "Cookie",
203
- or_(*[text(query) for query in or_queries]),
204
- )
205
-
206
- return query.all()
197
+ return (
198
+ db.query(Cookies)
199
+ .join(
200
+ PrivacyDeclaration,
201
+ PrivacyDeclaration.id == Cookies.privacy_declaration_id,
202
+ )
203
+ .filter(
204
+ or_(
205
+ *[
206
+ PrivacyDeclaration.data_use.like(f"{notice_use}%")
207
+ for notice_use in self.data_uses
208
+ ]
209
+ )
210
+ )
211
+ ).all()
207
212
 
208
213
  @property
209
214
  def calculated_systems_applicable(self) -> bool:
@@ -457,6 +457,10 @@ class System(Base, FidesBase):
457
457
  lazy="selectin",
458
458
  )
459
459
 
460
+ cookies = relationship(
461
+ "Cookies", back_populates="system", lazy="selectin", uselist=True, viewonly=True
462
+ )
463
+
460
464
  assets = relationship(
461
465
  "Asset", back_populates="system", lazy="selectin", uselist=True, viewonly=True
462
466
  )
@@ -556,6 +560,9 @@ class PrivacyDeclaration(Base):
556
560
  system = relationship(
557
561
  System, back_populates="privacy_declarations", lazy="selectin"
558
562
  )
563
+ cookies = relationship(
564
+ "Cookies", back_populates="privacy_declaration", lazy="joined", uselist=True
565
+ )
559
566
 
560
567
  @classmethod
561
568
  def create(
@@ -859,6 +866,50 @@ class AuditLogResource(Base):
859
866
  extra_data = Column(JSON, nullable=True)
860
867
 
861
868
 
869
+ class Cookies(Base):
870
+ """
871
+ Stores cookies. Cookies have a FK to system and privacy declaration. If a privacy declaration is deleted,
872
+ the cookie can still remain linked to the system but unassociated with a data use.
873
+ """
874
+
875
+ name = Column(String, index=True, nullable=False)
876
+ path = Column(String)
877
+ domain = Column(String)
878
+
879
+ system_id = Column(
880
+ String, ForeignKey(System.id_field_path, ondelete="CASCADE"), index=True
881
+ ) # If system is deleted, remove the associated cookies.
882
+
883
+ privacy_declaration_id = Column(
884
+ String,
885
+ ForeignKey(PrivacyDeclaration.id_field_path, ondelete="CASCADE"),
886
+ index=True,
887
+ ) # If privacy declaration is deleted, remove the associated cookies.
888
+
889
+ system = relationship(
890
+ "System",
891
+ back_populates="cookies",
892
+ cascade="all,delete",
893
+ uselist=False,
894
+ lazy="selectin",
895
+ )
896
+
897
+ privacy_declaration = relationship(
898
+ "PrivacyDeclaration",
899
+ back_populates="cookies",
900
+ cascade="all,delete",
901
+ uselist=False,
902
+ lazy="joined", # Joined is intentional, instead of selectin
903
+ )
904
+
905
+ __table_args__ = (
906
+ UniqueConstraint(
907
+ "name", "privacy_declaration_id", name="_cookie_name_privacy_declaration_uc"
908
+ ),
909
+ UniqueConstraint("name", "system_id", name="_cookie_name_system_uc"),
910
+ )
911
+
912
+
862
913
  def get_system_data_uses(db: Session, include_parents: bool) -> Set:
863
914
  """Get data uses across all systems and those data uses' parents if include_parents is True
864
915
 
@@ -14,7 +14,6 @@ class StorageTypeApiAccepted(Enum):
14
14
  """Enum for storage destination types accepted in API updates"""
15
15
 
16
16
  s3 = "s3"
17
- gcs = "gcs"
18
17
  local = "local" # local should be used for testing only, not for processing real-world privacy requests
19
18
 
20
19
 
@@ -20,11 +20,11 @@ class PeriodicIntegrationFrequency(Enum):
20
20
 
21
21
  class DatahubSchema(ConnectionConfigSecretsSchema):
22
22
  datahub_server_url: AnyHttpUrlStringRemovesSlash = Field(
23
- title="DataHub server URL",
23
+ title="DataHub Server URL",
24
24
  description="The URL of your DataHub server.",
25
25
  )
26
26
  datahub_token: str = Field(
27
- title="DataHub token",
27
+ title="DataHub Token",
28
28
  description="The token used to authenticate with your DataHub server.",
29
29
  json_schema_extra={"sensitive": True},
30
30
  )
@@ -33,7 +33,7 @@ class DatahubSchema(ConnectionConfigSecretsSchema):
33
33
  description="The frequency at which the integration should run. Available options are daily, weekly, and monthly.",
34
34
  )
35
35
  glossary_node: str = Field(
36
- title="Glossary node",
36
+ title="Glossary Node",
37
37
  description="The glossary node name to use on Datahub for Fides Data Categories. (e.g. FidesDataCategories)",
38
38
  )
39
39
 
@@ -1,4 +1,3 @@
1
- from enum import Enum
2
1
  from typing import ClassVar, List, Optional
3
2
 
4
3
  from pydantic import Field
@@ -9,12 +8,6 @@ from fides.api.schemas.connection_configuration.connection_secrets import (
9
8
  )
10
9
 
11
10
 
12
- class MySQLSSLMode(str, Enum):
13
- preferred = "preferred"
14
- required = "required"
15
- disabled = "disabled"
16
-
17
-
18
11
  class MySQLSchema(ConnectionConfigSecretsSchema):
19
12
  """Schema to validate the secrets needed to connect to a MySQL Database"""
20
13
 
@@ -47,11 +40,6 @@ class MySQLSchema(ConnectionConfigSecretsSchema):
47
40
  title="SSH required",
48
41
  description="Indicates whether an SSH tunnel is required for the connection. Enable this option if your MySQL server is behind a firewall and requires SSH tunneling for remote connections.",
49
42
  )
50
- ssl_mode: Optional[MySQLSSLMode] = Field(
51
- None, # TODO: support for verify-ca and verify-full
52
- title="SSL Mode",
53
- description="The SSL mode to use for the connection. Valid values are 'required', 'preferred', and 'disabled'.",
54
- )
55
43
 
56
44
  _required_components: ClassVar[List[str]] = ["host", "dbname"]
57
45
 
@@ -46,6 +46,10 @@ class PostgreSQLSchema(ConnectionConfigSecretsSchema):
46
46
  title="Schema",
47
47
  description="The default schema to be used for the database connection (defaults to public).",
48
48
  )
49
+ ssl_mode: Optional[str] = Field(
50
+ default=None,
51
+ title="SSL Mode",
52
+ )
49
53
 
50
54
  _required_components: ClassVar[List[str]] = [
51
55
  "host",
@@ -3,6 +3,7 @@ from typing import Dict, List, Literal, Optional
3
3
  from pydantic import BaseModel, Field
4
4
 
5
5
  from fides.api.models.consent_automation import ConsentableItem as ConsentableItemModel
6
+ from fides.api.models.privacy_notice import UserConsentPreference
6
7
  from fides.api.schemas.base_class import FidesSchema
7
8
 
8
9
 
@@ -84,8 +85,10 @@ class ConsentWebhookResult(BaseModel):
84
85
 
85
86
  identity_map: Dict[
86
87
  Literal["email", "phone_number", "fides_user_device", "external_id"], str
87
- ] = Field(default_factory=dict, description="The identity of the user.")
88
- notice_id_map: Dict[str, str] = Field(
89
- default_factory=dict,
90
- description="A map of privacy notice IDs to user consent preferences.",
91
- )
88
+ ] = {}
89
+ notice_map: Dict[str, UserConsentPreference] = {}
90
+
91
+ @property
92
+ def success(self) -> bool:
93
+ """Returns true if both the identity map and notice map are not empty."""
94
+ return bool(self.identity_map) and bool(self.notice_map)
@@ -286,19 +286,12 @@ class MessagingServiceDetailsTwilioEmail(BaseModel):
286
286
  class MessagingServiceDetailsAWS_SES(BaseModel):
287
287
  """The details required to represent an AWS SES email configuration."""
288
288
 
289
- email_from: Optional[str] = None
290
- domain: Optional[str] = None
289
+ email_from: str
290
+ domain: str
291
291
  aws_region: str
292
292
 
293
293
  model_config = ConfigDict(extra="forbid")
294
294
 
295
- @model_validator(mode="before")
296
- @classmethod
297
- def validate_fields(cls, values: Dict[str, Any]) -> Dict[str, Any]:
298
- if not values.get("domain") and not values.get("email_from"):
299
- raise ValueError("Either 'email_from' or 'domain' must be provided.")
300
- return values
301
-
302
295
 
303
296
  class MessagingServiceSecrets(Enum):
304
297
  """Enum for message service secrets"""
@@ -61,20 +61,6 @@ class StorageDetailsS3(FileBasedStorageDetails):
61
61
  model_config = ConfigDict(use_enum_values=True)
62
62
 
63
63
 
64
- class GCSAuthMethod(str, Enum):
65
- ADC = "adc" # Application Default Credentials
66
- SERVICE_ACCOUNT_KEYS = "service_account_keys"
67
-
68
-
69
- class StorageDetailsGCS(FileBasedStorageDetails):
70
- """The details required to represent a Google Cloud Storage bucket."""
71
-
72
- auth_method: GCSAuthMethod
73
- bucket: str
74
- max_retries: Optional[int] = 0
75
- model_config = ConfigDict(use_enum_values=True)
76
-
77
-
78
64
  class StorageDetailsLocal(FileBasedStorageDetails):
79
65
  """The details required to configurate local storage configuration"""
80
66
 
@@ -85,8 +71,6 @@ class StorageSecrets(Enum):
85
71
  # s3-specific
86
72
  AWS_ACCESS_KEY_ID = "aws_access_key_id"
87
73
  AWS_SECRET_ACCESS_KEY = "aws_secret_access_key"
88
- REGION_NAME = "region_name"
89
- AWS_ASSUME_ROLE = "assume_role_arn"
90
74
 
91
75
 
92
76
  class StorageSecretsLocal(BaseModel):
@@ -96,27 +80,10 @@ class StorageSecretsLocal(BaseModel):
96
80
 
97
81
 
98
82
  class StorageSecretsS3(BaseModel):
99
- aws_access_key_id: Optional[str] = None
100
- aws_secret_access_key: Optional[str] = None
101
- region_name: Optional[str] = None
102
- assume_role_arn: Optional[str] = None
103
- model_config = ConfigDict(extra="forbid")
104
-
83
+ """The secrets required to connect to an S3 bucket."""
105
84
 
106
- class StorageSecretsGCS(BaseModel):
107
- """The secrets required to connect to a Google Cloud Storage bucket."""
108
-
109
- type: str = "service_account"
110
- project_id: str
111
- private_key_id: str
112
- private_key: str
113
- client_email: str
114
- client_id: str
115
- auth_uri: str
116
- token_uri: str
117
- auth_provider_x509_cert_url: str
118
- client_x509_cert_url: str
119
- universe_domain: str
85
+ aws_access_key_id: str
86
+ aws_secret_access_key: str
120
87
  model_config = ConfigDict(extra="forbid")
121
88
 
122
89
 
@@ -132,7 +99,6 @@ class StorageType(Enum):
132
99
 
133
100
  FULLY_CONFIGURED_STORAGE_TYPES = (
134
101
  StorageType.s3,
135
- StorageType.gcs,
136
102
  ) # storage types that are considered "fully configured"
137
103
 
138
104
 
@@ -142,7 +108,6 @@ class StorageDestinationBase(BaseModel):
142
108
  type: StorageType
143
109
  details: Union[
144
110
  StorageDetailsS3,
145
- StorageDetailsGCS,
146
111
  StorageDetailsLocal,
147
112
  ] = Field(validate_default=True)
148
113
  format: Optional[ResponseFormat] = ResponseFormat.json.value # type: ignore
@@ -180,7 +145,6 @@ class StorageDestinationBase(BaseModel):
180
145
  try:
181
146
  schema = {
182
147
  StorageType.s3.value: StorageDetailsS3,
183
- StorageType.gcs.value: StorageDetailsGCS,
184
148
  StorageType.local.value: StorageDetailsLocal,
185
149
  }[storage_type]
186
150
  except KeyError:
@@ -245,7 +209,7 @@ class BulkPutStorageConfigResponse(BulkResponse):
245
209
  failed: List[BulkUpdateFailed] = []
246
210
 
247
211
 
248
- SUPPORTED_STORAGE_SECRETS = Union[StorageSecretsS3, StorageSecretsGCS]
212
+ SUPPORTED_STORAGE_SECRETS = StorageSecretsS3
249
213
 
250
214
 
251
215
  class StorageConfigStatus(Enum):
@@ -1,15 +1,9 @@
1
- from typing import Union
2
-
3
1
  from fides.api.schemas.base_class import NoValidationSchema
4
- from fides.api.schemas.storage.storage import StorageSecretsGCS, StorageSecretsS3
2
+ from fides.api.schemas.storage.storage import StorageSecretsS3
5
3
 
6
4
 
7
5
  class StorageSecretsS3Docs(StorageSecretsS3, NoValidationSchema):
8
6
  """The secrets required to connect to S3, for documentation"""
9
7
 
10
8
 
11
- class StorageSecretsGCSDocs(StorageSecretsGCS, NoValidationSchema):
12
- """The secrets required to connect to Google Cloud Storage, for documentation"""
13
-
14
-
15
- possible_storage_secrets = Union[StorageSecretsS3Docs, StorageSecretsGCSDocs]
9
+ possible_storage_secrets = StorageSecretsS3Docs
@@ -1,7 +1,7 @@
1
1
  from datetime import datetime
2
2
  from typing import Any, Dict, List, Optional, Sequence
3
3
 
4
- from fideslang.models import PrivacyDeclaration, System
4
+ from fideslang.models import Cookies, PrivacyDeclaration, System
5
5
  from pydantic import ConfigDict, Field
6
6
  from pydantic.main import BaseModel
7
7
 
@@ -17,6 +17,7 @@ class PrivacyDeclarationResponse(PrivacyDeclaration):
17
17
  id: str = Field(
18
18
  description="The database-assigned ID of the privacy declaration on the system. This is meant to be a read-only field, returned only in API responses"
19
19
  )
20
+ cookies: Optional[List[Cookies]] = []
20
21
 
21
22
 
22
23
  class BasicSystemResponse(System):
@@ -1,11 +1,10 @@
1
- from typing import Dict, List
1
+ from typing import List
2
2
 
3
3
  from sqlalchemy.engine import Engine, LegacyCursorResult, create_engine # type: ignore
4
4
 
5
5
  from fides.api.graph.execution import ExecutionNode
6
6
  from fides.api.schemas.connection_configuration.connection_secrets_mysql import (
7
7
  MySQLSchema,
8
- MySQLSSLMode,
9
8
  )
10
9
  from fides.api.service.connectors.query_configs.mysql_query_config import (
11
10
  MySQLQueryConfig,
@@ -70,27 +69,16 @@ class MySQLConnector(SQLConnector):
70
69
  uri = self.build_ssh_uri(local_address=self.ssh_server.local_bind_address)
71
70
  else:
72
71
  uri = (self.configuration.secrets or {}).get("url") or self.build_uri()
73
- connect_args = self.get_connect_args()
74
72
  return create_engine(
75
73
  uri,
76
74
  hide_parameters=self.hide_parameters,
77
75
  echo=not self.hide_parameters,
78
- connect_args=connect_args,
79
76
  )
80
77
 
81
78
  def query_config(self, node: ExecutionNode) -> SQLQueryConfig:
82
79
  """Query wrapper corresponding to the input execution_node."""
83
80
  return MySQLQueryConfig(node)
84
81
 
85
- def get_connect_args(self) -> Dict[str, Dict[str, MySQLSSLMode]]:
86
- """Get connection arguments for the engine"""
87
- ssl_mode = self.configuration.secrets.get("ssl_mode", MySQLSSLMode.preferred)
88
- return {
89
- "ssl": {
90
- "mode": ssl_mode,
91
- }
92
- }
93
-
94
82
  @staticmethod
95
83
  def cursor_result_to_rows(results: LegacyCursorResult) -> List[Row]:
96
84
  """