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.
- {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/RECORD +231 -231
- fides/_version.py +3 -3
- fides/api/api/v1/endpoints/dsr_package_link.py +3 -1
- fides/api/api/v1/endpoints/oauth_endpoints.py +1 -0
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +2 -1
- fides/api/oauth/utils.py +9 -6
- fides/api/schemas/enums/integration_feature.py +3 -0
- fides/api/schemas/saas/connector_template.py +5 -0
- fides/api/service/connectors/saas/connector_registry_service.py +7 -0
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +253 -71
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +4 -2
- fides/api/service/privacy_request/dsr_package/templates/collection_index.html +3 -1
- fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +1 -1
- fides/api/service/privacy_request/request_runner_service.py +11 -2
- fides/api/service/privacy_request/request_service.py +18 -1
- fides/api/service/storage/storage_uploader_service.py +1 -21
- fides/api/service/storage/streaming/dsr_storage.py +1 -5
- fides/api/service/storage/streaming/s3/s3_storage_client.py +78 -40
- fides/api/service/storage/streaming/s3/streaming_s3.py +9 -21
- fides/api/service/storage/streaming/smart_open_client.py +8 -7
- fides/api/service/storage/streaming/smart_open_streaming_storage.py +109 -196
- fides/api/service/storage/streaming/storage_client_factory.py +7 -3
- fides/api/service/storage/util.py +579 -0
- fides/api/task/manual/manual_task_graph_task.py +11 -9
- fides/api/util/connection_type.py +3 -20
- fides/api/util/saas_util.py +12 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/Pc_eOxj5LbY3XOShbrjSX/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1345-b60d1f3442379c73.js → 1345-5e1c5b66e25c566e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3729-ccf90cdaae158f39.js → 3729-a1ca1608efc11ac4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3847-2759bf1f47a1d29e.js → 3847-230bf61b053bc706.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3855-4174a4d4c205d6e8.js → 3855-ef5194cdb228beb6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4164-355644b916ae0094.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4608-4d31340b0d0157c1.js → 4608-23bbd4c3c4a59f42.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4786-aaef673b30c19e2e.js → 4786-0827aae7aceadd22.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4808-a654c7f7a1ca62c8.js → 4808-78ca630f2d2503cd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4844-cd7e1d0c7bb94094.js → 4844-46324c3d848b8b6a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9046-c44e41da49338c6c.js → 9046-712156d461165f56.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9676.b7d5d1d90b9da224.js → 9676.9fd9552ef744c717.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9951-6ee5c0a23951a07f.js → 9951-a88367a129b724ba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-284cba7174fa1f16.js → _app-ef8e1c986bc5b795.js} +11 -11
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-42b7fd34712f49bd.js → manual-9dc7e70ab5b05723.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-985d3c9179e69d7f.js → add-systems-1632a59203fe8eab.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-28b192e2c074b0f3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-adc500a03e239857.js → [resourceUrn]-da1a48336daff6f8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-c8b3d090e4ba60d3.js → [resourceUrn]-470da05db63767cd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-6172c2eb539319fd.js → [systemId]-2f0a33ef9ba1f1da.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-945d354ff057fb03.js → [monitorId]-e9d4f25b20ff6781.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-657833fd8528280f.js → activity-b6ae7adb8ef0b525.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-22eec362dfbb1d2a.js → [resourceUrn]-c3a97e6721ca0abe.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-4decce5ef996e563.js → detection-a0a7de552ef71f5b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-01acdd1ad492fd89.js → [resourceUrn]-109754fec0755339.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-85fdbf4cde60d910.js → discovery-88654783b06b3b21.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-3a4b89fb21d14753.js → datamap-89136e6800dc9369.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-40ef544ca1f2c9b9.js → new-97f06e21580f1f6a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-152e5d15705ec072.js → [id]-6f77d8647fca71e0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-651b10cae0e99a05.js → new-821dd1269834cfa2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-3a4cd3fe9094fba3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-78d4e0c14654148b.js → integrations-57e618d7b16ac69a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-b9d6886a3f157120.js → [id]-0d0bb9eb004a3336.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-9c1fd7867b2d80d7.js → messaging-f9320a58f489f5b7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-fc959ed21dbce38c.js → storage-d0cfa8aeddd43a40.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-1433c9f9501a884f.js → privacy-requests-5a5edc8a4aa7c30a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-da9ced1e20681154.js → datamap-6903f42a0412bfa6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-1a8d05e19f06d857.js → consent-be47008304106395.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-49d86b9ca4523ca6.js → custom-fields-ae1b57589da7b175.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-c65acd2b7ab04753.js → organization-a596a96cb8d0aa8e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-4a48b4f996a64957.js → [id]-5a43f108d8047d5b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-ca625b1296a029f0.js → taxonomy-1b3f2d4bcb0e164d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{webpack-4502d4d67006b48f.js → webpack-678e89d68dbcd94f.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/650df9c348000a26.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{dbcf63488933a4d5.css → 98fab0b3e6aa43ed.css} +1 -1
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
- fides/ui-build/static/admin/lib/fides.js +2 -2
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/LRCvfOqg1kP5kGnkD84G4/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/768-034e121688a3bbdd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-e4bacfc5c2ed2324.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-4b0bb4ccfb237d41.js +0 -1
- fides/ui-build/static/admin/_next/static/css/43d0c0fc207767eb.css +0 -1
- {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.68.1b4.dist-info → ethyca_fides-2.69.0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{LRCvfOqg1kP5kGnkD84G4 → Pc_eOxj5LbY3XOShbrjSX}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1099-b973dfdfc5c3de90.js → 1099-79646e64f26d62fa.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1817-74692de5d760a664.js → 1817-3d9e110e007853f0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-2d9261e8e2e127c0.js → 2921-52328140bc420d0f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3620-ebd89f91b82661e8.js → 3620-31ebb43dba84cbbd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3872-660aba76572c811b.js → 3872-a91143aa35fa8ef8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-c6cdc2e5278ae9a7.js → 3923-bb2417b8dcade7a4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-8bc2c6c84172c096.js → 401-4af0a912e249d30f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4121-9a4ebceff9accb7f.js → 4121-c8d5d717e31899e1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5258-bc4a25d43e4aa07d.js → 5258-b0de22a8521686ab.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5487-37c78c4799ba5223.js → 5487-8c635883dcaa9c2a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{549-2213dc1c34143cda.js → 549-38ea1d91ee2addaa.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6084-55cc66e7c94f0686.js → 6084-0096d7de64ef8015.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-313ce974d33432fb.js → 6853-b17673391117c976.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-021bd06d0ab59c3c.js → 6954-9d46e2276c461c26.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7476-2fc286c2a9125eb8.js → 7476-d1b0af9ade392e5b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-b9a41262a69edf5e.js → 7630-da0a7ce4e3a0d62c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{787-8df7118742e84908.js → 787-3499983fa346b380.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{79-d2ace89108ead8ae.js → 79-f197fc4db8d530e5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-2de6dac5f311d54a.js → 796-db1e30119ea973c7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8002-cfdc6574bd841892.js → 8002-971e29181f72edd1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-d9addbd5ac990fa4.js → 9826-b0b3d3cfb13bfbc1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-9644eb282f2dcd71.js → 404-471a6b18e712f050.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-4f164eab0960bbe0.js → multiple-4b79a1652297ed9a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-61090926e5f98a5d.js → add-vendors-1ca9df7ca91bd101.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-17ffe691b91cee2e.js → configure-07bdbc9ae4137db4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-95c13bca5c1e575e.js → [id]-f80cf2d3966816fd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-609399510a60beb9.js → privacy-experience-2795cd4115a77c94.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d7d8f228ac74b26e.js → [id]-e02921dc82dccbb1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-821c0f82d5a2b7d4.js → new-98f9e4ba3610628a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-8365782543cf6ab9.js → privacy-notices-17ed82777810d1c6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-40a7aa65f4d13cf9.js → properties-226efa1dcd41437f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-70c5c6aa5389d99f.js → consent-09610b10923d9268.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-3207f62e5012611b.js → [projectUrn]-d8e776f1e64e4ba8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-7b42dee0fb696658.js → projects-75b9629b0d9cdf96.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-31a45ea2ca2a7f04.js → data-catalog-6984c033b8fe3a13.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-d9795e00f39cf4e9.js → action-center-9c428d3ef0985915.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-cb8d303f56091bd5.js → [...subfieldNames]-8f58192dcb54883d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-401c8be76d9daec7.js → [collectionName]-dcb4ab380a77aa1e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-97e2d375b21cfe43.js → [datasetId]-6f16d43071fb9c11.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-e3c763f8e71f8e24.js → dataset-674bb3940f088ecc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-03c54bc9fb18d2b0.js → datastore-connection-23e4caf79faa8106.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-3d19b9ffa15a928a.js → index-23eb64eed81dcb69.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-72cb360a6d14e701.js → [id]-c9a323eb6a929476.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-0ed67cf774d5cbf5.js → add-template-b9bb09e46921a590.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-b06a2204e2a5b667.js → messaging-82c631a12b5a008c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-7050899b3f792129.js → ant-components-bc0e2adf6e0d3ac7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-7c3466f4d5797e55.js → AntForm-86ffcc1ad3fa912e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-8de252f25871bab9.js → FormikAntFormItem-ec04f595465bdf69.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-cd6de0da47f980cf.js → FormikControlled-41d309754ff0c1de.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-7c238a881fe30e28.js → FormikField-cab1f78cec7808f9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-d4f3e8f67f76f146.js → forms-eb6058221403b156.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-c9220e20c1d93758.js → table-migration-38360083348c3d6c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-44a4a638dcb2722a.js → configure-72ca94ec5ed85733.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-16e0b42cb342aa5f.js → [id]-5ec775c4904fdbfe.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-ebd114a86b809391.js → add-property-a6812c0916f2949e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-901be5fa4a48f48c.js → properties-da734840e4f9d04b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-0174554c0ac5958f.js → alpha-3e72e9f91991c119.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-6f45ddbf675e66d2.js → about-6aab092f4871cecb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-275c49e6089c5c9f.js → [purpose_id]-9495e2eb506606c7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-f71b4b95d91db926.js → domain-records-23a6d7a921150188.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-a595cad18cf04673.js → domains-2a9e8859ab4d9de6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-6f7f9751689b042c.js → email-templates-4f9f0fdf9925ae90.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-e2c88d7f779fe604.js → locations-46f7af35cee4a8bb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-c1c699eeb40a9dc0.js → regulations-6ed5fc2410e00857.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-a274e2191b87e315.js → test-datasets-86811e3cda277e77.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-30debc87925634d9.js → systems-045a841e22e85ea8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-7a3180b235eb8846.js → [id]-05d61c80a556b2d5.js} +0 -0
- /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 -
|
|
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
|
|
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[
|
|
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
|
|
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[
|
|
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
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
|
107
|
-
assume_role_arn = self.storage_secrets[
|
|
141
|
+
if "assume_role_arn" in self.storage_secrets:
|
|
142
|
+
assume_role_arn = self.storage_secrets["assume_role_arn"]
|
|
108
143
|
|
|
109
|
-
|
|
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
|
-
|
|
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.
|
|
160
|
-
4.
|
|
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__(
|
|
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(
|