ethyca-fides 2.59.2b0__py2.py3-none-any.whl → 2.59.2b2__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 (231) hide show
  1. {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/METADATA +2 -2
  2. {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/RECORD +195 -195
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/c9c72b3d550b_data_migration_cookie_asset.py +218 -0
  5. fides/api/db/system.py +1 -121
  6. fides/api/models/asset.py +1 -2
  7. fides/api/models/privacy_notice.py +14 -19
  8. fides/api/models/sql_models.py +0 -51
  9. fides/api/schemas/connection_configuration/connection_secrets_mysql.py +12 -0
  10. fides/api/schemas/system.py +1 -2
  11. fides/api/service/connectors/mysql_connector.py +13 -1
  12. fides/api/worker/__init__.py +1 -1
  13. fides/ui-build/static/admin/404.html +1 -1
  14. fides/ui-build/static/admin/_next/static/chunks/{1100-22c375e757f23150.js → 1100-93c5835d689e9dd5.js} +1 -1
  15. fides/ui-build/static/admin/_next/static/chunks/{1817-11bb237f57d9ad27.js → 1817-16d1dd3b13e590b3.js} +1 -1
  16. fides/ui-build/static/admin/_next/static/chunks/{1904-3c40738cb0fd2a7c.js → 1904-0f03e5a2c3de8487.js} +1 -1
  17. fides/ui-build/static/admin/_next/static/chunks/{2479-50f431c0e2c0de3c.js → 2479-18fbea714b5f1f7a.js} +1 -1
  18. fides/ui-build/static/admin/_next/static/chunks/3503-569232568cee1a7e.js +1 -0
  19. fides/ui-build/static/admin/_next/static/chunks/3513-cf0c4d886ff26e00.js +1 -0
  20. fides/ui-build/static/admin/_next/static/chunks/{3702-31d37a0217f82615.js → 3702-c4465f7b3bbc3edc.js} +1 -1
  21. fides/ui-build/static/admin/_next/static/chunks/3855-5417dfc333c7b6b6.js +1 -0
  22. fides/ui-build/static/admin/_next/static/chunks/{3872-68b4ceba8f632bc0.js → 3872-03319b7328ddc284.js} +1 -1
  23. fides/ui-build/static/admin/_next/static/chunks/401-f0c485676a4fc5f9.js +1 -0
  24. fides/ui-build/static/admin/_next/static/chunks/4060-98d858ec609e4b76.js +1 -0
  25. fides/ui-build/static/admin/_next/static/chunks/4121-044a191b265f4e51.js +1 -0
  26. fides/ui-build/static/admin/_next/static/chunks/4481-85e3f5845b50f10d.js +1 -0
  27. fides/ui-build/static/admin/_next/static/chunks/{5487-22de631f1d186527.js → 5487-7751e91b40dc6050.js} +1 -1
  28. fides/ui-build/static/admin/_next/static/chunks/{5826-226c8843e715b6ad.js → 5826-8516f6c635510e95.js} +1 -1
  29. fides/ui-build/static/admin/_next/static/chunks/5835-b7b45dfb97180a88.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/5973-4e65b191ed82f8bd.js +1 -0
  31. fides/ui-build/static/admin/_next/static/chunks/6277-076a319bcff4f1a2.js +1 -0
  32. fides/ui-build/static/admin/_next/static/chunks/{6372-0ca1b9521b5489fd.js → 6372-d3f778c62070545f.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/{6853-7d7eb22f19d3806c.js → 6853-25ff9e572d633f33.js} +1 -1
  34. fides/ui-build/static/admin/_next/static/chunks/{6954-981a8a444780bedb.js → 6954-169abc679def0fb6.js} +1 -1
  35. fides/ui-build/static/admin/_next/static/chunks/{7751-09c6424d673d8aa4.js → 7751-e0a78be0ca620df1.js} +1 -1
  36. fides/ui-build/static/admin/_next/static/chunks/79-2302442f8b53f944.js +1 -0
  37. fides/ui-build/static/admin/_next/static/chunks/{8433-dd6d8dae02275d66.js → 8433-4481a5d085d3b008.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/{8934-6881185f0c5c0f6d.js → 8934-e2a4fd9f8ab74142.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/9282-356dc48612f4a21c.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/{9327-fb7ef941b5176077.js → 9327-b019990849ff57f3.js} +1 -1
  41. fides/ui-build/static/admin/_next/static/chunks/{9392.da35a8e778812d91.js → 9392.5f3cfb8eafbeac59.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/9572-ab070b1ae17dde8f.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/{9676.f297a1347ac09c56.js → 9676.2e1267373b5a6076.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/9719-caba0228fc973d3f.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/9767-b4f9c2cc14de6df6.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/{9951-8ceba69296972ce9.js → 9951-e0d7db7ec538ebf1.js} +1 -1
  47. fides/ui-build/static/admin/_next/static/chunks/9965-528ef17ac491d809.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/pages/{404-a3c57a06ff67cf1f.js → 404-1dfbf30fba0233a2.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-fc9e922ec354be47.js → _app-9560c81c6cf5f050.js} +17 -17
  50. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-bca30784c7356aa3.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-93907c53f342831f.js → multiple-14c60fbc5907c621.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-0d7a9d9ad082c80c.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-c2c4fd5faaf0f882.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-5e83ee7792c0f75f.js → add-vendors-79949b978a966399.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-ea7b2c628260c84c.js → configure-6af86d0717034a7f.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-7122d8a8c20e7cd2.js → [id]-e876f21f7f2245aa.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-85ddbe3ae50c7527.js → privacy-experience-83dea888aad26af3.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-5a9269aa00a16596.js → [id]-80dd6ab96599efb5.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-78808c75ba86c0be.js → new-e48da14c5d5d0a66.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-047c409bc5e12d1a.js → privacy-notices-05e67aa6f029e6d4.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-893753088b9729a3.js → properties-6c99121562583eb7.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-01d1371e690ae190.js → reporting-ed1cdefeb38cf592.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-7e5adfec9134a268.js → consent-253aa071516a6436.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-4b2c10ff79e46e50.js → [projectUrn]-366121dfd638f6b5.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-05bbb01e37766b80.js → projects-974623a3afd4754b.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-4b1d9e4cc7fa17a2.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-936f72087aae94e1.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-b6e0c8625c953a00.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9ebb4dc8bc7dd058.js +1 -0
  70. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-f0fe5d6cfcce0e69.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-1bcaa606739ea1c5.js → [resourceUrn]-10f789d4ab2b8927.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-22f55dc12354b4c6.js → detection-f473b2ee1c67be3c.js} +1 -1
  73. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-86111c25dc30ef2b.js → [resourceUrn]-2569551ae75ea5a2.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-853be75f08b9ab5c.js → discovery-ad077f30849fdc0a.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-6c63a6295668ed4e.js → datamap-0cb4cd87c876acc3.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-7a99a6c5c2fc2abe.js → [...subfieldNames]-fd1f9aba215e8fb2.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-39aab1de4df0660d.js → [collectionName]-06793bb37fa509d8.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-2cf04998a7521a7d.js → [datasetId]-662ce6650bd83f05.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-f3a6dd67f012b005.js → new-5b773da9c79af072.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-3b703775de1ca75e.js → dataset-a8582040705239d4.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-b905c75f68786c2f.js → [id]-e650d48347fb457e.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-abd92bec98bdbb66.js → new-4b96de4707916560.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-52c3f076edb49944.js → datastore-connection-7ce2cd66791e7f6f.js} +1 -1
  84. fides/ui-build/static/admin/_next/static/chunks/pages/{index-1bccf315f995267a.js → index-71e4264dcfba6181.js} +1 -1
  85. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-b3ec5320782fbb49.js +1 -0
  86. fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-2ce76b506ba8404a.js → integrations-4789200cdb1d7ec5.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-8950b4aff799099c.js → [id]-3a52dfa45f398f31.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-4cad85d5b6d52734.js → add-template-8e20f0da3a0779cc.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-57c7aa44af163623.js → messaging-439832fde70c1157.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-2fc14bda8d314449.js → [id]-16b266c9ddf8d192.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-3219ddeb37d46398.js → messaging-9c1748191ca19867.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-9f1ea2b5896ff3fd.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d8d23d06ce1d9dae.js → configure-67b0a2a798d71e4d.js} +1 -1
  94. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-faa220f7200fb252.js +1 -0
  95. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-6cca2c8ebbff78aa.js → [id]-99860c05fb5d25bd.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-f09f98007725fa51.js → add-property-4a7a21c25985fff0.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-9034bab3d7200d9b.js → properties-a78b5af5894ed324.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-a36cf070c98a6cbd.js → datamap-b5c8cdfd6c1e0544.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-92dada8329e89092.js → about-92fcfaa6111d7d24.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-224434177b2775dc.js +1 -0
  101. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-f6d6e3d9d556387c.js → consent-5822e06b76f3ec84.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ff123ece2e2e4009.js +1 -0
  103. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-368a4183139ea5e0.js → domain-records-4347b3fdd12fdcff.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-255655d6c367faad.js → domains-899401bf5c72b67f.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-e4498b6310074705.js → email-templates-d8f6562694f9dd45.js} +1 -1
  106. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-18f56b6b76abb71d.js → locations-f74503aa1626e302.js} +1 -1
  107. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-610aa65b3dbcf467.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-0350314337abff11.js → regulations-081148db3f589271.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-6986ba3f6f33c110.js +1 -0
  110. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-022910a52efbad76.js → [id]-e0110a539d33069a.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/{systems-e9a111ef0c32161e.js → systems-7aef28e963417fa3.js} +1 -1
  112. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-61345b0f7cbd939e.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-082c3156175f9267.js → new-65ef1bdebb679666.js} +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-32ec340d4b390d07.js → [id]-3430c5a08e86a85d.js} +1 -1
  115. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-216944eb66e430bb.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/webpack-7104b266fb47d653.js +1 -0
  117. fides/ui-build/static/admin/_next/static/css/{72caf4a266697967.css → 091e5fc4883aeb42.css} +1 -1
  118. fides/ui-build/static/admin/_next/static/tLZG5DlQ8HHUd5zR6TZEN/_buildManifest.js +1 -0
  119. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  120. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  121. fides/ui-build/static/admin/add-systems.html +1 -1
  122. fides/ui-build/static/admin/ant-poc.html +1 -1
  123. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  124. fides/ui-build/static/admin/consent/configure.html +1 -1
  125. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  126. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  127. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  128. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  129. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  130. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  131. fides/ui-build/static/admin/consent/properties.html +1 -1
  132. fides/ui-build/static/admin/consent/reporting.html +1 -1
  133. fides/ui-build/static/admin/consent.html +1 -1
  134. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  135. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  136. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  137. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  138. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  139. fides/ui-build/static/admin/data-catalog.html +1 -1
  140. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  141. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  142. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  143. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  144. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  145. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  146. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  147. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  148. fides/ui-build/static/admin/datamap.html +1 -1
  149. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  150. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  151. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  152. fides/ui-build/static/admin/dataset/new.html +1 -1
  153. fides/ui-build/static/admin/dataset.html +1 -1
  154. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  155. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  156. fides/ui-build/static/admin/datastore-connection.html +1 -1
  157. fides/ui-build/static/admin/index.html +1 -1
  158. fides/ui-build/static/admin/integrations/[id].html +1 -1
  159. fides/ui-build/static/admin/integrations.html +1 -1
  160. fides/ui-build/static/admin/login/[provider].html +1 -1
  161. fides/ui-build/static/admin/login.html +1 -1
  162. fides/ui-build/static/admin/messaging/[id].html +1 -1
  163. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  164. fides/ui-build/static/admin/messaging.html +1 -1
  165. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  166. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  167. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  168. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  169. fides/ui-build/static/admin/privacy-requests.html +1 -1
  170. fides/ui-build/static/admin/properties/[id].html +1 -1
  171. fides/ui-build/static/admin/properties/add-property.html +1 -1
  172. fides/ui-build/static/admin/properties.html +1 -1
  173. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  174. fides/ui-build/static/admin/settings/about.html +1 -1
  175. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  176. fides/ui-build/static/admin/settings/consent.html +1 -1
  177. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  178. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  179. fides/ui-build/static/admin/settings/domains.html +1 -1
  180. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  181. fides/ui-build/static/admin/settings/locations.html +1 -1
  182. fides/ui-build/static/admin/settings/organization.html +1 -1
  183. fides/ui-build/static/admin/settings/regulations.html +1 -1
  184. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  185. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  186. fides/ui-build/static/admin/systems.html +1 -1
  187. fides/ui-build/static/admin/taxonomy.html +1 -1
  188. fides/ui-build/static/admin/user-management/new.html +1 -1
  189. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  190. fides/ui-build/static/admin/user-management.html +1 -1
  191. fides/ui-build/static/admin/_next/static/chunks/146-106021bf1ae6e912.js +0 -1
  192. fides/ui-build/static/admin/_next/static/chunks/3086-ffd15c92ea81b3d6.js +0 -1
  193. fides/ui-build/static/admin/_next/static/chunks/3244-281e8f12e46ac168.js +0 -1
  194. fides/ui-build/static/admin/_next/static/chunks/3855-da54ef27afd56c46.js +0 -1
  195. fides/ui-build/static/admin/_next/static/chunks/401-49cdd118a89cc343.js +0 -1
  196. fides/ui-build/static/admin/_next/static/chunks/4060-bad5f07013c7bb49.js +0 -1
  197. fides/ui-build/static/admin/_next/static/chunks/4121-4914fb77e60d31f4.js +0 -1
  198. fides/ui-build/static/admin/_next/static/chunks/4481-7a992683e9191bc9.js +0 -1
  199. fides/ui-build/static/admin/_next/static/chunks/5102-3acf312a8f0d7720.js +0 -1
  200. fides/ui-build/static/admin/_next/static/chunks/5480-d177a83facd21738.js +0 -1
  201. fides/ui-build/static/admin/_next/static/chunks/5973-d5469b7d75700b01.js +0 -1
  202. fides/ui-build/static/admin/_next/static/chunks/6277-c46c9eb59177b850.js +0 -1
  203. fides/ui-build/static/admin/_next/static/chunks/6395-04041b53946664b1.js +0 -1
  204. fides/ui-build/static/admin/_next/static/chunks/79-7ca48fb1a0b52f96.js +0 -1
  205. fides/ui-build/static/admin/_next/static/chunks/9282-23b38e03f897722f.js +0 -1
  206. fides/ui-build/static/admin/_next/static/chunks/9572-64df993c83a2994c.js +0 -1
  207. fides/ui-build/static/admin/_next/static/chunks/9767-162b0f8524990149.js +0 -1
  208. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-c4c0c42bbe0f5548.js +0 -1
  209. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a8c51c7bdbb405e2.js +0 -1
  210. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-8fcf312148606e7e.js +0 -1
  211. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-d08a38d4f198691a.js +0 -1
  212. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-cc5431e4fbd6d39e.js +0 -1
  213. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-f073ddcfb916988e.js +0 -1
  214. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-cf48ed7dc04c3af2.js +0 -1
  215. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-73025c2ac5a00347.js +0 -1
  216. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-afcf73fd0337dde0.js +0 -1
  217. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-8e17802ab6b2d3fd.js +0 -1
  218. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-9d71495b42f34038.js +0 -1
  219. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-7986cf3b36456353.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-e6c477f2ac098e0b.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-c01d24583e9485f0.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-d5f777510ab8dfd2.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-517419b35435604a.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-c8ca51efbeccf39b.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/webpack-01277b766c8eb076.js +0 -1
  226. fides/ui-build/static/admin/_next/static/tRpOUAZ0oZhnC241q-BOJ/_buildManifest.js +0 -1
  227. {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/WHEEL +0 -0
  228. {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/entry_points.txt +0 -0
  229. {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/licenses/LICENSE +0 -0
  230. {ethyca_fides-2.59.2b0.dist-info → ethyca_fides-2.59.2b2.dist-info}/top_level.txt +0 -0
  231. /fides/ui-build/static/admin/_next/static/{tRpOUAZ0oZhnC241q-BOJ → tLZG5DlQ8HHUd5zR6TZEN}/_ssgManifest.js +0 -0
fides/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-16T11:54:07+0200",
11
+ "date": "2025-04-17T21:29:31-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "3d6ccca13ecd1b118ebd53fc44746f0be19fdbd4",
15
- "version": "2.59.2b0"
14
+ "full-revisionid": "58fd4263f3b795c9954555326445bec375a34885",
15
+ "version": "2.59.2b2"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,218 @@
1
+ """data migration converting existing 'Cookies' resources to 'Asset' resources with type 'Cookie'
2
+
3
+ Revision ID: c9c72b3d550b
4
+ Revises: 9288f729cac4
5
+ Create Date: 2025-02-18 18:33:56.039924
6
+
7
+ """
8
+
9
+ import uuid
10
+ from typing import Dict, Tuple
11
+
12
+ import sqlalchemy as sa
13
+ from alembic import op
14
+ from loguru import logger
15
+
16
+ from fides.api.models.asset import Asset
17
+
18
+ # revision identifiers, used by Alembic.
19
+ revision = "c9c72b3d550b"
20
+ down_revision = "9288f729cac4"
21
+ branch_labels = None
22
+ depends_on = None
23
+
24
+
25
+ def upgrade():
26
+ # migrate existing cookies to assets
27
+ connection = op.get_bind()
28
+ result = connection.execute(
29
+ sa.text(
30
+ "SELECT c.id, c.created_at, c.updated_at, c.name, c.domain, c.system_id, c.path, c.privacy_declaration_id, pd.system_id AS pud_system_id, pd.data_use "
31
+ "FROM cookies c "
32
+ "LEFT JOIN privacydeclaration pd ON c.privacy_declaration_id = pd.id"
33
+ )
34
+ )
35
+
36
+ logger.debug("Converting existing cookies to assets")
37
+ assets_to_create: Dict[str, Asset] = {}
38
+ for row in result:
39
+ if row.privacy_declaration_id is None:
40
+ identifier = f"{row.name}_{row.system_id}"
41
+ if identifier not in assets_to_create.keys():
42
+ assets_to_create[identifier] = Asset(
43
+ id=str(uuid.uuid4()),
44
+ created_at=row.created_at,
45
+ updated_at=row.updated_at,
46
+ name=row.name,
47
+ domain=row.domain,
48
+ system_id=row.system_id,
49
+ data_uses=[],
50
+ asset_type="Cookie",
51
+ )
52
+ continue
53
+
54
+ if row.pud_system_id:
55
+ system_id = row.pud_system_id
56
+ data_uses = [row.data_use]
57
+ else:
58
+ system_id = row.system_id
59
+ data_uses = []
60
+
61
+ # Asset unique identifier is a composite of name, asset_type, domain, base_url, system_id. All assets here are cookies.
62
+ identifier = f"{row.name}_{'Cookie'}_{row.domain}_{row.path}_{system_id}"
63
+ if identifier in assets_to_create.keys():
64
+ # If the asset already exists, append the data_use to the existing asset
65
+ assets_to_create[identifier].data_uses.extend(data_uses)
66
+ else:
67
+ # If the asset does not exist, create a new asset with the data_use
68
+ assets_to_create[identifier] = Asset(
69
+ id=str(uuid.uuid4()),
70
+ created_at=row.created_at,
71
+ updated_at=row.updated_at,
72
+ name=row.name,
73
+ domain=row.domain,
74
+ system_id=system_id,
75
+ data_uses=data_uses,
76
+ asset_type="Cookie",
77
+ )
78
+
79
+ # Insert the assets into the asset table
80
+ assets_list = [
81
+ {
82
+ "id": asset.id if asset.id else str(uuid.uuid4()),
83
+ "created_at": asset.created_at,
84
+ "updated_at": asset.updated_at,
85
+ "name": asset.name,
86
+ "domain": asset.domain,
87
+ "system_id": asset.system_id,
88
+ "data_uses": asset.data_uses,
89
+ "asset_type": "Cookie",
90
+ }
91
+ for asset in assets_to_create.values()
92
+ ]
93
+
94
+ if assets_list:
95
+ logger.debug("Inserting assets into asset table ")
96
+ connection.execute(
97
+ sa.text(
98
+ "INSERT INTO asset (id, created_at, updated_at, name, domain, system_id, data_uses, asset_type, with_consent) "
99
+ "VALUES (:id, :created_at, :updated_at, :name, :domain, :system_id, :data_uses, :asset_type, false) "
100
+ "ON CONFLICT DO NOTHING"
101
+ ),
102
+ assets_list,
103
+ )
104
+ else:
105
+ logger.debug("No assets to insert into asset table. Skipping.")
106
+
107
+ # Delete the cookies table
108
+ logger.debug("Deleting cookies table")
109
+ connection.execute(sa.text("DROP TABLE cookies"))
110
+
111
+
112
+ def downgrade():
113
+ # Recreate the cookies table
114
+ logger.debug("Recreating cookies table")
115
+ op.create_table(
116
+ "cookies",
117
+ sa.Column("id", sa.String(length=255), nullable=False),
118
+ sa.Column(
119
+ "created_at",
120
+ sa.DateTime(timezone=True),
121
+ server_default=sa.text("now()"),
122
+ nullable=True,
123
+ ),
124
+ sa.Column(
125
+ "updated_at",
126
+ sa.DateTime(timezone=True),
127
+ server_default=sa.text("now()"),
128
+ nullable=True,
129
+ ),
130
+ sa.Column("name", sa.String(), nullable=False),
131
+ sa.Column("domain", sa.String(), nullable=True),
132
+ sa.Column("path", sa.String(), nullable=True),
133
+ sa.Column("system_id", sa.String(), nullable=True),
134
+ sa.Column("privacy_declaration_id", sa.String(), nullable=True),
135
+ sa.ForeignKeyConstraint(
136
+ ["privacy_declaration_id"], ["privacydeclaration.id"], ondelete="SET NULL"
137
+ ),
138
+ sa.ForeignKeyConstraint(["system_id"], ["ctl_systems.id"], ondelete="CASCADE"),
139
+ sa.PrimaryKeyConstraint("id"),
140
+ sa.UniqueConstraint(
141
+ "name", "privacy_declaration_id", name="_cookie_name_privacy_declaration_uc"
142
+ ),
143
+ )
144
+ op.create_index(op.f("ix_cookies_id"), "cookies", ["id"], unique=False)
145
+ op.create_index(op.f("ix_cookies_name"), "cookies", ["name"], unique=False)
146
+ op.create_index(
147
+ op.f("ix_cookies_privacy_declaration_id"),
148
+ "cookies",
149
+ ["privacy_declaration_id"],
150
+ unique=False,
151
+ )
152
+ op.create_index(
153
+ op.f("ix_cookies_system_id"), "cookies", ["system_id"], unique=False
154
+ )
155
+ # ### end Alembic commands ###
156
+
157
+ connection = op.get_bind()
158
+ result = connection.execute(
159
+ sa.text(
160
+ "SELECT id, name, domain, system_id, data_uses FROM asset WHERE asset_type = 'Cookie'"
161
+ )
162
+ )
163
+
164
+ # fetch all privacy declarations
165
+ privacy_declarations = connection.execute(
166
+ sa.text("SELECT id, system_id, data_use FROM privacydeclaration")
167
+ ).fetchall()
168
+ # create a mapping of system_id and data_use to privacy_declaration_id
169
+ privacy_declaration_mapping: Dict[Tuple[str, str], str] = {}
170
+ for pud in privacy_declarations:
171
+ privacy_declaration_mapping[(pud.system_id, pud.data_use)] = pud.id
172
+
173
+ logger.debug("Migrating existing assets to cookies")
174
+ for row in result:
175
+ # Find the privacy declaration ID matching the system ID and data use
176
+ privacy_declaration_ids = []
177
+ for data_use in row.data_uses:
178
+ pud_id = privacy_declaration_mapping.get((row.system_id, data_use), None)
179
+ if pud_id:
180
+ privacy_declaration_ids.append(pud_id)
181
+
182
+ cookies_to_insert = []
183
+
184
+ if len(privacy_declaration_ids) == 0:
185
+ # If no privacy declaration match we attach to system_id
186
+ cookies_to_insert.append(
187
+ {
188
+ "id": row.id,
189
+ "name": row.name,
190
+ "domain": row.domain,
191
+ "system_id": row.system_id,
192
+ "privacy_declaration_id": None,
193
+ }
194
+ )
195
+ else:
196
+ for privacy_declaration_id in privacy_declaration_ids:
197
+ # Create a cookie for each privacy declaration ID
198
+ # generate a new ID
199
+ cookie_id = str(uuid.uuid4())
200
+ cookies_to_insert.append(
201
+ {
202
+ "id": cookie_id,
203
+ "name": row.name,
204
+ "domain": row.domain,
205
+ "system_id": None,
206
+ "privacy_declaration_id": privacy_declaration_id,
207
+ }
208
+ )
209
+
210
+ if cookies_to_insert:
211
+ connection.execute(
212
+ sa.text(
213
+ "INSERT INTO cookies (id, created_at, updated_at, name, domain, system_id, privacy_declaration_id) "
214
+ "VALUES (:id, NOW(), NOW(), :name, :domain, :system_id, :privacy_declaration_id) "
215
+ "ON CONFLICT DO NOTHING"
216
+ ),
217
+ cookies_to_insert,
218
+ )
fides/api/db/system.py CHANGED
@@ -8,19 +8,15 @@ 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
12
11
  from fideslang.models import System as SystemSchema
13
12
  from fideslang.validation import FidesKey
14
13
  from loguru import logger as log
15
- from sqlalchemy import and_, delete, insert, select, update
16
14
  from sqlalchemy.ext.asyncio import AsyncSession
17
15
  from sqlalchemy.orm import Session
18
- from sqlalchemy.sql.elements import BinaryExpression
19
16
  from starlette.status import HTTP_400_BAD_REQUEST, HTTP_404_NOT_FOUND
20
17
 
21
18
  from fides.api.db.crud import create_resource, get_resource, update_resource
22
19
  from fides.api.models.sql_models import ( # type: ignore[attr-defined]
23
- Cookies,
24
20
  DataCategory,
25
21
  DataSubject,
26
22
  DataUse,
@@ -155,7 +151,6 @@ async def upsert_privacy_declarations(
155
151
  for privacy_declaration in resource.privacy_declarations:
156
152
  # prepare our 'payload' for either create or update
157
153
  data = privacy_declaration.model_dump(mode="json")
158
- privacy_declaration_cookies: List[Dict] = data.pop("cookies", None)
159
154
  data["system_id"] = system.id # include FK back to system
160
155
 
161
156
  # if we find matching declaration, remove it from our map
@@ -168,102 +163,11 @@ async def upsert_privacy_declarations(
168
163
  # otherwise, create a new declaration record
169
164
  declaration = PrivacyDeclaration.create(db, data=data)
170
165
 
171
- # Upsert cookies for the given privacy declaration
172
- await upsert_cookies(
173
- db, privacy_declaration_cookies, declaration, system=None
174
- )
175
-
176
166
  # delete any existing privacy declarations that have not been "matched" in the request
177
167
  for existing_declarations in existing_declarations.values():
178
168
  await db.delete(existing_declarations)
179
169
 
180
170
 
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
-
267
171
  async def update_system(
268
172
  resource: SystemSchema, db: AsyncSession, current_user_id: Optional[str] = None
269
173
  ) -> Tuple[Dict, bool]:
@@ -288,18 +192,10 @@ async def update_system(
288
192
  resource, "privacy_declarations"
289
193
  ) # remove the attribute on the system since we've already updated declarations
290
194
 
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
-
296
195
  # perform any updates on the system resource itself
297
196
  updated_system = await update_resource(System, resource.model_dump(), db)
298
197
 
299
198
  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
303
199
 
304
200
  await db.refresh(updated_system)
305
201
 
@@ -400,10 +296,6 @@ async def create_system(
400
296
  # remove the attribute on the system update since the declarations will be created separately
401
297
  delattr(resource, "privacy_declarations")
402
298
 
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
-
407
299
  # create the system resource using generic creation
408
300
  # the system must be created before the privacy declarations so that it can be referenced
409
301
  resource_dict = resource.model_dump()
@@ -418,27 +310,15 @@ async def create_system(
418
310
  privacy_declaration_exception = None
419
311
  try:
420
312
  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
427
313
 
428
314
  # create the specified declarations as records in their own table
429
315
  for privacy_declaration in privacy_declarations:
430
316
  data = privacy_declaration.model_dump(mode="json")
431
317
  data["system_id"] = created_system.id # add FK back to system
432
- privacy_declaration_cookies: List[Dict] = data.pop("cookies", [])
433
318
  privacy_declaration = PrivacyDeclaration.create(
434
319
  db, data=data
435
320
  ) # create the associated PrivacyDeclaration
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
321
+
442
322
  except Exception as e:
443
323
  log.error(
444
324
  f"Error adding privacy declarations, reverting system creation: {str(privacy_declaration_exception)}"
fides/api/models/asset.py CHANGED
@@ -25,8 +25,7 @@ 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. This model will supersede `Cookies` once we have established
29
- a migration path and backward compatibility with all `Cookies` related APIs.
28
+ Web assets associated with a system
30
29
  """
31
30
 
32
31
  # Common attributes
@@ -20,10 +20,9 @@ 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
23
24
  from fides.api.models.location_regulation_selections import DeprecatedNoticeRegion
24
25
  from fides.api.models.sql_models import ( # type: ignore[attr-defined]
25
- Cookies,
26
- PrivacyDeclaration,
27
26
  System,
28
27
  get_system_data_uses,
29
28
  )
@@ -191,24 +190,20 @@ class PrivacyNotice(PrivacyNoticeBase, Base):
191
190
  raise Exception("Invalid notice consent mechanism.")
192
191
 
193
192
  @property
194
- def cookies(self) -> List[Cookies]:
195
- """Return relevant cookie names (via the data use)"""
193
+ def cookies(self) -> List[Asset]:
194
+ """Return relevant assets of type 'cookie' (via the data use)"""
196
195
  db = Session.object_session(self)
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()
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()
212
207
 
213
208
  @property
214
209
  def calculated_systems_applicable(self) -> bool:
@@ -457,10 +457,6 @@ 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
-
464
460
  assets = relationship(
465
461
  "Asset", back_populates="system", lazy="selectin", uselist=True, viewonly=True
466
462
  )
@@ -560,9 +556,6 @@ class PrivacyDeclaration(Base):
560
556
  system = relationship(
561
557
  System, back_populates="privacy_declarations", lazy="selectin"
562
558
  )
563
- cookies = relationship(
564
- "Cookies", back_populates="privacy_declaration", lazy="joined", uselist=True
565
- )
566
559
 
567
560
  @classmethod
568
561
  def create(
@@ -866,50 +859,6 @@ class AuditLogResource(Base):
866
859
  extra_data = Column(JSON, nullable=True)
867
860
 
868
861
 
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
-
913
862
  def get_system_data_uses(db: Session, include_parents: bool) -> Set:
914
863
  """Get data uses across all systems and those data uses' parents if include_parents is True
915
864
 
@@ -1,3 +1,4 @@
1
+ from enum import Enum
1
2
  from typing import ClassVar, List, Optional
2
3
 
3
4
  from pydantic import Field
@@ -8,6 +9,12 @@ from fides.api.schemas.connection_configuration.connection_secrets import (
8
9
  )
9
10
 
10
11
 
12
+ class MySQLSSLMode(str, Enum):
13
+ preferred = "preferred"
14
+ required = "required"
15
+ disabled = "disabled"
16
+
17
+
11
18
  class MySQLSchema(ConnectionConfigSecretsSchema):
12
19
  """Schema to validate the secrets needed to connect to a MySQL Database"""
13
20
 
@@ -40,6 +47,11 @@ class MySQLSchema(ConnectionConfigSecretsSchema):
40
47
  title="SSH required",
41
48
  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.",
42
49
  )
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
+ )
43
55
 
44
56
  _required_components: ClassVar[List[str]] = ["host", "dbname"]
45
57
 
@@ -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 Cookies, PrivacyDeclaration, System
4
+ from fideslang.models import PrivacyDeclaration, System
5
5
  from pydantic import ConfigDict, Field
6
6
  from pydantic.main import BaseModel
7
7
 
@@ -17,7 +17,6 @@ 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]] = []
21
20
 
22
21
 
23
22
  class BasicSystemResponse(System):
@@ -1,10 +1,11 @@
1
- from typing import List
1
+ from typing import Dict, 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,
8
9
  )
9
10
  from fides.api.service.connectors.query_configs.mysql_query_config import (
10
11
  MySQLQueryConfig,
@@ -69,16 +70,27 @@ class MySQLConnector(SQLConnector):
69
70
  uri = self.build_ssh_uri(local_address=self.ssh_server.local_bind_address)
70
71
  else:
71
72
  uri = (self.configuration.secrets or {}).get("url") or self.build_uri()
73
+ connect_args = self.get_connect_args()
72
74
  return create_engine(
73
75
  uri,
74
76
  hide_parameters=self.hide_parameters,
75
77
  echo=not self.hide_parameters,
78
+ connect_args=connect_args,
76
79
  )
77
80
 
78
81
  def query_config(self, node: ExecutionNode) -> SQLQueryConfig:
79
82
  """Query wrapper corresponding to the input execution_node."""
80
83
  return MySQLQueryConfig(node)
81
84
 
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
+
82
94
  @staticmethod
83
95
  def cursor_result_to_rows(results: LegacyCursorResult) -> List[Row]:
84
96
  """
@@ -1,4 +1,3 @@
1
- import json
2
1
  from typing import Any, List, Optional
3
2
 
4
3
  from celery import VERSION_BANNER
@@ -6,6 +5,7 @@ from celery.apps.worker import Worker
6
5
  from celery.signals import celeryd_after_setup
7
6
  from loguru import logger
8
7
 
8
+ from fides.api.db.base import Base # type: ignore
9
9
  from fides.api.service.saas_request.override_implementations import *
10
10
  from fides.api.tasks import (
11
11
  DSR_QUEUE_NAME,
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/72caf4a266697967.css" as="style"/><link rel="stylesheet" href="/_next/static/css/72caf4a266697967.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-01277b766c8eb076.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-fc9e922ec354be47.js" defer=""></script><script src="/_next/static/chunks/pages/404-a3c57a06ff67cf1f.js" defer=""></script><script src="/_next/static/tRpOUAZ0oZhnC241q-BOJ/_buildManifest.js" defer=""></script><script src="/_next/static/tRpOUAZ0oZhnC241q-BOJ/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"tRpOUAZ0oZhnC241q-BOJ","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/091e5fc4883aeb42.css" as="style"/><link rel="stylesheet" href="/_next/static/css/091e5fc4883aeb42.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-7104b266fb47d653.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-9560c81c6cf5f050.js" defer=""></script><script src="/_next/static/chunks/pages/404-1dfbf30fba0233a2.js" defer=""></script><script src="/_next/static/tLZG5DlQ8HHUd5zR6TZEN/_buildManifest.js" defer=""></script><script src="/_next/static/tLZG5DlQ8HHUd5zR6TZEN/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"tLZG5DlQ8HHUd5zR6TZEN","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>