ethyca-fides 2.68.1b4__py2.py3-none-any.whl → 2.69.0__py2.py3-none-any.whl

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

Potentially problematic release.


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

Files changed (236) hide show
  1. {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/RECORD +231 -231
  3. fides/_version.py +3 -3
  4. fides/api/api/v1/endpoints/dsr_package_link.py +3 -1
  5. fides/api/api/v1/endpoints/oauth_endpoints.py +1 -0
  6. fides/api/api/v1/endpoints/privacy_request_endpoints.py +2 -1
  7. fides/api/oauth/utils.py +9 -6
  8. fides/api/schemas/enums/integration_feature.py +3 -0
  9. fides/api/schemas/saas/connector_template.py +5 -0
  10. fides/api/service/connectors/saas/connector_registry_service.py +7 -0
  11. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +253 -71
  12. fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +4 -2
  13. fides/api/service/privacy_request/dsr_package/templates/collection_index.html +3 -1
  14. fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +1 -1
  15. fides/api/service/privacy_request/request_runner_service.py +11 -2
  16. fides/api/service/privacy_request/request_service.py +18 -1
  17. fides/api/service/storage/storage_uploader_service.py +1 -21
  18. fides/api/service/storage/streaming/dsr_storage.py +1 -5
  19. fides/api/service/storage/streaming/s3/s3_storage_client.py +78 -40
  20. fides/api/service/storage/streaming/s3/streaming_s3.py +9 -21
  21. fides/api/service/storage/streaming/smart_open_client.py +8 -7
  22. fides/api/service/storage/streaming/smart_open_streaming_storage.py +109 -196
  23. fides/api/service/storage/streaming/storage_client_factory.py +7 -3
  24. fides/api/service/storage/util.py +579 -0
  25. fides/api/task/manual/manual_task_graph_task.py +11 -9
  26. fides/api/util/connection_type.py +3 -20
  27. fides/api/util/saas_util.py +12 -1
  28. fides/ui-build/static/admin/404.html +1 -1
  29. fides/ui-build/static/admin/_next/static/Pc_eOxj5LbY3XOShbrjSX/_buildManifest.js +1 -0
  30. fides/ui-build/static/admin/_next/static/chunks/{1345-b60d1f3442379c73.js → 1345-5e1c5b66e25c566e.js} +1 -1
  31. fides/ui-build/static/admin/_next/static/chunks/{3729-ccf90cdaae158f39.js → 3729-a1ca1608efc11ac4.js} +1 -1
  32. fides/ui-build/static/admin/_next/static/chunks/{3847-2759bf1f47a1d29e.js → 3847-230bf61b053bc706.js} +1 -1
  33. fides/ui-build/static/admin/_next/static/chunks/{3855-4174a4d4c205d6e8.js → 3855-ef5194cdb228beb6.js} +1 -1
  34. fides/ui-build/static/admin/_next/static/chunks/4164-355644b916ae0094.js +1 -0
  35. fides/ui-build/static/admin/_next/static/chunks/{4608-4d31340b0d0157c1.js → 4608-23bbd4c3c4a59f42.js} +1 -1
  36. fides/ui-build/static/admin/_next/static/chunks/{4786-aaef673b30c19e2e.js → 4786-0827aae7aceadd22.js} +1 -1
  37. fides/ui-build/static/admin/_next/static/chunks/{4808-a654c7f7a1ca62c8.js → 4808-78ca630f2d2503cd.js} +1 -1
  38. fides/ui-build/static/admin/_next/static/chunks/{4844-cd7e1d0c7bb94094.js → 4844-46324c3d848b8b6a.js} +1 -1
  39. fides/ui-build/static/admin/_next/static/chunks/{9046-c44e41da49338c6c.js → 9046-712156d461165f56.js} +1 -1
  40. fides/ui-build/static/admin/_next/static/chunks/{9676.b7d5d1d90b9da224.js → 9676.9fd9552ef744c717.js} +1 -1
  41. fides/ui-build/static/admin/_next/static/chunks/{9951-6ee5c0a23951a07f.js → 9951-a88367a129b724ba.js} +1 -1
  42. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-284cba7174fa1f16.js → _app-ef8e1c986bc5b795.js} +11 -11
  43. fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-42b7fd34712f49bd.js → manual-9dc7e70ab5b05723.js} +1 -1
  44. fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-985d3c9179e69d7f.js → add-systems-1632a59203fe8eab.js} +1 -1
  45. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-28b192e2c074b0f3.js +1 -0
  46. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-adc500a03e239857.js → [resourceUrn]-da1a48336daff6f8.js} +1 -1
  47. fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-c8b3d090e4ba60d3.js → [resourceUrn]-470da05db63767cd.js} +1 -1
  48. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-6172c2eb539319fd.js → [systemId]-2f0a33ef9ba1f1da.js} +1 -1
  49. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-945d354ff057fb03.js → [monitorId]-e9d4f25b20ff6781.js} +1 -1
  50. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-657833fd8528280f.js → activity-b6ae7adb8ef0b525.js} +1 -1
  51. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-22eec362dfbb1d2a.js → [resourceUrn]-c3a97e6721ca0abe.js} +1 -1
  52. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-4decce5ef996e563.js → detection-a0a7de552ef71f5b.js} +1 -1
  53. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-01acdd1ad492fd89.js → [resourceUrn]-109754fec0755339.js} +1 -1
  54. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-85fdbf4cde60d910.js → discovery-88654783b06b3b21.js} +1 -1
  55. fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-3a4b89fb21d14753.js → datamap-89136e6800dc9369.js} +1 -1
  56. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-40ef544ca1f2c9b9.js → new-97f06e21580f1f6a.js} +1 -1
  57. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-152e5d15705ec072.js → [id]-6f77d8647fca71e0.js} +1 -1
  58. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-651b10cae0e99a05.js → new-821dd1269834cfa2.js} +1 -1
  59. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-3a4cd3fe9094fba3.js +1 -0
  60. fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-78d4e0c14654148b.js → integrations-57e618d7b16ac69a.js} +1 -1
  61. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-b9d6886a3f157120.js → [id]-0d0bb9eb004a3336.js} +1 -1
  62. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-9c1fd7867b2d80d7.js → messaging-f9320a58f489f5b7.js} +1 -1
  63. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-fc959ed21dbce38c.js → storage-d0cfa8aeddd43a40.js} +1 -1
  64. fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-1433c9f9501a884f.js → privacy-requests-5a5edc8a4aa7c30a.js} +1 -1
  65. fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-da9ced1e20681154.js → datamap-6903f42a0412bfa6.js} +1 -1
  66. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-1a8d05e19f06d857.js → consent-be47008304106395.js} +1 -1
  67. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-49d86b9ca4523ca6.js → custom-fields-ae1b57589da7b175.js} +1 -1
  68. fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-c65acd2b7ab04753.js → organization-a596a96cb8d0aa8e.js} +1 -1
  69. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-4a48b4f996a64957.js → [id]-5a43f108d8047d5b.js} +1 -1
  70. fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-ca625b1296a029f0.js → taxonomy-1b3f2d4bcb0e164d.js} +1 -1
  71. fides/ui-build/static/admin/_next/static/chunks/{webpack-4502d4d67006b48f.js → webpack-678e89d68dbcd94f.js} +1 -1
  72. fides/ui-build/static/admin/_next/static/css/650df9c348000a26.css +1 -0
  73. fides/ui-build/static/admin/_next/static/css/{dbcf63488933a4d5.css → 98fab0b3e6aa43ed.css} +1 -1
  74. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  75. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  76. fides/ui-build/static/admin/add-systems.html +1 -1
  77. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  78. fides/ui-build/static/admin/consent/configure.html +1 -1
  79. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  80. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  81. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  82. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  83. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  84. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  85. fides/ui-build/static/admin/consent/properties.html +1 -1
  86. fides/ui-build/static/admin/consent/reporting.html +1 -1
  87. fides/ui-build/static/admin/consent.html +1 -1
  88. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  89. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  90. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  91. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  92. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  93. fides/ui-build/static/admin/data-catalog.html +1 -1
  94. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  95. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  96. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  97. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  98. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  99. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  100. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  101. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  102. fides/ui-build/static/admin/datamap.html +1 -1
  103. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  104. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  105. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  106. fides/ui-build/static/admin/dataset/new.html +1 -1
  107. fides/ui-build/static/admin/dataset.html +1 -1
  108. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  109. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  110. fides/ui-build/static/admin/datastore-connection.html +1 -1
  111. fides/ui-build/static/admin/index.html +1 -1
  112. fides/ui-build/static/admin/integrations/[id].html +1 -1
  113. fides/ui-build/static/admin/integrations.html +1 -1
  114. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  115. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  116. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  117. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  118. fides/ui-build/static/admin/lib/fides.js +2 -2
  119. fides/ui-build/static/admin/login/[provider].html +1 -1
  120. fides/ui-build/static/admin/login.html +1 -1
  121. fides/ui-build/static/admin/messaging/[id].html +1 -1
  122. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  123. fides/ui-build/static/admin/messaging.html +1 -1
  124. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  125. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  126. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  127. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  128. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  129. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  130. fides/ui-build/static/admin/poc/forms.html +1 -1
  131. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  132. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  133. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  134. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  135. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  136. fides/ui-build/static/admin/privacy-requests.html +1 -1
  137. fides/ui-build/static/admin/properties/[id].html +1 -1
  138. fides/ui-build/static/admin/properties/add-property.html +1 -1
  139. fides/ui-build/static/admin/properties.html +1 -1
  140. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  141. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  142. fides/ui-build/static/admin/settings/about.html +1 -1
  143. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  144. fides/ui-build/static/admin/settings/consent.html +1 -1
  145. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  146. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  147. fides/ui-build/static/admin/settings/domains.html +1 -1
  148. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  149. fides/ui-build/static/admin/settings/locations.html +1 -1
  150. fides/ui-build/static/admin/settings/organization.html +1 -1
  151. fides/ui-build/static/admin/settings/regulations.html +1 -1
  152. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  153. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  154. fides/ui-build/static/admin/systems.html +1 -1
  155. fides/ui-build/static/admin/taxonomy.html +1 -1
  156. fides/ui-build/static/admin/user-management/new.html +1 -1
  157. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  158. fides/ui-build/static/admin/user-management.html +1 -1
  159. fides/ui-build/static/admin/_next/static/LRCvfOqg1kP5kGnkD84G4/_buildManifest.js +0 -1
  160. fides/ui-build/static/admin/_next/static/chunks/768-034e121688a3bbdd.js +0 -1
  161. fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-e4bacfc5c2ed2324.js +0 -1
  162. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4b0bb4ccfb237d41.js +0 -1
  163. fides/ui-build/static/admin/_next/static/css/43d0c0fc207767eb.css +0 -1
  164. {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/WHEEL +0 -0
  165. {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/entry_points.txt +0 -0
  166. {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/licenses/LICENSE +0 -0
  167. {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/top_level.txt +0 -0
  168. /fides/ui-build/static/admin/_next/static/{LRCvfOqg1kP5kGnkD84G4 → Pc_eOxj5LbY3XOShbrjSX}/_ssgManifest.js +0 -0
  169. /fides/ui-build/static/admin/_next/static/chunks/{1099-b973dfdfc5c3de90.js → 1099-79646e64f26d62fa.js} +0 -0
  170. /fides/ui-build/static/admin/_next/static/chunks/{1817-74692de5d760a664.js → 1817-3d9e110e007853f0.js} +0 -0
  171. /fides/ui-build/static/admin/_next/static/chunks/{2921-2d9261e8e2e127c0.js → 2921-52328140bc420d0f.js} +0 -0
  172. /fides/ui-build/static/admin/_next/static/chunks/{3620-ebd89f91b82661e8.js → 3620-31ebb43dba84cbbd.js} +0 -0
  173. /fides/ui-build/static/admin/_next/static/chunks/{3872-660aba76572c811b.js → 3872-a91143aa35fa8ef8.js} +0 -0
  174. /fides/ui-build/static/admin/_next/static/chunks/{3923-c6cdc2e5278ae9a7.js → 3923-bb2417b8dcade7a4.js} +0 -0
  175. /fides/ui-build/static/admin/_next/static/chunks/{401-8bc2c6c84172c096.js → 401-4af0a912e249d30f.js} +0 -0
  176. /fides/ui-build/static/admin/_next/static/chunks/{4121-9a4ebceff9accb7f.js → 4121-c8d5d717e31899e1.js} +0 -0
  177. /fides/ui-build/static/admin/_next/static/chunks/{5258-bc4a25d43e4aa07d.js → 5258-b0de22a8521686ab.js} +0 -0
  178. /fides/ui-build/static/admin/_next/static/chunks/{5487-37c78c4799ba5223.js → 5487-8c635883dcaa9c2a.js} +0 -0
  179. /fides/ui-build/static/admin/_next/static/chunks/{549-2213dc1c34143cda.js → 549-38ea1d91ee2addaa.js} +0 -0
  180. /fides/ui-build/static/admin/_next/static/chunks/{6084-55cc66e7c94f0686.js → 6084-0096d7de64ef8015.js} +0 -0
  181. /fides/ui-build/static/admin/_next/static/chunks/{6853-313ce974d33432fb.js → 6853-b17673391117c976.js} +0 -0
  182. /fides/ui-build/static/admin/_next/static/chunks/{6954-021bd06d0ab59c3c.js → 6954-9d46e2276c461c26.js} +0 -0
  183. /fides/ui-build/static/admin/_next/static/chunks/{7476-2fc286c2a9125eb8.js → 7476-d1b0af9ade392e5b.js} +0 -0
  184. /fides/ui-build/static/admin/_next/static/chunks/{7630-b9a41262a69edf5e.js → 7630-da0a7ce4e3a0d62c.js} +0 -0
  185. /fides/ui-build/static/admin/_next/static/chunks/{787-8df7118742e84908.js → 787-3499983fa346b380.js} +0 -0
  186. /fides/ui-build/static/admin/_next/static/chunks/{79-d2ace89108ead8ae.js → 79-f197fc4db8d530e5.js} +0 -0
  187. /fides/ui-build/static/admin/_next/static/chunks/{796-2de6dac5f311d54a.js → 796-db1e30119ea973c7.js} +0 -0
  188. /fides/ui-build/static/admin/_next/static/chunks/{8002-cfdc6574bd841892.js → 8002-971e29181f72edd1.js} +0 -0
  189. /fides/ui-build/static/admin/_next/static/chunks/{9826-d9addbd5ac990fa4.js → 9826-b0b3d3cfb13bfbc1.js} +0 -0
  190. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-9644eb282f2dcd71.js → 404-471a6b18e712f050.js} +0 -0
  191. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-4f164eab0960bbe0.js → multiple-4b79a1652297ed9a.js} +0 -0
  192. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-61090926e5f98a5d.js → add-vendors-1ca9df7ca91bd101.js} +0 -0
  193. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-17ffe691b91cee2e.js → configure-07bdbc9ae4137db4.js} +0 -0
  194. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-95c13bca5c1e575e.js → [id]-f80cf2d3966816fd.js} +0 -0
  195. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-609399510a60beb9.js → privacy-experience-2795cd4115a77c94.js} +0 -0
  196. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d7d8f228ac74b26e.js → [id]-e02921dc82dccbb1.js} +0 -0
  197. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-821c0f82d5a2b7d4.js → new-98f9e4ba3610628a.js} +0 -0
  198. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-8365782543cf6ab9.js → privacy-notices-17ed82777810d1c6.js} +0 -0
  199. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-40a7aa65f4d13cf9.js → properties-226efa1dcd41437f.js} +0 -0
  200. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-70c5c6aa5389d99f.js → consent-09610b10923d9268.js} +0 -0
  201. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-3207f62e5012611b.js → [projectUrn]-d8e776f1e64e4ba8.js} +0 -0
  202. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-7b42dee0fb696658.js → projects-75b9629b0d9cdf96.js} +0 -0
  203. /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-31a45ea2ca2a7f04.js → data-catalog-6984c033b8fe3a13.js} +0 -0
  204. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-d9795e00f39cf4e9.js → action-center-9c428d3ef0985915.js} +0 -0
  205. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-cb8d303f56091bd5.js → [...subfieldNames]-8f58192dcb54883d.js} +0 -0
  206. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-401c8be76d9daec7.js → [collectionName]-dcb4ab380a77aa1e.js} +0 -0
  207. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-97e2d375b21cfe43.js → [datasetId]-6f16d43071fb9c11.js} +0 -0
  208. /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-e3c763f8e71f8e24.js → dataset-674bb3940f088ecc.js} +0 -0
  209. /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-03c54bc9fb18d2b0.js → datastore-connection-23e4caf79faa8106.js} +0 -0
  210. /fides/ui-build/static/admin/_next/static/chunks/pages/{index-3d19b9ffa15a928a.js → index-23eb64eed81dcb69.js} +0 -0
  211. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-72cb360a6d14e701.js → [id]-c9a323eb6a929476.js} +0 -0
  212. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-0ed67cf774d5cbf5.js → add-template-b9bb09e46921a590.js} +0 -0
  213. /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-b06a2204e2a5b667.js → messaging-82c631a12b5a008c.js} +0 -0
  214. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-7050899b3f792129.js → ant-components-bc0e2adf6e0d3ac7.js} +0 -0
  215. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-7c3466f4d5797e55.js → AntForm-86ffcc1ad3fa912e.js} +0 -0
  216. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-8de252f25871bab9.js → FormikAntFormItem-ec04f595465bdf69.js} +0 -0
  217. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-cd6de0da47f980cf.js → FormikControlled-41d309754ff0c1de.js} +0 -0
  218. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-7c238a881fe30e28.js → FormikField-cab1f78cec7808f9.js} +0 -0
  219. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-d4f3e8f67f76f146.js → forms-eb6058221403b156.js} +0 -0
  220. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-c9220e20c1d93758.js → table-migration-38360083348c3d6c.js} +0 -0
  221. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-44a4a638dcb2722a.js → configure-72ca94ec5ed85733.js} +0 -0
  222. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-16e0b42cb342aa5f.js → [id]-5ec775c4904fdbfe.js} +0 -0
  223. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-ebd114a86b809391.js → add-property-a6812c0916f2949e.js} +0 -0
  224. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-901be5fa4a48f48c.js → properties-da734840e4f9d04b.js} +0 -0
  225. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-0174554c0ac5958f.js → alpha-3e72e9f91991c119.js} +0 -0
  226. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-6f45ddbf675e66d2.js → about-6aab092f4871cecb.js} +0 -0
  227. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-275c49e6089c5c9f.js → [purpose_id]-9495e2eb506606c7.js} +0 -0
  228. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-f71b4b95d91db926.js → domain-records-23a6d7a921150188.js} +0 -0
  229. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-a595cad18cf04673.js → domains-2a9e8859ab4d9de6.js} +0 -0
  230. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-6f7f9751689b042c.js → email-templates-4f9f0fdf9925ae90.js} +0 -0
  231. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-e2c88d7f779fe604.js → locations-46f7af35cee4a8bb.js} +0 -0
  232. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-c1c699eeb40a9dc0.js → regulations-6ed5fc2410e00857.js} +0 -0
  233. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-a274e2191b87e315.js → test-datasets-86811e3cda277e77.js} +0 -0
  234. /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-30debc87925634d9.js → systems-045a841e22e85ea8.js} +0 -0
  235. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-7a3180b235eb8846.js → [id]-05d61c80a556b2d5.js} +0 -0
  236. /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-5e2d0acf575252ca.js → user-management-2cab41659f1ee7da.js} +0 -0
