ethyca-fides 2.71.2b0__py2.py3-none-any.whl → 2.72.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 (271) hide show
  1. {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc0.dist-info}/RECORD +239 -233
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/4bfbeff34611_add_polling_status.py +45 -12
  5. fides/api/api/v1/endpoints/connection_endpoints.py +38 -45
  6. fides/api/api/v1/endpoints/saas_config_endpoints.py +60 -48
  7. fides/api/api/v1/endpoints/system.py +11 -43
  8. fides/api/api/v1/endpoints/user_endpoints.py +8 -1
  9. fides/api/app_setup.py +1 -3
  10. fides/api/common_exceptions.py +4 -0
  11. fides/api/email_templates/get_email_template.py +3 -0
  12. fides/api/email_templates/template_names.py +1 -0
  13. fides/api/email_templates/templates/manual_task_digest.html +316 -0
  14. fides/api/models/detection_discovery/monitor_task.py +1 -0
  15. fides/api/models/digest/digest_execution.py +11 -1
  16. fides/api/models/event_audit.py +9 -0
  17. fides/api/models/messaging_template.py +7 -0
  18. fides/api/schemas/connection_configuration/connection_config.py +1 -30
  19. fides/api/schemas/messaging/messaging.py +15 -0
  20. fides/api/service/connectors/saas/connector_registry_service.py +1 -138
  21. fides/api/service/deps.py +8 -0
  22. fides/api/service/messaging/message_dispatch_service.py +38 -1
  23. fides/api/tasks/__init__.py +0 -1
  24. fides/api/util/connection_util.py +99 -215
  25. fides/api/util/event_audit_util.py +230 -0
  26. fides/api/util/masking_util.py +31 -0
  27. fides/api/util/saas_config_updater.py +66 -0
  28. fides/service/connection/__init__.py +0 -0
  29. fides/service/connection/connection_service.py +651 -0
  30. fides/service/event_audit_service.py +16 -22
  31. fides/ui-build/static/admin/404.html +1 -1
  32. fides/ui-build/static/admin/_next/static/SnBet3d7BrNVkglIl0ajl/_buildManifest.js +1 -0
  33. fides/ui-build/static/admin/_next/static/chunks/{1437-fb699e9d69c3e325.js → 1437-b49af8562f54a625.js} +1 -1
  34. fides/ui-build/static/admin/_next/static/chunks/155-dd7bf4b1acc077f6.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/{1817-10b392e1dd9c4673.js → 1817-9e4a1b1897e9bf98.js} +1 -1
  36. fides/ui-build/static/admin/_next/static/chunks/{2040-01d5edb1802d3482.js → 2040-68eb3a5d010c1e97.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{2397-40506a386a3a469a.js → 2397-fc4d998dd825ec4d.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/3377-d0a01db227febac8.js +1 -0
  39. fides/ui-build/static/admin/_next/static/chunks/{3696-259be222ea12392a.js → 3696-19767df579460115.js} +1 -1
  40. fides/ui-build/static/admin/_next/static/chunks/3700-12cb80d0f957fcc4.js +1 -0
  41. fides/ui-build/static/admin/_next/static/chunks/401-3bcfbf738f028868.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/5185-7474c764ea99f1ca.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/{5258-2d28b2c64acf5de3.js → 5258-f16177770ded638e.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/{5279-21929b12c927b022.js → 5279-c00fe2f02fb0884a.js} +1 -1
  45. fides/ui-build/static/admin/_next/static/chunks/{5643-7583c1f8dbd83273.js → 5643-d43eaf754759827a.js} +1 -1
  46. fides/ui-build/static/admin/_next/static/chunks/{5783-55c0387508e50f3e.js → 5783-38508f27d73ce33d.js} +1 -1
  47. fides/ui-build/static/admin/_next/static/chunks/6277-24790943a32f4310.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/{6315-2d4e86a32fc40458.js → 6315-8e75ebd641e72b64.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/{6853-cb15625a713b3ef9.js → 6853-a9bf7b1e3efc4890.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/6954-50bacf2850b67baa.js +1 -0
  51. fides/ui-build/static/admin/_next/static/chunks/7245-0fb0a47c8d09b133.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/{7476-f25fce73eeb1f9c6.js → 7476-1ff6e16cd626c709.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/{7488-df17b592fbeaa1eb.js → 7488-d8dae51cdc7beded.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/7630-e679419d1b9ccb40.js +1 -0
  55. fides/ui-build/static/admin/_next/static/chunks/{8011-56031d82d5428981.js → 8011-4712e3cd2f4ac324.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/{8373-7f940f5ac9c38b1f.js → 8373-d1e097f06ec2ee69.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/{9046-31b16a7e872c22be.js → 9046-4833f2609581dba5.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/9070-72f484137b9e8c01.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/{9330-cea1bf40f5d27e53.js → 9330-4e0809deb8798d22.js} +1 -1
  60. fides/ui-build/static/admin/_next/static/chunks/{9682-2754256aeae141bb.js → 9682-38892cb66c7f95e3.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/{9899-15530c468d5656a1.js → 9899-c643484881627fb2.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/9965-2236fd3e20e82310.js +1 -0
  63. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-9e869a44215709ed.js → _app-2e4cd4b7602e1bb3.js} +43 -43
  64. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-dba951f9d47e999b.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-42d903108bea604f.js +1 -0
  66. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-f8ecba33126e0c25.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-224e9981280a4dc5.js +1 -0
  68. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-144f4a5d20e97568.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-69b429a9d30ebaf1.js → projects-567785f8792366e1.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-a53ef0161235ee47.js → data-catalog-bfd0c20e75b8b920.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-b38ccd2e832e49f3.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/data-explorer-98f2ad49cf056476.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-ace848575e688200.js → [monitorId]-ce9c88efaa0e1574.js} +1 -1
  74. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-53ca31c50c43007f.js → action-center-ba88a4fb3040868b.js} +1 -1
  75. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-f87e4a0f664f4cde.js → activity-fe2bfdf0311bfef8.js} +1 -1
  76. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-db54d01fd8f6df50.js → new-a942e03888533e9d.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-55d312af5228e098.js → dataset-cdc0702d27cf8c33.js} +1 -1
  78. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-488beba62e832660.js → [id]-06012371d6895224.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-4aad5495f9bf81ce.js → new-206e6e6d1fe2410f.js} +1 -1
  80. fides/ui-build/static/admin/_next/static/chunks/pages/{index-8a2ba955d92d52ee.js → index-c67367086367c633.js} +1 -1
  81. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-627a239ad9ee583c.js +1 -0
  82. fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-f69b04d3b4cf43b1.js → integrations-95e69be79db496a8.js} +1 -1
  83. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-f57a7e0fa0980ccd.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-ffe085b4c4397507.js +1 -0
  85. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-6eaa901f9b870009.js +1 -0
  86. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-f5bce1ceb0502f04.js → FormikAntFormItem-4de259b097029614.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-90b4ea9f9deca6e2.js → FormikControlled-8b141c7922fa9ac7.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-3bdf46d79cc0109f.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-fe4ed3ad75151e36.js → [id]-3f0d46ca6f1b519f.js} +1 -1
  90. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-de681c2d022c9e0d.js → storage-8954850d483b26f3.js} +1 -1
  91. fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-cd8ba2eef9085377.js → privacy-requests-454ebb8c7af36486.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-9981789c06a174a7.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-c298a89b006c2646.js +1 -0
  94. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-91efbb5b334823a1.js +1 -0
  95. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-ea9baf24de35d3b1.js → custom-fields-401ed29bd0c5df46.js} +1 -1
  96. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-ee33c5de7339d7d4.js +1 -0
  97. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-33448bf0a1d53870.js → locations-787738296ba93cf2.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers-e93333bb5a79dc53.js +1 -0
  99. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-3c315036f1fc9f90.js → organization-7376fc65cbfa9fb4.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-085834d81742e278.js +1 -0
  101. fides/ui-build/static/admin/_next/static/chunks/pages/systems-c6317160d10b8f29.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-cecea5832cb1f3b0.js → taxonomy-ea7e284bc31a4dc2.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-726fbc0a34ffba1f.js → [id]-ba3b6d517ef5de22.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-df9b75ab01c1a2ea.js → user-management-ed8df757a8129298.js} +1 -1
  105. fides/ui-build/static/admin/_next/static/css/80cba63bd8a9a6c7.css +1 -0
  106. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  107. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  108. fides/ui-build/static/admin/add-systems.html +1 -1
  109. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  110. fides/ui-build/static/admin/consent/configure.html +1 -1
  111. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  112. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  113. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  114. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  115. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  116. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  117. fides/ui-build/static/admin/consent/properties.html +1 -1
  118. fides/ui-build/static/admin/consent/reporting.html +1 -1
  119. fides/ui-build/static/admin/consent.html +1 -1
  120. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  121. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  122. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  123. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  124. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  125. fides/ui-build/static/admin/data-catalog.html +1 -1
  126. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  127. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/data-explorer.html +1 -1
  128. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  129. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  130. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  131. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  132. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  133. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  134. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  135. fides/ui-build/static/admin/datamap.html +1 -1
  136. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  137. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  138. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  139. fides/ui-build/static/admin/dataset/new.html +1 -1
  140. fides/ui-build/static/admin/dataset.html +1 -1
  141. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  142. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  143. fides/ui-build/static/admin/datastore-connection.html +1 -1
  144. fides/ui-build/static/admin/index.html +1 -1
  145. fides/ui-build/static/admin/integrations/[id].html +1 -1
  146. fides/ui-build/static/admin/integrations.html +1 -1
  147. fides/ui-build/static/admin/login/[provider].html +1 -1
  148. fides/ui-build/static/admin/login.html +1 -1
  149. fides/ui-build/static/admin/messaging/[id].html +1 -1
  150. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  151. fides/ui-build/static/admin/messaging.html +1 -1
  152. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  153. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  154. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  155. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  156. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  157. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  158. fides/ui-build/static/admin/poc/forms.html +1 -1
  159. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  160. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  161. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  162. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  163. fides/ui-build/static/admin/privacy-requests.html +1 -1
  164. fides/ui-build/static/admin/properties/[id].html +1 -1
  165. fides/ui-build/static/admin/properties/add-property.html +1 -1
  166. fides/ui-build/static/admin/properties.html +1 -1
  167. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  168. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  169. fides/ui-build/static/admin/settings/about.html +1 -1
  170. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  171. fides/ui-build/static/admin/settings/consent.html +1 -1
  172. fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -1
  173. fides/ui-build/static/admin/settings/custom-fields/new.html +1 -1
  174. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  175. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  176. fides/ui-build/static/admin/settings/domains.html +1 -1
  177. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  178. fides/ui-build/static/admin/settings/locations.html +1 -1
  179. fides/ui-build/static/admin/settings/messaging-providers/[key].html +1 -1
  180. fides/ui-build/static/admin/settings/messaging-providers/new.html +1 -1
  181. fides/ui-build/static/admin/settings/messaging-providers.html +1 -1
  182. fides/ui-build/static/admin/settings/organization.html +1 -1
  183. fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
  184. fides/ui-build/static/admin/settings/regulations.html +1 -1
  185. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  186. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  187. fides/ui-build/static/admin/systems.html +1 -1
  188. fides/ui-build/static/admin/taxonomy.html +1 -1
  189. fides/ui-build/static/admin/user-management/new.html +1 -1
  190. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  191. fides/ui-build/static/admin/user-management.html +1 -1
  192. fides/ui-build/static/admin/_next/static/chunks/155-3d03f101c662c054.js +0 -1
  193. fides/ui-build/static/admin/_next/static/chunks/3377-4c129258b4c4ea28.js +0 -1
  194. fides/ui-build/static/admin/_next/static/chunks/3700-42976bfaad3b91c9.js +0 -1
  195. fides/ui-build/static/admin/_next/static/chunks/401-5270e3e23b08ab2b.js +0 -1
  196. fides/ui-build/static/admin/_next/static/chunks/5185-325e5435a0c7dcb7.js +0 -1
  197. fides/ui-build/static/admin/_next/static/chunks/6277-ca31d48a33202761.js +0 -1
  198. fides/ui-build/static/admin/_next/static/chunks/6954-08b59d28d7a2a43b.js +0 -1
  199. fides/ui-build/static/admin/_next/static/chunks/7245-895bb7c6a6c797bc.js +0 -1
  200. fides/ui-build/static/admin/_next/static/chunks/7630-71582de0e818e28f.js +0 -1
  201. fides/ui-build/static/admin/_next/static/chunks/9070-13f237db78da586d.js +0 -1
  202. fides/ui-build/static/admin/_next/static/chunks/9965-54037b6c8f36d14b.js +0 -1
  203. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-1c9cef80deccb15d.js +0 -1
  204. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-4adeec3bcec05f7b.js +0 -1
  205. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-4254abef7bb52edd.js +0 -1
  206. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-8e76cbfaf71fdcb9.js +0 -1
  207. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-93730a4316c0d980.js +0 -1
  208. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-f85f4f8fcf1bfbdb.js +0 -1
  209. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/data-explorer-3619e454763dba09.js +0 -1
  210. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4580f70eb41b6a7d.js +0 -1
  211. fides/ui-build/static/admin/_next/static/chunks/pages/messaging-c7ba755c2e0e2377.js +0 -1
  212. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-f14bfd5890a0e939.js +0 -1
  213. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-e4274a4d5d23eea9.js +0 -1
  214. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-520ba5ae02f47bda.js +0 -1
  215. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-764b6ce8e030d4a1.js +0 -1
  216. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-da78452b3c41b29e.js +0 -1
  217. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-6442e761ecb5c65a.js +0 -1
  218. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-6f61d886aa6f5ce7.js +0 -1
  219. fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers-776258bad0941a7d.js +0 -1
  220. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-8067e12227210f48.js +0 -1
  221. fides/ui-build/static/admin/_next/static/chunks/pages/systems-277ea1f34c3714cf.js +0 -1
  222. fides/ui-build/static/admin/_next/static/css/372d6a236c84613f.css +0 -1
  223. fides/ui-build/static/admin/_next/static/zmEQMSpOBih8kmA1t-EWO/_buildManifest.js +0 -1
  224. {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc0.dist-info}/WHEEL +0 -0
  225. {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc0.dist-info}/entry_points.txt +0 -0
  226. {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc0.dist-info}/licenses/LICENSE +0 -0
  227. {ethyca_fides-2.71.2b0.dist-info → ethyca_fides-2.72.0rc0.dist-info}/top_level.txt +0 -0
  228. /fides/ui-build/static/admin/_next/static/{zmEQMSpOBih8kmA1t-EWO → SnBet3d7BrNVkglIl0ajl}/_ssgManifest.js +0 -0
  229. /fides/ui-build/static/admin/_next/static/chunks/{1099-27b2d4e59a569b38.js → 1099-0b3dedca0b088f1a.js} +0 -0
  230. /fides/ui-build/static/admin/_next/static/chunks/{1115-8fb5000847f73ec7.js → 1115-a124adb312fb2699.js} +0 -0
  231. /fides/ui-build/static/admin/_next/static/chunks/{2921-edfdffa353a611e4.js → 2921-d3e9c85cdd7c27ef.js} +0 -0
  232. /fides/ui-build/static/admin/_next/static/chunks/{3772-aa7beafe5df5e656.js → 3772-f110cd525aead279.js} +0 -0
  233. /fides/ui-build/static/admin/_next/static/chunks/{3923-fa1d71afc7dc9e6e.js → 3923-ae843be719d73ef4.js} +0 -0
  234. /fides/ui-build/static/admin/_next/static/chunks/{4817-5f9b9c9bafe888f1.js → 4817-1ec683be64664576.js} +0 -0
  235. /fides/ui-build/static/admin/_next/static/chunks/{549-c3b4c51f45a84a52.js → 549-9892a4d85bcbf7a2.js} +0 -0
  236. /fides/ui-build/static/admin/_next/static/chunks/{7773-98d34d188ae0a694.js → 7773-fcd7875cd98f5f39.js} +0 -0
  237. /fides/ui-build/static/admin/_next/static/chunks/{796-7944f684f8945506.js → 796-f3fc016814418a8b.js} +0 -0
  238. /fides/ui-build/static/admin/_next/static/chunks/{9826-e71887e2c4283249.js → 9826-cbfbfc79b6841f08.js} +0 -0
  239. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-2014144a1a0fa64f.js → 404-aa3982e4f51705df.js} +0 -0
  240. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-4f3ba02774f27795.js → manual-a37865aa5cf14ea2.js} +0 -0
  241. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-f7bdc2da53137ffd.js → add-vendors-611f37b6e9031263.js} +0 -0
  242. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-a27b220fe76bdc8e.js → configure-21123d6de9094ca2.js} +0 -0
  243. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-542fd4a4322122f1.js → [id]-5e5eae30956fea95.js} +0 -0
  244. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d31d1c233e94dc1f.js → [id]-13e4cc79e134b563.js} +0 -0
  245. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2ea057e6217993f9.js → new-ba8ee9f3b86763c3.js} +0 -0
  246. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-eb557180eded0abd.js → properties-1585e94b122004f3.js} +0 -0
  247. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-c64589e53338e59a.js → consent-35925fa8990ec083.js} +0 -0
  248. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-8cd4d1d6ba000333.js → [projectUrn]-ca7f388ecd1601df.js} +0 -0
  249. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-8c7103ebf01d6e6a.js → resources-c3a69a1d0d38cea7.js} +0 -0
  250. /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-ae7a4c1c4eabc0d4.js → datamap-7e3e7bf39b111f66.js} +0 -0
  251. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-179e5d09ccff50c1.js → [...subfieldNames]-a3f64d75bdfe8936.js} +0 -0
  252. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-59466e5e238c59d0.js → [collectionName]-9fe2facc2f232fde.js} +0 -0
  253. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-36d90c8c39fb0d1c.js → [datasetId]-fd69a9c224af3746.js} +0 -0
  254. /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-496ec7ecca8259dc.js → datastore-connection-5efe1b59a50befd8.js} +0 -0
  255. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-d6eed2dc5d27f625.js → [id]-ab70f1fad73df45f.js} +0 -0
  256. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-c7b43fa365f4be10.js → add-template-0f2238b930e6acd8.js} +0 -0
  257. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-d6043ae8dae6ef7d.js → FormikField-25d78a1dbaf785ed.js} +0 -0
  258. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-b46f432b51421fae.js → table-migration-fc3e49b5ee4a4d23.js} +0 -0
  259. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-04ebf2fb6fc4358a.js → configure-948e71f3cfbe304e.js} +0 -0
  260. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-f75a407d78857ab3.js → [id]-180bb94838bca304.js} +0 -0
  261. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-975ff605e1dbc09c.js → add-property-719bbd424816ef58.js} +0 -0
  262. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-e7fdf3a9a3e8c267.js → properties-ca707af08bca687a.js} +0 -0
  263. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-44d06e280990854d.js → domain-records-e57ee1a08caacb1b.js} +0 -0
  264. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-11148b182370fd83.js → email-templates-3fce669766a3d183.js} +0 -0
  265. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/{[key]-4a18d8135c0dbf2a.js → [key]-ad748b76b1cc69ba.js} +0 -0
  266. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/{new-41957281b8ec26b1.js → new-d962d09f6156484c.js} +0 -0
  267. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{privacy-requests-00917525c9245a90.js → privacy-requests-bf97b87395719636.js} +0 -0
  268. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-5d924b2f1f926b88.js → regulations-2c938cdf5915ff39.js} +0 -0
  269. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-1a902922759cae76.js → [id]-62015f01f64578b2.js} +0 -0
  270. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-629c88e90699369b.js → new-789f5ee80227c57b.js} +0 -0
  271. /fides/ui-build/static/admin/_next/static/chunks/{webpack-118fb4723d13c14f.js → webpack-119be8f042eb6b8b.js} +0 -0
