ethyca-fides 2.69.3b1__py2.py3-none-any.whl → 2.70.0rc0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ethyca-fides might be problematic. Click here for more details.

Files changed (321) hide show
  1. {ethyca_fides-2.69.3b1.dist-info → ethyca_fides-2.70.0rc0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.69.3b1.dist-info → ethyca_fides-2.70.0rc0.dist-info}/RECORD +251 -229
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/4d8c0fcc5771_adding_default_system_groups.py +78 -0
  5. fides/api/alembic/migrations/versions/5fa78b1f324d_add_event_audit_table.py +82 -0
  6. fides/api/alembic/migrations/versions/b9bfa12c167b_add_not_applicable_to_asset_consentstatus.py +46 -0
  7. fides/api/alembic/migrations/versions/fd7571bef683_adds_new_fields_to_messagingconfig_for_.py +31 -0
  8. fides/api/api/v1/endpoints/messaging_endpoints.py +164 -34
  9. fides/api/db/base.py +1 -0
  10. fides/api/db/seed.py +34 -0
  11. fides/api/models/asset.py +1 -0
  12. fides/api/models/event_audit.py +68 -0
  13. fides/api/models/messaging.py +30 -10
  14. fides/api/models/taxonomy.py +16 -4
  15. fides/api/schemas/application_config.py +4 -1
  16. fides/api/schemas/messaging/messaging.py +33 -66
  17. fides/api/schemas/messaging/messaging_secrets_docs_only.py +1 -1
  18. fides/api/schemas/messaging/shared_schemas.py +102 -0
  19. fides/api/service/deps.py +10 -2
  20. fides/api/service/messaging/message_dispatch_service.py +16 -15
  21. fides/api/service/messaging/messaging_crud_service.py +5 -9
  22. fides/api/service/privacy_request/request_runner_service.py +18 -0
  23. fides/api/tasks/__init__.py +1 -0
  24. fides/api/worker/__init__.py +2 -0
  25. fides/common/api/v1/urn_registry.py +2 -1
  26. fides/service/event_audit_service.py +115 -0
  27. fides/service/messaging/aws_ses_service.py +2 -4
  28. fides/service/taxonomy/taxonomy_service.py +49 -3
  29. fides/ui-build/static/admin/404.html +1 -1
  30. fides/ui-build/static/admin/_next/static/IEGnswU38MkVE0gbr0ZXX/_buildManifest.js +1 -0
  31. fides/ui-build/static/admin/_next/static/chunks/1115-7888473b3dc28cda.js +1 -0
  32. fides/ui-build/static/admin/_next/static/chunks/155-88303b05c6e115a5.js +1 -0
  33. fides/ui-build/static/admin/_next/static/chunks/1817-17079d2f8cf94941.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/2040-ab6212a3074f34f9.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/2121.1de2fa060eae34aa.js +1 -0
  36. fides/ui-build/static/admin/_next/static/chunks/3585-451504ea5ed7a1ea.js +1 -0
  37. fides/ui-build/static/admin/_next/static/chunks/3696-c25dc8d1b0e1aee1.js +1 -0
  38. fides/ui-build/static/admin/_next/static/chunks/3700-2a7094f112a1608a.js +1 -0
  39. fides/ui-build/static/admin/_next/static/chunks/3855-12ee1dfbbe47fd28.js +1 -0
  40. fides/ui-build/static/admin/_next/static/chunks/3872-3514b712afd683c0.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/409-c1256ecda1b15db6.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/431-78bf05f35d7eec4f.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/4558-de5ced790b3380dc.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/4608-96f480766541124b.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/4718-6585c97c26647e65.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/502-a40d39e615f7b664.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/504-afd3588f1908ac33.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/5185-33f50cf9ae17b42e.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/5309-3b6cf0cc9d0c6a83.js +1 -0
  50. fides/ui-build/static/admin/_next/static/chunks/5574-b8c4cba5a6938c00.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/{5596-bb601cbf40e47a0f.js → 5596-29a7c8322530b7cf.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/5698.2135391a128cc373.js +164 -0
  53. fides/ui-build/static/admin/_next/static/chunks/5783-8de76df87af55e98.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/6084-2cd165179c428a6f.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/6416-18d438ff85d807f8.js +1 -0
  56. fides/ui-build/static/admin/_next/static/chunks/6882-447f15e87b8c48a5.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/7045-f15044a4d4525946.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/7158-835ba42fd881d8dd.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/7202.3febe9e89640c712.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/7476-0b6e114658b15eaa.js +1 -0
  61. fides/ui-build/static/admin/_next/static/chunks/7630-e7ea13be69c118a1.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/7725-dd6736855807936a.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/7929-919e2dff24e40397.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/796-e07ac2c543f569e3.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/8002-25fd174aec9b077b.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/9037-453224ba3ee65b13.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/9046-2a332fe338535c84.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/9226-2f960b7ca530642a.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/{9676.9fd9552ef744c717.js → 9676.b86ecbcfe5afd25d.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/9826-c02be5882205bbbc.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/{9951-0c8a80f01e431957.js → 9951-651d521d9a02b6df.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-a653cee14ce2366b.js → _app-e08a732e348aa667.js} +63 -226
  73. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-adaec1ec185160af.js → manual-939253f8daf349b2.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-f90aa48500c1cbde.js +1 -0
  75. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-c0db068d1863222f.js +1 -0
  76. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-a94e19870fe3e210.js +1 -0
  77. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-17cdca29c6d4cdd6.js → properties-069f4e3ee96ebf77.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-09be5455ba85db39.js +1 -0
  79. fides/ui-build/static/admin/_next/static/chunks/pages/consent-e5a33654a2dfaf35.js +1 -0
  80. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-d0dbba5bff738b57.js → [resourceUrn]-293c1f2d9aefb447.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-be7b385073f22414.js +1 -0
  82. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-cfc118e68285405c.js → [resourceUrn]-18501152fa1e4f40.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-351caadeef03876a.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-758d51b4d37dbd09.js +1 -0
  85. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-0e4d9ff89c63793c.js +1 -0
  86. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-1554afcb8b9da2ab.js +1 -0
  87. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-2635ef588bf06145.js +1 -0
  88. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-8f736b078e9842da.js → [resourceUrn]-0497f3ffdb632516.js} +1 -1
  89. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-eb814e3c22807871.js → detection-a780390da99f3e43.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6875b7783fcfda2f.js → [resourceUrn]-1901c26cdde820da.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-172dbd7740e212ca.js → discovery-0cea22af5929c81f.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-619f27c745188adb.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-ef71f387fbbab425.js +1 -0
  94. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-d790553662caf5c3.js +1 -0
  95. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-cb63db8594fe8dc1.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-78e052c8f95110c4.js +1 -0
  97. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-d6d7ee8bd8858a8a.js +1 -0
  98. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-785205655317b1d3.js → [id]-cc149157d290a94d.js} +1 -1
  99. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-a6985f77afbc5bc0.js → new-4c9fb068a5561658.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-a832084ce294f8af.js +1 -0
  101. fides/ui-build/static/admin/_next/static/chunks/pages/index-269b8f81546dad66.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-8b13bb5f7bee61c6.js +1 -0
  103. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-6f109ef64304ef59.js +1 -0
  104. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-8566e3b7b2a632fa.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-1b38b656807ed0cd.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b00532a0ad4f6927.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-65f0d5672041a202.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-3d2a77cb07aa8dc0.js → [id]-322a01e2bceab3fb.js} +1 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-210e7e3b3d776d44.js → add-property-777ed2d73812043d.js} +1 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-18257b6a70fa8a97.js → properties-08472b2a6bf1d392.js} +1 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-b20c53b82a54f5ea.js +1 -0
  112. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-68eaac2d79133679.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-6c4904c157477285.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-55e36839d219a503.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-26ce8fc493993765.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-7ddf9d992fe714a6.js +1 -0
  117. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-7c78ae51f0dd7102.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-05ffbda19ab894b9.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/[key]-b0d93bf478bf63ee.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/new-084f9756b9987285.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers-6c51ffd46bb598e7.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-44456bfe54ac4ad5.js +1 -0
  123. fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-fbe7e8030d837aed.js +1 -0
  124. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-a86bafe1b4e1205f.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-1895c6a13b543436.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/systems-ae3f3470e2734933.js +1 -0
  127. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-1b9c4b2749e3ece4.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-92f52c43f522a350.js → new-6304dad2c5fab694.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-763861f5eb207db5.js → [id]-ff4711db191099cd.js} +1 -1
  130. fides/ui-build/static/admin/_next/static/chunks/webpack-2766492c5dbceb0a.js +1 -0
  131. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  132. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  133. fides/ui-build/static/admin/add-systems.html +1 -1
  134. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  135. fides/ui-build/static/admin/consent/configure.html +1 -1
  136. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  137. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  138. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  139. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  140. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  141. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  142. fides/ui-build/static/admin/consent/properties.html +1 -1
  143. fides/ui-build/static/admin/consent/reporting.html +1 -1
  144. fides/ui-build/static/admin/consent.html +1 -1
  145. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  146. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  147. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  148. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  149. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  150. fides/ui-build/static/admin/data-catalog.html +1 -1
  151. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  152. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  153. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  154. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  155. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  156. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  157. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  158. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  159. fides/ui-build/static/admin/datamap.html +1 -1
  160. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  161. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  162. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  163. fides/ui-build/static/admin/dataset/new.html +1 -1
  164. fides/ui-build/static/admin/dataset.html +1 -1
  165. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  166. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  167. fides/ui-build/static/admin/datastore-connection.html +1 -1
  168. fides/ui-build/static/admin/index.html +1 -1
  169. fides/ui-build/static/admin/integrations/[id].html +1 -1
  170. fides/ui-build/static/admin/integrations.html +1 -1
  171. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  172. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  173. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  174. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  175. fides/ui-build/static/admin/lib/fides.js +2 -2
  176. fides/ui-build/static/admin/login/[provider].html +1 -1
  177. fides/ui-build/static/admin/login.html +1 -1
  178. fides/ui-build/static/admin/messaging/[id].html +1 -1
  179. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  180. fides/ui-build/static/admin/messaging.html +1 -1
  181. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  182. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  183. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  184. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  185. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  186. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  187. fides/ui-build/static/admin/poc/forms.html +1 -1
  188. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  189. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  190. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  191. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  192. fides/ui-build/static/admin/privacy-requests.html +1 -1
  193. fides/ui-build/static/admin/properties/[id].html +1 -1
  194. fides/ui-build/static/admin/properties/add-property.html +1 -1
  195. fides/ui-build/static/admin/properties.html +1 -1
  196. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  197. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  198. fides/ui-build/static/admin/settings/about.html +1 -1
  199. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  200. fides/ui-build/static/admin/settings/consent.html +1 -1
  201. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  202. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  203. fides/ui-build/static/admin/settings/domains.html +1 -1
  204. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  205. fides/ui-build/static/admin/settings/locations.html +1 -1
  206. fides/ui-build/static/admin/settings/messaging-providers/[key].html +1 -0
  207. fides/ui-build/static/admin/settings/messaging-providers/new.html +1 -0
  208. fides/ui-build/static/admin/settings/messaging-providers.html +1 -0
  209. fides/ui-build/static/admin/settings/organization.html +1 -1
  210. fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
  211. fides/ui-build/static/admin/settings/regulations.html +1 -1
  212. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  213. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  214. fides/ui-build/static/admin/systems.html +1 -1
  215. fides/ui-build/static/admin/taxonomy.html +1 -1
  216. fides/ui-build/static/admin/user-management/new.html +1 -1
  217. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  218. fides/ui-build/static/admin/user-management.html +1 -1
  219. fides/ui-build/static/admin/_next/static/_b75ACzlGNz3tZqGUPTE5/_buildManifest.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/1099-718ce18b9bd70cdb.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/1345-1961771e9619db39.js +0 -1
  222. fides/ui-build/static/admin/_next/static/chunks/1817-9423665774c2c08f.js +0 -1
  223. fides/ui-build/static/admin/_next/static/chunks/3620-34355b0c44325537.js +0 -1
  224. fides/ui-build/static/admin/_next/static/chunks/3642-c052564812532324.js +0 -1
  225. fides/ui-build/static/admin/_next/static/chunks/3729-c8accd71498f6fe4.js +0 -1
  226. fides/ui-build/static/admin/_next/static/chunks/3855-0565d44d150c985a.js +0 -1
  227. fides/ui-build/static/admin/_next/static/chunks/3872-c022bb7259a9f323.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/4164-cadb4c6528662248.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/431-86ad2beeb93c95c9.js +0 -1
  230. fides/ui-build/static/admin/_next/static/chunks/4608-caa9cb70fb66ac99.js +0 -1
  231. fides/ui-build/static/admin/_next/static/chunks/4786-d2b03ba5c82a02ed.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/4808-57c5ac15fd8b0d81.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/4831-c0d20b2a0b7332bb.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/4844-e5064a161a7e5a12.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/5258-0062e0a1e4f8c03e.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/5487-46774dc9df554af1.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/549-170c96caa601e15a.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/6084-2c7b81cbcae7e3b4.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/7476-fdd0eb08a12e0334.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/7630-8613916021366672.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/787-f2eca25837ff7305.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/79-68834fd07d69f428.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/796-8fbae2fc714e7a3a.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/8002-193a97fe4de8b779.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/9046-1afcfb1c4dbdd6c6.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/9826-d49a56431e896acb.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-0a2b2f4a30245089.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-b7b7fb3e8b2ea816.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-23d3e50db42f31b3.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-75be0acd400cf527.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/pages/consent-9b4e0a08ae6216c7.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-25c5916c8357f98d.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-9fa11c01b44ba8f1.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-fb16cb8fd2b3826f.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-a481a5be96dede96.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-6c65b86a61340753.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-7fe1ca395914f77f.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-ea1eabce2a3fc2c7.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-3c629aecee30c575.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-a13ea13e0316d5a2.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-a6ae353b3b1536cc.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-85b28db67d96f201.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-409fe1a086fb7d38.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-93d5c01dd927bad2.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/pages/index-bf3042fdbfb12b3d.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-e545f8ef5c945f45.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-f297e6cdb9fe97b9.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-6e864b293571a508.js +0 -1
  269. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-0fc3f1f3b1cd6f2a.js +0 -1
  270. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-089c166287a89166.js +0 -1
  271. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-5a3cd9b14a37ef27.js +0 -1
  272. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-73be3cfaaa95ece4.js +0 -1
  273. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-adbea0f9fd21ff3a.js +0 -1
  274. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-b678e7577eef5e5c.js +0 -1
  275. fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-3f3039c7e86cab2f.js +0 -1
  276. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-d502bf1e7580df06.js +0 -1
  277. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-b841d63011827b43.js +0 -1
  278. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-50f9b26c6907d6de.js +0 -1
  279. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-5ae0d30eb3b770ab.js +0 -1
  280. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-f5924e64a15a0dc3.js +0 -1
  281. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-88f6badc1bb38b97.js +0 -1
  282. fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-d5f8db89c7e91a02.js +0 -1
  283. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-0366184eda09a933.js +0 -1
  284. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-a659f18a30ef89f3.js +0 -1
  285. fides/ui-build/static/admin/_next/static/chunks/pages/systems-f4bf47ed2c4746ba.js +0 -1
  286. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-2d9548cfa6086e8f.js +0 -1
  287. fides/ui-build/static/admin/_next/static/chunks/webpack-606818148553db7b.js +0 -1
  288. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +0 -1
  289. {ethyca_fides-2.69.3b1.dist-info → ethyca_fides-2.70.0rc0.dist-info}/WHEEL +0 -0
  290. {ethyca_fides-2.69.3b1.dist-info → ethyca_fides-2.70.0rc0.dist-info}/entry_points.txt +0 -0
  291. {ethyca_fides-2.69.3b1.dist-info → ethyca_fides-2.70.0rc0.dist-info}/licenses/LICENSE +0 -0
  292. {ethyca_fides-2.69.3b1.dist-info → ethyca_fides-2.70.0rc0.dist-info}/top_level.txt +0 -0
  293. /fides/ui-build/static/admin/_next/static/{_b75ACzlGNz3tZqGUPTE5 → IEGnswU38MkVE0gbr0ZXX}/_ssgManifest.js +0 -0
  294. /fides/ui-build/static/admin/_next/static/chunks/{2921-765918f8aa37fdb2.js → 2921-66f65496c3a09316.js} +0 -0
  295. /fides/ui-build/static/admin/_next/static/chunks/{3923-23df37eef17d6ea2.js → 3923-a551756b413367ea.js} +0 -0
  296. /fides/ui-build/static/admin/_next/static/chunks/{401-45f399d4d1325340.js → 401-ffe4e8436e1eceb9.js} +0 -0
  297. /fides/ui-build/static/admin/_next/static/chunks/{6853-8fb39280a8f0eb89.js → 6853-7004a8c420b1ca02.js} +0 -0
  298. /fides/ui-build/static/admin/_next/static/chunks/{6954-3b26ff8259c4d5c3.js → 6954-599f2de2c902e9b2.js} +0 -0
  299. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-8d9c703c96662265.js → 404-2eb8aed4939f1142.js} +0 -0
  300. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-20050dbae806179d.js → multiple-83ed7da0bb90b0a5.js} +0 -0
  301. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-7b8cec88b5ad53d1.js → add-vendors-46b88bda3d7b15c5.js} +0 -0
  302. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-c30382719d6f797a.js → [id]-fd41ffaff543e05a.js} +0 -0
  303. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-dff842dbed2bc6c8.js → privacy-experience-92a337ee96845af2.js} +0 -0
  304. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-074cdbfc678ba791.js → [id]-1fd2cda8707314f6.js} +0 -0
  305. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-bcddda632b4df409.js → new-2987e397445713c5.js} +0 -0
  306. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-8ffd8d148269d323.js → [projectUrn]-6a4b0d49dcbf17a8.js} +0 -0
  307. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-9b7e4b86b1e8a40a.js → resources-af80fdca3bbdc82f.js} +0 -0
  308. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-f03f1fdaa1f5a0c6.js → [id]-d8c5c03fb2f31d65.js} +0 -0
  309. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-8f90e275e932940b.js → add-template-0e0c06e3c8aabe02.js} +0 -0
  310. /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-68385a251c7ade5f.js → messaging-3f15804cf9625f01.js} +0 -0
  311. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-fc7d652910f3ad8d.js → ant-components-248ad9f65a872442.js} +0 -0
  312. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-fb6e6f4b276b6189.js → AntForm-aedb66a62042b10a.js} +0 -0
  313. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-00869abf79950a9a.js → FormikAntFormItem-018df38b7cd77fdb.js} +0 -0
  314. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-5716d749236c9f70.js → FormikControlled-6ca9099d03aab817.js} +0 -0
  315. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-d6dfb9daa3935db3.js → FormikField-0f2c90786ea005a4.js} +0 -0
  316. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-9697549bce7060be.js → forms-200b51a725f8b2d1.js} +0 -0
  317. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-888656ae0bd40f62.js → table-migration-e551fccfcaae76e7.js} +0 -0
  318. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-c64b87694eda4785.js → [purpose_id]-f3e6e74e0efb005c.js} +0 -0
  319. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-e29384f7a3db5221.js → locations-77fb85bdd0be42b5.js} +0 -0
  320. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-46d06037fcadaf00.js → regulations-2866ac99faa5a542.js} +0 -0
  321. /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-98a3277820e232c7.js → user-management-82fcf1151e2fe2ba.js} +0 -0
