ethyca-fides 2.56.2rc3__py2.py3-none-any.whl → 2.56.3b1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. {ethyca_fides-2.56.2rc3.dist-info → ethyca_fides-2.56.3b1.dist-info}/METADATA +1 -3
  2. {ethyca_fides-2.56.2rc3.dist-info → ethyca_fides-2.56.3b1.dist-info}/RECORD +231 -226
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/1152c1717849_fix_monitorexecution_started_default.py +57 -0
  5. fides/api/alembic/migrations/versions/3c58001ad310_add_messages_to_monitor_execution.py +32 -0
  6. fides/api/alembic/migrations/versions/bd875a8b5d96_add_attachments_and_.py +96 -0
  7. fides/api/api/v1/endpoints/privacy_request_endpoints.py +2 -14
  8. fides/api/custom_types.py +24 -1
  9. fides/api/db/base.py +1 -0
  10. fides/api/graph/node_filters.py +112 -5
  11. fides/api/graph/traversal.py +34 -4
  12. fides/api/models/attachment.py +153 -0
  13. fides/api/models/audit_log.py +3 -0
  14. fides/api/models/detection_discovery.py +11 -2
  15. fides/api/models/privacy_request.py +26 -3
  16. fides/api/task/create_request_tasks.py +27 -9
  17. fides/api/task/deprecated_graph_task.py +28 -10
  18. fides/api/task/graph_task.py +84 -43
  19. fides/api/util/consent_util.py +20 -5
  20. fides/api/util/logger.py +19 -1
  21. fides/config/execution_settings.py +1 -1
  22. fides/config/security_settings.py +7 -13
  23. fides/data/sample_project/sample_connections/sample_connections.yml +29 -29
  24. fides/service/dataset/dataset_config_service.py +4 -2
  25. fides/service/privacy_request/privacy_request_service.py +32 -14
  26. fides/ui-build/static/admin/404.html +1 -1
  27. fides/ui-build/static/admin/_next/static/LOp6RUpN795nyhXOv95wz/_buildManifest.js +1 -0
  28. fides/ui-build/static/admin/_next/static/chunks/1150-73440d7b319558e8.js +1 -0
  29. fides/ui-build/static/admin/_next/static/chunks/2201-abd6092e6df98c26.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/{5728-7be08c654c024baa.js → 2397-7177ecf4ebe68feb.js} +1 -1
  31. fides/ui-build/static/admin/_next/static/chunks/{255-69ac1bcb5a52b022.js → 255-bf1797f78249d090.js} +1 -1
  32. fides/ui-build/static/admin/_next/static/chunks/{3005-137ef60b77c71ce1.js → 3005-373de16453ed7eea.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/3086-be6b52546c3efc90.js +1 -0
  34. fides/ui-build/static/admin/_next/static/chunks/3320-87c75df57a47487e.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/{5318-1bfde23609ea3718.js → 3627-fb83adac32c128e6.js} +1 -1
  36. fides/ui-build/static/admin/_next/static/chunks/3662-420d9807c30008ab.js +1 -0
  37. fides/ui-build/static/admin/_next/static/chunks/3855-5c7b11871f59e0e0.js +1 -0
  38. fides/ui-build/static/admin/_next/static/chunks/{4456-67c8d5b2d96dea1d.js → 3872-f3d5054bdc584eaa.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/{8141-55187bd207f5ea9e.js → 3949-9888699e2ac564c4.js} +1 -1
  40. fides/ui-build/static/admin/_next/static/chunks/{4294-3e67d7ef3d390c2f.js → 4294-5b3aa9d605217915.js} +1 -1
  41. fides/ui-build/static/admin/_next/static/chunks/4481-ca8d2c75d634b6bc.js +1 -0
  42. fides/ui-build/static/admin/_next/static/chunks/4723-81d28e5be5c7b6d7.js +1 -0
  43. fides/ui-build/static/admin/_next/static/chunks/5246-9fc6af1a6499e0a4.js +1 -0
  44. fides/ui-build/static/admin/_next/static/chunks/5258-3a650be9142cf914.js +1 -0
  45. fides/ui-build/static/admin/_next/static/chunks/5480-f5bec5e881f72f8d.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/5487-d96e1abc93f92631.js +1 -0
  47. fides/ui-build/static/admin/_next/static/chunks/5826-16e497af363a0cbc.js +1 -0
  48. fides/ui-build/static/admin/_next/static/chunks/5908-532dfbc9d930f635.js +1 -0
  49. fides/ui-build/static/admin/_next/static/chunks/5960-8895f51b30c35798.js +1 -0
  50. fides/ui-build/static/admin/_next/static/chunks/{618f8807-5792121b4eda076b.js → 618f8807-d15c33d1d6c8b961.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/6277-b55810d66362f56e.js +1 -0
  52. fides/ui-build/static/admin/_next/static/chunks/6315-dee79f6861c94d2d.js +1 -0
  53. fides/ui-build/static/admin/_next/static/chunks/6362-8f79e403fdc2404a.js +1 -0
  54. fides/ui-build/static/admin/_next/static/chunks/{5632-b98308c17b9cd230.js → 6372-f1b54f3cb4888660.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/{6834-5082b5702e80b531.js → 6834-dcda0a8ed484775e.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/6853-cacea421af3bfc26.js +1 -0
  57. fides/ui-build/static/admin/_next/static/chunks/6954-6eb480eb132239c3.js +1 -0
  58. fides/ui-build/static/admin/_next/static/chunks/7044-9dc90893067f38ae.js +1 -0
  59. fides/ui-build/static/admin/_next/static/chunks/7495-a61f0c9fcb458664.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/{7548-b3992b0c7fb852c9.js → 7751-25e0c1307988ffd7.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/79-ba88d0cf4c65aaa2.js +1 -0
  62. fides/ui-build/static/admin/_next/static/chunks/{5973-c0b74d6cf14833cb.js → 7980-2597c279c30fbcda.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/8433-969280d321d1c3a2.js +1 -0
  64. fides/ui-build/static/admin/_next/static/chunks/8499-07507004e8275df2.js +1 -0
  65. fides/ui-build/static/admin/_next/static/chunks/{8837-2b785a4e5bad4813.js → 8837-cf26e5ca1ae5aaf5.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/9046-80f1ea44f89fe32c.js +1 -0
  67. fides/ui-build/static/admin/_next/static/chunks/{9255-2b1bafefb091a640.js → 9255-336a890ada321f89.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/9282-1a5a2f6f4d9ed586.js +1 -0
  69. fides/ui-build/static/admin/_next/static/chunks/{2800.40212c25719a2351.js → 9392.97b2e3327dceb7c9.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/9676.f4d5977a5f148797.js +1 -0
  71. fides/ui-build/static/admin/_next/static/chunks/9999-f2e40d5b13343220.js +1 -0
  72. fides/ui-build/static/admin/_next/static/chunks/main-app-2650f704701c6a7b.js +1 -0
  73. fides/ui-build/static/admin/_next/static/chunks/main-ce7f38a12ea8c223.js +1 -0
  74. fides/ui-build/static/admin/_next/static/chunks/pages/404-1087258931760074.js +1 -0
  75. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-8021f4b202818ba2.js → _app-3c1a7742661d3a9e.js} +14 -14
  76. fides/ui-build/static/admin/_next/static/chunks/pages/{_error-c91b5eabd7ac9382.js → _error-bede3a8288930dcf.js} +1 -1
  77. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-d7f60624cbc12217.js +1 -0
  78. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-17b38b57adc62ed2.js → multiple-18b0b521255289a3.js} +1 -1
  79. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-136bcbd20ac59bf5.js +1 -0
  80. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-b3b4d0a98450ffd1.js +1 -0
  81. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-7469901adf64d0e2.js → add-vendors-64f83e9a2b777bf3.js} +1 -1
  82. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-e11ace4f273ebb47.js +1 -0
  83. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-fdbafb5a47a6a28c.js +1 -0
  84. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/new-fc4635c6eea7165f.js +1 -0
  85. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-35e9df60b21e21a6.js +1 -0
  86. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-a2713f5a7a2c45e5.js → [id]-bdc686761a0d2d60.js} +1 -1
  87. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-b67c3c8c25e7051b.js → new-8618ab5fa45cd074.js} +1 -1
  88. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-da37afbe5ec81339.js +1 -0
  89. fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-c57b209feef7c2da.js +1 -0
  90. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-97fea4ac45093cbd.js +1 -0
  91. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-a3233ad24a82465a.js → consent-24bef021ee71e36c.js} +1 -1
  92. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-6cbd79481199812d.js +1 -0
  93. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-46b9790da2fec05a.js +1 -0
  94. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-1f965b9c496071d1.js +1 -0
  95. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-e7833c1c606081a9.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-6563b9d6f77d0690.js → resources-bed368d048ea6883.js} +1 -1
  97. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-942d68a88b321067.js +1 -0
  98. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-00526324583139ab.js +1 -0
  99. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-8e6f4b1b5b89aff0.js → [monitorId]-f0ab51d0d5f995de.js} +1 -1
  100. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-a6a9bbfac5ca8d0b.js → action-center-2220c30c3863b5a5.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-1d7936f05d23097f.js +1 -0
  102. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-c575c057b35b958e.js → [resourceUrn]-68122dbf449a11b4.js} +1 -1
  103. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-c1d2018f3ab3e39c.js → detection-0ceaf3c555e84714.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/[resourceUrn]-22c27fe0f898ad2a.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery-8f2b102e19b0b8f2.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-9cd0c40bef77b120.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-ab9bc1a3640547db.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-17ec8385bb1fa6d4.js +1 -0
  109. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e14c1c07658f8a10.js +1 -0
  110. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-fc00dbeb18a7b731.js +1 -0
  111. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-295756e1fd640b59.js +1 -0
  112. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-a6e793e9a8ed00a9.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-7d314bb7238af067.js +1 -0
  114. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-b8eaa9b9d3832b30.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/pages/index-c9fa68dc0fa42c81.js +1 -0
  116. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-20489bceb7b068b8.js +1 -0
  117. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-21c9902e7b098b39.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/pages/login/{[provider]-cac9584cefa85a09.js → [provider]-c58beef131c3a82d.js} +1 -1
  119. fides/ui-build/static/admin/_next/static/chunks/pages/{login-e55849091751c65a.js → login-0cb0eb44bf2dd24c.js} +1 -1
  120. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-6b032de0a6c2c400.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-c0d6ae68ff7979c6.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-910372bec245ba5d.js → messaging-f263e6bacf0f2d19.js} +1 -1
  123. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-c685d19a131d6960.js +1 -0
  124. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-b96ee3fea3920fcf.js +1 -0
  125. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-1b0f9469cb65abfc.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-e0ca944878ef12e8.js → configure-4bad69cd42c9722c.js} +1 -1
  127. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-eebd2f4ead19cfd6.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-e780943ac4ce5bf1.js → [id]-b4c808a8a0287d11.js} +1 -1
  129. fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-5a701477b006a63b.js +1 -0
  130. fides/ui-build/static/admin/_next/static/chunks/pages/properties-9a1899dfe052023e.js +1 -0
  131. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-a3fa3ad77730a03b.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-bfe2495fb54933ee.js → about-d073be113e9ca7b0.js} +1 -1
  133. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4769f55b138073f7.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-744e7bbc200557e7.js +1 -0
  135. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-c5cd5fb578de9515.js +1 -0
  136. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-775f55b3f80cd452.js +1 -0
  137. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-39c7ae3602ac69b2.js +1 -0
  138. fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-45e33ba111f8f8b0.js +1 -0
  139. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-14def4ca3cc9cda5.js +1 -0
  140. fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-94975aeab348528e.js +1 -0
  141. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-21f26c0dc4d09e9f.js +1 -0
  142. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-c6396feeefca887b.js +1 -0
  143. fides/ui-build/static/admin/_next/static/chunks/pages/systems-c320df35d51dc537.js +1 -0
  144. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-181ea5b0ac975239.js +1 -0
  145. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/new-d6717378b42982d5.js +1 -0
  146. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-622e16a17a11c096.js +1 -0
  147. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-aa872b21bb835d34.js +1 -0
  148. fides/ui-build/static/admin/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  149. fides/ui-build/static/admin/_next/static/chunks/{webpack-c51aa6524c2716b8.js → webpack-4df2ba5ee2d40f0a.js} +1 -1
  150. fides/ui-build/static/admin/_next/static/css/15fb7d4837a1de34.css +1 -0
  151. fides/ui-build/static/admin/_next/static/css/bd5a72c010fa9c14.css +1 -0
  152. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  153. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  154. fides/ui-build/static/admin/add-systems.html +1 -1
  155. fides/ui-build/static/admin/ant-poc.html +1 -1
  156. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  157. fides/ui-build/static/admin/consent/configure.html +1 -1
  158. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  159. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  160. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  161. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  162. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  163. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  164. fides/ui-build/static/admin/consent/properties.html +1 -1
  165. fides/ui-build/static/admin/consent/reporting.html +1 -1
  166. fides/ui-build/static/admin/consent.html +1 -1
  167. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  168. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  169. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  170. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  171. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  172. fides/ui-build/static/admin/data-catalog.html +1 -1
  173. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  174. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  175. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  176. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  177. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  178. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  179. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  180. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  181. fides/ui-build/static/admin/datamap.html +1 -1
  182. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  183. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  184. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  185. fides/ui-build/static/admin/dataset/new.html +1 -1
  186. fides/ui-build/static/admin/dataset.html +1 -1
  187. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  188. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  189. fides/ui-build/static/admin/datastore-connection.html +1 -1
  190. fides/ui-build/static/admin/index.html +1 -1
  191. fides/ui-build/static/admin/integrations/[id].html +1 -1
  192. fides/ui-build/static/admin/integrations.html +1 -1
  193. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  194. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  195. fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
  196. fides/ui-build/static/admin/lib/fides.js +2 -2
  197. fides/ui-build/static/admin/login/[provider].html +1 -1
  198. fides/ui-build/static/admin/login.html +1 -1
  199. fides/ui-build/static/admin/messaging/[id].html +1 -1
  200. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  201. fides/ui-build/static/admin/messaging.html +1 -1
  202. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  203. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  204. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  205. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  206. fides/ui-build/static/admin/privacy-requests.html +1 -1
  207. fides/ui-build/static/admin/properties/[id].html +1 -1
  208. fides/ui-build/static/admin/properties/add-property.html +1 -1
  209. fides/ui-build/static/admin/properties.html +1 -1
  210. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  211. fides/ui-build/static/admin/settings/about.html +1 -1
  212. fides/ui-build/static/admin/settings/consent.html +1 -1
  213. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  214. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  215. fides/ui-build/static/admin/settings/domains.html +1 -1
  216. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  217. fides/ui-build/static/admin/settings/locations.html +1 -1
  218. fides/ui-build/static/admin/settings/organization.html +1 -1
  219. fides/ui-build/static/admin/settings/regulations.html +1 -1
  220. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  221. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  222. fides/ui-build/static/admin/systems.html +1 -1
  223. fides/ui-build/static/admin/taxonomy.html +1 -1
  224. fides/ui-build/static/admin/user-management/new.html +1 -1
  225. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  226. fides/ui-build/static/admin/user-management.html +1 -1
  227. fides/ui-build/static/admin/_next/static/_A05_bEFykI6pEGrDmq4n/_buildManifest.js +0 -1
  228. fides/ui-build/static/admin/_next/static/chunks/1241-5f9673b3a7fd9469.js +0 -1
  229. fides/ui-build/static/admin/_next/static/chunks/1288-84c330c47e031622.js +0 -1
  230. fides/ui-build/static/admin/_next/static/chunks/1827-db04b6d4756e3a25.js +0 -1
  231. fides/ui-build/static/admin/_next/static/chunks/2017-99f489b3e0279798.js +0 -1
  232. fides/ui-build/static/admin/_next/static/chunks/2025-b6a78063b47b0607.js +0 -1
  233. fides/ui-build/static/admin/_next/static/chunks/2163-9631ae84deb6560b.js +0 -1
  234. fides/ui-build/static/admin/_next/static/chunks/2556-1d0c02e14299bf23.js +0 -1
  235. fides/ui-build/static/admin/_next/static/chunks/2973-2d9d761cc3aeda1d.js +0 -1
  236. fides/ui-build/static/admin/_next/static/chunks/3163-5fe20dd3d43cef46.js +0 -1
  237. fides/ui-build/static/admin/_next/static/chunks/3309-db63287718ef9694.js +0 -1
  238. fides/ui-build/static/admin/_next/static/chunks/3528-30fc61a98d99a66b.js +0 -1
  239. fides/ui-build/static/admin/_next/static/chunks/3990-146beccde8afea98.js +0 -1
  240. fides/ui-build/static/admin/_next/static/chunks/4321-1bf69f1e83baf995.js +0 -1
  241. fides/ui-build/static/admin/_next/static/chunks/4981-8d81ec3b6031f0f9.js +0 -1
  242. fides/ui-build/static/admin/_next/static/chunks/53-eb32dc5d8571cb7b.js +0 -1
  243. fides/ui-build/static/admin/_next/static/chunks/6182-1949666cc9179015.js +0 -1
  244. fides/ui-build/static/admin/_next/static/chunks/637-3f7f3e47e69e75fe.js +0 -1
  245. fides/ui-build/static/admin/_next/static/chunks/6546-aa6826fdd0356505.js +0 -1
  246. fides/ui-build/static/admin/_next/static/chunks/7080-051d67719049e77a.js +0 -1
  247. fides/ui-build/static/admin/_next/static/chunks/7269-aaa4ad906c8bf8f7.js +0 -1
  248. fides/ui-build/static/admin/_next/static/chunks/7528.dff66491009d309b.js +0 -1
  249. fides/ui-build/static/admin/_next/static/chunks/7636-b2dadd026c1fe754.js +0 -1
  250. fides/ui-build/static/admin/_next/static/chunks/7871-0a9b00bc8760d091.js +0 -1
  251. fides/ui-build/static/admin/_next/static/chunks/7996-23e83b8ca562a06c.js +0 -1
  252. fides/ui-build/static/admin/_next/static/chunks/8001-3fdc7b543233f717.js +0 -1
  253. fides/ui-build/static/admin/_next/static/chunks/8540-a7c91bdbe1bb48fb.js +0 -1
  254. fides/ui-build/static/admin/_next/static/chunks/8986-c24a626d90c8be1d.js +0 -1
  255. fides/ui-build/static/admin/_next/static/chunks/9659-478f2eaaf48a8943.js +0 -1
  256. fides/ui-build/static/admin/_next/static/chunks/9822-88b7435d5868e1ef.js +0 -1
  257. fides/ui-build/static/admin/_next/static/chunks/main-6880a3888740c515.js +0 -1
  258. fides/ui-build/static/admin/_next/static/chunks/main-app-de538a24cbd2733c.js +0 -1
  259. fides/ui-build/static/admin/_next/static/chunks/pages/404-5c601b7b9c17b770.js +0 -1
  260. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-2bfb79fc5d16caa4.js +0 -1
  261. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-4e54aefa8b7f554f.js +0 -1
  262. fides/ui-build/static/admin/_next/static/chunks/pages/ant-poc-6048ddeee842c93b.js +0 -1
  263. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-833ab451ff99ba12.js +0 -1
  264. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-b796be4c70e08aa0.js +0 -1
  265. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/new-35bc7b42751bb78a.js +0 -1
  266. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-089a73cd8a34dbec.js +0 -1
  267. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-cfe92d1c2e95d917.js +0 -1
  268. fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-059c82d3b8ccdaf6.js +0 -1
  269. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-54c762b6fe38c20e.js +0 -1
  270. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-e1bd1bdd2c310ecc.js +0 -1
  271. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-c9032d9e0c1dfe1a.js +0 -1
  272. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-62087de19ac179b3.js +0 -1
  273. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-c7614c7742e41151.js +0 -1
  274. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-9b33b5875445751e.js +0 -1
  275. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-c299a8bd5e1c1def.js +0 -1
  276. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-a9a864cb621d65c6.js +0 -1
  277. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/[resourceUrn]-9ae2adfc68b95d78.js +0 -1
  278. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery-a617ddfa3dfdab23.js +0 -1
  279. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-6a0e22b9ce8f5332.js +0 -1
  280. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-3e506baace396803.js +0 -1
  281. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-6bb9fbe3d41c3127.js +0 -1
  282. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-a358b344095573a9.js +0 -1
  283. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-b328f9aab79dd734.js +0 -1
  284. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-3c0b2ccfa442b79d.js +0 -1
  285. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-102772521ee4a69a.js +0 -1
  286. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-754926e02c1e0ab0.js +0 -1
  287. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-1e81b412b5837755.js +0 -1
  288. fides/ui-build/static/admin/_next/static/chunks/pages/index-aa7b15f51ccbdf8b.js +0 -1
  289. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-2436e6c6406e5f4f.js +0 -1
  290. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-b6c0f9648f6fa298.js +0 -1
  291. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-d1e96f12c1a12d4d.js +0 -1
  292. fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-3ff3a7c3c76a208e.js +0 -1
  293. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-7b13b42d1b23f93b.js +0 -1
  294. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-6971c7e98c00390a.js +0 -1
  295. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-71386e3e260a9220.js +0 -1
  296. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-be0c167fa1565e38.js +0 -1
  297. fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-fc660bc2a3641cd3.js +0 -1
  298. fides/ui-build/static/admin/_next/static/chunks/pages/properties-1a35fd97f2510989.js +0 -1
  299. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-b9fe3f3bb16a14eb.js +0 -1
  300. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-7eec113882c35c3f.js +0 -1
  301. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-aaf29e3dd2c7e955.js +0 -1
  302. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-8b7e71fe1307c5a3.js +0 -1
  303. fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-0b9e78e671540cef.js +0 -1
  304. fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-eb04e1584d98edb3.js +0 -1
  305. fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-195f7ddfc3768ece.js +0 -1
  306. fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-22cb683d203ea7fb.js +0 -1
  307. fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-3eede241c9df1476.js +0 -1
  308. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-54d7c6fcc4c79635.js +0 -1
  309. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-8271db0c80e6e154.js +0 -1
  310. fides/ui-build/static/admin/_next/static/chunks/pages/systems-7d81df09a0b4eb23.js +0 -1
  311. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-7abe76200e4519d8.js +0 -1
  312. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/new-a59a02634d672703.js +0 -1
  313. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-269b17114579510b.js +0 -1
  314. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-f7e75911c071a20e.js +0 -1
  315. fides/ui-build/static/admin/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -1
  316. fides/ui-build/static/admin/_next/static/css/918de8c66b18ce6b.css +0 -1
  317. {ethyca_fides-2.56.2rc3.dist-info → ethyca_fides-2.56.3b1.dist-info}/LICENSE +0 -0
  318. {ethyca_fides-2.56.2rc3.dist-info → ethyca_fides-2.56.3b1.dist-info}/WHEEL +0 -0
  319. {ethyca_fides-2.56.2rc3.dist-info → ethyca_fides-2.56.3b1.dist-info}/entry_points.txt +0 -0
  320. {ethyca_fides-2.56.2rc3.dist-info → ethyca_fides-2.56.3b1.dist-info}/top_level.txt +0 -0
  321. /fides/ui-build/static/admin/_next/static/{_A05_bEFykI6pEGrDmq4n → LOp6RUpN795nyhXOv95wz}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from datetime import datetime, timezone
