ethyca-fides 2.57.1rc0__py2.py3-none-any.whl → 2.58.0rc0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ethyca_fides-2.57.1rc0.dist-info → ethyca_fides-2.58.0rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.57.1rc0.dist-info → ethyca_fides-2.58.0rc0.dist-info}/RECORD +245 -230
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/1d2f04ac19f2_add_page_column_to_asset_table.py +49 -0
- fides/api/alembic/migrations/versions/7c3fbee90c78_add_user_assigned_data_uses_and_system_.py +54 -0
- fides/api/alembic/migrations/versions/9a1eacd2666b_add_description_column_to_asset.py +25 -0
- fides/api/api/v1/endpoints/config_endpoints.py +4 -2
- fides/api/api/v1/endpoints/generic_overrides.py +48 -6
- fides/api/graph/traversal.py +8 -0
- fides/api/models/asset.py +37 -18
- fides/api/models/attachment.py +11 -13
- fides/api/models/comment.py +17 -17
- fides/api/models/connectionconfig.py +1 -1
- fides/api/models/detection_discovery.py +12 -0
- fides/api/models/location_regulation_selections.py +1 -0
- fides/api/models/privacy_request/__init__.py +44 -0
- fides/api/models/privacy_request/consent.py +155 -0
- fides/api/models/privacy_request/execution_log.py +108 -0
- fides/api/models/{privacy_request.py → privacy_request/privacy_request.py} +82 -691
- fides/api/models/privacy_request/provided_identity.py +149 -0
- fides/api/models/privacy_request/request_task.py +284 -0
- fides/api/models/privacy_request/webhook.py +94 -0
- fides/api/models/sql_models.py +28 -5
- fides/api/oauth/jwt.py +18 -0
- fides/api/oauth/utils.py +11 -11
- fides/api/schemas/connection_configuration/connection_secrets_datahub.py +2 -4
- fides/api/schemas/dataset.py +22 -2
- fides/api/schemas/saas/strategy_configuration.py +1 -0
- fides/api/service/pagination/pagination_strategy_cursor.py +15 -1
- fides/api/service/pagination/pagination_strategy_link.py +1 -1
- fides/api/service/storage/s3.py +193 -0
- fides/api/service/storage/util.py +10 -0
- fides/api/tasks/storage.py +12 -111
- fides/config/__init__.py +1 -1
- fides/data/language/languages.yml +2 -0
- fides/data/location/locations.yml +244 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1100-053fc6b76c65a00f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1150-73440d7b319558e8.js → 1150-035a721a04f4451e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1376-5cea5ef9362215e8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{2397-7177ecf4ebe68feb.js → 2397-ee53235fb21b5e97.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{255-bf1797f78249d090.js → 255-7db55b0e3a0f9dea.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2fbcc6de-a6c61724c327e9fa.js +8 -0
- fides/ui-build/static/admin/_next/static/chunks/{3086-be6b52546c3efc90.js → 3086-b5054ec2c75700b9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3320-5dd62a256ecfc9c3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/355-8a77c9a1cd027f2e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3855-5c7b11871f59e0e0.js → 3855-b6b7865dedd7bc2a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3872-f3d5054bdc584eaa.js → 3872-4e053c20d546f027.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-8d165e1236ea521a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4450-36234280bee624ff.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4481-aab99ff80f707473.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4723-0a3c5e2ce143a7d0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5258-3a650be9142cf914.js → 5258-0658dc2274df6832.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5277-e8a036319456127f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5480-f5bec5e881f72f8d.js → 5480-f49696df5e8ae500.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5487-d96e1abc93f92631.js → 5487-3ad50d21cdbc9209.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5826-16e497af363a0cbc.js → 5826-e5dcb4e68cfe6289.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5973-52aee296edc44f7e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +4 -0
- fides/ui-build/static/admin/_next/static/chunks/{6315-dee79f6861c94d2d.js → 6315-fa1519cdf080f42d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6372-f1b54f3cb4888660.js → 6372-ca9c12ac8902365b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6527-0eed08abe252a918.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/678d4732-50255cc09048e643.js +2 -0
- fides/ui-build/static/admin/_next/static/chunks/{6853-cacea421af3bfc26.js → 6853-8941824350c3c1a8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-3b887fb444f9228c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7088.0e7c92a7cbb57562.js → 7088.eb76fca286e5f2e6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7453-39761c38da31257e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7751-25e0c1307988ffd7.js → 7751-a8f31c062d4cb09d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{79-ba88d0cf4c65aaa2.js → 79-f9b948ebb186900f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7980-4bd08957448dea32.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7c79804f.7a7112aece470725.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{8433-969280d321d1c3a2.js → 8433-b3008ecaf9834e7f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{8499-07507004e8275df2.js → 8499-43606100edf42fdf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/8702-d1c8296f9f6afc10.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5908-532dfbc9d930f635.js → 9014-eeae6f581158e645.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9046-80f1ea44f89fe32c.js → 9046-04bd7becea207cb1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/905-8ab919e7b274ed50.js +8 -0
- fides/ui-build/static/admin/_next/static/chunks/9187-851756440f79cd75.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9282-2bfbdca45e84e810.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9327-2cba327d10586683.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9392.97b2e3327dceb7c9.js → 9392.da35a8e778812d91.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.f297a1347ac09c56.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9767-1a23925d2cb27b51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9999-f2e40d5b13343220.js → 9999-637e0e5341f15f4a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/e3251fe7-5777b5d778e6fffa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/main-24f422f93845a596.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{main-app-2650f704701c6a7b.js → main-app-94a0711202e08b15.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-1087258931760074.js → 404-b202c0d8f6fc75c3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/_app-99e5e46de68a1e37.js +923 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-d7f60624cbc12217.js → manual-9acaab973dfe86e2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-18b0b521255289a3.js → multiple-ba975134a85588f8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-d258f0c25fa020bf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{ant-poc-b3b4d0a98450ffd1.js → ant-poc-b9932971a479f3a7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-64f83e9a2b777bf3.js → add-vendors-b34e5324461d0c87.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-723cc3d4f5740ea6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-443e6dd191ce5588.js → [id]-cf51752eb0902233.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-36162d5bea29dcc2.js → new-be194737b41ccec9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-35e9df60b21e21a6.js → privacy-experience-c946b33b0322b8ad.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-2d651499c07d12d9.js → [id]-72251b48e2e03a1e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-36e57d2f2446be82.js → new-9611dd42856d6062.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-da37afbe5ec81339.js → privacy-notices-ea57f9d6ad17e957.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-c57b209feef7c2da.js → properties-e5748812ba055a56.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-788cf0e34829af46.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-24bef021ee71e36c.js → consent-39d65f13cc8f1cf8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-6cbd79481199812d.js → [resourceUrn]-ac033a16f043e6f9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-46b9790da2fec05a.js → [projectUrn]-a29850536c85d4b8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-1f965b9c496071d1.js → projects-c44ce244122e96d5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-e7833c1c606081a9.js → [resourceUrn]-71e26d262afcaea5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-bed368d048ea6883.js → resources-305555b74c357bf2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-900004e402c31797.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-1a6cff1794122ace.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5f9ef1f99818117c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-d001337d1bb73bd1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-1d7936f05d23097f.js → activity-11b3ce9f61d9bfe9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-68122dbf449a11b4.js → [resourceUrn]-054ca46a782e99a5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-0ceaf3c555e84714.js → detection-b75dd3e4306ac18e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-22c27fe0f898ad2a.js → [resourceUrn]-1da20aeb6fc995e4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-8f2b102e19b0b8f2.js → discovery-cad50b0cc6d1050c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-9cd0c40bef77b120.js → datamap-8cb714cdd44ac40e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-d79551d4c64c398c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-7e5df4a0de7540bb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-e14c1c07658f8a10.js → [datasetId]-6ba18f92ba561114.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-803c1b577ab17ae3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-fa743ddc7f89d76b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-0616437e1a82d3ed.js → [id]-bbe1ca2793798e6b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-f8218440494e8532.js → new-abc17fef69cd951b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-a78a73b65929853a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/fides-js-docs-80b241bf6cddb72e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-94e6d589c4edf360.js → index-bfaacdb55a5a6c9f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-d4329043219fed9b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-ef8000d7388dc915.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-6b032de0a6c2c400.js → [id]-ad02e019b2467958.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-c0d6ae68ff7979c6.js → add-template-f9693cb6a0b7ded8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-1e60754abec1ee6b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-bbe5854b7d19b7e9.js → [id]-fe765154315782cf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-f5f7a8069909ef24.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-9f7eaad05e5b9292.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-4bad69cd42c9722c.js → configure-2987edc77388e85a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-d85c0d16ba09ba35.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-b4c808a8a0287d11.js → [id]-94e2faa73dd6a3e6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-5a701477b006a63b.js → add-property-630a6a3dd6502ba6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-9a1899dfe052023e.js → properties-20ca2f963906674b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-afedc48ef4e7f858.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-d073be113e9ca7b0.js → about-a49d0f84cf0cf05e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-89524101b7279f6e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-744e7bbc200557e7.js → custom-fields-52d030b1db2ca1b9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-c5cd5fb578de9515.js → domain-records-fa42d8f18df44927.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-24cba38685dc872c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-39c7ae3602ac69b2.js → email-templates-6fd6071e2009b8f2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-45e33ba111f8f8b0.js → locations-66c757325cb58467.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a08693d0d1e10bc8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-94975aeab348528e.js → regulations-c6c239996cfa6ae8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-151571cff4e85894.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-82d9af34546adaa2.js → [id]-4f5a28226575c976.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-c320df35d51dc537.js → systems-abd68fc5ddde5482.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-181ea5b0ac975239.js → taxonomy-16b4d75c49276add.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-622e16a17a11c096.js → [id]-78eaf933f755bfe8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-aa872b21bb835d34.js → user-management-6c9ad62479a7d03e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{webpack-4df2ba5ee2d40f0a.js → webpack-2c7ccac5843c4d8e.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/113d823fe71f6af0.css +1 -0
- fides/ui-build/static/admin/_next/static/css/ab65b8cc3144bfc8.css +1 -0
- fides/ui-build/static/admin/_next/static/ynWf-N1tY5b4O-l9uuHAq/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/ynWf-N1tY5b4O-l9uuHAq/_ssgManifest.js +1 -0
- 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/ant-poc.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-tcf.js +3 -3
- 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/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.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/chunks/1995-0e4fc4f7b44ed72b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2780-8328de94968d05e4.js +0 -4
- fides/ui-build/static/admin/_next/static/chunks/3005-373de16453ed7eea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3320-87c75df57a47487e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3627-fb83adac32c128e6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3662-420d9807c30008ab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3949-9888699e2ac564c4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3967-845c902667e47c4f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3e38ba78-4487e45fd4ed2479.js +0 -2
- fides/ui-build/static/admin/_next/static/chunks/4481-ca8d2c75d634b6bc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4723-81d28e5be5c7b6d7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4833-a85bd5d25ebc40c4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5246-9fc6af1a6499e0a4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5574-a4047e826a8cd4c3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5834-bd9ed01c4ab2ef5c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5960-8895f51b30c35798.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5973-67c7562997f7d5cb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-515c922445b8edc5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-6eb480eb132239c3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7044-9dc90893067f38ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7980-2597c279c30fbcda.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7c79804f.26834f883d5ad770.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8837-cf26e5ca1ae5aaf5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9282-1a5a2f6f4d9ed586.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.f4d5977a5f148797.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-4c591bd478c72650.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/main-ce7f38a12ea8c223.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/_app-9ceff88561dc1250.js +0 -909
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-136bcbd20ac59bf5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-e11ace4f273ebb47.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-97fea4ac45093cbd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-942d68a88b321067.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-00526324583139ab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-f0ab51d0d5f995de.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-2220c30c3863b5a5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-ab9bc1a3640547db.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-17ec8385bb1fa6d4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-740824dfa6823e26.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-5541ecd2f62711a5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-b8eaa9b9d3832b30.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-a6448ce6ba7f0cf5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-1a6965d78bfb26b0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-f263e6bacf0f2d19.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-b96ee3fea3920fcf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-1b0f9469cb65abfc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-eebd2f4ead19cfd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-a3fa3ad77730a03b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4769f55b138073f7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-775f55b3f80cd452.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-14def4ca3cc9cda5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-21f26c0dc4d09e9f.js +0 -1
- fides/ui-build/static/admin/_next/static/css/957d0e4fea846ff0.css +0 -1
- fides/ui-build/static/admin/_next/static/rOPehh5NMs1hjog7nTw1q/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/rOPehh5NMs1hjog7nTw1q/_ssgManifest.js +0 -1
- {ethyca_fides-2.57.1rc0.dist-info → ethyca_fides-2.58.0rc0.dist-info}/LICENSE +0 -0
- {ethyca_fides-2.57.1rc0.dist-info → ethyca_fides-2.58.0rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.57.1rc0.dist-info → ethyca_fides-2.58.0rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.57.1rc0.dist-info → ethyca_fides-2.58.0rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-d6717378b42982d5.js → new-be690621a944bfe2.js} +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
from typing import Any, Dict, Optional
|
2
2
|
|
3
3
|
import pydash
|
4
|
+
from loguru import logger
|
4
5
|
from requests import Response
|
5
6
|
|
6
7
|
from fides.api.schemas.saas.shared_schemas import SaaSRequestParams
|
@@ -15,6 +16,7 @@ class CursorPaginationStrategy(PaginationStrategy):
|
|
15
16
|
def __init__(self, configuration: CursorPaginationConfiguration):
|
16
17
|
self.cursor_param = configuration.cursor_param
|
17
18
|
self.field = configuration.field
|
19
|
+
self.has_next = configuration.has_next
|
18
20
|
|
19
21
|
def get_next_request(
|
20
22
|
self,
|
@@ -27,11 +29,15 @@ class CursorPaginationStrategy(PaginationStrategy):
|
|
27
29
|
|
28
30
|
# get the last object in the array and read the cursor value
|
29
31
|
cursor = None
|
32
|
+
has_next = None
|
30
33
|
object_list = (
|
31
34
|
pydash.get(response.json(), data_path) if data_path else response.json()
|
32
35
|
)
|
33
36
|
if object_list and isinstance(object_list, list):
|
34
|
-
|
37
|
+
last_object = object_list.pop()
|
38
|
+
cursor = pydash.get(last_object, self.field)
|
39
|
+
if self.has_next:
|
40
|
+
has_next = pydash.get(last_object, self.has_next)
|
35
41
|
|
36
42
|
# If the cursor value isn't found, try to find the value in response.json() using the field value
|
37
43
|
if cursor is None:
|
@@ -41,6 +47,14 @@ class CursorPaginationStrategy(PaginationStrategy):
|
|
41
47
|
if cursor is None:
|
42
48
|
return None
|
43
49
|
|
50
|
+
if self.has_next and has_next is None:
|
51
|
+
has_next = pydash.get(response.json(), self.has_next)
|
52
|
+
|
53
|
+
if self.has_next:
|
54
|
+
logger.debug(f"The {self.has_next} field has a value of {has_next}")
|
55
|
+
if str(has_next).lower() != "true":
|
56
|
+
return None
|
57
|
+
|
44
58
|
# add or replace cursor_param with new cursor value
|
45
59
|
request_params.query_params[self.cursor_param] = cursor
|
46
60
|
|
@@ -43,7 +43,7 @@ class LinkPaginationStrategy(PaginationStrategy):
|
|
43
43
|
|
44
44
|
if self.has_next:
|
45
45
|
has_next = pydash.get(response.json(), self.has_next)
|
46
|
-
logger.
|
46
|
+
logger.debug(f"The {self.has_next} field has a value of {has_next}")
|
47
47
|
if str(has_next).lower() != "true":
|
48
48
|
return None
|
49
49
|
|
@@ -0,0 +1,193 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import IO, Any, Dict, Optional, Tuple
|
4
|
+
|
5
|
+
from boto3.s3.transfer import TransferConfig
|
6
|
+
from botocore.exceptions import ClientError, ParamValidationError
|
7
|
+
from fideslang.validation import AnyHttpUrlString
|
8
|
+
from loguru import logger
|
9
|
+
|
10
|
+
from fides.api.schemas.storage.storage import StorageSecrets
|
11
|
+
from fides.api.util.aws_util import get_s3_client
|
12
|
+
from fides.config import CONFIG
|
13
|
+
|
14
|
+
LARGE_FILE_THRESHOLD = 5 * 1024 * 1024 # 5 MB threshold for large files
|
15
|
+
LARGE_FILE_WARNING_TEXT = (
|
16
|
+
"File is too large to display directly. Please use the provided link to download."
|
17
|
+
)
|
18
|
+
|
19
|
+
|
20
|
+
def maybe_get_s3_client(
|
21
|
+
auth_method: str, storage_secrets: Dict[StorageSecrets, Any]
|
22
|
+
) -> Any:
|
23
|
+
"""
|
24
|
+
Returns an S3 client if the client can be created successfully, otherwise raises an exception.
|
25
|
+
"""
|
26
|
+
try:
|
27
|
+
return get_s3_client(auth_method, storage_secrets)
|
28
|
+
except ClientError as e:
|
29
|
+
logger.error(
|
30
|
+
"Encountered error while uploading and generating link for S3 object: {}", e
|
31
|
+
)
|
32
|
+
raise e
|
33
|
+
except ParamValidationError as e:
|
34
|
+
raise ValueError(f"The parameters you provided are incorrect: {e}")
|
35
|
+
|
36
|
+
|
37
|
+
def create_presigned_url_for_s3(
|
38
|
+
s3_client: Any, bucket_name: str, file_key: str
|
39
|
+
) -> AnyHttpUrlString:
|
40
|
+
"""
|
41
|
+
Generates a presigned URL to share an S3 object
|
42
|
+
|
43
|
+
:param s3_client: s3 base client
|
44
|
+
:param bucket_name: string
|
45
|
+
:param file_key: string
|
46
|
+
:return: Presigned URL as string.
|
47
|
+
"""
|
48
|
+
response = s3_client.generate_presigned_url(
|
49
|
+
"get_object",
|
50
|
+
Params={"Bucket": bucket_name, "Key": file_key},
|
51
|
+
ExpiresIn=CONFIG.security.subject_request_download_link_ttl_seconds,
|
52
|
+
)
|
53
|
+
|
54
|
+
# The response contains the presigned URL
|
55
|
+
return response
|
56
|
+
|
57
|
+
|
58
|
+
def generic_upload_to_s3( # pylint: disable=R0913
|
59
|
+
storage_secrets: Dict[StorageSecrets, Any],
|
60
|
+
bucket_name: str,
|
61
|
+
file_key: str,
|
62
|
+
auth_method: str,
|
63
|
+
document: IO[bytes],
|
64
|
+
size_threshold: int = LARGE_FILE_THRESHOLD, # 5 MB threshold
|
65
|
+
) -> Optional[AnyHttpUrlString]:
|
66
|
+
"""
|
67
|
+
Uploads arbitrary data to S3 returned from an access request.
|
68
|
+
Handles both small and large uploads.
|
69
|
+
|
70
|
+
:param storage_secrets: S3 storage secrets
|
71
|
+
:param bucket_name: Name of the S3 bucket
|
72
|
+
:param file_key: Key of the file in the bucket
|
73
|
+
:param auth_method: Authentication method for S3
|
74
|
+
:param document: File contents to upload
|
75
|
+
"""
|
76
|
+
logger.info("Starting S3 Upload of {}", file_key)
|
77
|
+
|
78
|
+
s3_client = maybe_get_s3_client(auth_method, storage_secrets)
|
79
|
+
|
80
|
+
# Define a transfer configuration for multipart uploads
|
81
|
+
transfer_config = TransferConfig(
|
82
|
+
multipart_threshold=size_threshold,
|
83
|
+
multipart_chunksize=size_threshold,
|
84
|
+
)
|
85
|
+
|
86
|
+
# Use upload_fileobj for efficient uploads (handles both small and large files)
|
87
|
+
try:
|
88
|
+
# Use upload_fileobj for efficient uploads (handles both small and large files)
|
89
|
+
s3_client.upload_fileobj(
|
90
|
+
Fileobj=document,
|
91
|
+
Bucket=bucket_name,
|
92
|
+
Key=file_key,
|
93
|
+
Config=transfer_config,
|
94
|
+
)
|
95
|
+
except Exception as e:
|
96
|
+
logger.error(f"Failed to upload file {file_key} to bucket {bucket_name}: {e}")
|
97
|
+
raise e # Re-raise the exception if you want it to propagate
|
98
|
+
|
99
|
+
# Generate a presigned URL for the uploaded file
|
100
|
+
logger.info(f"Successfully uploaded file {file_key} to bucket {bucket_name}")
|
101
|
+
return create_presigned_url_for_s3(s3_client, bucket_name, file_key)
|
102
|
+
|
103
|
+
|
104
|
+
def generic_download_from_s3(
|
105
|
+
storage_secrets: Dict[StorageSecrets, Any],
|
106
|
+
bucket_name: str,
|
107
|
+
file_key: str,
|
108
|
+
auth_method: str,
|
109
|
+
) -> Optional[AnyHttpUrlString]:
|
110
|
+
"""
|
111
|
+
Returns a presigned URL for downloading an S3 object.
|
112
|
+
|
113
|
+
:param storage_secrets: S3 storage secrets
|
114
|
+
:param bucket_name: Name of the S3 bucket
|
115
|
+
:param file_key: Key of the file in the bucket
|
116
|
+
:param auth_method: Authentication method for S3
|
117
|
+
:return: A presigned URL (str) for the S3 object
|
118
|
+
"""
|
119
|
+
logger.info("Generating presigned URL for downloading file: {}", file_key)
|
120
|
+
|
121
|
+
s3_client = maybe_get_s3_client(auth_method, storage_secrets)
|
122
|
+
|
123
|
+
# Generate a presigned URL for the file
|
124
|
+
return create_presigned_url_for_s3(s3_client, bucket_name, file_key)
|
125
|
+
|
126
|
+
|
127
|
+
def generic_retrieve_from_s3(
|
128
|
+
storage_secrets: Dict[StorageSecrets, Any],
|
129
|
+
bucket_name: str,
|
130
|
+
file_key: str,
|
131
|
+
auth_method: str,
|
132
|
+
size_threshold: int = LARGE_FILE_THRESHOLD, # 5 MB threshold
|
133
|
+
) -> Tuple[str, AnyHttpUrlString]:
|
134
|
+
"""
|
135
|
+
Retrieves arbitrary data from S3.
|
136
|
+
Returns the file contents and presigned url to download the file if the file is small,
|
137
|
+
or a warning message with the presigned URL to download the file if it is large.
|
138
|
+
|
139
|
+
:param storage_secrets: S3 storage secrets
|
140
|
+
:param bucket_name: Name of the S3 bucket
|
141
|
+
:param file_key: Key of the file in the bucket
|
142
|
+
:param auth_method: Authentication method for S3
|
143
|
+
:param size_threshold: Size threshold in bytes to determine small vs large files
|
144
|
+
:return: File contents (BytesIO) for small files or a presigned URL (str) for large files
|
145
|
+
"""
|
146
|
+
logger.info("Starting S3 Retrieve of {}", file_key)
|
147
|
+
|
148
|
+
s3_client = maybe_get_s3_client(auth_method, storage_secrets)
|
149
|
+
try:
|
150
|
+
# Get the object metadata to check its size
|
151
|
+
head_response = s3_client.head_object(Bucket=bucket_name, Key=file_key)
|
152
|
+
file_size = head_response["ContentLength"]
|
153
|
+
|
154
|
+
if file_size <= size_threshold:
|
155
|
+
# File is small, return its contents and presigned url
|
156
|
+
response = s3_client.get_object(Bucket=bucket_name, Key=file_key)
|
157
|
+
return response["Body"].read(), create_presigned_url_for_s3(
|
158
|
+
s3_client, bucket_name, file_key
|
159
|
+
)
|
160
|
+
|
161
|
+
# File is large, return warning text and a presigned URL
|
162
|
+
return (
|
163
|
+
LARGE_FILE_WARNING_TEXT,
|
164
|
+
create_presigned_url_for_s3(s3_client, bucket_name, file_key),
|
165
|
+
)
|
166
|
+
|
167
|
+
except Exception as e:
|
168
|
+
logger.error("Encountered error while retrieving S3 object: {}", e)
|
169
|
+
raise e
|
170
|
+
|
171
|
+
|
172
|
+
def generic_delete_from_s3(
|
173
|
+
storage_secrets: Dict[StorageSecrets, Any],
|
174
|
+
bucket_name: str,
|
175
|
+
file_key: str,
|
176
|
+
auth_method: str,
|
177
|
+
) -> None:
|
178
|
+
"""
|
179
|
+
Deletes arbitrary data from s3
|
180
|
+
|
181
|
+
:param storage_secrets: S3 storage secrets
|
182
|
+
:param bucket_name: Name of the S3 bucket
|
183
|
+
:param file_key: Key of the file in the bucket
|
184
|
+
:param auth_method: Authentication method for S3
|
185
|
+
"""
|
186
|
+
logger.info("Starting S3 Delete of {}", file_key)
|
187
|
+
|
188
|
+
s3_client = maybe_get_s3_client(auth_method, storage_secrets)
|
189
|
+
try:
|
190
|
+
s3_client.delete_object(Bucket=bucket_name, Key=file_key)
|
191
|
+
except Exception as e:
|
192
|
+
logger.error("Encountered error while deleting s3 object: {}", e)
|
193
|
+
raise e
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
LOCAL_FIDES_UPLOAD_DIRECTORY = "fides_uploads"
|
4
|
+
|
5
|
+
|
6
|
+
def get_local_filename(file_key: str) -> str:
|
7
|
+
"""Verifies that the local storage directory exists"""
|
8
|
+
if not os.path.exists(LOCAL_FIDES_UPLOAD_DIRECTORY):
|
9
|
+
os.makedirs(LOCAL_FIDES_UPLOAD_DIRECTORY)
|
10
|
+
return f"{LOCAL_FIDES_UPLOAD_DIRECTORY}/{file_key}"
|
fides/api/tasks/storage.py
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import json
|
4
|
-
import os
|
5
4
|
import secrets
|
6
5
|
import zipfile
|
7
6
|
from io import BytesIO
|
8
|
-
from typing import Any, Dict, Optional, Union
|
7
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional, Union
|
9
8
|
|
10
9
|
import pandas as pd
|
11
10
|
from botocore.exceptions import ClientError, ParamValidationError
|
@@ -13,11 +12,18 @@ from fideslang.validation import AnyHttpUrlString
|
|
13
12
|
from loguru import logger
|
14
13
|
|
15
14
|
from fides.api.cryptography.cryptographic_util import bytes_to_b64_str
|
16
|
-
from fides.api.models.privacy_request import PrivacyRequest
|
17
15
|
from fides.api.schemas.storage.storage import ResponseFormat, StorageSecrets
|
18
16
|
from fides.api.service.privacy_request.dsr_package.dsr_report_builder import (
|
19
17
|
DsrReportBuilder,
|
20
18
|
)
|
19
|
+
from fides.api.service.storage.s3 import (
|
20
|
+
create_presigned_url_for_s3,
|
21
|
+
generic_upload_to_s3,
|
22
|
+
)
|
23
|
+
from fides.api.service.storage.util import (
|
24
|
+
LOCAL_FIDES_UPLOAD_DIRECTORY,
|
25
|
+
get_local_filename,
|
26
|
+
)
|
21
27
|
from fides.api.util.aws_util import get_s3_client
|
22
28
|
from fides.api.util.cache import get_cache, get_encryption_cache_key
|
23
29
|
from fides.api.util.encryption.aes_gcm_encryption_scheme import (
|
@@ -26,7 +32,8 @@ from fides.api.util.encryption.aes_gcm_encryption_scheme import (
|
|
26
32
|
from fides.api.util.storage_util import storage_json_encoder
|
27
33
|
from fides.config import CONFIG
|
28
34
|
|
29
|
-
|
35
|
+
if TYPE_CHECKING:
|
36
|
+
from fides.api.models.privacy_request import PrivacyRequest
|
30
37
|
|
31
38
|
|
32
39
|
def encrypt_access_request_results(data: Union[str, bytes], request_id: str) -> str:
|
@@ -101,105 +108,6 @@ def write_to_in_memory_buffer(
|
|
101
108
|
raise NotImplementedError(f"No handling for response format {resp_format}.")
|
102
109
|
|
103
110
|
|
104
|
-
def create_presigned_url_for_s3(
|
105
|
-
s3_client: Any, bucket_name: str, file_key: str
|
106
|
-
) -> AnyHttpUrlString:
|
107
|
-
""" "Generate a presigned URL to share an S3 object
|
108
|
-
|
109
|
-
:param s3_client: s3 base client
|
110
|
-
:param bucket_name: string
|
111
|
-
:param file_key: string
|
112
|
-
:return: Presigned URL as string.
|
113
|
-
"""
|
114
|
-
response = s3_client.generate_presigned_url(
|
115
|
-
"get_object",
|
116
|
-
Params={"Bucket": bucket_name, "Key": file_key},
|
117
|
-
ExpiresIn=CONFIG.security.subject_request_download_link_ttl_seconds,
|
118
|
-
)
|
119
|
-
|
120
|
-
# The response contains the presigned URL
|
121
|
-
return response
|
122
|
-
|
123
|
-
|
124
|
-
def generic_upload_to_s3( # pylint: disable=R0913
|
125
|
-
storage_secrets: Dict[StorageSecrets, Any],
|
126
|
-
bucket_name: str,
|
127
|
-
file_key: str,
|
128
|
-
auth_method: str,
|
129
|
-
document: bytes,
|
130
|
-
) -> Optional[AnyHttpUrlString]:
|
131
|
-
"""Uploads arbitrary data to s3 returned from an access request"""
|
132
|
-
logger.info("Starting S3 Upload of {}", file_key)
|
133
|
-
|
134
|
-
try:
|
135
|
-
s3_client = get_s3_client(auth_method, storage_secrets)
|
136
|
-
try:
|
137
|
-
s3_client.put_object(Bucket=bucket_name, Key=file_key, Body=document)
|
138
|
-
except Exception as e:
|
139
|
-
logger.error("Encountered error while uploading s3 object: {}", e)
|
140
|
-
raise e
|
141
|
-
|
142
|
-
presigned_url: AnyHttpUrlString = create_presigned_url_for_s3(
|
143
|
-
s3_client, bucket_name, file_key
|
144
|
-
)
|
145
|
-
|
146
|
-
return presigned_url
|
147
|
-
except ClientError as e:
|
148
|
-
logger.error(
|
149
|
-
"Encountered error while uploading and generating link for s3 object: {}", e
|
150
|
-
)
|
151
|
-
raise e
|
152
|
-
except ParamValidationError as e:
|
153
|
-
raise ValueError(f"The parameters you provided are incorrect: {e}")
|
154
|
-
|
155
|
-
|
156
|
-
def generic_retrieve_from_s3(
|
157
|
-
storage_secrets: Dict[StorageSecrets, Any],
|
158
|
-
bucket_name: str,
|
159
|
-
file_key: str,
|
160
|
-
auth_method: str,
|
161
|
-
) -> Optional[bytes]:
|
162
|
-
"""Retrieves arbitrary data from s3"""
|
163
|
-
logger.info("Starting S3 Retrieve of {}", file_key)
|
164
|
-
|
165
|
-
try:
|
166
|
-
s3_client = get_s3_client(auth_method, storage_secrets)
|
167
|
-
try:
|
168
|
-
response = s3_client.get_object(Bucket=bucket_name, Key=file_key)
|
169
|
-
return response["Body"].read()
|
170
|
-
except Exception as e:
|
171
|
-
logger.error("Encountered error while retrieving s3 object: {}", e)
|
172
|
-
raise e
|
173
|
-
except ClientError as e:
|
174
|
-
logger.error("Encountered error while retrieving s3 object: {}", e)
|
175
|
-
raise e
|
176
|
-
except ParamValidationError as e:
|
177
|
-
raise ValueError(f"The parameters you provided are incorrect: {e}")
|
178
|
-
|
179
|
-
|
180
|
-
def generic_delete_from_s3(
|
181
|
-
storage_secrets: Dict[StorageSecrets, Any],
|
182
|
-
bucket_name: str,
|
183
|
-
file_key: str,
|
184
|
-
auth_method: str,
|
185
|
-
) -> None:
|
186
|
-
"""Deletes arbitrary data from s3"""
|
187
|
-
logger.info("Starting S3 Delete of {}", file_key)
|
188
|
-
|
189
|
-
try:
|
190
|
-
s3_client = get_s3_client(auth_method, storage_secrets)
|
191
|
-
try:
|
192
|
-
s3_client.delete_object(Bucket=bucket_name, Key=file_key)
|
193
|
-
except Exception as e:
|
194
|
-
logger.error("Encountered error while deleting s3 object: {}", e)
|
195
|
-
raise e
|
196
|
-
except ClientError as e:
|
197
|
-
logger.error("Encountered error while deleting s3 object: {}", e)
|
198
|
-
raise e
|
199
|
-
except ParamValidationError as e:
|
200
|
-
raise ValueError(f"The parameters you provided are incorrect: {e}")
|
201
|
-
|
202
|
-
|
203
111
|
def upload_to_s3( # pylint: disable=R0913
|
204
112
|
storage_secrets: Dict[StorageSecrets, Any],
|
205
113
|
data: Dict,
|
@@ -207,7 +115,7 @@ def upload_to_s3( # pylint: disable=R0913
|
|
207
115
|
file_key: str,
|
208
116
|
resp_format: str,
|
209
117
|
privacy_request: Optional[PrivacyRequest],
|
210
|
-
document: Optional[
|
118
|
+
document: Optional[BytesIO],
|
211
119
|
auth_method: str,
|
212
120
|
) -> Optional[AnyHttpUrlString]:
|
213
121
|
"""Uploads arbitrary data to s3 returned from an access request"""
|
@@ -249,13 +157,6 @@ def upload_to_s3( # pylint: disable=R0913
|
|
249
157
|
raise ValueError(f"The parameters you provided are incorrect: {e}")
|
250
158
|
|
251
159
|
|
252
|
-
def get_local_filename(file_key: str) -> str:
|
253
|
-
"""Verifies that the local storage directory exists"""
|
254
|
-
if not os.path.exists(LOCAL_FIDES_UPLOAD_DIRECTORY):
|
255
|
-
os.makedirs(LOCAL_FIDES_UPLOAD_DIRECTORY)
|
256
|
-
return f"{LOCAL_FIDES_UPLOAD_DIRECTORY}/{file_key}"
|
257
|
-
|
258
|
-
|
259
160
|
def upload_to_local(
|
260
161
|
data: Dict,
|
261
162
|
file_key: str,
|
fides/config/__init__.py
CHANGED
@@ -133,7 +133,7 @@ def censor_config(config: Union[FidesConfig, Dict[str, Any]]) -> Dict[str, Any]:
|
|
133
133
|
data = as_dict[key]
|
134
134
|
filtered[key] = {}
|
135
135
|
for field in value:
|
136
|
-
if field in data:
|
136
|
+
if data and field in data:
|
137
137
|
filtered[key][field] = data[field]
|
138
138
|
|
139
139
|
return filtered
|