fides/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-09-08T12:08:59-0300",
11
+ "date": "2025-09-10T16:14:21-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "4e4ef38fde9cbb24f1b053bb67af1945cf409477",
15
- "version": "2.69.3b1"
14
+ "full-revisionid": "cb174101f57cbd0c9f18c818631b1fcab77b8d6b",
15
+ "version": "2.70.0rc0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,78 @@
1
+ """adding default system groups
2
+
3
+ Revision ID: 4d8c0fcc5771
4
+ Revises: 5fa78b1f324d
5
+ Create Date: 2025-09-10 05:40:19.064377
6
+
7
+ """
8
+
9
+ from alembic import op
10
+
11
+ # revision identifiers, used by Alembic.
12
+ revision = "4d8c0fcc5771"
13
+ down_revision = "5fa78b1f324d"
14
+ branch_labels = None
15
+ depends_on = None
16
+
17
+
18
+ def upgrade():
19
+ # Insert default system groups into taxonomy_element table
20
+ op.execute(
21
+ """
22
+ INSERT INTO taxonomy_element (id, created_at, updated_at, taxonomy_type, fides_key, name, description, parent_key, active, tags, organization_fides_key)
23
+ VALUES
24
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'analytics_business_intelligence', 'Analytics & Business intelligence', 'System group for analytics and business intelligence systems', NULL, true, NULL, 'default_organization'),
25
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'customer_management', 'Customer management', 'System group for customer management systems', NULL, true, NULL, 'default_organization'),
26
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'internal_operations', 'Internal operations', 'System group for internal operations systems', NULL, true, NULL, 'default_organization'),
27
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'legal_compliance', 'Legal & Compliance', 'System group for legal and compliance systems', NULL, true, NULL, 'default_organization'),
28
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'marketing', 'Marketing', 'System group for marketing systems', NULL, true, NULL, 'default_organization'),
29
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'payments_billing', 'Payments & Billing', 'System group for payments and billing systems', NULL, true, NULL, 'default_organization'),
30
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'product_service_delivery', 'Product & Service delivery', 'System group for product and service delivery systems', NULL, true, NULL, 'default_organization'),
31
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'research_development', 'Research & Development', 'System group for research and development systems', NULL, true, NULL, 'default_organization'),
32
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'sales_revenue_operations', 'Sales & Revenue operations', 'System group for sales and revenue operations systems', NULL, true, NULL, 'default_organization'),
33
+ ('tax_' || gen_random_uuid(), now(), now(), 'system_group', 'security_fraud', 'Security & Fraud', 'System group for security and fraud systems', NULL, true, NULL, 'default_organization')
34
+ """
35
+ )
36
+
37
+ # Insert default system groups into system_group table with white labels
38
+ op.execute(
39
+ """
40
+ INSERT INTO system_group (id, created_at, updated_at, fides_key, label_color, data_steward_username, data_uses)
41
+ VALUES
42
+ ('sys_' || gen_random_uuid(), now(), now(), 'analytics_business_intelligence', 'taxonomy_white', NULL, '{}'),
43
+ ('sys_' || gen_random_uuid(), now(), now(), 'customer_management', 'taxonomy_white', NULL, '{}'),
44
+ ('sys_' || gen_random_uuid(), now(), now(), 'internal_operations', 'taxonomy_white', NULL, '{}'),
45
+ ('sys_' || gen_random_uuid(), now(), now(), 'legal_compliance', 'taxonomy_white', NULL, '{}'),
46
+ ('sys_' || gen_random_uuid(), now(), now(), 'marketing', 'taxonomy_white', NULL, '{}'),
47
+ ('sys_' || gen_random_uuid(), now(), now(), 'payments_billing', 'taxonomy_white', NULL, '{}'),
48
+ ('sys_' || gen_random_uuid(), now(), now(), 'product_service_delivery', 'taxonomy_white', NULL, '{}'),
49
+ ('sys_' || gen_random_uuid(), now(), now(), 'research_development', 'taxonomy_white', NULL, '{}'),
50
+ ('sys_' || gen_random_uuid(), now(), now(), 'sales_revenue_operations', 'taxonomy_white', NULL, '{}'),
51
+ ('sys_' || gen_random_uuid(), now(), now(), 'security_fraud', 'taxonomy_white', NULL, '{}')
52
+ """
53
+ )
54
+
55
+
56
+ def downgrade():
57
+ # Remove default system groups from both tables
58
+ op.execute(
59
+ """
60
+ DELETE FROM system_group
61
+ WHERE fides_key IN (
62
+ 'analytics_business_intelligence', 'customer_management', 'internal_operations',
63
+ 'legal_compliance', 'marketing', 'payments_billing', 'product_service_delivery',
64
+ 'research_development', 'sales_revenue_operations', 'security_fraud'
65
+ )
66
+ """
67
+ )
68
+
69
+ op.execute(
70
+ """
71
+ DELETE FROM taxonomy_element
72
+ WHERE fides_key IN (
73
+ 'analytics_business_intelligence', 'customer_management', 'internal_operations',
74
+ 'legal_compliance', 'marketing', 'payments_billing', 'product_service_delivery',
75
+ 'research_development', 'sales_revenue_operations', 'security_fraud'
76
+ ) AND taxonomy_type = 'system_group'
77
+ """
78
+ )
@@ -0,0 +1,82 @@
1
+ """add event audit table
2
+
3
+ Revision ID: 5fa78b1f324d
4
+ Revises: fd7571bef683
5
+ Create Date: 2025-09-09 17:51:15.715976
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "5fa78b1f324d"
15
+ down_revision = "fd7571bef683"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ op.create_table(
22
+ "event_audit",
23
+ sa.Column("id", sa.String(length=255), nullable=False),
24
+ sa.Column(
25
+ "created_at",
26
+ sa.DateTime(timezone=True),
27
+ server_default=sa.text("now()"),
28
+ nullable=True,
29
+ ),
30
+ sa.Column(
31
+ "updated_at",
32
+ sa.DateTime(timezone=True),
33
+ server_default=sa.text("now()"),
34
+ nullable=True,
35
+ ),
36
+ sa.Column("event_type", sa.String(), nullable=False),
37
+ sa.Column("user_id", sa.String(), nullable=True),
38
+ sa.Column("resource_type", sa.String(), nullable=True),
39
+ sa.Column("resource_identifier", sa.String(), nullable=True),
40
+ sa.Column("description", sa.Text(), nullable=True),
41
+ sa.Column(
42
+ "event_details", postgresql.JSONB(astext_type=sa.Text()), nullable=True
43
+ ),
44
+ sa.Column(
45
+ "status",
46
+ sa.Enum("succeeded", "failed", name="eventauditstatus"),
47
+ nullable=False,
48
+ ),
49
+ sa.PrimaryKeyConstraint("id"),
50
+ )
51
+ op.create_index(
52
+ op.f("ix_event_audit_event_type"), "event_audit", ["event_type"], unique=False
53
+ )
54
+ op.create_index(op.f("ix_event_audit_id"), "event_audit", ["id"], unique=False)
55
+ op.create_index(
56
+ op.f("ix_event_audit_resource_identifier"),
57
+ "event_audit",
58
+ ["resource_identifier"],
59
+ unique=False,
60
+ )
61
+ op.create_index(
62
+ op.f("ix_event_audit_resource_type"),
63
+ "event_audit",
64
+ ["resource_type"],
65
+ unique=False,
66
+ )
67
+ op.create_index(
68
+ op.f("ix_event_audit_user_id"), "event_audit", ["user_id"], unique=False
69
+ )
70
+ op.create_index(
71
+ op.f("ix_event_audit_status"), "event_audit", ["status"], unique=False
72
+ )
73
+
74
+
75
+ def downgrade():
76
+ op.drop_index(op.f("ix_event_audit_status"), table_name="event_audit")
77
+ op.drop_index(op.f("ix_event_audit_user_id"), table_name="event_audit")
78
+ op.drop_index(op.f("ix_event_audit_resource_type"), table_name="event_audit")
79
+ op.drop_index(op.f("ix_event_audit_resource_identifier"), table_name="event_audit")
80
+ op.drop_index(op.f("ix_event_audit_id"), table_name="event_audit")
81
+ op.drop_index(op.f("ix_event_audit_event_type"), table_name="event_audit")
82
+ op.drop_table("event_audit")
@@ -0,0 +1,46 @@
1
+ """Add not_applicable to asset ConsentStatus
2
+
3
+ Revision ID: b9bfa12c167b
4
+ Revises: 30369bb8ae01
5
+ Create Date: 2025-09-09 16:44:23.146325
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "b9bfa12c167b"
14
+ down_revision = "30369bb8ae01"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade():
20
+ # ### commands auto generated by Alembic - please adjust! ###
21
+ op.execute("ALTER TYPE consentstatus ADD VALUE 'not_applicable'")
22
+ # ### end Alembic commands ###
23
+
24
+
25
+ def downgrade():
26
+ # ### commands auto generated by Alembic - please adjust! ###
27
+ # Remove any records that have the new enum value before dropping it
28
+ op.execute(
29
+ "UPDATE asset SET consent_status = 'unknown' WHERE consent_status = 'not_applicable'"
30
+ )
31
+
32
+ # Recreate the enum without the new value
33
+ op.execute("ALTER TYPE consentstatus RENAME TO consentstatus_old")
34
+ op.execute(
35
+ "CREATE TYPE consentstatus AS ENUM ('cmp_error', 'pre_consent', 'with_consent', 'without_consent', 'exempt', 'unknown')"
36
+ )
37
+
38
+ # Drop default, change type, and set default back
39
+ op.execute("ALTER TABLE asset ALTER COLUMN consent_status DROP DEFAULT")
40
+ op.execute(
41
+ "ALTER TABLE asset ALTER COLUMN consent_status TYPE consentstatus USING "
42
+ "consent_status::text::consentstatus"
43
+ )
44
+ op.execute("ALTER TABLE asset ALTER COLUMN consent_status SET DEFAULT 'unknown'")
45
+ op.execute("DROP TYPE consentstatus_old")
46
+ # ### end Alembic commands ###
@@ -0,0 +1,31 @@
1
+ """Adds new fields to MessagingConfig for test info
2
+
3
+ Revision ID: fd7571bef683
4
+ Revises: b9bfa12c167b
5
+ Create Date: 2024-10-09 23:08:01.901592
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "fd7571bef683"
14
+ down_revision = "b9bfa12c167b"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade():
20
+ op.add_column(
21
+ "messagingconfig",
22
+ sa.Column("last_test_timestamp", sa.DateTime(timezone=True), nullable=True),
23
+ )
24
+ op.add_column(
25
+ "messagingconfig", sa.Column("last_test_succeeded", sa.Boolean(), nullable=True)
26
+ )
27
+
28
+
29
+ def downgrade():
30
+ op.drop_column("messagingconfig", "last_test_succeeded")
31
+ op.drop_column("messagingconfig", "last_test_timestamp")
@@ -1,4 +1,4 @@
1
- from typing import Dict, List, Optional
1
+ from typing import Any, Dict, List, Optional
2
2
 
3
3
  from fastapi import Depends, Security
4
4
  from fastapi.encoders import jsonable_encoder
@@ -26,6 +26,7 @@ from fides.api.common_exceptions import (
26
26
  MessagingConfigNotFoundException,
27
27
  MessagingTemplateValidationException,
28
28
  )
29
+ from fides.api.models.application_config import ApplicationConfig
29
30
  from fides.api.models.messaging import (
30
31
  MessagingConfig,
31
32
  default_messaging_config_key,
@@ -46,16 +47,16 @@ from fides.api.schemas.messaging.messaging import (
46
47
  MessagingConfigResponse,
47
48
  MessagingConfigStatus,
48
49
  MessagingConfigStatusMessage,
50
+ MessagingConnectionTestStatus,
49
51
  MessagingMethod,
50
52
  MessagingServiceType,
51
53
  MessagingTemplateDefault,
52
54
  MessagingTemplateWithPropertiesDetail,
55
+ MessagingTestBodyParams,
53
56
  TestMessagingStatusMessage,
54
57
  UserEmailInviteStatus,
55
58
  )
56
- from fides.api.schemas.messaging.messaging_secrets_docs_only import (
57
- possible_messaging_secrets,
58
- )
59
+ from fides.api.schemas.messaging.shared_schemas import PossibleMessagingSecrets
59
60
  from fides.api.schemas.redis_cache import Identity
60
61
  from fides.api.service.messaging.message_dispatch_service import dispatch_message
61
62
  from fides.api.service.messaging.messaging_crud_service import (
@@ -91,10 +92,14 @@ from fides.common.api.v1.urn_registry import (
91
92
  MESSAGING_TEMPLATE_BY_ID,
92
93
  MESSAGING_TEMPLATE_DEFAULT_BY_TEMPLATE_TYPE,
93
94
  MESSAGING_TEST,
95
+ MESSAGING_TEST_DEPRECATED,
94
96
  V1_URL_PREFIX,
95
97
  )
98
+ from fides.config import get_config
96
99
  from fides.config.config_proxy import ConfigProxy
97
100
 
101
+ CONFIG = get_config()
102
+
98
103
  router = APIRouter(tags=["Messaging"], prefix=V1_URL_PREFIX)
99
104
 
100
105
 
@@ -107,33 +112,73 @@ router = APIRouter(tags=["Messaging"], prefix=V1_URL_PREFIX)
107
112
  def post_config(
108
113
  *,
109
114
  db: Session = Depends(deps.get_db),
110
- messaging_config: MessagingConfigRequest,
115
+ messaging_config_request: MessagingConfigRequest,
111
116
  ) -> MessagingConfigResponse:
112
117
  """
