ethyca-fides 2.73.2b0__py2.py3-none-any.whl → 2.76.0rc2__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 (453) hide show
  1. {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/METADATA +2 -1
  2. {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/RECORD +349 -336
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/303287c70600_migrate_resource_type_from_enum_to_.py +99 -0
  5. fides/api/alembic/migrations/versions/795f46f656c0_migrate_field_type_from_enum_to_string.py +61 -0
  6. fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
  7. fides/api/alembic/migrations/versions/xx_2025_11_05_0200_f1a2b3c4d5e6_create_staged_resource_error_table.py +82 -0
  8. fides/api/alembic/migrations/versions/xx_2025_11_07_1709_56fe6fad2d89_add_notice_display_order.py +47 -0
  9. fides/api/alembic/migrations/versions/xx_2025_11_10_1200_a1b2c3d4e5f6_add_test_datastore_to_connectiontype.py +53 -0
  10. fides/api/alembic/migrations/versions/xx_2025_11_11_1317_7d82c8fc4c34_store_saas_template_datasets.py +68 -0
  11. fides/api/alembic/migrations/versions/xx_2025_11_12_1430_b2c3d4e5f6a7_add_default_identity_definitions.py +81 -0
  12. fides/api/alembic/migrations/versions/xx_2025_11_25_1854_3ff6449c099e_add_index_on_providedidentity_privacy_.py +50 -0
  13. fides/api/api/v1/api.py +2 -0
  14. fides/api/api/v1/endpoints/admin.py +39 -0
  15. fides/api/api/v1/endpoints/connector_template_endpoints.py +167 -0
  16. fides/api/api/v1/endpoints/generic_overrides.py +6 -6
  17. fides/api/api/v1/endpoints/pre_approval_webhook_endpoints.py +5 -5
  18. fides/api/api/v1/endpoints/privacy_request_endpoints.py +101 -21
  19. fides/api/api/v1/endpoints/saas_config_endpoints.py +3 -44
  20. fides/api/api/v1/endpoints/storage_endpoints.py +5 -1
  21. fides/api/api/v1/endpoints/system.py +2 -2
  22. fides/api/api/v1/endpoints/user_endpoints.py +10 -4
  23. fides/api/db/base.py +1 -0
  24. fides/api/db/database.py +228 -1
  25. fides/api/db/seed.py +1 -1
  26. fides/api/email_templates/templates/external_user_welcome.html +9 -5
  27. fides/api/migrations/post_upgrade_index_creation.py +10 -0
  28. fides/api/models/connectionconfig.py +4 -1
  29. fides/api/models/detection_discovery/__init__.py +2 -0
  30. fides/api/models/detection_discovery/core.py +10 -0
  31. fides/api/models/detection_discovery/staged_resource_error.py +25 -0
  32. fides/api/models/experience_notices.py +6 -1
  33. fides/api/models/identity_definition.py +2 -1
  34. fides/api/models/location_regulation_selections.py +22 -0
  35. fides/api/models/manual_webhook.py +17 -6
  36. fides/api/models/messaging_template.py +7 -0
  37. fides/api/models/policy.py +3 -0
  38. fides/api/models/privacy_experience.py +20 -0
  39. fides/api/models/privacy_notice.py +45 -1
  40. fides/api/models/privacy_preference.py +1 -0
  41. fides/api/models/privacy_request/duplicate_group.py +84 -0
  42. fides/api/models/privacy_request/privacy_request.py +84 -9
  43. fides/api/models/privacy_request/provided_identity.py +22 -1
  44. fides/api/models/saas_template_dataset.py +63 -0
  45. fides/api/models/sql_models.py +150 -7
  46. fides/api/models/taxonomy.py +61 -1
  47. fides/api/oauth/roles.py +2 -0
  48. fides/api/schemas/connection_configuration/connection_secrets_mssql.py +5 -0
  49. fides/api/schemas/messaging/messaging.py +1 -0
  50. fides/api/schemas/oauth.py +2 -1
  51. fides/api/schemas/privacy_request.py +38 -6
  52. fides/api/schemas/saas/connector_template.py +14 -0
  53. fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +19 -7
  54. fides/api/service/connectors/base_erasure_email_connector.py +7 -0
  55. fides/api/service/connectors/microsoft_sql_server_connector.py +6 -1
  56. fides/api/service/connectors/saas/connector_registry_service.py +45 -1
  57. fides/api/service/messaging/message_dispatch_service.py +44 -4
  58. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +3 -3
  59. fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +41 -30
  60. fides/api/service/privacy_request/dsr_package/templates/clickme.html +68 -0
  61. fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +30 -27
  62. fides/api/service/privacy_request/duplication_detection.py +439 -0
  63. fides/api/service/privacy_request/email_batch_service.py +2 -1
  64. fides/api/service/privacy_request/request_runner_service.py +31 -5
  65. fides/api/service/privacy_request/request_service.py +4 -2
  66. fides/api/service/saas_request/saas_request_override_factory.py +7 -2
  67. fides/api/task/conditional_dependencies/privacy_request/__init__.py +0 -0
  68. fides/api/task/conditional_dependencies/privacy_request/convenience_fields.py +155 -0
  69. fides/api/task/conditional_dependencies/privacy_request/privacy_request_data.py +140 -0
  70. fides/api/task/conditional_dependencies/privacy_request/schemas.py +212 -0
  71. fides/api/task/conditional_dependencies/util.py +111 -0
  72. fides/api/task/execute_request_tasks.py +17 -4
  73. fides/api/task/manual/manual_task_conditional_evaluation.py +32 -27
  74. fides/api/task/manual/manual_task_graph_task.py +4 -1
  75. fides/api/task/manual/manual_task_utils.py +63 -20
  76. fides/api/tasks/__init__.py +14 -0
  77. fides/api/util/cache.py +4 -0
  78. fides/api/util/connection_util.py +2 -3
  79. fides/api/util/fuzzy_search_utils.py +7 -1
  80. fides/api/util/lock.py +13 -3
  81. fides/api/util/logger.py +58 -4
  82. fides/api/util/logger_context_utils.py +3 -1
  83. fides/api/util/memory_watchdog.py +118 -0
  84. fides/api/util/saas_config_updater.py +12 -2
  85. fides/api/worker/__init__.py +4 -0
  86. fides/common/api/scope_registry.py +6 -0
  87. fides/common/api/v1/urn_registry.py +11 -2
  88. fides/config/__init__.py +8 -2
  89. fides/config/celery_settings.py +42 -0
  90. fides/service/messaging/messaging_service.py +75 -74
  91. fides/service/privacy_request/privacy_request_service.py +151 -19
  92. fides/ui-build/static/admin/404.html +1 -1
  93. fides/ui-build/static/admin/_next/static/chunks/1099-688fa865621531cc.js +1 -0
  94. fides/ui-build/static/admin/_next/static/chunks/{1115-26393b586775ea29.js → 1115-7fd171dac1eb0e51.js} +1 -1
  95. fides/ui-build/static/admin/_next/static/chunks/1276.deb10ae2643f8463.js +1 -0
  96. fides/ui-build/static/admin/_next/static/chunks/1438-8a33b3834d6e43f3.js +1 -0
  97. fides/ui-build/static/admin/_next/static/chunks/{6148-59a59d5c5925344f.js → 1533-84e250d1f26e6d7d.js} +1 -1
  98. fides/ui-build/static/admin/_next/static/chunks/1821-c1daa160f492aacf.js +1 -0
  99. fides/ui-build/static/admin/_next/static/chunks/1840-359ee056e4cf6629.js +1 -0
  100. fides/ui-build/static/admin/_next/static/chunks/{1975.afe8cad52f904fcf.js → 1975.bef017bc80e2012c.js} +1 -1
  101. fides/ui-build/static/admin/_next/static/chunks/{2040-7eed8491ca7276ed.js → 2040-70972e15960d9afe.js} +1 -1
  102. fides/ui-build/static/admin/_next/static/chunks/2121.321b0fd3932164d4.js +1 -0
  103. fides/ui-build/static/admin/_next/static/chunks/{2397-083fc511acb6105d.js → 2397-3434603a97f3f5d6.js} +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/2921-49ed0ed897832958.js +1 -0
  105. fides/ui-build/static/admin/_next/static/chunks/3150-da5406b80d25fe6d.js +1 -0
  106. fides/ui-build/static/admin/_next/static/chunks/3214-90ce0a366b0f461a.js +1 -0
  107. fides/ui-build/static/admin/_next/static/chunks/3377-02bf9780fd383d94.js +1 -0
  108. fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
  109. fides/ui-build/static/admin/_next/static/chunks/3655-5e1ba5dd68b5ec48.js +1 -0
  110. fides/ui-build/static/admin/_next/static/chunks/3729-31ff8ba51491bf21.js +1 -0
  111. fides/ui-build/static/admin/_next/static/chunks/3872-cff30ca0844fe2b1.js +1 -0
  112. fides/ui-build/static/admin/_next/static/chunks/3931-8bedde156fe83564.js +1 -0
  113. fides/ui-build/static/admin/_next/static/chunks/{401-7c345d019bb9bcbd.js → 401-582d9970d89deefe.js} +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/4093-7e47408c28de5375.js +1 -0
  115. fides/ui-build/static/admin/_next/static/chunks/{4259.d1507e0db19cbed7.js → 4259.05038c9b78467244.js} +1 -1
  116. fides/ui-build/static/admin/_next/static/chunks/4322-f6aeff6880726c83.js +1 -0
  117. fides/ui-build/static/admin/_next/static/chunks/4339-04a715ab07122744.js +1 -0
  118. fides/ui-build/static/admin/_next/static/chunks/4496-ccbce2459174e0d6.js +1 -0
  119. fides/ui-build/static/admin/_next/static/chunks/454-d5c2c84f1a14e4f1.js +1 -0
  120. fides/ui-build/static/admin/_next/static/chunks/4589-c1d83c6a8dab4d30.js +1 -0
  121. fides/ui-build/static/admin/_next/static/chunks/4809-a8f4a108a42f53ed.js +1 -0
  122. fides/ui-build/static/admin/_next/static/chunks/4903-19c0bc07a956dfa8.js +1 -0
  123. fides/ui-build/static/admin/_next/static/chunks/4910-d990773601f794c1.js +1 -0
  124. fides/ui-build/static/admin/_next/static/chunks/{5185-e7f8b81dd3dfbe0b.js → 5185-96423702fba70ced.js} +1 -1
  125. fides/ui-build/static/admin/_next/static/chunks/5258-4e308cca01d59367.js +1 -0
  126. fides/ui-build/static/admin/_next/static/chunks/5487-5c3501754bf027ba.js +1 -0
  127. fides/ui-build/static/admin/_next/static/chunks/549-1bdc3e6f3264c020.js +1 -0
  128. fides/ui-build/static/admin/_next/static/chunks/5505-43b9c39491b88e08.js +1 -0
  129. fides/ui-build/static/admin/_next/static/chunks/{5783-21775c232dce7af7.js → 5783-016dfcee8e49bf61.js} +1 -1
  130. fides/ui-build/static/admin/_next/static/chunks/5826-4db99ea4e5077911.js +1 -0
  131. fides/ui-build/static/admin/_next/static/chunks/590-be447cacf12419dd.js +1 -0
  132. fides/ui-build/static/admin/_next/static/chunks/6084-91badbc6569a0efb.js +1 -0
  133. fides/ui-build/static/admin/_next/static/chunks/6344-026cb323c1d49926.js +1 -0
  134. fides/ui-build/static/admin/_next/static/chunks/6362-ba0e12f2fc4cad94.js +1 -0
  135. fides/ui-build/static/admin/_next/static/chunks/{6853-de9905d28e5b19b3.js → 6853-882889659769d7b4.js} +1 -1
  136. fides/ui-build/static/admin/_next/static/chunks/6882-bb1b469d7d7f5335.js +1 -0
  137. fides/ui-build/static/admin/_next/static/chunks/6954-0dcf22a9aabe39c5.js +1 -0
  138. fides/ui-build/static/admin/_next/static/chunks/7170-46db82bb5b55e856.js +1 -0
  139. fides/ui-build/static/admin/_next/static/chunks/7218-2ace8c82e3e7eb74.js +1 -0
  140. fides/ui-build/static/admin/_next/static/chunks/{7245-c9bc628d078c2170.js → 7245-1cdafb35f289861b.js} +1 -1
  141. fides/ui-build/static/admin/_next/static/chunks/7630-7f75ab7b8df42eb3.js +1 -0
  142. fides/ui-build/static/admin/_next/static/chunks/7654-2e9a8be02e41769a.js +1 -0
  143. fides/ui-build/static/admin/_next/static/chunks/{8212-393420e5a9751791.js → 8212-348ddd2b6933db70.js} +1 -1
  144. fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
  145. fides/ui-build/static/admin/_next/static/chunks/{5596-29a7c8322530b7cf.js → 9195-da717d324917b049.js} +3 -3
  146. fides/ui-build/static/admin/_next/static/chunks/9450-b7b7bb1d755ecf57.js +1 -0
  147. fides/ui-build/static/admin/_next/static/chunks/{9676.7d029a5383595b69.js → 9676.1f395eeb9cc34968.js} +1 -1
  148. fides/ui-build/static/admin/_next/static/chunks/{9826-a737a9956c1d0905.js → 9826-1078e46f3ac0b688.js} +1 -1
  149. fides/ui-build/static/admin/_next/static/chunks/9911-ece086f2230e34f0.js +1 -0
  150. fides/ui-build/static/admin/_next/static/chunks/pages/{404-eb019192ce498f32.js → 404-800be6996aaa999c.js} +1 -1
  151. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-ee588a308812715d.js → _app-de4b578c904df772.js} +70 -70
  152. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-7081e0e49f67716c.js → manual-f12020b82dd4bd1a.js} +1 -1
  153. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-a188f84239f4b2a8.js → multiple-a911b7990371704d.js} +1 -1
  154. fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-ee9df33ebd471099.js → add-systems-ad585b79953c2753.js} +1 -1
  155. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-4f9cf087fcee87e6.js → add-vendors-bb263d394ca1c8fa.js} +1 -1
  156. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-6907c368d8611c44.js +1 -0
  157. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1b02a4991201b7e4.js → [id]-c32f381af358149b.js} +1 -1
  158. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a5e738a234dadc7e.js → new-6efb3c069d8b47dd.js} +1 -1
  159. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-b08abefec298ccf1.js → privacy-experience-1975c529905eea9b.js} +1 -1
  160. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-8c164c4b8310214e.js → [id]-b05331178928ab52.js} +1 -1
  161. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-db789002d84c8829.js → new-516834e930bb0d0d.js} +1 -1
  162. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-985717f2565f9d9d.js +1 -0
  163. fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-5cba30eba1e97e56.js → properties-2be773e08498e40c.js} +1 -1
  164. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-850afb74f4192e87.js +1 -0
  165. fides/ui-build/static/admin/_next/static/chunks/pages/{consent-614af0a2c2ba966c.js → consent-b63d1e395d879b86.js} +1 -1
  166. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-5b28f0f674ea87bd.js +1 -0
  167. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-676177e2f3c9c2a2.js +1 -0
  168. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-794906929efb8e1d.js +1 -0
  169. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-3ccbf7c0d06507b9.js +1 -0
  170. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources-81d1b50585468fb0.js +1 -0
  171. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-1ea0b24d306b1e67.js +1 -0
  172. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-d4861a4a218bb65a.js +1 -0
  173. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure/[monitorId]-66bd265044daf97d.js +1 -0
  174. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure-c9c79fa8576a4f77.js +1 -0
  175. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-60cacc3232c2eead.js +1 -0
  176. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-437bd64a3016de36.js +1 -0
  177. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8349248c2da970a6.js +1 -0
  178. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6919a1d6cadaa46b.js +1 -0
  179. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-b072cf25aefc98f6.js → [resourceUrn]-1a50d421897d3da1.js} +1 -1
  180. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-fd3e8817d8e6dee4.js → detection-49509414a15e8393.js} +1 -1
  181. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-146624cf59792bf7.js → [resourceUrn]-1a1bb80b586d0c0f.js} +1 -1
  182. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9695cc9c85592ec5.js → discovery-49de61df1e8e7fba.js} +1 -1
  183. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c2719f5cff20c0f8.js +1 -0
  184. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-5f88280db168083e.js → [...subfieldNames]-415015aebab60436.js} +1 -1
  185. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-bfbcf19c28c794ae.js → [collectionName]-5accb09715b5122d.js} +1 -1
  186. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-aebecca1d8ec5f98.js +1 -0
  187. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-9551a82ddec9f909.js +1 -0
  188. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-72f8fe47beef0f09.js +1 -0
  189. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-3a8aa3f633528e88.js +1 -0
  190. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-87512616f35ec6da.js +1 -0
  191. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-2f1bf4eac7aa55fd.js +1 -0
  192. fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-1f4335dca5c09860.js → fides-js-docs-5235760b3e508d7d.js} +1 -1
  193. fides/ui-build/static/admin/_next/static/chunks/pages/{index-1343fa525a206571.js → index-8d67cd2872cb682a.js} +1 -1
  194. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-7a631df29cd0e31a.js +1 -0
  195. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-ea3bc43cdaf273de.js +1 -0
  196. fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-5d8632bba1b81cd4.js +1 -0
  197. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{[id]-63b3be660fb12c0f.js → [id]-92e01822ecde8fb8.js} +1 -1
  198. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{new-d3b577962dd33266.js → new-1256cf6d3f6794e0.js} +1 -1
  199. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-0daac00911d27617.js +1 -0
  200. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{[key]-720cde29f81db47f.js → [key]-2d976fe5e8ba0a3a.js} +1 -1
  201. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{new-3668866076b53016.js → new-7766ba497b863740.js} +1 -1
  202. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-f2880d2ed4734270.js +1 -0
  203. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{[id]-8063dceb32310c85.js → [id]-669f585c3458faff.js} +1 -1
  204. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{add-template-4931c70bee62232f.js → add-template-c79e7724e4bc3899.js} +1 -1
  205. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-891654e8dc13965c.js +1 -0
  206. fides/ui-build/static/admin/_next/static/chunks/pages/{notifications-93af719dab3bd053.js → notifications-40c8148244c5d347.js} +1 -1
  207. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-1e86f3e28bd23ed6.js +1 -0
  208. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-9b7bd8c38f02c091.js +1 -0
  209. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-b18a53a940cf9e19.js +1 -0
  210. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-6d028d7450e77578.js +1 -0
  211. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-8399083ee2cd8cc2.js +1 -0
  212. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-0a910125cdb2b3b8.js +1 -0
  213. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-acc90b6f7fe915cb.js +1 -0
  214. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-bbc42026f2685438.js +1 -0
  215. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-fa82cffba448ccd8.js → configure-c08ca6ad21c99799.js} +1 -1
  216. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-77c2db582f8823bc.js +1 -0
  217. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-bc1c289647e52c48.js → [id]-74ccea4868408e3d.js} +1 -1
  218. fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-cbfaa23d96f5ed0b.js → add-property-7d9f09bfe9d44dfc.js} +1 -1
  219. fides/ui-build/static/admin/_next/static/chunks/pages/{properties-a15a3fd0ed88f39c.js → properties-cd77bc30672bb1fa.js} +1 -1
  220. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-cc3bd9540132d5ed.js +1 -0
  221. fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-7ce7d720107ab4b5.js +1 -0
  222. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-19de0024418a4924.js → [purpose_id]-ae789892343c24f5.js} +1 -1
  223. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13ee1b331ced0846.js +1 -0
  224. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-ee4e43692336a330.js +1 -0
  225. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-ca51d794abfcbf25.js +1 -0
  226. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ecd1dc5db8e81409.js +1 -0
  227. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-3b87002753b23ca5.js → domain-records-df06f7e2f668c540.js} +1 -1
  228. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-aacd9d0ad47082d4.js → domains-da0c77bd510c6c51.js} +1 -1
  229. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-3cdd0b39901190ba.js → email-templates-950b0c115bf673d8.js} +1 -1
  230. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-61076eedbfd137b9.js → locations-7e36cb4756973a9d.js} +1 -1
  231. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-b07b11d6002f8c8c.js → organization-a0e5ed486d24ccf3.js} +1 -1
  232. fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-3cdebafb6870d3ad.js +1 -0
  233. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-b7c0d3b1b754e70f.js → regulations-159aad34f1021320.js} +1 -1
  234. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-dbd1a64090ad0946.js +1 -0
  235. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-59c89489fa32a4cb.js → [id]-7d042497a57a3788.js} +1 -1
  236. fides/ui-build/static/admin/_next/static/chunks/pages/systems-21f1172e73dfc9f0.js +1 -0
  237. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-e553161e6338ee48.js +1 -0
  238. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-7dce2916cc589c54.js → new-efc4af017723e57a.js} +1 -1
  239. fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-5d5a68e555d18693.js → [id]-b152319d67372ee4.js} +1 -1
  240. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dba8692491f7935e.js +1 -0
  241. fides/ui-build/static/admin/_next/static/chunks/webpack-09ca52bc7beb0b43.js +1 -0
  242. fides/ui-build/static/admin/_next/static/css/3d66bb57ddcb0978.css +1 -0
  243. fides/ui-build/static/admin/_next/static/css/a1e4be9466578ef1.css +1 -0
  244. fides/ui-build/static/admin/_next/static/l2vgGUHB04Fi4oEVlVMrc/_buildManifest.js +1 -0
  245. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  246. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  247. fides/ui-build/static/admin/add-systems.html +1 -1
  248. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  249. fides/ui-build/static/admin/consent/configure.html +1 -1
  250. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  251. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  252. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  253. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  254. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  255. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  256. fides/ui-build/static/admin/consent/properties.html +1 -1
  257. fides/ui-build/static/admin/consent/reporting.html +1 -1
  258. fides/ui-build/static/admin/consent.html +1 -1
  259. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  260. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  261. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  262. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  263. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  264. fides/ui-build/static/admin/data-catalog.html +1 -1
  265. fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -1
  266. fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -1
  267. fides/ui-build/static/admin/data-discovery/action-center/infrastructure/[monitorId].html +1 -0
  268. fides/ui-build/static/admin/data-discovery/action-center/infrastructure.html +1 -0
  269. fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -1
  270. fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -1
  271. fides/ui-build/static/admin/data-discovery/action-center/website.html +1 -1
  272. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  273. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  274. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  275. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  276. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  277. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  278. fides/ui-build/static/admin/datamap.html +1 -1
  279. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  280. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  281. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  282. fides/ui-build/static/admin/dataset/new.html +1 -1
  283. fides/ui-build/static/admin/dataset.html +1 -1
  284. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  285. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  286. fides/ui-build/static/admin/datastore-connection.html +1 -1
  287. fides/ui-build/static/admin/index.html +1 -1
  288. fides/ui-build/static/admin/integrations/[id].html +1 -1
  289. fides/ui-build/static/admin/integrations.html +1 -1
  290. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  291. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  292. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  293. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  294. fides/ui-build/static/admin/lib/fides.js +2 -2
  295. fides/ui-build/static/admin/login/[provider].html +1 -1
  296. fides/ui-build/static/admin/login.html +1 -1
  297. fides/ui-build/static/admin/new-privacy-requests.html +1 -1
  298. fides/ui-build/static/admin/notifications/digests/[id].html +1 -1
  299. fides/ui-build/static/admin/notifications/digests/new.html +1 -1
  300. fides/ui-build/static/admin/notifications/digests.html +1 -1
  301. fides/ui-build/static/admin/notifications/providers/[key].html +1 -1
  302. fides/ui-build/static/admin/notifications/providers/new.html +1 -1
  303. fides/ui-build/static/admin/notifications/providers.html +1 -1
  304. fides/ui-build/static/admin/notifications/templates/[id].html +1 -1
  305. fides/ui-build/static/admin/notifications/templates/add-template.html +1 -1
  306. fides/ui-build/static/admin/notifications/templates.html +1 -1
  307. fides/ui-build/static/admin/notifications.html +1 -1
  308. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  309. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  310. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  311. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  312. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  313. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  314. fides/ui-build/static/admin/poc/forms.html +1 -1
  315. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  316. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  317. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  318. fides/ui-build/static/admin/privacy-requests.html +1 -1
  319. fides/ui-build/static/admin/properties/[id].html +1 -1
  320. fides/ui-build/static/admin/properties/add-property.html +1 -1
  321. fides/ui-build/static/admin/properties.html +1 -1
  322. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  323. fides/ui-build/static/admin/sandbox/privacy-notices.html +1 -1
  324. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  325. fides/ui-build/static/admin/settings/about.html +1 -1
  326. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  327. fides/ui-build/static/admin/settings/consent.html +1 -1
  328. fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -1
  329. fides/ui-build/static/admin/settings/custom-fields/new.html +1 -1
  330. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  331. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  332. fides/ui-build/static/admin/settings/domains.html +1 -1
  333. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  334. fides/ui-build/static/admin/settings/locations.html +1 -1
  335. fides/ui-build/static/admin/settings/organization.html +1 -1
  336. fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
  337. fides/ui-build/static/admin/settings/regulations.html +1 -1
  338. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  339. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  340. fides/ui-build/static/admin/systems.html +1 -1
  341. fides/ui-build/static/admin/taxonomy.html +1 -1
  342. fides/ui-build/static/admin/user-management/new.html +1 -1
  343. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  344. fides/ui-build/static/admin/user-management.html +1 -1
  345. fides/api/service/privacy_request/dsr_package/templates/welcome.html +0 -66
  346. fides/ui-build/static/admin/_next/static/chunks/1099-31f9d973bc287df8.js +0 -1
  347. fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +0 -1
  348. fides/ui-build/static/admin/_next/static/chunks/1437-8b1f6c8797c68bfd.js +0 -1
  349. fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +0 -1
  350. fides/ui-build/static/admin/_next/static/chunks/155-f6302d32cba4cab6.js +0 -1
  351. fides/ui-build/static/admin/_next/static/chunks/1817-2d5cf537a2992c79.js +0 -1
  352. fides/ui-build/static/admin/_next/static/chunks/2121.1de2fa060eae34aa.js +0 -1
  353. fides/ui-build/static/admin/_next/static/chunks/2921-34a43f2f8f5e5e69.js +0 -1
  354. fides/ui-build/static/admin/_next/static/chunks/2962-342ad1b4ab402ded.js +0 -1
  355. fides/ui-build/static/admin/_next/static/chunks/3377-988ac2f3a2e8d5d4.js +0 -1
  356. fides/ui-build/static/admin/_next/static/chunks/3446-f40c352c43ac950c.js +0 -1
  357. fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +0 -1
  358. fides/ui-build/static/admin/_next/static/chunks/3696-6f90e41a53d22920.js +0 -1
  359. fides/ui-build/static/admin/_next/static/chunks/3700-f695f2f6b8251971.js +0 -1
  360. fides/ui-build/static/admin/_next/static/chunks/3772-9f1713f9d5f97a10.js +0 -1
  361. fides/ui-build/static/admin/_next/static/chunks/3873-d18e47b327445db5.js +0 -1
  362. fides/ui-build/static/admin/_next/static/chunks/3923-f0a85dc5c3684fa0.js +0 -1
  363. fides/ui-build/static/admin/_next/static/chunks/4496-4ff19366c597ec16.js +0 -1
  364. fides/ui-build/static/admin/_next/static/chunks/4817-1f3e6ea38625d8d5.js +0 -1
  365. fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +0 -1
  366. fides/ui-build/static/admin/_next/static/chunks/5258-62d6bc19add60aa6.js +0 -1
  367. fides/ui-build/static/admin/_next/static/chunks/5279-bd6cccabdd6ca447.js +0 -1
  368. fides/ui-build/static/admin/_next/static/chunks/549-28537a6de666944b.js +0 -1
  369. fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +0 -1
  370. fides/ui-build/static/admin/_next/static/chunks/5643-3459282d296a3c59.js +0 -1
  371. fides/ui-build/static/admin/_next/static/chunks/6277-3759894435cb8569.js +0 -1
  372. fides/ui-build/static/admin/_next/static/chunks/6315-e2fb5ea77179a871.js +0 -1
  373. fides/ui-build/static/admin/_next/static/chunks/6344-ca66a6e10d128179.js +0 -1
  374. fides/ui-build/static/admin/_next/static/chunks/6419-11d67f7fd4e2f247.js +0 -1
  375. fides/ui-build/static/admin/_next/static/chunks/6954-84789a4e4fb04eb9.js +0 -1
  376. fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +0 -1
  377. fides/ui-build/static/admin/_next/static/chunks/7059-2bb7c38578549703.js +0 -1
  378. fides/ui-build/static/admin/_next/static/chunks/7202.3febe9e89640c712.js +0 -1
  379. fides/ui-build/static/admin/_next/static/chunks/7476-a02d970ea4d3f7d0.js +0 -1
  380. fides/ui-build/static/admin/_next/static/chunks/7488-cf92601852e3c509.js +0 -1
  381. fides/ui-build/static/admin/_next/static/chunks/7630-a11610c2b31ab2ca.js +0 -1
  382. fides/ui-build/static/admin/_next/static/chunks/7773-9ae233109bc64ec2.js +0 -1
  383. fides/ui-build/static/admin/_next/static/chunks/796-e36d610066135f8c.js +0 -1
  384. fides/ui-build/static/admin/_next/static/chunks/8011-75af8b480fa114e6.js +0 -1
  385. fides/ui-build/static/admin/_next/static/chunks/8373-22b4d20e8cc06b3a.js +0 -1
  386. fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +0 -1
  387. fides/ui-build/static/admin/_next/static/chunks/9037-453224ba3ee65b13.js +0 -1
  388. fides/ui-build/static/admin/_next/static/chunks/9046-d9c6498368b993d1.js +0 -1
  389. fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +0 -1
  390. fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +0 -1
  391. fides/ui-build/static/admin/_next/static/chunks/9330-f753636a31c4ea04.js +0 -1
  392. fides/ui-build/static/admin/_next/static/chunks/9682-d1a3afa1394f8304.js +0 -1
  393. fides/ui-build/static/admin/_next/static/chunks/9729-fcf6ff4e3534e4a8.js +0 -1
  394. fides/ui-build/static/admin/_next/static/chunks/9899-d6437facac926264.js +0 -1
  395. fides/ui-build/static/admin/_next/static/chunks/9965-25621dd507e0cfd6.js +0 -1
  396. fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-9af75caefc74eaca.js +0 -1
  397. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-6528eb24165aceb6.js +0 -1
  398. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-11f1683aa15e1a62.js +0 -1
  399. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-32bd7a7c990e5bf6.js +0 -1
  400. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-d60761c20382b259.js +0 -1
  401. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-07e7d38ce34e1e6c.js +0 -1
  402. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-b07a0707f8c2ec0d.js +0 -1
  403. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources-aed94957009eb3fd.js +0 -1
  404. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-127c114dd8f102ed.js +0 -1
  405. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-5aa7a9fa96160de8.js +0 -1
  406. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-899bf30dde8b3292.js +0 -1
  407. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-73085f50abb775c0.js +0 -1
  408. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-823d0dd77e66585b.js +0 -1
  409. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-24a82e07a0008516.js +0 -1
  410. fides/ui-build/static/admin/_next/static/chunks/pages/datamap-3b100c44ea9e3988.js +0 -1
  411. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-6fbe2b584a509226.js +0 -1
  412. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-3d1e48f4b95d7f6b.js +0 -1
  413. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-d3c6ecf7f29bea6e.js +0 -1
  414. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-0a4aa42be2da0255.js +0 -1
  415. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-14313e441a13192c.js +0 -1
  416. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-f139d1ce26404f30.js +0 -1
  417. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-b2d3d28b10a758e6.js +0 -1
  418. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-a733e5d7c3ce9bb8.js +0 -1
  419. fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-df0c95e408c54c7e.js +0 -1
  420. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-aed9afd988a48acf.js +0 -1
  421. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-36a0ac36062abd02.js +0 -1
  422. fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-a14c876b49422597.js +0 -1
  423. fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-9cfb469de7b4aeab.js +0 -1
  424. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-e715cc654fb6a5cd.js +0 -1
  425. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-72ae299bcb6adae6.js +0 -1
  426. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-2337f8c81a766eb0.js +0 -1
  427. fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-0af454f55494f6fa.js +0 -1
  428. fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-d1b90ffa996fbd89.js +0 -1
  429. fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-19724b9e0581b96d.js +0 -1
  430. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-cdd3754289a28317.js +0 -1
  431. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-cc41ae605f2b55ae.js +0 -1
  432. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6e4c535b6d614596.js +0 -1
  433. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-632b3ee563d070f2.js +0 -1
  434. fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-afe921f6e2a526fb.js +0 -1
  435. fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-5b6807dced8d03c5.js +0 -1
  436. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-8634aae3259def37.js +0 -1
  437. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-2d9dcca17965dc57.js +0 -1
  438. fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-7dce52bfc1b2652c.js +0 -1
  439. fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-084a2b4431d35322.js +0 -1
  440. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-b72d36243a0a545c.js +0 -1
  441. fides/ui-build/static/admin/_next/static/chunks/pages/systems-cfaa37a0df83674b.js +0 -1
  442. fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-56a5434969cbe9ba.js +0 -1
  443. fides/ui-build/static/admin/_next/static/chunks/pages/user-management-e6a211d8a0401086.js +0 -1
  444. fides/ui-build/static/admin/_next/static/chunks/webpack-c2c11809187b9f84.js +0 -1
  445. fides/ui-build/static/admin/_next/static/css/d41a048a166d50e4.css +0 -1
  446. fides/ui-build/static/admin/_next/static/css/d78390d6134d8328.css +0 -1
  447. fides/ui-build/static/admin/_next/static/wCNFtmYQhEDMaMPeBB4BM/_buildManifest.js +0 -1
  448. fides/ui-build/static/admin/poc/table-migration.html +0 -1
  449. {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/WHEEL +0 -0
  450. {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/entry_points.txt +0 -0
  451. {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/licenses/LICENSE +0 -0
  452. {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/top_level.txt +0 -0
  453. /fides/ui-build/static/admin/_next/static/{wCNFtmYQhEDMaMPeBB4BM → l2vgGUHB04Fi4oEVlVMrc}/_ssgManifest.js +0 -0
@@ -17,7 +17,7 @@ from sqlalchemy.ext.associationproxy import association_proxy
17
17
  from sqlalchemy.ext.declarative import declared_attr
18
18
  from sqlalchemy.orm import RelationshipProperty, Session, relationship
19
19
 
20
- from fides.api.common_exceptions import ValidationError
20
+ from fides.api.common_exceptions import KeyOrNameAlreadyExists, ValidationError
21
21
  from fides.api.db.base_class import Base
22
22
  from fides.api.models.sql_models import FidesBase # type: ignore[attr-defined]
23
23
 
@@ -254,6 +254,66 @@ class TaxonomyElement(Base, FidesBase):
254
254
  remote_side="TaxonomyElement.fides_key",
255
255
  )
256
256
 
257
+ @classmethod
258
+ def create(
259
+ cls: Type["TaxonomyElement"],
260
+ db: Session,
261
+ *,
262
+ data: dict[str, Any],
263
+ check_name: bool = True,
264
+ ) -> "TaxonomyElement":
265
+ """
266
+ Override create to skip name uniqueness check for hierarchical taxonomy.
267
+
268
+ TaxonomyElement is hierarchical - fides_key provides sufficient uniqueness.
269
+ Multiple elements can share the same name as long as their keys differ.
270
+ """
271
+ # Check if taxonomy element with same fides_key already exists within the same taxonomy_type
272
+ if "fides_key" in data and data["fides_key"] and "taxonomy_type" in data:
273
+ existing_by_key = (
274
+ db.query(cls)
275
+ .filter(
276
+ cls.fides_key == data["fides_key"],
277
+ cls.taxonomy_type == data["taxonomy_type"],
278
+ )
279
+ .first()
280
+ )
281
+ if existing_by_key:
282
+ raise KeyOrNameAlreadyExists(
283
+ f'Taxonomy element with fides_key "{data["fides_key"]}" already exists in taxonomy "{data["taxonomy_type"]}".'
284
+ )
285
+ # Always skip name check - fides_key uniqueness is sufficient
286
+ return super().create(db=db, data=data, check_name=False)
287
+
288
+ def update(self, db: Session, *, data: dict[str, Any]) -> "TaxonomyElement":
289
+ """
290
+ Override update to check for existing taxonomy elements with the same fides_key
291
+ within the same taxonomy_type when fides_key is being changed.
292
+ """
293
+ # Check if fides_key is being changed and if it conflicts with an existing element
294
+ if (
295
+ "fides_key" in data
296
+ and data["fides_key"]
297
+ and data["fides_key"] != self.fides_key
298
+ ):
299
+ # Ensure taxonomy_type is available (either in data or from self)
300
+ taxonomy_type = data.get("taxonomy_type") or self.taxonomy_type
301
+ if taxonomy_type:
302
+ existing_by_key = (
303
+ db.query(TaxonomyElement)
304
+ .filter(
305
+ TaxonomyElement.fides_key == data["fides_key"],
306
+ TaxonomyElement.taxonomy_type == taxonomy_type,
307
+ TaxonomyElement.id != self.id, # Exclude current element
308
+ )
309
+ .first()
310
+ )
311
+ if existing_by_key:
312
+ raise KeyOrNameAlreadyExists(
313
+ f'Taxonomy element with fides_key "{data["fides_key"]}" already exists in taxonomy "{taxonomy_type}".'
314
+ )
315
+ return super().update(db=db, data=data) # type: ignore[return-value]
316
+
257
317
 
258
318
  class TaxonomyUsage(Base):
259
319
  """
fides/api/oauth/roles.py CHANGED
@@ -16,6 +16,7 @@ from fides.common.api.scope_registry import (
16
16
  DATA_USE_READ,
17
17
  DATASET_READ,
18
18
  EVALUATION_READ,
19
+ HEAP_DUMP_EXEC,
19
20
  MASKING_EXEC,
20
21
  MASKING_READ,
21
22
  MESSAGING_CREATE_OR_UPDATE,
@@ -145,6 +146,7 @@ not_contributor_scopes = [
145
146
  PRIVACY_REQUEST_NOTIFICATIONS_CREATE_OR_UPDATE,
146
147
  PRIVACY_REQUEST_EMAIL_INTEGRATIONS_SEND,
147
148
  USER_PERMISSION_ASSIGN_OWNERS,
149
+ HEAP_DUMP_EXEC,
148
150
  ]
149
151
 
150
152
  ROLES_TO_SCOPES_MAPPING: Dict[str, List] = {
@@ -39,6 +39,11 @@ class MicrosoftSQLServerSchema(ConnectionConfigSecretsSchema):
39
39
  title="Database",
40
40
  description="The name of the specific database within the database server that you want to connect to.",
41
41
  )
42
+ read_only_connection: Optional[bool] = Field(
43
+ default=False,
44
+ title="Read Only Connection",
45
+ description="Whether to connect to the database in read-only mode.",
46
+ )
42
47
 
43
48
  _required_components: ClassVar[List[str]] = [
44
49
  "host",
@@ -103,6 +103,7 @@ CONFIGURABLE_MESSAGING_ACTION_TYPES: Tuple[str, ...] = (
103
103
  MessagingActionType.PRIVACY_REQUEST_REVIEW_DENY.value,
104
104
  MessagingActionType.PRIVACY_REQUEST_REVIEW_APPROVE.value,
105
105
  MessagingActionType.MANUAL_TASK_DIGEST.value,
106
+ MessagingActionType.EXTERNAL_USER_WELCOME.value,
106
107
  )
107
108
 
108
109
 
@@ -1,4 +1,4 @@
1
- from typing import Dict, Optional
1
+ from typing import Dict, Literal, Optional
2
2
 
3
3
  from fastapi import Form
4
4
  from fastapi.openapi.models import OAuthFlows
@@ -14,6 +14,7 @@ class AccessToken(BaseModel):
14
14
  """A wrapper for the access_code returned upon successful authentication"""
15
15
 
16
16
  access_token: str
17
+ token_type: Literal["Bearer"] = "Bearer"
17
18
 
18
19
 
19
20
  # NOTE: Adapted from
@@ -1,9 +1,10 @@
1
1
  from datetime import datetime
2
2
  from enum import Enum as EnumType
3
3
  from typing import Any, Dict, List, Optional, Type, Union
4
+ from uuid import UUID
4
5
 
5
6
  from fideslang.validation import FidesKey
6
- from pydantic import ConfigDict, Field, field_serializer, field_validator
7
+ from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
7
8
 
8
9
  from fides.api.custom_types import SafeStr
9
10
  from fides.api.graph.config import CollectionAddress
@@ -13,7 +14,11 @@ from fides.api.schemas.api import BulkResponse, BulkUpdateFailed
13
14
  from fides.api.schemas.base_class import FidesSchema
14
15
  from fides.api.schemas.policy import ActionType, CurrentStep
15
16
  from fides.api.schemas.policy import PolicyResponse as PolicySchema
16
- from fides.api.schemas.redis_cache import CustomPrivacyRequestField, Identity
17
+ from fides.api.schemas.redis_cache import (
18
+ CustomPrivacyRequestField,
19
+ Identity,
20
+ MultiValue,
21
+ )
17
22
  from fides.api.schemas.user import PrivacyRequestUser
18
23
  from fides.api.util.collection_util import Row
19
24
  from fides.api.util.encryption.aes_gcm_encryption_scheme import verify_encryption_key
@@ -309,6 +314,22 @@ class PrivacyRequestStatus(str, EnumType):
309
314
  duplicate = "duplicate" # Request identified as duplicate of another request
310
315
 
311
316
 
317
+ class IdentityValue(BaseModel):
318
+ """Represents an identity value with a label in API responses.
319
+
320
+ The value field accepts MultiValue types which match what LabeledIdentity supports:
321
+ - int
322
+ - str
323
+ - List[Union[int, str]]
324
+
325
+ This allows the schema to accept list values that were previously causing
326
+ validation errors.
327
+ """
328
+
329
+ label: str
330
+ value: Optional[MultiValue] = None
331
+
332
+
312
333
  class PrivacyRequestResponse(FidesSchema):
313
334
  """Schema to check the status of a PrivacyRequest"""
314
335
 
@@ -329,7 +350,7 @@ class PrivacyRequestResponse(FidesSchema):
329
350
  # as it is an API response field, and we don't want to reveal any more
330
351
  # about our PII structure than is explicitly stored in the cache on request
331
352
  # creation.
332
- identity: Optional[Dict[str, Union[Optional[str], Dict[str, Any]]]] = None
353
+ identity: Optional[Dict[str, Union[Optional[str], IdentityValue]]] = None
333
354
  custom_privacy_request_fields: Optional[Dict[str, Any]] = None
334
355
  policy: PolicySchema
335
356
  action_required_details: Optional[CheckpointActionRequiredDetails] = None
@@ -343,7 +364,7 @@ class PrivacyRequestResponse(FidesSchema):
343
364
  deleted_by: Optional[str] = None
344
365
  finalized_at: Optional[datetime] = None
345
366
  finalized_by: Optional[str] = None
346
- duplicate_request_group_id: Optional[str] = None
367
+ duplicate_request_group_id: Optional[UUID] = None
347
368
 
348
369
  model_config = ConfigDict(from_attributes=True, use_enum_values=True)
349
370
 
@@ -358,10 +379,15 @@ class PrivacyRequestVerboseResponse(PrivacyRequestResponse):
358
379
  model_config = ConfigDict(populate_by_name=True)
359
380
 
360
381
 
382
+ # Batch size for bulk privacy request operations. Used for request validation and
383
+ # automatic batching to avoid memory issues with large request lists.
384
+ BULK_PRIVACY_REQUEST_BATCH_SIZE = 50
385
+
386
+
361
387
  class ReviewPrivacyRequestIds(FidesSchema):
362
388
  """Pass in a list of privacy request ids"""
363
389
 
364
- request_ids: List[str] = Field(..., max_length=50)
390
+ request_ids: List[str] = Field(..., max_length=BULK_PRIVACY_REQUEST_BATCH_SIZE)
365
391
 
366
392
 
367
393
  class DenyPrivacyRequests(ReviewPrivacyRequestIds):
@@ -370,6 +396,12 @@ class DenyPrivacyRequests(ReviewPrivacyRequestIds):
370
396
  reason: Optional[SafeStr] = None
371
397
 
372
398
 
399
+ class CancelPrivacyRequests(ReviewPrivacyRequestIds):
400
+ """Pass in a list of privacy request ids and cancellation reason"""
401
+
402
+ reason: Optional[SafeStr] = None
403
+
404
+
373
405
  class BulkPostPrivacyRequests(BulkResponse):
374
406
  """Schema with mixed success/failure responses for Bulk Create of PrivacyRequest responses."""
375
407
 
@@ -458,7 +490,7 @@ class PrivacyRequestFilter(FidesSchema):
458
490
  errored_gt: Optional[datetime] = None
459
491
  external_id: Optional[str] = None
460
492
  location: Optional[str] = None
461
- action_type: Optional[ActionType] = None
493
+ action_type: Optional[Union[ActionType, List[ActionType]]] = None
462
494
  verbose: Optional[bool] = False
463
495
  include_identities: Optional[bool] = False
464
496
  include_custom_privacy_request_fields: Optional[bool] = False
@@ -4,6 +4,7 @@ from fideslang.models import Dataset
4
4
  from pydantic import BaseModel, field_validator
5
5
 
6
6
  from fides.api.models.datasetconfig import validate_masking_strategy_override
7
+ from fides.api.schemas.base_class import FidesSchema
7
8
  from fides.api.schemas.enums.connection_category import ConnectionCategory
8
9
  from fides.api.schemas.enums.integration_feature import IntegrationFeature
9
10
  from fides.api.schemas.policy import ActionType
@@ -50,3 +51,16 @@ class ConnectorTemplate(BaseModel):
50
51
  "Hard-coded fides_key detected in the dataset, replace all instances of it with <instance_fides_key>"
51
52
  )
52
53
  return dataset
54
+
55
+
56
+ class ConnectorTemplateListResponse(FidesSchema):
57
+ """
58
+ Response schema for listing connector templates.
59
+ Provides summary information about available connector templates.
60
+ """
61
+
62
+ type: str
63
+ name: str
64
+ supported_actions: List[ActionType]
65
+ category: Optional[ConnectionCategory] = None
66
+ custom: bool
@@ -310,7 +310,7 @@ class AsyncPollingStrategy(AsyncDSRStrategy):
310
310
  logger.info(f"Prepared requests: {len(prepared_requests)}")
311
311
 
312
312
  for next_request, param_value_map in prepared_requests:
313
- response = client.send(next_request)
313
+ response = client.send(next_request, read_request.ignore_errors)
314
314
 
315
315
  if not response.ok:
316
316
  raise FidesopsException(
@@ -365,6 +365,11 @@ class AsyncPollingStrategy(AsyncDSRStrategy):
365
365
  )
366
366
  response = client.send(prepared_request, request.ignore_errors)
367
367
 
368
+ if not response.ok:
369
+ raise FidesopsException(
370
+ f"Initial erasure request failed with status code {response.status_code}: {response.text}"
371
+ )
372
+
368
373
  # Extract correlation ID from response (required, like access requests)
369
374
  try:
370
375
  response_data = response.json()
@@ -551,13 +556,20 @@ class AsyncPollingStrategy(AsyncDSRStrategy):
551
556
  self.result_request.result_path,
552
557
  )
553
558
 
554
- # Ensure we have the expected polling result type
555
- if not isinstance(polling_result, PollingResult):
556
- raise PrivacyRequestError("Polling result must be PollingResult instance")
557
-
558
- # Store results on the sub-request
559
- self._store_sub_request_result(polling_result, sub_request, polling_task)
559
+ # Checks if we have a polling result, response could be empty in case there was no data to access
560
+ if polling_result:
561
+ # Ensure we have the expected polling result type
562
+ if not isinstance(polling_result, PollingResult):
563
+ raise PrivacyRequestError(
564
+ "Polling result must be PollingResult instance"
565
+ )
560
566
 
567
+ # Store results on the sub-request
568
+ self._store_sub_request_result(polling_result, sub_request, polling_task)
569
+ else:
570
+ logger.info(
571
+ f"No result response for sub-request {sub_request.id} for task {polling_task.id}"
572
+ )
561
573
  # Mark as complete using existing method
562
574
  sub_request.update_status(self.session, ExecutionLogStatus.complete.value)
563
575
 
@@ -59,11 +59,18 @@ class BaseErasureEmailConnector(BaseEmailConnector):
59
59
  self, user_identities: Dict[str, Any], privacy_request: PrivacyRequest
60
60
  ) -> bool:
61
61
  """Schedules an erasure email for erasure privacy requests containing the required identities"""
62
+
63
+ # do not send erasure emails if there is more than 1 action type for the request.
64
+ # we use consent + erasure types to facilitate Do Not Sell features.
65
+ multiple_action_types = len(privacy_request.policy.get_all_action_types()) > 1
66
+
62
67
  erasure_rules: List[Rule] = privacy_request.policy.get_rules_for_action(
63
68
  action_type=ActionType.erasure
64
69
  )
70
+
65
71
  return bool(
66
72
  erasure_rules
73
+ and not multiple_action_types
67
74
  and filter_user_identities_for_connector(self.config, user_identities)
68
75
  )
69
76
 
@@ -25,7 +25,7 @@ class MicrosoftSQLServerConnector(SQLConnector):
25
25
  def build_uri(self) -> URL:
26
26
  """
27
27
  Build URI of format
28
- mssql+pymssql://[username]:[password]@[host]:[port]/[dbname]
28
+ mssql+pymssql://[username]:[password]@[host]:[port]/[dbname]?read_only=[read_only_connection]
29
29
  Returns URL obj, since SQLAlchemy's create_engine method accepts either a URL obj or a string
30
30
  """
31
31
 
@@ -38,6 +38,11 @@ class MicrosoftSQLServerConnector(SQLConnector):
38
38
  host=config.host,
39
39
  port=config.port,
40
40
  database=config.dbname,
41
+ query=(
42
+ {"read_only": str(config.read_only_connection)}
43
+ if config.read_only_connection
44
+ else None
45
+ ),
41
46
  )
42
47
 
43
48
  return url
@@ -13,7 +13,11 @@ from fides.api.api.deps import get_api_session
13
13
  from fides.api.common_exceptions import ValidationError
14
14
  from fides.api.cryptography.cryptographic_util import str_to_b64_str
15
15
  from fides.api.models.custom_connector_template import CustomConnectorTemplate
16
- from fides.api.schemas.saas.connector_template import ConnectorTemplate
16
+ from fides.api.models.saas_template_dataset import SaasTemplateDataset
17
+ from fides.api.schemas.saas.connector_template import (
18
+ ConnectorTemplate,
19
+ ConnectorTemplateListResponse,
20
+ )
17
21
  from fides.api.schemas.saas.saas_config import SaaSConfig
18
22
  from fides.api.service.authentication.authentication_strategy_oauth2_authorization_code import (
19
23
  OAuth2AuthorizationCodeAuthenticationStrategy,
@@ -118,6 +122,11 @@ class CustomConnectorTemplateLoader(ConnectorTemplateLoader):
118
122
  f"Replacing {template.key} connector template with newer version."
119
123
  )
120
124
  template.delete(db=db)
125
+ template_dataset = SaasTemplateDataset.get_by(
126
+ db=db, field="connection_type", value=template.key
127
+ )
128
+ if template_dataset:
129
+ template_dataset.delete(db=db)
121
130
  continue
122
131
  try:
123
132
  CustomConnectorTemplateLoader._register_template(template)
@@ -284,6 +293,15 @@ class CustomConnectorTemplateLoader(ConnectorTemplateLoader):
284
293
  },
285
294
  )
286
295
 
296
+ # Store the original template dataset (with placeholders) instead of the modified version
297
+ template_dataset_json = load_dataset_from_string(template.dataset)
298
+
299
+ SaasTemplateDataset.get_or_create(
300
+ db=db,
301
+ connector_type=connector_type,
302
+ dataset_json=template_dataset_json,
303
+ )
304
+
287
305
 
288
306
  class ConnectorRegistry:
289
307
  @classmethod
@@ -309,3 +327,29 @@ class ConnectorRegistry:
309
327
  Returns an object containing the various SaaS connector artifacts
310
328
  """
311
329
  return cls._get_combined_templates().get(connector_type)
330
+
331
+ @classmethod
332
+ def get_all_connector_templates_summary(cls) -> List[ConnectorTemplateListResponse]:
333
+ """
334
+ Returns summary information for all connector templates.
335
+ Includes connector_type, name, supported_actions, category, and whether it's custom.
336
+ """
337
+ custom_templates = CustomConnectorTemplateLoader.get_connector_templates() # type: ignore
338
+ combined_templates = cls._get_combined_templates()
339
+
340
+ summaries: List[ConnectorTemplateListResponse] = []
341
+ for connector_type, template in combined_templates.items():
342
+ # Determine if the template is custom by checking if it exists in CustomConnectorTemplateLoader
343
+ is_custom = connector_type in custom_templates
344
+
345
+ summaries.append(
346
+ ConnectorTemplateListResponse(
347
+ type=connector_type,
348
+ name=template.human_readable,
349
+ supported_actions=template.supported_actions,
350
+ category=template.category,
351
+ custom=is_custom,
352
+ )
353
+ )
354
+
355
+ return summaries
@@ -6,6 +6,7 @@ from typing import Any, Callable, Dict, List, Optional, Union
6
6
  import requests
7
7
  import sendgrid
8
8
  from loguru import logger
9
+ from requests.exceptions import RequestException, Timeout
9
10
  from sendgrid.helpers.mail import Content, Email, Mail, Personalization, TemplateId, To
10
11
  from sqlalchemy.orm import Session
11
12
  from twilio.base.exceptions import TwilioRestException
@@ -53,7 +54,18 @@ EMAIL_JOIN_STRING = ", "
53
54
  EMAIL_TEMPLATE_NAME = "fides"
54
55
 
55
56
 
56
- @celery_app.task(base=DatabaseTask, bind=True)
57
+ @celery_app.task(
58
+ base=DatabaseTask,
59
+ bind=True,
60
+ autoretry_for=(
61
+ Timeout,
62
+ RequestException,
63
+ TwilioRestException,
64
+ ),
65
+ retry_kwargs={"max_retries": 3},
66
+ retry_backoff=2,
67
+ retry_jitter=True,
68
+ )
57
69
  def dispatch_message_task(
58
70
  self: DatabaseTask,
59
71
  message_meta: Dict[str, Any],
@@ -62,7 +74,14 @@ def dispatch_message_task(
62
74
  property_id: Optional[str],
63
75
  ) -> None:
64
76
  """
65
- A wrapper function to dispatch a message task into the Celery queues
77
+ A wrapper function to dispatch a message task into the Celery queues.
78
+
79
+ This task will automatically retry up to 3 times on transient network failures
80
+ (timeouts, connection errors, temporary service unavailability) with exponential
81
+ backoff (2s, 4s, 8s) and jitter to prevent thundering herd issues.
82
+
83
+ Permanent errors (missing config, invalid identities, etc.) will fail immediately
84
+ without retry to provide fast feedback and avoid wasting worker resources.
66
85
  """
67
86
  schema = FidesopsMessage.model_validate(message_meta)
68
87
  with self.get_new_session() as db:
@@ -467,7 +486,6 @@ def _build_email( # pylint: disable=too-many-return-statements, too-many-branch
467
486
  ),
468
487
  )
469
488
  if action_type == MessagingActionType.EXTERNAL_USER_WELCOME:
470
- base_template = get_email_template(action_type)
471
489
  # Generate display name for personalization
472
490
  display_name = body_params.username
473
491
  if body_params.first_name:
@@ -490,8 +508,26 @@ def _build_email( # pylint: disable=too-many-return-statements, too-many-branch
490
508
  "access_token": body_params.access_token,
491
509
  }
492
510
 
511
+ # Start with default subject
512
+ subject = "Welcome to our Privacy Center"
513
+
514
+ # If messaging template exists, extract customizable content
515
+ if messaging_template:
516
+ # Use custom subject if provided
517
+ if "subject" in messaging_template.content:
518
+ subject = _render(messaging_template.content["subject"], variables)
519
+
520
+ # Use custom body content to replace the intro text in HTML template
521
+ custom_body = messaging_template.content.get("body", "")
522
+ if custom_body.strip():
523
+ # Replace the default intro text with the custom body content
524
+ rendered_custom_body = _render(custom_body, variables)
525
+ variables["custom_intro"] = rendered_custom_body
526
+
527
+ # Always use the HTML template
528
+ base_template = get_email_template(action_type)
493
529
  return EmailForActionType(
494
- subject="Welcome to our Privacy Center",
530
+ subject=subject,
495
531
  body=base_template.render(variables),
496
532
  template_variables=variables,
497
533
  )
@@ -600,6 +636,7 @@ def _mailchimp_transactional_dispatcher(
600
636
  "https://mandrillapp.com/api/1.0/messages/send",
601
637
  headers={"Content-Type": "application/json"},
602
638
  data=data,
639
+ timeout=10,
603
640
  )
604
641
  if not response.ok:
605
642
  logger.error("Email failed to send with status code: %s", response.status_code)
@@ -647,6 +684,7 @@ def _mailgun_dispatcher(
647
684
  "api",
648
685
  messaging_config.secrets[MessagingServiceSecrets.MAILGUN_API_KEY.value],
649
686
  ),
687
+ timeout=10,
650
688
  )
651
689
 
652
690
  data = {
@@ -671,6 +709,7 @@ def _mailgun_dispatcher(
671
709
  ],
672
710
  ),
673
711
  data=data,
712
+ timeout=10,
674
713
  )
675
714
 
676
715
  if not response.ok:
@@ -691,6 +730,7 @@ def _mailgun_dispatcher(
691
730
  ],
692
731
  ),