3
+ from datetime import datetime
4
4
  from enum import Enum
5
5
  from typing import Any, Dict, Iterable, List, Optional, Type
6
6
 
@@ -388,7 +388,9 @@ class MonitorExecution(Base):
388
388
  )
389
389
  status = Column(String, nullable=True)
390
390
  started = Column(
391
- DateTime(timezone=True), nullable=True, default=datetime.now(timezone.utc)
391
+ DateTime(timezone=True),
392
+ nullable=True,
393
+ server_default=func.now(),
392
394
  )
393
395
  completed = Column(DateTime(timezone=True), nullable=True)
394
396
  classification_instances = Column(
@@ -398,6 +400,13 @@ class MonitorExecution(Base):
398
400
  nullable=False,
399
401
  default=list,
400
402
  )
403
+ # stores additional information from monitor execution failures as an array of strings,
404
+ # e.g. error messages, stack traces, etc.
405
+ messages = Column(
406
+ ARRAY(String),
407
+ nullable=False,
408
+ default=list,
409
+ )
401
410
  created_at = Column(DateTime(timezone=True), server_default=func.now())
402
411
  updated_at = Column(
403
412
  DateTime(timezone=True),
@@ -1278,6 +1278,28 @@ class PrivacyRequest(
1278
1278
  },
1279
1279
  )