113
118
  Given a messaging config, create corresponding MessagingConfig object, provided no config already exists
114
119
  """
115
120
 
116
121
  try:
117
- return create_or_update_messaging_config(db=db, config=messaging_config)
118
- except ValueError as e:
122
+ # set default values for the name and type if they're not provided
123
+ if not messaging_config_request.name:
124
+ messaging_config_request.name = default_messaging_config_name(
125
+ messaging_config_request.service_type.value
126
+ )
127
+ if not messaging_config_request.key:
128
+ messaging_config_request.key = default_messaging_config_key(
129
+ messaging_config_request.service_type.value
130
+ )
131
+ messaging_config = create_or_update_messaging_config(
132
+ db=db, config=messaging_config_request
133
+ )
134
+ if messaging_config_request.secrets:
135
+ update_config_secrets(
136
+ db,
137
+ messaging_config,
138
+ unvalidated_messaging_secrets=messaging_config_request.secrets,
139
+ )
140
+
141
+ # if there is only one messaging config, make it the default
142
+ messaging_config_count = db.query(MessagingConfig).count()
143
+ if messaging_config_count == 1:
144
+ ApplicationConfig.update_api_set(
145
+ db,
146
+ {
147
+ "notifications": {
148
+ "notification_service_type": messaging_config.service_type
149
+ }
150
+ },
151
+ )
152
+
153
+ return MessagingConfigResponse(
154
+ name=messaging_config.name,
155
+ key=messaging_config.key,
156
+ service_type=messaging_config.service_type.value, # type: ignore
157
+ details=messaging_config.details,
158
+ last_test_timestamp=messaging_config.last_test_timestamp,
159
+ last_test_succeeded=messaging_config.last_test_succeeded,
160
+ )
161
+ except ValueError as exc:
162
+ failed_key = messaging_config_request.key
119
163
  logger.warning(
120
164
  "Create failed for messaging config {}: {}",
121
- messaging_config.key,
122
- Pii(str(e)),
165
+ failed_key,
166
+ str(exc),
123
167
  )
124
168
  raise HTTPException(
125
169
  status_code=HTTP_400_BAD_REQUEST,
126
- detail=f"Config with key {messaging_config.key} failed to be added: {e}",
170
+ detail=f"Config with key {failed_key} failed to be added: {exc}",
127
171
  )
128
172
  except Exception as exc:
173
+ failed_key = messaging_config_request.key
129
174
  logger.warning(
130
175
  "Create failed for messaging config {}: {}",
131
- messaging_config.key,
132
- Pii(str(exc)),
176
+ failed_key,
177
+ str(exc),
133
178
  )
134
179
  raise HTTPException(
135
180
  status_code=HTTP_500_INTERNAL_SERVER_ERROR,
136
- detail=f"Config with key {messaging_config.key} failed to be added: {exc}",
181
+ detail=f"Config with key {failed_key} failed to be added: {exc}",
137
182
  )
138
183
 
139
184
 
@@ -146,13 +191,23 @@ def patch_config_by_key(
146
191
  config_key: FidesKey,
147
192
  *,
148
193
  db: Session = Depends(deps.get_db),
149
- messaging_config: MessagingConfigRequest,
194
+ messaging_config_request: MessagingConfigRequest,
150
195
  ) -> Optional[MessagingConfigResponse]:
151
196
  """