@@ -540,6 +540,7 @@ def _get_request_task_ids_in_progress(
540
540
 
541
541
 
542
542
  # pylint: disable=too-many-branches
543
+ # pylint: disable=too-many-statements
543
544
  @celery_app.task(base=DatabaseTask, bind=True)
544
545
  def requeue_interrupted_tasks(self: DatabaseTask) -> None:
545
546
  """
@@ -660,8 +661,24 @@ def requeue_interrupted_tasks(self: DatabaseTask) -> None:
660
661
  break
661
662
 
662
663
  # If the task ID is not cached, we can't check if it's running
663
- # This means the subtask is stuck - cancel the entire privacy request
664
+ # This means the subtask is stuck - but we need to handle this differently
665
+ # based on the privacy request status
664
666
  if not subtask_id:
667
+ if (
668
+ privacy_request.status
669
+ == PrivacyRequestStatus.requires_input
670
+ ):
671
+ # For requires_input status, don't automatically error the request
672
+ # as it's intentionally waiting for user input
673
+ logger.warning(
674
+ f"No task ID found for request task {request_task_id} "
675
+ f"(privacy request {privacy_request.id}) in requires_input status - "
676
+ f"keeping request in current status as it may be waiting for manual input"
677
+ )
678
+ should_requeue = False
679
+ break
680
+
681
+ # For other statuses, cancel the entire privacy request
665
682
  _cancel_interrupted_tasks_and_error_privacy_request(
666
683
  db,
667
684
  privacy_request,
@@ -51,13 +51,7 @@ def upload(
51
51
  config.secrets is not None,
52
52
  )
53
53
 
54
- if config.secrets:
55
- logger.debug("Storage config secrets type: {}", type(config.secrets))
56
- if isinstance(config.secrets, dict):
57
- logger.debug("Storage config secrets keys: {}", list(config.secrets.keys()))
58
- else:
59
- logger.debug("Storage config secrets is not a dict: {}", config.secrets)
60
- else:
54
+ if not config.secrets:
61
55
  logger.warning("Storage config has no secrets!")
62
56
 
63
57
  uploader: Any = _get_uploader_from_config_type(config.type) # type: ignore
@@ -130,19 +124,6 @@ def _s3_uploader(
130
124
  config.secrets is not None,
131
125
  )
132
126
 
133
- if config.secrets:
134
- logger.debug(
135
- "Config secrets keys: {}",
136
- (
137
- list(config.secrets.keys())
138
- if isinstance(config.secrets, dict)
139
- else "Not a dict"
140
- ),
141
- )
142
- logger.debug("Config secrets type: {}", type(config.secrets))
143
- else:
144
- logger.warning("Config secrets is None or empty!")
145
-
146
127
  enable_streaming = config.details.get(StorageDetails.ENABLE_STREAMING.value, False)
147
128
  file_key: str = _construct_file_key(privacy_request.id, config, enable_streaming)
148
129
 
@@ -154,7 +135,6 @@ def _s3_uploader(
154
135
  file_key = f"{privacy_request.id}.zip"
155
136
  # Use streaming upload for better memory efficiency
156
137
  logger.debug("Using streaming S3 upload for {}", file_key)
157
- logger.debug("Calling upload_to_s3_streaming with secrets: {}", config.secrets)
158
138
  return upload_to_s3_streaming(
159
139
  config.secrets, # type: ignore
160
140
  data,
@@ -17,7 +17,6 @@ def stream_dsr_buffer_to_storage(
17
17
  bucket_name: str,
18
18
  file_key: str,
19
19
  dsr_buffer: BytesIO,
20
- content_type: str = "application/zip",
21
20
  ) -> None:
22
21
  """Stream DSR buffer to storage using smart-open streaming.
23
22
 
@@ -29,15 +28,12 @@ def stream_dsr_buffer_to_storage(
29
28
  bucket_name: Storage bucket name
30
29
  file_key: File key in storage
31
30
  dsr_buffer: Pre-generated DSR report buffer (BytesIO)
32
- content_type: MIME type for the uploaded file (defaults to application/zip)
33
31
  """
34
32
  # Get the content from the buffer
35
33
  content = dsr_buffer.getvalue()
36
34
  try:
37
35
  # Use smart-open's streaming upload for efficient memory usage
38
- with storage_client.stream_upload(
39
- bucket_name, file_key, content_type=content_type
40
- ) as upload_stream:
36
+ with storage_client.stream_upload(bucket_name, file_key) as upload_stream:
41
37
  upload_stream.write(content)
42
38
 
43
39
  except Exception as e:
@@ -7,7 +7,7 @@ from typing import Any, Optional
7
7
  from fideslang.validation import AnyHttpUrlString
8
8
  from loguru import logger
9
9
 
10
- from fides.api.schemas.storage.storage import AWSAuthMethod, StorageSecrets
10
+ from fides.api.schemas.storage.storage import AWSAuthMethod
11
11
  from fides.api.service.storage.s3 import create_presigned_url_for_s3
12
12
  from fides.api.service.storage.streaming.base_storage_client import BaseStorageClient
13
13
  from fides.api.util.aws_util import get_s3_client
@@ -20,17 +20,19 @@ class S3StorageClient(BaseStorageClient):
20
20
  generation for the smart-open storage client.
21
21
  """
22
22
 
23
- def __init__(self, storage_secrets: dict[StorageSecrets, Any]):
23
+ def __init__(self, auth_method: str, storage_secrets: dict[str, Any]):
24
24
  """Initialize the storage client with secrets.
25
25
 
26
26
  Args:
27
- storage_secrets: Provider-specific storage credentials and configuration using StorageSecrets enum keys
27
+ storage_secrets: Provider-specific storage credentials and configuration using string keys
28
+ (e.g., "aws_access_key_id", "region_name") from format_secrets()
28
29
  """
29
30
  super().__init__(storage_secrets)
30
- self.storage_secrets: dict[StorageSecrets, Any] = storage_secrets
31
+ self.storage_secrets: dict[str, Any] = storage_secrets
32
+ self.auth_method = auth_method
31
33
 
32
34
  def build_uri(self, bucket: str, key: str) -> str:
33
- """Build the S3 URI for the storage location.
35
+ """Build S3 URI for the given bucket and key.
34
36
 
35
37
  Args:
36
38
  bucket: S3 bucket name
@@ -45,26 +47,75 @@ class S3StorageClient(BaseStorageClient):
45
47
 
46
48
  def get_transport_params(self) -> dict[str, Any]:
47
49
  """Get S3-specific transport parameters for smart-open.
50
+ Type annotation: get_s3_client returns a boto3 S3 client object, not a Session
51
+ This is what smart-open expects for the "client" transport parameter
48
52
 
49
53
  Returns:
50
54
  Dictionary of S3 transport parameters for smart-open
51
55
  """
52
- params = {}
53
-
54
- if StorageSecrets.AWS_ACCESS_KEY_ID in self.storage_secrets:
55
- params["access_key"] = self.storage_secrets[
56
- StorageSecrets.AWS_ACCESS_KEY_ID
57
- ]
58
- if StorageSecrets.AWS_SECRET_ACCESS_KEY in self.storage_secrets:
59
- params["secret_key"] = self.storage_secrets[
60
- StorageSecrets.AWS_SECRET_ACCESS_KEY
61
- ]
62
- if StorageSecrets.REGION_NAME in self.storage_secrets:
63
- params["region"] = self.storage_secrets[StorageSecrets.REGION_NAME]
64
- if StorageSecrets.AWS_ASSUME_ROLE in self.storage_secrets:
65
- params["assume_role_arn"] = self.storage_secrets[
66
- StorageSecrets.AWS_ASSUME_ROLE
67
- ]
56
+ params: dict[str, Any] = {}
57
+
58
+ # Create S3 client for smart-open
59
+ try:
60
+ # Determine auth method based on available credentials
61
+ if self.auth_method == AWSAuthMethod.AUTOMATIC.value:
62
+
63
+ # For automatic authentication, check if region is available
64
+ if not self.storage_secrets.get("region_name", None):
65
+ logger.warning(
66
+ "No region specified in storage secrets for automatic authentication"
67
+ "This may cause credential issues - consider setting a default region"
68
+ )
69
+
70
+ # Extract assume_role_arn if present
71
+ assume_role_arn = None
72
+ if (
73
+ "assume_role_arn" in self.storage_secrets
74
+ and self.storage_secrets["assume_role_arn"]
75
+ ):
76
+ assume_role_arn = self.storage_secrets["assume_role_arn"]
77
+ logger.debug(f"Using assume role ARN: {assume_role_arn}")
78
+
79
+ # Create S3 client using existing utility
80
+ # get_s3_client returns a boto3 S3 client, not a Session
81
+ s3_client: Any = None
82
+ try:
83
+ s3_client = get_s3_client(
84
+ self.auth_method, self.storage_secrets, assume_role_arn # type: ignore
85
+ )
86
+ logger.debug("Successfully created S3 client")
87
+ except Exception as e:
88
+ # For automatic authentication, try to provide more helpful error messages
89
+ if self.auth_method == AWSAuthMethod.AUTOMATIC.value:
90
+ logger.error(
91
+ f"Failed to create S3 client with automatic authentication: {e}. "
92
+ "This usually means AWS credentials are not available in the environment"
93
+ "Please ensure AWS credentials are configured via environment variables, IAM roles, or AWS profiles"
94
+ )
95
+ raise ValueError(
96
+ f"Automatic AWS authentication failed: {e}. Please check your AWS credential configuration."
97
+ )
98
+ raise
99
+
100
+ params["client"] = s3_client
101
+
102
+ except Exception as e:
103
+ logger.error(f"Failed to create S3 client for smart-open: {e}")
104
+ raise
105
+
106
+ # Include credentials at top level for compatibility
107
+ # Note: When using an S3 client, these credential parameters are not needed
108
+ # and will be ignored by smart-open, causing warnings
109
+ # Only include them if no S3 client is provided (fallback scenario)
110
+ if not params.get("client"):
111
+ for key, transport_key in [
112
+ ("aws_access_key_id", "access_key"),
113
+ ("aws_secret_access_key", "secret_key"),
114
+ ("region_name", "region"),
115
+ ("assume_role_arn", "assume_role_arn"),
116
+ ]:
117
+ if key in self.storage_secrets and self.storage_secrets[key]:
118
+ params[transport_key] = self.storage_secrets[key]
68
119
 
69
120
  return params
70
121
 
@@ -85,28 +136,15 @@ class S3StorageClient(BaseStorageClient):
85
136
  Exception: If presigned URL generation fails
86
137
  """
87
138
  try:
88
- # Storage secrets are already in the right format for get_s3_client
89
- # get_s3_client expects dict[StorageSecrets, Any] with enum keys
90
- s3_secrets = self.storage_secrets
91
-
92
- # Determine auth method based on available credentials
93
- # If AWS credentials are present, use SECRET_KEYS, otherwise use AUTOMATIC
94
- if (
95
- StorageSecrets.AWS_ACCESS_KEY_ID in self.storage_secrets
96
- and StorageSecrets.AWS_SECRET_ACCESS_KEY in self.storage_secrets
97
- and self.storage_secrets[StorageSecrets.AWS_ACCESS_KEY_ID]
98
- and self.storage_secrets[StorageSecrets.AWS_SECRET_ACCESS_KEY]
99
- ):
100
- auth_method = AWSAuthMethod.SECRET_KEYS.value
101
- else:
102
- auth_method = AWSAuthMethod.AUTOMATIC.value
103
-
104
139
  # Extract assume_role_arn if present for role assumption
105
140
  assume_role_arn = None
106
- if StorageSecrets.AWS_ASSUME_ROLE in self.storage_secrets:
107
- assume_role_arn = self.storage_secrets[StorageSecrets.AWS_ASSUME_ROLE]
141
+ if "assume_role_arn" in self.storage_secrets:
142
+ assume_role_arn = self.storage_secrets["assume_role_arn"]
108
143
 
109
- s3_client = get_s3_client(auth_method, s3_secrets, assume_role_arn)
144
+ # get_s3_client returns a boto3 S3 client, not a Session
145
+ s3_client: Any = get_s3_client(
146
+ self.auth_method, self.storage_secrets, assume_role_arn # type: ignore
147
+ )
110
148
  return create_presigned_url_for_s3(s3_client, bucket, key, ttl_seconds)
111
149
  except Exception as e:
112
150
  logger.error(f"Failed to generate S3 presigned URL: {e}")
@@ -54,7 +54,8 @@ def upload_to_s3_streaming(
54
54
  return response
55
55
 
56
56
  try:
57
- storage_client = SmartOpenStorageClient("s3", formatted_secrets)
57
+ logger.debug("Creating SmartOpenStorageClient with formatted secrets")
58
+ storage_client = SmartOpenStorageClient("s3", auth_method, formatted_secrets)
58
59
 
59
60
  # Create upload config for the streaming interface
60
61
  upload_config = StorageUploadConfig(
@@ -92,6 +93,10 @@ def _process_storage_secrets_input(
92
93
  """Process input and convert to string-keyed dictionary."""
93
94
  final_secrets: dict[str, Any] = {}
94
95
 
96
+ logger.debug(
97
+ f"Processing storage secrets input of type: {type(storage_secrets).__name__}"
98
+ )
99
+
95
100
  if isinstance(storage_secrets, StorageSecretsS3):
96
101
  # Convert StorageSecretsS3 model directly to string keys
97
102
  for key, value in storage_secrets.model_dump().items():
@@ -133,6 +138,7 @@ def _validate_aws_credentials(final_secrets: dict[str, Any]) -> None:
133
138
  else:
134
139
  # AUTOMATIC authentication - check if region is provided
135
140
  has_region = "region_name" in final_secrets and final_secrets["region_name"]
141
+
136
142
  if not has_region:
137
143
  raise ValueError(
138
144
  "Missing required region_name for AUTOMATIC authentication. "
@@ -140,13 +146,6 @@ def _validate_aws_credentials(final_secrets: dict[str, Any]) -> None:
140
146
  )
141
147
 
142
148
 
143
- def _set_default_region(final_secrets: dict[str, Any]) -> None:
144
- """Set default region if missing."""
145
- if "region_name" not in final_secrets or not final_secrets["region_name"]:
146
- logger.debug("Setting default region to 'us-east-1'")
147
- final_secrets["region_name"] = "us-east-1"
148
-
149
-
150
149
  def format_secrets(
151
150
  storage_secrets: Union[StorageSecretsS3, dict[StorageSecrets, Any]] # type: ignore[misc]
152
151
  ) -> dict[str, Any]:
@@ -156,8 +155,8 @@ def format_secrets(
156
155
  This function handles multiple credential formats and processes them through several stages:
157
156
  1. Input processing: Accepts either StorageSecretsS3 models (from API) or raw dicts (from database)
158
157
  2. Key normalization: Converts all keys to string format for consistency
159
- 3. Validation: Ensures required AWS credentials are present based on auth method
160
- 4. Default setting: Sets default region if missing (after validation)
158
+ 3. Default setting: Sets default region if missing (before validation for better automatic auth support)
159
+ 4. Validation: Ensures required AWS credentials are present based on auth method
161
160
  5. Return: Returns string-keyed dict ready for S3StorageClient
162
161
 
163
162
  Input formats:
@@ -179,18 +178,7 @@ def format_secrets(
179
178
  Raises:
180
179
  ValueError: If required AWS credentials are missing for the chosen auth method
181
180
  """
182
- logger.debug("format_secrets called with type: {}", type(storage_secrets).__name__)
183
-
184
- # Stage 1: Process input and create final format directly
185
181
  final_secrets = _process_storage_secrets_input(storage_secrets)
186
-
187
- # Stage 2: Validate required credentials BEFORE setting defaults
188
182
  _validate_aws_credentials(final_secrets)
189
183
 
190
- # Stage 3: Set default region if missing (after validation)
191
- _set_default_region(final_secrets)
192
-
193
- logger.debug(
194
- "format_secrets completed successfully with {} keys", len(final_secrets)
195
- )
196
184
  return final_secrets
@@ -29,7 +29,12 @@ class SmartOpenStorageClient:
29
29
 
30
30
  min_part_size: int = MIN_PART_SIZE
31
31
 
32
- def __init__(self, storage_type: str, storage_secrets: Any):
32
+ def __init__(
33
+ self,
34
+ storage_type: str,
35
+ auth_method: Optional[str],
36
+ storage_secrets: Any,
37
+ ):
33
38
  """Initialize the smart-open storage client.
34
39
 
35
40
  Args:
@@ -38,9 +43,10 @@ class SmartOpenStorageClient:
38
43
  Will be passed to the specific storage client implementation.
39
44
  """
40
45
  self.storage_type = StorageClientFactory._normalize_storage_type(storage_type)
46
+ self.auth_method = auth_method
41
47
  self.storage_secrets = storage_secrets
42
48
  self._provider_client = StorageClientFactory.create_client(
43
- storage_type, storage_secrets
49
+ storage_type, auth_method, storage_secrets
44
50
  )
45
51
 
46
52
  def _build_uri(self, bucket: str, key: str) -> str:
@@ -216,7 +222,6 @@ class SmartOpenStorageClient:
216
222
  self,
217
223
  bucket: str,
218
224
  key: str,
219
- content_type: Optional[str] = None,
220
225
  ) -> Any:
221
226
  """Get a writable stream for uploading data.
222
227
 
@@ -225,7 +230,6 @@ class SmartOpenStorageClient:
225
230
  Args:
226
231
  bucket: Storage bucket/container name
227
232
  key: Object key/path
228
- content_type: MIME type of the object
229
233
 
230
234
  Returns:
231
235
  Writable file-like object
@@ -233,9 +237,6 @@ class SmartOpenStorageClient:
233
237
  uri = self._build_uri(bucket, key)
234
238
  transport_params = self._get_transport_params()
235
239
 
236
- if content_type:
237
- transport_params["content_type"] = content_type
238
-
239
240
  return smart_open.open(uri, "wb", transport_params=transport_params)
240
241
 
241
242
  @retry_cloud_storage_operation(