1280
1280
 
1281
+ def add_skipped_execution_log(
1282
+ self,
1283
+ db: Session,
1284
+ connection_key: Optional[str],
1285
+ dataset_name: Optional[str],
1286
+ collection_name: Optional[str],
1287
+ message: str,
1288
+ action_type: ActionType,
1289
+ ) -> ExecutionLog:
1290
+ return ExecutionLog.create(
1291
+ db=db,
1292
+ data={
1293
+ "privacy_request_id": self.id,
1294
+ "connection_key": connection_key,
1295
+ "dataset_name": dataset_name,
1296
+ "collection_name": collection_name,
1297
+ "status": ExecutionLogStatus.skipped,
1298
+ "message": message,
1299
+ "action_type": action_type,
1300
+ },
1301
+ )
1302
+
1281
1303
  def add_error_execution_log(
1282
1304
  self,
1283
1305
  db: Session,
@@ -1861,6 +1883,7 @@ class TraversalDetails(FidesSchema):
1861
1883
  incoming_edges: List[Tuple[str, str]]
1862
1884
  outgoing_edges: List[Tuple[str, str]]
1863
1885
  input_keys: List[str]
1886
+ skipped_nodes: Optional[List[Tuple[str, str]]] = None
1864
1887
 
1865
1888
  # TODO: remove this method once we support custom request fields in DSR graph.
1866
1889
  @classmethod
@@ -1868,15 +1891,15 @@ class TraversalDetails(FidesSchema):
1868
1891
  """
1869
1892
  Creates an "empty" TraversalDetails object that only has the dataset connection key set.
1870
1893
  This is a bit of a hacky workaround needed to implement the Dynamic Erasure Emails feature,
1871
- and should be needed only until we support custom request fields as entry points to the DSR graph.
1872
- This is needed because custom request field nodes aren't currently reachable, so they don't have
1873
- a real TraversalNode associated to them.
1894
+ but we should no longer need it once the custom_request_fields are included in our graph
1895
+ traversal
1874
1896
  """
1875
1897
  return cls(
1876
1898
  dataset_connection_key=connection_key,
1877
1899
  incoming_edges=[],
1878
1900
  outgoing_edges=[],
1879
1901
  input_keys=[],
1902
+ skipped_nodes=[],
1880
1903
  )
1881
1904
 
1882
1905
 
@@ -451,7 +451,7 @@ def run_access_request(
451
451
  )
452
452
  else:
453
453
  try:
454
- traversal: Traversal = Traversal(graph, identity, policy)
454
+ traversal: Traversal = Traversal(graph, identity, policy=policy)
455
455
 
456
456
  # Traversal.traverse populates traversal_nodes in place, adding parents and children to each traversal_node.
457
457
  traversal_nodes: Dict[CollectionAddress, TraversalNode] = {}
@@ -485,14 +485,32 @@ def run_access_request(
485
485
  connection_configs,
486
486
  )
487
487
  )