152
197
  Updates config for messaging by key, provided config with key can be found.
153
198
  """
154
199
  try:
155
- return update_messaging_config(db=db, key=config_key, config=messaging_config)
200
+ messaging_config = update_messaging_config(
201
+ db=db, key=config_key, config=messaging_config_request
202
+ )
203
+ return MessagingConfigResponse(
204
+ name=messaging_config.name,
205
+ key=messaging_config.key,
206
+ service_type=messaging_config.service_type.value, # type: ignore
207
+ details=messaging_config.details,
208
+ last_test_timestamp=messaging_config.last_test_timestamp,
209
+ last_test_succeeded=messaging_config.last_test_succeeded,
210
+ )
156
211
  except MessagingConfigNotFoundException:
157
212
  logger.warning("No messaging config found with key {}", config_key)
158
213
  raise HTTPException(
@@ -162,12 +217,12 @@ def patch_config_by_key(
162
217
  except Exception as exc:
163
218
  logger.warning(
164
219
  "Patch failed for messaging config {}: {}",
165
- messaging_config.key,
166
- Pii(str(exc)),
220
+ config_key,
221
+ str(exc),
167
222
  )
168
223
  raise HTTPException(
169
224
  status_code=HTTP_500_INTERNAL_SERVER_ERROR,
170
- detail=f"Config with key {messaging_config.key} failed to be added",
225
+ detail=f"Config with key {config_key} failed to be added",
171
226
  )
172
227
 
173
228
 
@@ -294,17 +349,19 @@ def get_messaging_status(
294
349
  def put_default_config(
295
350
  *,
296
351
  db: Session = Depends(deps.get_db),
297
- messaging_config: MessagingConfigRequestBase,
352
+ messaging_config_request: MessagingConfigRequestBase,
298
353
  ) -> Optional[MessagingConfigResponse]:
299
354
  """