@@ -0,0 +1,316 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Weekly DSR Summary</title>
7
+ <style>
8
+ /* Reset styles for email clients */
9
+ body, table, td, p, a, li, blockquote {
10
+ -webkit-text-size-adjust: 100%;
11
+ -ms-text-size-adjust: 100%;
12
+ }
13
+
14
+ table, td {
15
+ mso-table-lspace: 0pt;
16
+ mso-table-rspace: 0pt;
17
+ }
18
+
19
+ img {
20
+ -ms-interpolation-mode: bicubic;
21
+ border: 0;
22
+ height: auto;
23
+ line-height: 100%;
24
+ outline: none;
25
+ text-decoration: none;
26
+ }
27
+
28
+ /* Main styles */
29
+ body {
30
+ margin: 0;
31
+ padding: 0;
32
+ width: 100% !important;
33
+ min-width: 100%;
34
+ height: 100%;
35
+ background-color: #f8fafc;
36
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
37
+ font-size: 16px;
38
+ line-height: 1.6;
39
+ color: #334155;
40
+ }
41
+
42
+ .email-container {
43
+ max-width: 600px;
44
+ margin: 0 auto;
45
+ background-color: #ffffff;
46
+ border-radius: 8px;
47
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
48
+ overflow: hidden;
49
+ }
50
+
51
+ .logo-section {
52
+ background-color: #ffffff;
53
+ padding: 24px;
54
+ text-align: center;
55
+ border-bottom: 1px solid #e5e5e5;
56
+ }
57
+
58
+ .logo-container {
59
+ margin-bottom: 0;
60
+ }
61
+
62
+ .header {
63
+ background-color: #000000;
64
+ padding: 32px 24px;
65
+ text-align: center;
66
+ }
67
+
68
+ .logo {
69
+ max-width: 200px;
70
+ max-height: 60px;
71
+ width: auto;
72
+ height: auto;
73
+ display: block;
74
+ margin: 0 auto;
75
+ }
76
+
77
+ .logo-placeholder {
78
+ width: 200px;
79
+ height: 60px;
80
+ background-color: #333333;
81
+ border: 2px dashed #666666;
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ margin: 0 auto;
86
+ color: #999999;
87
+ font-size: 14px;
88
+ font-weight: 500;
89
+ text-align: center;
90
+ border-radius: 4px;
91
+ }
92
+
93
+ .header h1 {
94
+ color: #ffffff;
95
+ font-size: 24px;
96
+ font-weight: 600;
97
+ margin: 0;
98
+ letter-spacing: -0.025em;
99
+ }
100
+
101
+ .content {
102
+ padding: 32px 24px;
103
+ }
104
+
105
+ .greeting {
106
+ font-size: 18px;
107
+ color: #000000;
108
+ margin-bottom: 24px;
109
+ font-weight: 500;
110
+ }
111
+
112
+ .intro-text {
113
+ margin-bottom: 32px;
114
+ color: #333333;
115
+ line-height: 1.7;
116
+ }
117
+
118
+ .section {
119
+ margin-bottom: 32px;
120
+ }
121
+
122
+ .section-title {
123
+ font-size: 20px;
124
+ font-weight: 600;
125
+ color: #000000;
126
+ margin-bottom: 16px;
127
+ padding-bottom: 8px;
128
+ border-bottom: 2px solid #e5e5e5;
129
+ }
130
+
131
+ .task-count {
132
+ background-color: #f5f5f5;
133
+ border-left: 4px solid #000000;
134
+ padding: 16px 20px;
135
+ margin-bottom: 20px;
136
+ border-radius: 0 6px 6px 0;
137
+ }
138
+
139
+ .task-count-text {
140
+ font-size: 18px;
141
+ font-weight: 600;
142
+ color: #000000;
143
+ margin: 0;
144
+ }
145
+
146
+ .cta-button {
147
+ display: inline-block;
148
+ background-color: #000000;
149
+ color: #ffffff !important;
150
+ text-decoration: none;
151
+ padding: 12px 24px;
152
+ border-radius: 6px;
153
+ font-weight: 600;
154
+ font-size: 16px;
155
+ text-align: center;
156
+ transition: all 0.2s ease;
157
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
158
+ }
159
+
160
+ .cta-button:hover {
161
+ background-color: #333333;
162
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
163
+ transform: translateY(-1px);
164
+ }
165
+
166
+ .footer {
167
+ background-color: #f5f5f5;
168
+ padding: 24px;
169
+ text-align: center;
170
+ border-top: 1px solid #e5e5e5;
171
+ }
172
+
173
+ .footer-text {
174
+ color: #666666;
175
+ font-size: 14px;
176
+ line-height: 1.6;
177
+ margin: 0;
178
+ }
179
+
180
+ .signature {
181
+ margin-top: 24px;
182
+ color: #333333;
183
+ font-weight: 500;
184
+ }
185
+
186
+ /* Responsive styles */
187
+ @media only screen and (max-width: 600px) {
188
+ .email-container {
189
+ margin: 0;
190
+ border-radius: 0;
191
+ }
192
+
193
+ .header, .content, .footer {
194
+ padding: 24px 16px;
195
+ }
196
+
197
+ .header h1 {
198
+ font-size: 20px;
199
+ }
200
+
201
+ .greeting {
202
+ font-size: 16px;
203
+ }
204
+
205
+ .section-title {
206
+ font-size: 18px;
207
+ }
208
+
209
+ .cta-button {
210
+ width: 100%;
211
+ box-sizing: border-box;
212
+ }
213
+ }
214
+
215
+ /* Dark mode support */
216
+ @media (prefers-color-scheme: dark) {
217
+ body {
218
+ background-color: #000000;
219
+ }
220
+
221
+ .email-container {
222
+ background-color: #1a1a1a;
223
+ }
224
+
225
+ .greeting, .section-title {
226
+ color: #ffffff;
227
+ }
228
+
229
+ .intro-text, .footer-text, .signature {
230
+ color: #cccccc;
231
+ }
232
+
233
+ .task-count {
234
+ background-color: #333333;
235
+ border-left-color: #ffffff;
236
+ }
237
+
238
+ .task-count-text {
239
+ color: #ffffff;
240
+ }
241
+
242
+ .footer {
243
+ background-color: #333333;
244
+ border-top-color: #666666;
245
+ }
246
+
247
+ .logo-section {
248
+ background-color: #1a1a1a;
249
+ border-bottom-color: #666666;
250
+ }
251
+
252
+ .logo-placeholder {
253
+ background-color: #555555;
254
+ border-color: #888888;
255
+ color: #cccccc;
256
+ }
257
+ }
258
+ </style>
259
+ </head>
260
+ <body>
261
+ <div style="padding: 20px 0;">
262
+ <div class="email-container">
263
+ <!-- Logo Section -->
264
+ <div class="logo-section">
265
+ <div class="logo-container">
266
+ {% if company_logo_url %}
267
+ <img src="{{ company_logo_url }}" alt="{{ organization_name }} Logo" class="logo">
268
+ {% else %}
269
+ <div class="logo-placeholder">{{ organization_name }}</div>
270
+ {% endif %}
271
+ </div>
272
+ </div>
273
+
274
+ <!-- Main Content -->
275
+ <div class="content">
276
+ <div class="greeting">Hi {{ vendor_contact_name }},</div>
277
+
278
+ <div class="intro-text">
279
+ {{ intro_text | default("This is your weekly summary of open data subject requests tasks from " + organization_name + " that require your attention. Please review the tasks listed below in our <a href='" + portal_url + "' style='color: #000000; text-decoration: underline; font-weight: 600;'>Privacy Center</a> to ensure timely completion.") | safe }}
280
+ </div>
281
+
282
+ <!-- Tasks Due Soon Section -->
283
+ <div class="section">
284
+ <div class="section-title">Tasks Due Soon</div>
285
+
286
+ <div class="task-count">
287
+ <p class="task-count-text">You have {{ total_task_count }} request{{ 's' if total_task_count != 1 else '' }} coming due, including {{ imminent_task_count }} within the next 7 days and {{ upcoming_task_count }} due in the next period.</p>
288
+ </div>
289
+
290
+ <div style="text-align: center;">
291
+ <a href="{{ portal_url }}" class="cta-button">View All Tasks</a>
292
+ </div>
293
+ </div>
294
+
295
+ <!-- Closing -->
296
+ <div style="margin-top: 32px;">
297
+ <p style="color: #333333; margin-bottom: 24px;">
298
+ {{ closing_text | default("Thank you for your partnership in processing these requests efficiently. If you have any questions or issues, please reach out to your contacts at " + organization_name + ".") | safe }}
299
+ </p>
300
+
301
+ <div class="signature">
302
+ {{ signature | default("Best regards,<br>The " + organization_name + " Privacy Team") | safe }}
303
+ </div>
304
+ </div>
305
+ </div>
306
+
307
+ <!-- Footer -->
308
+ <div class="footer">
309
+ <p class="footer-text">
310
+ This email was sent from your Privacy Center. Please do not reply to this email.
311
+ </p>
312
+ </div>
313
+ </div>
314
+ </div>
315
+ </body>
316
+ </html>
@@ -25,6 +25,7 @@ class MonitorTaskType(Enum):
25
25
 