488
- privacy_request.add_success_execution_log(
489
- session,
490
- connection_key=None,
491
- dataset_name="Dataset traversal",
492
- collection_name=None,
493
- message=f"Traversal successful for privacy request: {privacy_request.id}",
494
- action_type=ActionType.access,
495
- )
488
+
489
+ # Add execution logs for skipped nodes
490
+ if traversal.skipped_nodes:
491
+ logger.warning(
492
+ "Some nodes were skipped, the identities provided were not sufficient to reach them"
493
+ )
494
+ for node_address, skip_message in traversal.skipped_nodes.items():
495
+ logger.debug(skip_message)
496
+ privacy_request.add_skipped_execution_log(
497
+ session,
498
+ connection_key=None,
499
+ dataset_name="Dataset traversal",
500
+ collection_name=node_address.replace(":", "."),
501
+ message=skip_message,
502
+ action_type=ActionType.access,
503
+ )
504
+ # Or log success if all collections are reachable
505
+ else:
506
+ privacy_request.add_success_execution_log(
507
+ session,
508
+ connection_key=None,
509
+ dataset_name="Dataset traversal",
510
+ collection_name=None,
511
+ message=f"Traversal successful for privacy request: {privacy_request.id}",
512
+ action_type=ActionType.access,
513
+ )
496
514
  except TraversalError as err:
497
515
  log_traversal_error_and_update_privacy_request(
498
516
  privacy_request, session, err
@@ -115,15 +115,33 @@ def run_access_request_deprecated(
115
115
  ) -> Dict[str, List[Row]]:
116
116
  """Deprecated: Run the access request sequentially in-memory using Dask"""
117
117
  try:
118
- traversal: Traversal = Traversal(graph, identity, policy)
119
- privacy_request.add_success_execution_log(
120
- session,
121
- connection_key=None,
122
- dataset_name="Dataset traversal",
123
- collection_name=None,
124
- message=f"Traversal successful for privacy request: {privacy_request.id}",
125
- action_type=ActionType.access,
126
- )
118
+ traversal: Traversal = Traversal(graph, identity, policy=policy)
119
+ # Add execution logs for skipped nodes
120
+ if traversal.skipped_nodes:
121
+ logger.warning(
122
+ "Some nodes were skipped, the identities provided were not sufficient to reach them"
123
+ )
124
+
125
+ for node_address, skip_message in traversal.skipped_nodes.items():
126
+ logger.debug(skip_message)
127
+ privacy_request.add_skipped_execution_log(
128
+ session,
129
+ connection_key=None,
130
+ dataset_name="Dataset traversal",
131
+ collection_name=node_address.replace(":", "."),
132
+ message=skip_message,
133
+ action_type=ActionType.access,
134
+ )
135
+ # Or log success if all collections are reachable
136
+ else:
137
+ privacy_request.add_success_execution_log(
138
+ session,
139
+ connection_key=None,
140
+ dataset_name="Dataset traversal",
141
+ collection_name=None,
142
+ message=f"Traversal successful for privacy request: {privacy_request.id}",
143
+ action_type=ActionType.access,
144
+ )
127
145
 
128
146
  except TraversalError as err:
129
147
  log_traversal_error_and_update_privacy_request(privacy_request, session, err)
@@ -205,7 +223,7 @@ def run_erasure_request_deprecated( # pylint: disable = too-many-arguments
205
223
  session: Session,
206
224
  ) -> Dict[str, int]:
207
225
  """Deprecated: Run an erasure request sequentially in-memory using Dask"""
208
- traversal: Traversal = Traversal(graph, identity, policy)
226
+ traversal: Traversal = Traversal(graph, identity, policy=policy)
209
227
  with TaskResources(
210
228
  privacy_request, policy, connection_configs, EMPTY_REQUEST_TASK, session
211
229
  ) as resources:
@@ -36,7 +36,8 @@ from fides.api.models.connectionconfig import (
36
36
  ConnectionType,
37
37
  )
38
38
  from fides.api.models.datasetconfig import DatasetConfig
39
- from fides.api.models.policy import Policy
39
+ from fides.api.models.policy import Policy, Rule
40
+ from fides.api.models.privacy_preference import PrivacyPreferenceHistory
40
41
  from fides.api.models.privacy_request import ExecutionLog, PrivacyRequest, RequestTask
41
42
  from fides.api.schemas.policy import ActionType, CurrentStep
42
43
  from fides.api.schemas.privacy_request import ExecutionLogStatus
@@ -54,7 +55,9 @@ from fides.api.util.collection_util import (
54
55
  make_immutable,
55
56
  make_mutable,
56
57
  )
57
- from fides.api.util.consent_util import add_errored_system_status_for_consent_reporting
58
+ from fides.api.util.consent_util import (
59
+ add_errored_system_status_for_consent_reporting_on_preferences,
60
+ )
58
61
  from fides.api.util.logger import Pii
59
62
  from fides.api.util.logger_context_utils import LoggerContextKeys
60
63
  from fides.api.util.saas_util import FIDESOPS_GROUPED_INPUTS
@@ -138,13 +141,7 @@ def retry(
138
141
  self.resources.request.id,
139
142
  )
140
143
  self.log_skipped(action_type, exc)
141
- for pref in self.resources.request.privacy_preferences:
142
- # For consent reporting, also caching the given system as skipped for all historical privacy preferences.
143
- pref.cache_system_status(
144
- self.resources.session,
145
- self.connector.configuration.system_key,
146
- ExecutionLogStatus.skipped,
147
- )
144
+ self.cache_system_status_for_preferences()
148
145
  return default_return
149
146
  except BaseException as ex: # pylint: disable=W0703
150
147
  traceback.print_exc()
@@ -164,11 +161,7 @@ def retry(
164
161
  action_type.value
165
162
  ] # Convert ActionType into a CurrentStep, no longer coerced with Pydantic V2
166
163
  )