300
355
  Updates default messaging config for given service type.
301
356
  """
302
357
  logger.info(
303
358
  "Starting upsert for default messaging config of type '{}'",
304
- messaging_config.service_type,
359
+ messaging_config_request.service_type,
360
+ )
361
+ incoming_data = messaging_config_request.model_dump(mode="json")
362
+ existing_default = MessagingConfig.get_by_type(
363
+ db, messaging_config_request.service_type
305
364
  )
306
- incoming_data = messaging_config.model_dump(mode="json")
307
- existing_default = MessagingConfig.get_by_type(db, messaging_config.service_type)
308
365
  if existing_default:
309
366
  # take the key of the existing default and add that to the incoming data, to ensure we overwrite the same record
310
367
  incoming_data["key"] = existing_default.key
@@ -312,14 +369,22 @@ def put_default_config(
312
369
  else:
313
370
  # set a key and name for our config if we're creating a new default
314
371
  incoming_data["name"] = default_messaging_config_name(
315
- messaging_config.service_type.value
372
+ messaging_config_request.service_type.value
316
373
  )
317
374
  incoming_data["key"] = default_messaging_config_key(
318
- messaging_config.service_type.value
375
+ messaging_config_request.service_type.value
319
376
  )
320
- return create_or_update_messaging_config(
377
+ messaging_config = create_or_update_messaging_config(
321
378
  db, MessagingConfigRequest(**incoming_data)
322
379
  )
380
+ return MessagingConfigResponse(
381
+ name=messaging_config.name,
382
+ key=messaging_config.key,
383
+ service_type=messaging_config.service_type.value, # type: ignore
384
+ details=messaging_config.details,
385
+ last_test_timestamp=messaging_config.last_test_timestamp,
386
+ last_test_succeeded=messaging_config.last_test_succeeded,
387
+ )
323
388
 
324
389
 
325
390
  @router.put(
@@ -332,7 +397,7 @@ def put_default_config_secrets(
332
397
  service_type: MessagingServiceType,
333
398
  *,
334
399
  db: Session = Depends(deps.get_db),
335
- unvalidated_messaging_secrets: possible_messaging_secrets,
400
+ unvalidated_messaging_secrets: PossibleMessagingSecrets,
336
401
  ) -> TestMessagingStatusMessage:
337
402
  messaging_config = MessagingConfig.get_by_type(db, service_type=service_type)
338
403
  if not messaging_config:
@@ -353,7 +418,7 @@ def put_config_secrets(
353
418
  config_key: FidesKey,
354
419
  *,
355
420
  db: Session = Depends(deps.get_db),
356
- unvalidated_messaging_secrets: possible_messaging_secrets,
421
+ unvalidated_messaging_secrets: PossibleMessagingSecrets,
357
422
  ) -> TestMessagingStatusMessage:
358
423
  """