26
26
  DETECTION = "detection"
27
27
  CLASSIFICATION = "classification"
28
+ LLM_CLASSIFICATION = "llm_classification"
28
29
  PROMOTION = "promotion"
29
30
  REMOVAL_PROMOTION = "removal_promotion"
30
31
 
@@ -4,6 +4,7 @@ from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text
4
4
  from sqlalchemy.dialects.postgresql import JSONB
5
5
  from sqlalchemy.ext.declarative import declared_attr
6
6
  from sqlalchemy.orm import Session, relationship
7
+ from sqlalchemy.orm.attributes import flag_modified
7
8
  from sqlalchemy.sql import func
8
9
 
9
10
  from fides.api.db.base_class import Base
@@ -92,8 +93,12 @@ class DigestTaskExecution(
92
93
  self.processed_user_ids = processed_user_ids
93
94
  self.last_checkpoint_at = func.now()
94
95
 
96
+ # Mark JSONB fields as modified so SQLAlchemy knows they changed
97
+ flag_modified(self, "processed_user_ids")
98
+
95
99
  if execution_state:
96
100
  self.execution_state = execution_state
101
+ flag_modified(self, "execution_state")
97
102
 
98
103
  self.save(db)
99
104
 
@@ -123,8 +128,13 @@ class DigestTaskExecution(
123
128
 
124
129
  def get_remaining_work(self) -> Dict[str, Any]:
125
130
  """Get information about remaining work for resumption."""
131
+ # Ensure processed_user_ids is always a list
132
+ raw_processed_user_ids = self.processed_user_ids or []
133
+ processed_user_ids = (
134
+ raw_processed_user_ids if isinstance(raw_processed_user_ids, list) else []
135
+ )
126
136
  return {
127
- "processed_user_ids": self.processed_user_ids or [],
137
+ "processed_user_ids": processed_user_ids,
128
138
  "execution_state": self.execution_state or {},
129
139
  "processed_count": self.processed_recipients or 0,
130
140
  "successful_count": self.successful_communications,
@@ -31,6 +31,15 @@ class EventAuditType(str, EnumType):
31
31
  taxonomy_element_updated = "taxonomy.element.updated"
32
32
  taxonomy_element_deleted = "taxonomy.element.deleted"
33
33
 
34
+ # Connection operations
35
+ connection_created = "connection.created"
36
+ connection_updated = "connection.updated"
37
+ connection_deleted = "connection.deleted"
38
+
39
+ # Connection secrets operations
40
+ connection_secrets_created = "connection.secrets.created"
41
+ connection_secrets_updated = "connection.secrets.updated"
42
+
34
43
  # Digest
35
44
  digest_execution_started = "digest.execution.started"
36
45
  digest_execution_completed = "digest.execution.completed"
@@ -58,6 +58,13 @@ DEFAULT_MESSAGING_TEMPLATES: Dict[str, Any] = {
58
58
  "body": "Your erasure request has been completed.",
59
59
  },
60
60
  },
61
+ MessagingActionType.MANUAL_TASK_DIGEST.value: {
62
+ "label": "Manual task digest",
63
+ "content": {
64
+ "subject": "Weekly DSR Summary from __ORGANIZATION_NAME__",
65
+ "body": "This is your weekly summary of open data subject requests tasks from __ORGANIZATION_NAME__ that require your attention. Please review the tasks in our Privacy Center to ensure timely completion.",
66
+ },
67
+ },
61
68
  }
62
69
 
63
70
 
@@ -13,6 +13,7 @@ from fides.api.schemas.connection_configuration import connection_secrets_schema
13
13
  from fides.api.schemas.policy import ActionType
14
14
  from fides.api.schemas.saas.saas_config import SaaSConfigBase
15
15
  from fides.api.util.connection_type import get_connection_type_secret_schema
16
+ from fides.api.util.masking_util import mask_sensitive_fields
16
17
 
17
18
 
18
19
  class CreateConnectionConfiguration(BaseModel):
@@ -41,36 +42,6 @@ class CreateConnectionConfigurationWithSecrets(CreateConnectionConfiguration):
41
42
  model_config = ConfigDict(from_attributes=True, extra="ignore")
42
43
 
43
44
 
44
- def mask_sensitive_fields(
45
- connection_secrets: Dict[str, Any], secret_schema: Dict[str, Any]
46
- ) -> Dict[str, Any]:
47
- """
48
- Mask sensitive fields in the given secrets based on the provided schema.
49
- This function traverses the given secrets dictionary and uses the provided schema to
50
- identify fields that have been marked as sensitive. The function replaces the sensitive
51
- field values with a mask string ('********').
52
- Args:
53
- connection_secrets (Dict[str, Any]): The secrets to be masked.
54
- secret_schema (Dict[str, Any]): The schema defining which fields are sensitive.
55
- Returns:
56
- Dict[str, Any]: The secrets dictionary with sensitive fields masked.
57
- """
58
- if connection_secrets is None:
59
- return connection_secrets
60
-
61
- secret_schema_properties = secret_schema["properties"]
62
- new_connection_secrets = {}
63
-
64
- for key, value in connection_secrets.items():
65
- if key in secret_schema_properties:
66
- if secret_schema_properties.get(key, {}).get("sensitive", False):
67
- new_connection_secrets[key] = "**********"
68
- else:
69
- new_connection_secrets[key] = value
70
-
71
- return new_connection_secrets
72
-
73
-
74
45
  class ConnectionConfigSecretsMixin(BaseModel):
75
46
  """
76
47
  A schema mixin to declare a connection config `secrets` attribute
@@ -89,6 +89,7 @@ class MessagingActionType(str, Enum):
89
89
  PRIVACY_REQUEST_REVIEW_APPROVE = "privacy_request_review_approve"
90
90
  USER_INVITE = "user_invite"
91
91
  EXTERNAL_USER_WELCOME = "external_user_welcome"
92
+ MANUAL_TASK_DIGEST = "manual_task_digest"
92
93
  TEST_MESSAGE = "test_message"
93
94
 
94
95
 
@@ -101,6 +102,7 @@ CONFIGURABLE_MESSAGING_ACTION_TYPES: Tuple[str, ...] = (
101
102
  MessagingActionType.PRIVACY_REQUEST_COMPLETE_DELETION.value,
102
103
  MessagingActionType.PRIVACY_REQUEST_REVIEW_DENY.value,
103
104
  MessagingActionType.PRIVACY_REQUEST_REVIEW_APPROVE.value,
105
+ MessagingActionType.MANUAL_TASK_DIGEST.value,
104
106
  )
105
107
 
106
108
 
@@ -219,6 +221,18 @@ class ExternalUserWelcomeBodyParams(BaseModel):
219
221
  org_name: str
220
222
 
221
223
 
224
+ class ManualTaskDigestBodyParams(BaseModel):
225
+ """Body params required to send manual task digest emails"""
226
+
227
+ vendor_contact_name: str
228
+ organization_name: str
229
+ portal_url: str
230
+ imminent_task_count: int
231
+ upcoming_task_count: int
232
+ total_task_count: int
233
+ company_logo_url: Optional[str] = None
234
+
235
+
222
236
  class FidesopsMessage(
223
237
  BaseModel,
224
238
  ):
@@ -256,6 +270,7 @@ class FidesopsMessage(
256
270
  MessagingActionType.PRIVACY_REQUEST_ERROR_NOTIFICATION: ErrorNotificationBodyParams,
257
271
  MessagingActionType.USER_INVITE: UserInviteBodyParams,
258
272
  MessagingActionType.EXTERNAL_USER_WELCOME: ExternalUserWelcomeBodyParams,
273
+ MessagingActionType.MANUAL_TASK_DIGEST: ManualTaskDigestBodyParams,
259
274
  }
260
275
 
261
276
  valid_body_params = valid_body_params_for_action_type.get(
@@ -1,24 +1,18 @@
1
1
  # pylint: disable=protected-access
2
2
  import os
3
3
  from abc import ABC, abstractmethod
4
- from typing import Dict, Iterable, List, Optional, Type
4
+ from typing import Dict, List, Optional, Type
5
5
  from zipfile import ZipFile
6
6
 
7
7
  from fideslang.models import Dataset
8
8
  from loguru import logger
9
- from packaging.version import Version
10
9
  from packaging.version import parse as parse_version
11
10
  from sqlalchemy.orm import Session
12
11
 
13
12
  from fides.api.api.deps import get_api_session
14
13
  from fides.api.common_exceptions import ValidationError
15
14
  from fides.api.cryptography.cryptographic_util import str_to_b64_str
16
- from fides.api.models.connectionconfig import ConnectionConfig
17
15
  from fides.api.models.custom_connector_template import CustomConnectorTemplate
18
- from fides.api.models.datasetconfig import DatasetConfig
19
- from fides.api.schemas.connection_configuration.saas_config_template_values import (
20
- SaasConnectionTemplateValues,
21
- )
22
16
  from fides.api.schemas.saas.connector_template import ConnectorTemplate
23
17
  from fides.api.schemas.saas.saas_config import SaaSConfig
24
18
  from fides.api.service.authentication.authentication_strategy_oauth2_authorization_code import (
@@ -31,8 +25,6 @@ from fides.api.util.saas_util import (
31
25
  load_config_from_string,
32
26
  load_dataset_from_string,
33
27
  load_yaml_as_string,
34
- replace_config_placeholders,
35
- replace_dataset_placeholders,
36
28
  replace_version,
37
29
  )
38
30
  from fides.api.util.unsafe_file_util import verify_svg, verify_zip
@@ -317,132 +309,3 @@ class ConnectorRegistry:
317
309
  Returns an object containing the various SaaS connector artifacts
318
310
  """
319
311
  return cls._get_combined_templates().get(connector_type)
320
-
321
-
322
- def create_connection_config_from_template_no_save(
323
- db: Session,
324
- template: ConnectorTemplate,
325
- template_values: SaasConnectionTemplateValues,
326
- system_id: Optional[str] = None,
327
- ) -> ConnectionConfig:
328
- """Creates a SaaS connection config from a template without saving it."""
329
- # Load SaaS config from template and replace every instance of "<instance_fides_key>" with the fides_key
330
- # the user has chosen
331
- config_from_template: Dict = replace_config_placeholders(
332
- template.config, "<instance_fides_key>", template_values.instance_key
333
- )
334
-
335
- data = template_values.generate_config_data_from_template(
336
- config_from_template=config_from_template
337
- )
338
-
339
- if system_id:
340
- data["system_id"] = system_id
341
-
342
- # Create SaaS ConnectionConfig
343
- connection_config = ConnectionConfig.create_without_saving(db, data=data)
344
-
345
- return connection_config
346
-
347
-
348
- def upsert_dataset_config_from_template(
349
- db: Session,
350
- connection_config: ConnectionConfig,
351
- template: ConnectorTemplate,
352
- template_values: SaasConnectionTemplateValues,
353
- ) -> DatasetConfig:
354
- """
355
- Creates a `DatasetConfig` from a template
356
- and associates it with a ConnectionConfig.
357
- If the `DatasetConfig` already exists in the db,
358
- then the existing record is updated.
359
- """
360
- # Load the dataset config from template and replace every instance of "<instance_fides_key>" with the fides_key
361
- # the user has chosen
362
- dataset_from_template: Dict = replace_dataset_placeholders(
363
- template.dataset, "<instance_fides_key>", template_values.instance_key
364
- )
365
- data = {
366
- "connection_config_id": connection_config.id,
367
- "fides_key": template_values.instance_key,
368
- "dataset": dataset_from_template, # Currently used for upserting a CTL Dataset
369
- }
370
- dataset_config = DatasetConfig.create_or_update(db, data=data)
371
- return dataset_config
372
-
373
-
374
- def update_saas_configs(db: Session) -> None:
375
- """
376
- Updates SaaS config instances currently in the DB if to the
377
- corresponding template in the registry are found.
378
-
379
- Effectively an "update script" for SaaS config instances,
380
- to be run on server bootstrap.
381
- """
382
- for connector_type in ConnectorRegistry.connector_types():
383
- logger.debug(
384
- "Determining if any updates are needed for connectors of type {} based on templates...",
385
- connector_type,
386
- )
387
- template: ConnectorTemplate = ConnectorRegistry.get_connector_template( # type: ignore
388
- connector_type
389
- )
390
- saas_config = SaaSConfig(**load_config_from_string(template.config))
391
- template_version: Version = parse_version(saas_config.version)
392
-
393
- connection_configs: Iterable[ConnectionConfig] = ConnectionConfig.filter(
394
- db=db,
395
- conditions=(ConnectionConfig.saas_config["type"].astext == connector_type),
396
- ).all()
397
- for connection_config in connection_configs:
398
- saas_config_instance = SaaSConfig.model_validate(
399
- connection_config.saas_config
400
- )
401
- if parse_version(saas_config_instance.version) < template_version:
402
- logger.info(
403
- "Updating SaaS config instance '{}' of type '{}' as its version, {}, was found to be lower than the template version {}",
404
- saas_config_instance.fides_key,
405
- connector_type,
406
- saas_config_instance.version,
407
- template_version,
408
- )
409
- try:
410
- update_saas_instance(
411
- db,
412
- connection_config,
413
- template,
414
- saas_config_instance,
415
- )
416
- except Exception:
417
- logger.exception(
418
- "Encountered error attempting to update SaaS config instance {}",
419
- saas_config_instance.fides_key,
420
- )
421
-
422
-
423
- def update_saas_instance(
424
- db: Session,
425
- connection_config: ConnectionConfig,
426
- template: ConnectorTemplate,
427
- saas_config_instance: SaaSConfig,
428
- ) -> None:
429
- """
430
- Replace in the DB the existing SaaS instance configuration data
431
- (SaaSConfig, DatasetConfig) associated with the given ConnectionConfig
432
- with new instance configuration data based on the given ConnectorTemplate
433
- """
434
- template_vals = SaasConnectionTemplateValues(
435
- name=connection_config.name,
436
- key=connection_config.key,
437
- description=connection_config.description,
438
- secrets=connection_config.secrets,
439
- instance_key=saas_config_instance.fides_key,
440
- )
441
-
442
- config_from_template: Dict = replace_config_placeholders(
443
- template.config, "<instance_fides_key>", template_vals.instance_key
444
- )
445
-
446
- connection_config.update_saas_config(db, SaaSConfig(**config_from_template))
447
-
448
- upsert_dataset_config_from_template(db, connection_config, template, template_vals)
fides/api/service/deps.py CHANGED
@@ -6,6 +6,7 @@ from fides.api.api.deps import get_config, get_config_proxy, get_db
6
6
  from fides.api.db.ctl_session import get_async_db
7
7
  from fides.config import FidesConfig
8
8
  from fides.config.config_proxy import ConfigProxy
9
+ from fides.service.connection.connection_service import ConnectionService
9
10
  from fides.service.dataset.dataset_config_service import DatasetConfigService
10
11
  from fides.service.dataset.dataset_service import DatasetService
11
12
  from fides.service.event_audit_service import EventAuditService
@@ -59,5 +60,12 @@ def get_taxonomy_service(
59
60
  return TaxonomyService(db, event_audit_service)
60
61
 
61
62
 
63
+ def get_connection_service(
64
+ db: Session = Depends(get_db),
65
+ event_audit_service: EventAuditService = Depends(get_event_audit_service),
66
+ ) -> ConnectionService:
67
+ return ConnectionService(db, event_audit_service)
68
+
69
+
62
70
  def get_system_service(db: AsyncSession = Depends(get_async_db)) -> SystemService:
63
71
  return SystemService(db)