167
- add_errored_system_status_for_consent_reporting(
168
- self.resources.session,
169
- self.resources.request,
170
- self.connector.configuration,
171
- )
164
+ self.add_error_status_for_consent_reporting()
172
165
  if not self.request_task.id:
173
166
  # TODO Remove when we stop support for DSR 2.0
174
167
  # Re-raise to stop privacy request execution on failure for
@@ -730,6 +723,48 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
730
723
  self.log_end(ActionType.consent)
731
724
  return output
732
725
 
726
+ def cache_system_status_for_preferences(self) -> None:
727
+ """
728
+ Calls cache_system_status for all historical privacy preferences for the given request.
729
+
730
+ Purposely uses a new session.
731
+ """
732
+
733
+ privacy_request_id = self.resources.request.id
734
+
735
+ with get_db() as db:
736
+
737
+ privacy_preferences = db.query(PrivacyPreferenceHistory).filter(
738
+ PrivacyPreferenceHistory.privacy_request_id == privacy_request_id
739
+ )
740
+ for pref in privacy_preferences:
741
+ # For consent reporting, also caching the given system as skipped for all historical privacy preferences.
742
+ pref.cache_system_status(
743
+ db,
744
+ self.connector.configuration.system_key, # type: ignore[arg-type]
745
+ ExecutionLogStatus.skipped,
746
+ )
747
+
748
+ def add_error_status_for_consent_reporting(self) -> None:
749
+ """
750
+ Adds the errored system status for all historical privacy preferences for the given request that
751
+ are deemed relevant for the connector failure (i.e if they had a "pending" log added to them).
752
+
753
+ Purposely uses a new session.
754
+ """
755
+ privacy_request_id = self.resources.request.id
756
+ with get_db() as db:
757
+ privacy_preferences = (
758
+ db.query(PrivacyPreferenceHistory)
759
+ .filter(
760
+ PrivacyPreferenceHistory.privacy_request_id == privacy_request_id
761
+ )
762
+ .all()
763
+ )
764
+ add_errored_system_status_for_consent_reporting_on_preferences(
765
+ db, privacy_preferences, self.connector.configuration
766
+ )
767
+
733
768
 
734
769
  def collect_queries(
735
770
  traversal: Traversal, resources: TaskResources
@@ -816,39 +851,45 @@ def build_affected_field_logs(
816
851
  }]
817
852
  """
818
853
 
819
- targeted_field_paths: Dict[FieldAddress, str] = {}
854
+ policy_id = policy.id
820
855
 
821
- for rule in policy.rules: # type: ignore[attr-defined]
822
- if rule.action_type != action_type:
823
- continue
824
- rule_categories: List[str] = rule.get_target_data_categories()
825
- if not rule_categories:
826
- continue
856
+ with get_db() as db:
827
857
 
828
- collection_categories: Dict[
829
- str, List[FieldPath]
830
- ] = node.collection.field_paths_by_category # type: ignore
831
- for rule_cat in rule_categories:
832
- for collection_cat, field_paths in collection_categories.items():
833
- if collection_cat.startswith(rule_cat):
834
- targeted_field_paths.update(
835
- {
836
- node.address.field_address(field_path): collection_cat
837
- for field_path in field_paths
838
- }
839
- )
858
+ rules = db.query(Rule).filter(Rule.policy_id == policy_id)
840
859
 
841
- ret: List[Dict[str, Any]] = []
842
- for field_address, data_categories in targeted_field_paths.items():
843
- ret.append(
844
- {
845
- "path": field_address.value,
846
- "field_name": field_address.field_path.string_path,
847
- "data_categories": [data_categories],
848
- }
849
- )
860
+ targeted_field_paths: Dict[FieldAddress, str] = {}
861
+
862
+ for rule in rules: # type: ignore[attr-defined]
863
+ if rule.action_type != action_type:
864
+ continue
865
+ rule_categories: List[str] = rule.get_target_data_categories()
866
+ if not rule_categories:
867
+ continue
868
+
869
+ collection_categories: Dict[
870
+ str, List[FieldPath]
871
+ ] = node.collection.field_paths_by_category # type: ignore
872
+ for rule_cat in rule_categories:
873
+ for collection_cat, field_paths in collection_categories.items():
874
+ if collection_cat.startswith(rule_cat):
875
+ targeted_field_paths.update(
876
+ {
877
+ node.address.field_address(field_path): collection_cat
878
+ for field_path in field_paths
879
+ }
880
+ )
881
+
882
+ ret: List[Dict[str, Any]] = []
883
+ for field_address, data_categories in targeted_field_paths.items():
884
+ ret.append(
885
+ {
886
+ "path": field_address.value,
887
+ "field_name": field_address.field_path.string_path,
888
+ "data_categories": [data_categories],
889
+ }
890
+ )
850
891
 
851
- return ret
892
+ return ret
852
893
 
853
894
 
854
895
  def build_consent_dataset_graph(datasets: List[DatasetConfig]) -> DatasetGraph:
@@ -214,15 +214,30 @@ def add_errored_system_status_for_consent_reporting(
214
214
 
215
215
  Deeming them relevant if they already had a "pending" log added to them.
216
216
  """