359
424
  Add or update secrets for messaging config.
@@ -371,7 +436,7 @@ def put_config_secrets(
371
436
  def update_config_secrets(
372
437
  db: Session,
373
438
  messaging_config: MessagingConfig,
374
- unvalidated_messaging_secrets: possible_messaging_secrets,
439
+ unvalidated_messaging_secrets: PossibleMessagingSecrets,
375
440
  ) -> TestMessagingStatusMessage:
376
441
  try:
377
442
  secrets_schema = get_schema_for_secrets(
@@ -512,11 +577,70 @@ def delete_config_by_key(
512
577
  },
513
578
  )
514
579
  def send_test_message(
580
+ service_type: MessagingServiceType,
581
+ *,
582
+ db: Session = Depends(deps.get_db),
583
+ params: MessagingTestBodyParams,
584
+ ) -> Dict[str, str]:
585
+ """
586
+ Sends a test message to the provided email or phone number.
587
+ """
588
+ config = MessagingConfig.get_by_type(db, service_type)
589
+ if not config:
590
+ raise HTTPException(
591
+ status_code=404,
592
+ detail=f"No messaging config found with service type: {service_type}",
593
+ )
594
+ try:
595
+ dispatch_message(
596
+ db,
597
+ action_type=MessagingActionType.TEST_MESSAGE,
598
+ to_identity=Identity(
599
+ email=params.to_identity.email,
600
+ phone_number=params.to_identity.phone_number,
601
+ ),
602
+ service_type=service_type.value,
603
+ )
604
+ except MessageDispatchException as exc:
605
+ config.update_test_status(
606
+ test_status=MessagingConnectionTestStatus.failed, db=db
607
+ )
608
+ raise HTTPException(
609
+ status_code=400,
610
+ detail=f"There was an error sending the test message: {exc}",
611
+ )
612
+ config.update_test_status(
613
+ test_status=MessagingConnectionTestStatus.succeeded, db=db
614
+ )
615
+ return {"details": "Test message successfully sent"}
616
+
617
+
618
+ @router.post(
619
+ MESSAGING_TEST_DEPRECATED,
620
+ deprecated=True,
621
+ status_code=HTTP_200_OK,
622
+ dependencies=[Security(verify_oauth_client, scopes=[MESSAGING_CREATE_OR_UPDATE])],
623
+ response_model=Dict[str, Any],
624
+ responses={
625
+ HTTP_200_OK: {
626
+ "content": {
627
+ "application/json": {
628
+ "example": {
629
+ "details": "Test message successfully sent",
630
+ }
631
+ }
632
+ }
633
+ }
634
+ },
635
+ )
636
+ def send_test_message_deprecated(
515
637
  message_info: Identity,
516
638
  db: Session = Depends(deps.get_db),
517
639
  config_proxy: ConfigProxy = Depends(deps.get_config_proxy),
518
- ) -> Dict[str, str]:
519
- """Sends a test message."""
640
+ ) -> Dict[str, Any]:
641
+ """
642
+ This endpoint is deprecated. Please use the `POST /messaging/test/{service_type}`
643
+ """
520
644
  try:
521
645
  dispatch_message(
522
646
  db,
@@ -524,11 +648,17 @@ def send_test_message(
524
648
  to_identity=message_info,
525
649
  service_type=config_proxy.notifications.notification_service_type,
526
650
  )
527
- except MessageDispatchException as e:
651
+ except MessageDispatchException as exc:
528
652
  raise HTTPException(
529
- status_code=400, detail=f"There was an error sending the test message: {e}"
530
- )
531
- return {"details": "Test message successfully sent"}
653
+ status_code=400,
654
+ detail=f"There was an error sending the test message: {exc}",
655
+ )
656
+ return {
657
+ "details": "Test message successfully sent",
658
+ "warnings": [
659
+ "This endpoint is deprecated. Please use the `POST /messaging/test/{service_type}`"
660
+ ],
661
+ }
532
662
 
533
663
 
534
664
  @router.get(
fides/api/db/base.py CHANGED
@@ -22,6 +22,7 @@ from fides.api.models.detection_discovery.monitor_task import (
22
22
  MonitorTaskExecutionLog,
23
23
  )
24
24
  from fides.api.models.detection_discovery.web_monitor import WebMonitorGroupJob
25
+ from fides.api.models.event_audit import EventAudit
25
26
  from fides.api.models.experience_notices import ExperienceNotices
26
27
  from fides.api.models.fides_cloud import FidesCloud
27
28
  from fides.api.models.fides_user import FidesUser
fides/api/db/seed.py CHANGED
@@ -2,6 +2,7 @@
2
2
  Provides functions that seed the application with data.
3
3
  """
4
4
 
5
+ import os
5
6
  from typing import Dict, List, Optional
6
7
 
7
8
  from fideslang.default_taxonomy import DEFAULT_TAXONOMY
@@ -17,6 +18,7 @@ from fides.api.common_exceptions import KeyOrNameAlreadyExists
17
18
  from fides.api.db.base_class import FidesBase
18
19
  from fides.api.db.ctl_session import sync_session
19
20
  from fides.api.db.system import upsert_system
21
+ from fides.api.models.application_config import ApplicationConfig
20
22
  from fides.api.models.client import ClientDetail
21
23
  from fides.api.models.connectionconfig import ConnectionConfig
22
24
  from fides.api.models.datasetconfig import DatasetConfig
@@ -37,7 +39,16 @@ from fides.api.schemas.connection_configuration.saas_config_template_values impo
37
39
  SaasConnectionTemplateValues,
38
40
  )
39
41
  from fides.api.schemas.dataset import DatasetConfigCtlDataset
42
+ from fides.api.schemas.messaging.messaging import (
43
+ MessagingConfigRequest,
44
+ MessagingServiceDetailsMailgun,
45
+ MessagingServiceType,
46
+ )
47
+ from fides.api.schemas.messaging.shared_schemas import MessagingSecretsMailgunDocs
40
48
  from fides.api.schemas.policy import ActionType, DrpAction
49
+ from fides.api.service.messaging.messaging_crud_service import (
50
+ create_or_update_messaging_config,
51
+ )
41
52
  from fides.api.util.connection_util import patch_connection_configs
42
53
  from fides.api.util.data_category import get_user_data_categories
43
54
  from fides.api.util.errors import AlreadyExistsError, QueryError
@@ -486,6 +497,29 @@ async def load_samples(async_session: AsyncSession) -> None:
486
497
  except QueryError: # pragma: no cover
487
498
  pass # The upsert_resources function will log any error
488
499
 
500
+ if os.getenv("MAILGUN_DOMAIN") and os.getenv("MAILGUN_API_KEY"):
501
+ log.info("Loading Mailgun messaging config")
502
+ with sync_session() as db:
503
+ messaging_config = create_or_update_messaging_config(
504
+ db=db,
505
+ config=MessagingConfigRequest(
506
+ key="my_mailgun_config",
507
+ name="Mailgun",
508
+ service_type=MessagingServiceType.mailgun,
509
+ details=MessagingServiceDetailsMailgun(
510
+ domain=os.getenv("MAILGUN_DOMAIN")
511
+ ),
512
+ ),
513
+ )
514
+ messaging_config.set_secrets(
515
+ db=db,
516
+ messaging_secrets=MessagingSecretsMailgunDocs(
517
+ mailgun_api_key=os.getenv("MAILGUN_API_KEY")
518
+ ),
519
+ )
520
+ CONFIG.notifications.notification_service_type = "mailgun"
521
+ ApplicationConfig.update_config_set(db, CONFIG)
522
+
489
523
 
490
524
  def load_default_organization(db: Session) -> None:
491
525
  """
fides/api/models/asset.py CHANGED
@@ -34,6 +34,7 @@ class ConsentStatus(str, Enum):
34
34
  with_consent = "with_consent"
35
35
  without_consent = "without_consent"
36
36
  exempt = "exempt"
37
+ not_applicable = "not_applicable"
37
38
  unknown = "unknown"
38
39
 
39
40