693
732
  data=data,
733
+ timeout=10,
694
734
  )
695
735
  if not response.ok:
696
736
  logger.error(
@@ -45,7 +45,7 @@ class DSRReportBuilder:
45
45
  pages to a zip file in a way that the pages can be navigated between.
46
46
 
47
47
  The zip file is structured as follows:
48
- - welcome.html: the main index page
48
+ - clickme.html: the main index page
49
49
  - data/dataset_name/index.html: the index page for the dataset
50
50
  - data/dataset_name/collection_name/index.html: the index page for the collection
51
51
  - data/dataset_name/collection_name/item_index.html: the detail page for the item
@@ -565,9 +565,9 @@ class DSRReportBuilder:
565
565
 
566
566
  # create the main index once all the datasets have been added
567
567
  self._add_file(
568
- "welcome.html",
568
+ "clickme.html",
569
569
  self._populate_template(
570
- "templates/welcome.html", "DSR Report", None, self.main_links
570
+ "templates/clickme.html", "DSR Report", None, self.main_links
571
571
  ),
572
572
  )
573
573
  finally:
@@ -1,35 +1,46 @@
1
1
  <html>
2
- <head>
3
- <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600">
4
- <link rel="stylesheet" href="../data/main.css">
5
- </head>
6
- <body>
7
- <div class="container">
8
- <div class="header"></div>
9
- <div class="content">
10
- <div class="button-container">
11
- <a href="../welcome.html">
12
- <div class="button"><img src="../data/back.svg"></div>
13
- <span>Back to main page</span>
14
- </a>
2
+ <head>
3
+ <link
4
+ rel="stylesheet"
5
+ href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600"
6
+ />
7
+ <link rel="stylesheet" href="../data/main.css" />
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <div class="header"></div>
12
+ <div class="content">
13
+ <div class="button-container">
14
+ <a href="../clickme.html">
15
+ <div class="button"><img src="../data/back.svg" /></div>
16
+ <span>Back to main page</span>
17
+ </a>
18
+ </div>
19
+ <h1>Attachments</h1>
20
+ {% if not enable_streaming %}
21
+ <p class="expiration-notice">
22
+ Note: All download links will expire in {{ download_link_ttl_days }}
23
+ days.
24
+ </p>
25
+ {% endif %}
26
+ <div class="table table-hover">
27
+ <div class="table-row">
28
+ <div class="table-cell" style="text-align: left">File Name</div>
29
+ <div class="table-cell" style="text-align: left">Size</div>
30
+ </div>
31
+ {% for name, info in data.items() %}
32
+ <a href="{{ info.url }}" class="table-row" target="_blank">
33
+ <div class="table-cell" style="text-align: left">
34
+ {% if enable_streaming %}{{ name }}{% else %}{{ info.original_name
35
+ }}{% endif %}
15
36
  </div>
16
- <h1>Attachments</h1>
17
- {% if not enable_streaming %}
18
- <p class="expiration-notice">Note: All download links will expire in {{ download_link_ttl_days }} days.</p>
19
- {% endif %}
20
- <div class="table table-hover">
21
- <div class="table-row">
22
- <div class="table-cell" style="text-align: left;">File Name</div>
23
- <div class="table-cell" style="text-align: left;">Size</div>
24
- </div>
25
- {% for name, info in data.items() %}
26
- <a href="{{ info.url }}" class="table-row" target="_blank">
27
- <div class="table-cell" style="text-align: left;">{% if enable_streaming %}{{ name }}{% else %}{{ info.original_name }}{% endif %}</div>
28
- <div class="table-cell" style="text-align: left;">{{ info.size }}</div>
29
- </a>
30
- {% endfor %}
37
+ <div class="table-cell" style="text-align: left">
38
+ {{ info.size }}
31
39
  </div>
32
- </div>
40
+ </a>
41
+ {% endfor %}
42
+ </div>
33
43
  </div>
34
- </body>
44
+ </div>
45
+ </body>
35
46
  </html>