217
- for pref in privacy_request.privacy_preferences: # type: ignore[attr-defined]
217
+ add_errored_system_status_for_consent_reporting_on_preferences(db, privacy_request.privacy_preferences, connection_config) # type: ignore[attr-defined]
218
+
219
+
220
+ def add_errored_system_status_for_consent_reporting_on_preferences(
221
+ db: Session,
222
+ privacy_preferences: List[PrivacyPreferenceHistory],
223
+ connection_config: ConnectionConfig,
224
+ ) -> None:
225
+ """
226
+ Cache an errored system status for consent reporting on just the subset
227
+ of preferences that were deemed relevant for the connector on failure,
228
+ from the provided list of preferences.
229
+
230
+ Deeming them relevant if they already had a "pending" log added to them.
231
+ """
232
+ for preference in privacy_preferences:
218
233
  if (
219
- pref.affected_system_status
220
- and pref.affected_system_status.get(connection_config.system_key)
234
+ preference.affected_system_status
235
+ and preference.affected_system_status.get(connection_config.system_key)
221
236
  == ExecutionLogStatus.pending.value
222
237
  ):
223
- pref.cache_system_status(
238
+ preference.cache_system_status(
224
239
  db,
225
- connection_config.system_key,
240
+ connection_config.system_key, # type: ignore[arg-type]
226
241
  ExecutionLogStatus.error,
227
242
  )
228
243
 
fides/api/util/logger.py CHANGED
@@ -8,7 +8,8 @@ from __future__ import annotations
8
8
 
9
9
  import logging
10
10
  import sys
11
- from typing import TYPE_CHECKING, Any, Dict, List, Optional
11
+ from contextlib import contextmanager
12
+ from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional
12
13
 
13
14
  from loguru import logger
14
15
  from loguru._handler import Message
@@ -213,3 +214,20 @@ def obfuscate_message(message: str) -> str:
213
214
  def format_and_obfuscate(record) -> str: # type: ignore[no-untyped-def]
214
215
  record["extra"]["obfuscated_message"] = obfuscate_message(record["message"])
215
216
  return "[{level}] {extra[obfuscated_message]}\n{exception}"
217
+
218
+
219
+ # pylint: disable=protected-access
220
+ @contextmanager
221
+ def suppress_logging() -> Generator:
222
+ """
223
+ Temporarily suppress all logging by setting the log level to CRITICAL.
224
+ """
225
+
226
+ current_level = logger._core.min_level # type: ignore[attr-defined]
227
+ logger._core.min_level = logger.level("CRITICAL").no # type: ignore[attr-defined]
228
+
229
+ try:
230
+ yield
231
+ finally:
232
+ # Restore original configuration
233
+ logger._core.min_level = current_level # type: ignore[attr-defined]
@@ -21,7 +21,7 @@ class ExecutionSettings(FidesSettings):
21
21
  )
22
22
  require_manual_request_approval: bool = Field(
23
23
  default=False,
24
- description="Whether privacy requests require explicit approval to execute.",
24
+ description="Whether access and erasure privacy requests require explicit approval to execute. Consent privacy requests are always auto-approved.",
25
25
  )
26
26
  subject_identity_verification_required: bool = Field(
27
27
  default=False,
@@ -3,7 +3,6 @@
3
3
  # pylint: disable=C0115,C0116, E0213
4
4
  from typing import List, Optional, Pattern, Tuple, Union
5
5
 
6
- import validators
7
6
  from pydantic import Field, SerializeAsAny, ValidationInfo, field_validator
8
7
  from pydantic_settings import SettingsConfigDict
9
8
  from slowapi.wrappers import parse_many # type: ignore
@@ -176,22 +175,17 @@ class SecuritySettings(FidesSettings):
176
175
  @field_validator("cors_origins", mode="before")
177
176
  @classmethod
178
177
  def assemble_cors_origins(cls, v: Union[str, List[str]]) -> Union[List[str], str]:
179
- """Return a list of valid origins for CORS requests"""
180
-
181
- def validate(values: List[str]) -> None:
182
- for value in values:
183
- if value != "*":
184
- if not validators.url(value):
185
- raise ValueError(f"{value} is not a valid url")
178
+ """
179
+ Return a list of origins for CORS requests.
186
180
 
181
+ This validator allows us to parse a comma-separated string of origins
182
+ into a list of origins, since the `cors_origins` field can be set
183
+ as a comma-separated string or a list of strings.
184
+ """
187
185
  if isinstance(v, str) and not v.startswith("["):
188
186
  values = [i.strip() for i in v.split(",")]
189
- validate(values)
190
-
191
187
  return values
192
- if isinstance(v, (list, str)):
193
- validate(v) # type: ignore
194
-
188
+ if isinstance(v, list):
195
189
  return v
196
190
  raise ValueError(v)
197
191
 
@@ -6,12 +6,12 @@ connection:
6
6
  dataset: postgres_example_test_dataset
7
7
  system_key: cookie_house_postgresql_database
8
8
  secrets:
9
- host: $FIDES_DEPLOY__CONNECTORS__POSTGRES__HOST
10
- port: $FIDES_DEPLOY__CONNECTORS__POSTGRES__PORT
11
- dbname: $FIDES_DEPLOY__CONNECTORS__POSTGRES__DBNAME
12
- username: $FIDES_DEPLOY__CONNECTORS__POSTGRES__USERNAME
13
- password: $FIDES_DEPLOY__CONNECTORS__POSTGRES__PASSWORD
14
- ssh_required: $FIDES_DEPLOY__CONNECTORS__POSTGRES__SSH_REQUIRED
9
+ host: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__HOST"
10
+ port: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__PORT"
11
+ dbname: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__DBNAME"
12
+ username: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__USERNAME"
13
+ password: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__PASSWORD"
14
+ ssh_required: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__SSH_REQUIRED"
15
15
  - key: cookie_house_loyalty_database
16
16
  name: Postgres Connector (Loyalty)
17
17
  connection_type: postgres
@@ -19,11 +19,11 @@ connection:
19
19
  dataset: postgres_example_test_extended_dataset
20
20
  system_key: cookie_house_loyalty_database
21
21
  secrets:
22
- host: $FIDES_DEPLOY__CONNECTORS__POSTGRES_LOYALTY__HOST
23
- port: $FIDES_DEPLOY__CONNECTORS__POSTGRES__PORT
24
- dbname: $FIDES_DEPLOY__CONNECTORS__POSTGRES__DBNAME
25
- username: $FIDES_DEPLOY__CONNECTORS__POSTGRES__USERNAME
26
- password: $FIDES_DEPLOY__CONNECTORS__POSTGRES__PASSWORD
22
+ host: "$FIDES_DEPLOY__CONNECTORS__POSTGRES_LOYALTY__HOST"
23
+ port: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__PORT"
24
+ dbname: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__DBNAME"
25
+ username: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__USERNAME"
26
+ password: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__PASSWORD"
27
27
  disabled: True
28
28
  - key: cookie_house_customer_database_mongodb
29
29
  name: MongoDB Connector
@@ -32,43 +32,43 @@ connection:
32
32
  dataset: mongo_test
33
33
  system_key: cookie_house_customer_database
34
34
  secrets:
35
- host: $FIDES_DEPLOY__CONNECTORS__MONGO_HOST
36
- port: $FIDES_DEPLOY__CONNECTORS__MONGO_PORT
37
- defaultauthdb: $FIDES_DEPLOY__CONNECTORS__MONGO_DEFAULTAUTHDB
38
- username: $FIDES_DEPLOY__CONNECTORS__MONGO_USERNAME
39
- password: $FIDES_DEPLOY__CONNECTORS__MONGO_PASSWORD
35
+ host: "$FIDES_DEPLOY__CONNECTORS__MONGO_HOST"
36
+ port: "$FIDES_DEPLOY__CONNECTORS__MONGO_PORT"
37
+ defaultauthdb: "$FIDES_DEPLOY__CONNECTORS__MONGO_DEFAULTAUTHDB"
38
+ username: "$FIDES_DEPLOY__CONNECTORS__MONGO_USERNAME"
39
+ password: "$FIDES_DEPLOY__CONNECTORS__MONGO_PASSWORD"
40
40
  - key: mailchimp_connector
41
41
  name: Mailchimp Connector
42
42
  connection_type: saas
43
43
  saas_connector_type: mailchimp
44
44
  access: write
45
45
  secrets:
46
- domain: $FIDES_DEPLOY__CONNECTORS__MAILCHIMP__DOMAIN
47
- username: $FIDES_DEPLOY__CONNECTORS__MAILCHIMP__USERNAME
48
- api_key: $FIDES_DEPLOY__CONNECTORS__MAILCHIMP__API_KEY
46
+ domain: "$FIDES_DEPLOY__CONNECTORS__MAILCHIMP__DOMAIN"
47
+ username: "$FIDES_DEPLOY__CONNECTORS__MAILCHIMP__USERNAME"
48
+ api_key: "$FIDES_DEPLOY__CONNECTORS__MAILCHIMP__API_KEY"
49
49
  - key: stripe_connector
50
50
  name: Stripe Connector
51
51
  connection_type: saas
52
52
  saas_connector_type: stripe
53
53
  access: write
54
54
  secrets:
55
- domain: $FIDES_DEPLOY__CONNECTORS__STRIPE__DOMAIN
56
- api_key: $FIDES_DEPLOY__CONNECTORS__STRIPE__API_KEY
55
+ domain: "$FIDES_DEPLOY__CONNECTORS__STRIPE__DOMAIN"
56
+ api_key: "$FIDES_DEPLOY__CONNECTORS__STRIPE__API_KEY"
57
57
  - key: hubspot_connector
58
58
  name: Hubspot Connector
59
59
  connection_type: saas
60
60
  saas_connector_type: hubspot
61
61
  access: write
62
62
  secrets:
63
- domain: $FIDES_DEPLOY__CONNECTORS__HUBSPOT__DOMAIN
64
- private_app_token: $FIDES_DEPLOY__CONNECTORS__HUBSPOT__PRIVATE_APP_TOKEN
63
+ domain: "$FIDES_DEPLOY__CONNECTORS__HUBSPOT__DOMAIN"
64
+ private_app_token: "$FIDES_DEPLOY__CONNECTORS__HUBSPOT__PRIVATE_APP_TOKEN"
65
65
  - key: mailchimp_transactional_connector
66
66
  name: Mailchimp Transactional Connector
67
67
  connection_type: saas
68
68
  saas_connector_type: mailchimp_transactional
69
69
  access: write
70
70
  secrets:
71
- api_key: $FIDES_DEPLOY__CONNECTORS__MAILCHIMP_TRANSACTIONAL_API_KEY
71
+ api_key: "$FIDES_DEPLOY__CONNECTORS__MAILCHIMP_TRANSACTIONAL_API_KEY"
72
72
  - key: cookie_house_custom_request_fields_database
73
73
  name: Postgres Connector (Custom Request Fields)
74
74
  connection_type: postgres
@@ -76,8 +76,8 @@ connection:
76
76
  dataset: postgres_example_custom_request_field_dataset
77
77
  system_key: cookie_house_custom_request_fields_database
78
78
  secrets:
79
- host: $FIDES_DEPLOY__CONNECTORS__POSTGRES__HOST
80
- port: $FIDES_DEPLOY__CONNECTORS__POSTGRES__PORT
81
- dbname: $FIDES_DEPLOY__CONNECTORS__POSTGRES__DBNAME
82
- username: $FIDES_DEPLOY__CONNECTORS__POSTGRES__USERNAME
83
- password: $FIDES_DEPLOY__CONNECTORS__POSTGRES__PASSWORD
79
+ host: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__HOST"
80
+ port: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__PORT"
81
+ dbname: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__DBNAME"
82
+ username: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__USERNAME"
83
+ password: "$FIDES_DEPLOY__CONNECTORS__POSTGRES__PASSWORD"
@@ -14,6 +14,7 @@ from fides.api.common_exceptions import (
14
14
  )
15
15
  from fides.api.graph.config import GraphDataset
16
16
  from fides.api.graph.graph import DatasetGraph
17
+ from fides.api.graph.node_filters import NodeFilter
17
18
  from fides.api.graph.traversal import Traversal, TraversalNode
18
19
  from fides.api.models.connectionconfig import ConnectionConfig
19
20
  from fides.api.models.datasetconfig import DatasetConfig
@@ -35,13 +36,14 @@ from fides.service.dataset.dataset_validator import DatasetValidator
35
36
  from fides.service.dataset.validation_steps.traversal import TraversalValidationStep
36
37
 
37
38
 
38
- class DatasetFilter:
39
+ class DatasetFilter(NodeFilter):
39
40
  """
40
41
  Filter that excludes nodes that are not part of the specified dataset.
41
42
  This ensures that unreachable nodes from other datasets are not treated as errors.
42
43
  """
43
44
 
44
45
  def __init__(self, dataset_name: str):
46
+ super().__init__()
45
47
  self.dataset_name = dataset_name
46
48
 
47
49
  def exclude_node(self, node: TraversalNode) -> bool:
@@ -198,7 +200,7 @@ class DatasetConfigService:
198
200
  Traversal(
199
201
  dataset_graph,
200
202
  identity_seed,
201
- policy,
203
+ policy=policy,
202
204
  node_filters=[DatasetFilter(dataset_config.fides_key)],
203
205
  )
204
206
  except UnreachableNodesError as exc: