ethyca-fides 2.68.1b1__py2.py3-none-any.whl → 2.68.1b3__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.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/METADATA +3 -1
- {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/RECORD +247 -224
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/3baf42d251a6_add_generic_taxonomy_models.py +239 -0
- fides/api/alembic/migrations/versions/90502bcda282_update_request_tasks_add_polling_async.py +35 -0
- fides/api/api/v1/endpoints/generic_overrides.py +64 -167
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +1 -1
- fides/api/common_exceptions.py +12 -3
- fides/api/db/base.py +6 -0
- fides/api/models/detection_discovery/core.py +6 -0
- fides/api/models/privacy_request/request_task.py +25 -0
- fides/api/models/taxonomy.py +275 -0
- fides/api/schemas/privacy_center_config.py +48 -19
- fides/api/schemas/storage/storage.py +2 -0
- fides/api/service/async_dsr/__init__.py +0 -0
- fides/api/service/async_dsr/async_dsr_service.py +75 -0
- fides/api/service/connectors/saas_connector.py +5 -6
- fides/api/service/deps.py +5 -0
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +6 -4
- fides/api/service/privacy_request/request_service.py +56 -3
- fides/api/service/storage/storage_uploader_service.py +80 -5
- fides/api/service/storage/streaming/__init__.py +42 -0
- fides/api/service/storage/streaming/base_storage_client.py +61 -0
- fides/api/service/storage/streaming/dsr_storage.py +98 -0
- fides/api/service/storage/streaming/retry.py +282 -0
- fides/api/service/storage/streaming/s3/__init__.py +5 -0
- fides/api/service/storage/streaming/s3/s3_storage_client.py +113 -0
- fides/api/service/storage/streaming/s3/streaming_s3.py +196 -0
- fides/api/service/storage/streaming/schemas.py +173 -0
- fides/api/service/storage/streaming/smart_open_client.py +265 -0
- fides/api/service/storage/streaming/smart_open_streaming_storage.py +998 -0
- fides/api/service/storage/streaming/storage_client_factory.py +60 -0
- fides/api/task/graph_task.py +4 -4
- fides/api/task/manual/manual_task_graph_task.py +14 -4
- fides/api/util/connection_type.py +68 -33
- fides/config/execution_settings.py +4 -0
- fides/data/sample_project/docker-compose.yml +3 -3
- fides/service/privacy_request/privacy_request_service.py +1 -9
- fides/service/taxonomy/__init__.py +0 -0
- fides/service/taxonomy/handlers/__init__.py +11 -0
- fides/service/taxonomy/handlers/base.py +42 -0
- fides/service/taxonomy/handlers/legacy_handler.py +95 -0
- fides/service/taxonomy/taxonomy_service.py +261 -0
- fides/service/taxonomy/utils.py +160 -0
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/_BLI2ArqQzY5XnXbrcxa2/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1099-7b2085a3931da9e4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1138-0d846ffef62c580f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1345-ab756811e19ff4fc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1817-c90365325f8a3d75.js → 1817-fd21f1f5ef0faffa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1975.e5cc7a1ccd477671.js → 1975.16126463309143e3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2921-46f9465c2852a46b.js → 2921-0e5cc63a82e31830.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3620-6cceae71bae5b531.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3729-7d2d52400f1f7413.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3855-64541570e2f838fb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-7a18d18a5e287e4e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3923-a33633feba5e655e.js → 3923-5c87b3d7f1626678.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{401-741bb31b586b7c96.js → 401-3902e3e98790d401.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4121-94354b50a41f8497.js → 4121-64ef70ef906bbdd0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/431-86ad2beeb93c95c9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4608-70521532195124de.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4786-53ef1662f2d0d98c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4808-8713433c84a62efe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4844-351f99b6644b654e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5258-c6f96dc740eb5fb1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5487-338800277d36b8d7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/549-e6453a3526023e85.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/602-80d113e801d7407d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6084-02abe12327fc3dbc.js → 6084-da63f20d9416a982.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6853-270261ef5537a106.js → 6853-1d947b75eb07188c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-24f9a4f27d67b732.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7476-a0dd03bfccf60d0c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7630-9fbe06cfb98266fe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{787-5ba991cad1f7664a.js → 787-3dd31844cf7fec55.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/79-dcd20e8b09501c17.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/796-8773e04b64ce2260.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8002-dcd02da6e5649a1c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9046-57eab238570b8bf4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9676.bf0a8a6ff6dfd2af.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9826-8c81c97a72510fcf.js → 9826-756c958aecab59a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9951-cdf73904a3adb27b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-9174cdb70126c2c5.js → 404-dd625a559ada46ca.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-65723cd4b8fc36ac.js → _app-b6b09b2878b77b21.js} +136 -135
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-621416493c89ef01.js → manual-92cf5e313be1f9e2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-0b9908c3e1dfe49e.js → multiple-d6c525ee731a2993.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-5664a3ea796e5ffb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-5bb1b31ae8752250.js → add-vendors-78f13de90111fd80.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-0fc678f3d6d2fcec.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-4e4d9426743b5cb4.js → [id]-126db59dc25ca326.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-d72460348fadcab8.js → privacy-experience-289605267d6cce7e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-3e7ddc252da00c98.js → [id]-e9fd9b28ac9705af.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-35a7c305beee9428.js → new-28c003b6043bd16c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-c643eff04525298e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-ab96939421639153.js → properties-3ef5d01779a26455.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-baa4a2f8f08ac224.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-13240e3ca77acfeb.js → consent-8d4be9e7ec7d2a35.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-aad6047a4604b945.js → [resourceUrn]-f27ec4578c674181.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-bd37b407c80c6986.js → [projectUrn]-27b6c255bd9e73b6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-0f66dac32040519c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b6b98cea25dd94fa.js → [resourceUrn]-3b938562df81c4b0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-ebf5e7fa4e2ffb49.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-b27c660039d951c9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-8ce5d24af470888e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8e35e33928abbcdc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-21c141279e66237a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-31e6c54794a9883e.js → [resourceUrn]-3bc6a207693fd175.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-2822a423a7ad0550.js → detection-da16e73df395ad1d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-f98dd251babb7e28.js → [resourceUrn]-04b242632a114405.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-56eb4c014f0d96a3.js → discovery-900fe50183a40d72.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-8f88dc31c5144ea8.js → datamap-4f1f7c3a9531a8f4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-343294dcb10d9532.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-1c097a0809fa5b6f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-b47fa2498b534719.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-a31f881cab25704a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-858c59c9e67e318d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-67a7fe58b96ea739.js → [id]-16c28d272225afb6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-90a8df230cb89877.js → new-68f502d8b0b5792c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-1eb9acb17b133fd1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-876bfd7210040cec.js → index-fec557d99211f577.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-766e57bcf38b5b1e.js → [id]-e613543818d6cbd2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-8069f7c33695fd45.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-6e796c3fe632280b.js → [id]-4a08ca7762a19700.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-fa0f3841c5bdfdeb.js → add-template-343a965dcdb3d11e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-3ade4c54b1c8a11e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-9103bfb854f71410.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-11503454a62d8d7b.js → AntForm-3b97029bd4d3c3ea.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-a504941807bdb7f1.js → FormikAntFormItem-9d9beb8f0d8a278c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-0119403c8ff97f83.js → FormikControlled-84a4d8fc60f839ed.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-94f6d57d6c94ddf7.js → FormikField-1fccf542ab2e33bf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-ed1a3ae09d72df89.js → forms-aa75263ae1ba67bb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-db334a1cbb102255.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11c1e4545c8f528c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-192a986f61c23268.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-9216ac993d71387e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-e55ec84d5380401d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-48f447b31c786b80.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-41976b28503623cd.js → [id]-a74b51b704b80cb2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-cb438d8f5ec6007a.js → add-property-8d23f0c55ff6510a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-b6db7036993709b3.js → properties-77acceac4f99e7af.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-4bc3e281409265cc.js → datamap-e60d398e255f4e00.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-6aad3f563ed03b3f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-c1b8f3606d160bb1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-d9f7f78810d58d08.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-ee2c7dde99b1dafb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-a4dad8ca9de2d07b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-386368bf7cb31771.js → domain-records-31c270d228e00581.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-996b3f250dd3ea1f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-ee94981326ddcbf4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-b41fb5ad277088ab.js → locations-0b831c58966782b8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-94271ba4a224a353.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-a94dfeea43fbca7d.js → regulations-41b8136e50320fd3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-52b45569cbc82e60.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-18b316e2dad73731.js → [id]-36d74e93e54aabaf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-24dfc8e2279ced2e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-d9675cf5e6083b27.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-3237881945acc0ee.js → [id]-866826d7959df487.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-a3a50d9d79066935.js → user-management-e63b61a8f99ccd57.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{webpack-69658aeaf6155d89.js → webpack-6d0a487039bcf30c.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/92441453b27e9c34.css +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/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-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
- fides/ui-build/static/admin/lib/fides.js +1 -1
- 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/chunks/203-0c6cadcda98bdd33.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3450-9314e1b15df8a8da.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-4267fd8193e7f525.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-ac5feefd40b61ae3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/409-5bc4369b80a8c11d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4230-1ebc8c0ab293a077.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-a34d7ceff17c2169.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4608-557fb24665b2e4bf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5309-ffdec884eec79d29.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5574-831167a8da90e2e6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6662-499c189f932a35aa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-7d28e030f6516e5d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6882-7cc1d14e27a80c10.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-7784e8d5ad6b8110.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7476-4de465016d3433b4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-2a5c57787632693d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7725-c79513b04113112b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-98cfab20bb831137.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-0b768155bf20505f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8735-f84afcc50885883c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9046-97a972cc8a8ed24d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9226-318dadf1c050ecda.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.9e6828b42ef05e06.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9951-4df2b67e0def5500.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-18e96ce81dab51a4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-54d7c7310763c66d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-6bc3b73a21576869.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-fe3d6887fecf0f86.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-e4770acf7044e2f5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-0db635c3483c9da8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-0c0e0a7798345541.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-3c56e5fe072a44c6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-53a763e49ce34a74.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6a90131dcecd694c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-145fe9e4cfcb231d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-8a1e5d140785c1e9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-227b5db4b472a6a7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-8401f17fe5d9a1dc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-7d77b3ad069be268.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cfb25b02abb8da71.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-3fdc55d4c129e618.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-8f9c006b6166f002.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-6ba7ae4f26c06cb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-e8db3ad525e7ddbd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-c14dd24592369467.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-100d7d03930629a8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-6f8d1b3ec83cfcf0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-3ce15577435d47cb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-f43a988542813110.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-1ea40fcd6b4268bf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-65c7600fadc6e55a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-33dab986141b3663.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-1195042727c399ed.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-71b98858ecb4e097.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-cf427e04f862b5d2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-eabeeec5bf2773c6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-ee56698ae3a6a78b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-0e2e98cc38ee5499.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-c32589c86081b750.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-a8f09bf8f3204ca7.js +0 -1
- fides/ui-build/static/admin/_next/static/css/e1628f15dd5f019b.css +0 -1
- fides/ui-build/static/admin/_next/static/tzF4yti8NslASlGnxnZ8m/_buildManifest.js +0 -1
- {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.68.1b1.dist-info → ethyca_fides-2.68.1b3.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{tzF4yti8NslASlGnxnZ8m → _BLI2ArqQzY5XnXbrcxa2}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Factory for creating provider-specific storage clients."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from fides.api.service.storage.streaming.base_storage_client import BaseStorageClient
|
|
8
|
+
from fides.api.service.storage.streaming.s3.s3_storage_client import S3StorageClient
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class StorageClientFactory:
|
|
12
|
+
"""Factory for creating provider-specific storage clients.
|
|
13
|
+
|
|
14
|
+
This factory creates the appropriate storage client implementation based on
|
|
15
|
+
the storage type, providing a clean separation between the main client and
|
|
16
|
+
provider-specific logic.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
@staticmethod
|
|
20
|
+
def create_client(storage_type: str, storage_secrets: Any) -> BaseStorageClient:
|
|
21
|
+
"""Create a provider-specific storage client.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
storage_type: Type of storage ('s3', 'gcs', 'azure')
|
|
25
|
+
storage_secrets: Storage credentials and configuration.
|
|
26
|
+
Will be passed to the specific storage client implementation.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
Provider-specific storage client implementation
|
|
30
|
+
|
|
31
|
+
Raises:
|
|
32
|
+
ValueError: If the storage type is not supported
|
|
33
|
+
"""
|
|
34
|
+
normalized_type = StorageClientFactory._normalize_storage_type(storage_type)
|
|
35
|
+
|
|
36
|
+
if normalized_type == "s3":
|
|
37
|
+
return S3StorageClient(storage_secrets)
|
|
38
|
+
if normalized_type == "gcs":
|
|
39
|
+
raise NotImplementedError("GCS storage is not yet supported")
|
|
40
|
+
raise ValueError(f"Unsupported storage type: {storage_type}")
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def _normalize_storage_type(storage_type: str) -> str:
|
|
44
|
+
"""Normalize storage type to standard values.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
storage_type: Raw storage type string
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Normalized storage type string
|
|
51
|
+
"""
|
|
52
|
+
storage_type = storage_type.lower()
|
|
53
|
+
|
|
54
|
+
# Normalize storage type
|
|
55
|
+
if storage_type in {"gcs", "gcp", "google"}:
|
|
56
|
+
return "gcs"
|
|
57
|
+
if storage_type == "s3":
|
|
58
|
+
return "s3"
|
|
59
|
+
|
|
60
|
+
return storage_type
|
fides/api/task/graph_task.py
CHANGED
|
@@ -13,7 +13,7 @@ from sqlalchemy.orm import Session
|
|
|
13
13
|
from fides.api.api.deps import get_autoclose_db_session as get_db
|
|
14
14
|
from fides.api.common_exceptions import (
|
|
15
15
|
ActionDisabled,
|
|
16
|
-
|
|
16
|
+
AwaitingAsyncTask,
|
|
17
17
|
CollectionDisabled,
|
|
18
18
|
NotSupportedForCollection,
|
|
19
19
|
PrivacyRequestErasureEmailSendRequired,
|
|
@@ -114,17 +114,17 @@ def retry(
|
|
|
114
114
|
self.log_start(action_type)
|
|
115
115
|
# Run access or erasure request
|
|
116
116
|
return func(*args, **kwargs)
|
|
117
|
-
except
|
|
117
|
+
except AwaitingAsyncTask as ex:
|
|
118
118
|
traceback.print_exc()
|
|
119
119
|
logger.warning(
|
|
120
|
-
"Request Task {} {} {} awaiting async
|
|
120
|
+
"Request Task {} {} {} awaiting async continuation",
|
|
121
121
|
self.request_task.id if self.request_task.id else None,
|
|
122
122
|
method_name,
|
|
123
123
|
self.execution_node.address,
|
|
124
124
|
)
|
|
125
125
|
# Log the awaiting processing status and exit without retrying.
|
|
126
126
|
self.log_awaiting_processing(action_type, ex)
|
|
127
|
-
# Request Task put in "awaiting_processing" status and exited, awaiting Async
|
|
127
|
+
# Request Task put in "awaiting_processing" status and exited, awaiting for Async continuation
|
|
128
128
|
return None
|
|
129
129
|
except PrivacyRequestErasureEmailSendRequired as exc:
|
|
130
130
|
traceback.print_exc()
|
|
@@ -3,7 +3,7 @@ from typing import Any, Optional
|
|
|
3
3
|
from loguru import logger
|
|
4
4
|
from pydantic.v1.utils import deep_update
|
|
5
5
|
|
|
6
|
-
from fides.api.common_exceptions import
|
|
6
|
+
from fides.api.common_exceptions import AwaitingAsyncTask
|
|
7
7
|
from fides.api.models.attachment import AttachmentType
|
|
8
8
|
from fides.api.models.manual_task import (
|
|
9
9
|
ManualTask,
|
|
@@ -63,6 +63,17 @@ class ManualTaskGraphTask(GraphTask):
|
|
|
63
63
|
Calls _run_request with ACCESS configs.
|
|
64
64
|
Returns data if submitted, raise AwaitingAsyncTaskCallback if not
|
|
65
65
|
"""
|
|
66
|
+
if self.resources.request.policy.get_action_type() == ActionType.erasure:
|
|
67
|
+
# We're in an erasure privacy request's access phase - complete access task immediately
|
|
68
|
+
# since access is just for data collection to support erasure, not for user data access
|
|
69
|
+
self.update_status(
|
|
70
|
+
"Access task completed immediately for erasure privacy request (data collection only)",
|
|
71
|
+
[],
|
|
72
|
+
ActionType.access,
|
|
73
|
+
ExecutionLogStatus.complete,
|
|
74
|
+
)
|
|
75
|
+
return []
|
|
76
|
+
|
|
66
77
|
result = self._run_request(
|
|
67
78
|
ManualTaskConfigurationType.access_privacy_request,
|
|
68
79
|
ActionType.access,
|
|
@@ -127,7 +138,7 @@ class ManualTaskGraphTask(GraphTask):
|
|
|
127
138
|
Execute manual task logic following the standard GraphTask pattern:
|
|
128
139
|
1. Create ManualTaskInstances if they don't exist
|
|
129
140
|
2. Check if all required submissions are present
|
|
130
|
-
3. Return data if submitted, raise
|
|
141
|
+
3. Return data if submitted, raise AwaitingAsyncTask if not
|
|
131
142
|
"""
|
|
132
143
|
manual_task = self._get_manual_task_or_none()
|
|
133
144
|
if manual_task is None:
|
|
@@ -254,7 +265,7 @@ class ManualTaskGraphTask(GraphTask):
|
|
|
254
265
|
base_msg = f"Manual task for {self.connection_key} requires user input"
|
|
255
266
|
if awaiting_detail_message:
|
|
256
267
|
base_msg = f"{base_msg}. {awaiting_detail_message}"
|
|
257
|
-
raise
|
|
268
|
+
raise AwaitingAsyncTask(base_msg)
|
|
258
269
|
|
|
259
270
|
def _ensure_manual_task_instances(
|
|
260
271
|
self,
|
|
@@ -424,7 +435,6 @@ class ManualTaskGraphTask(GraphTask):
|
|
|
424
435
|
]
|
|
425
436
|
|
|
426
437
|
if instances_to_remove:
|
|
427
|
-
|
|
428
438
|
# Remove instances from the database
|
|
429
439
|
for instance in instances_to_remove:
|
|
430
440
|
instance.delete(self.resources.session)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any, Dict, Set
|
|
3
|
+
from typing import Any, Dict, Optional, Set
|
|
4
4
|
|
|
5
5
|
from fides.api.common_exceptions import NoSuchConnectionTypeSecretSchemaError
|
|
6
6
|
from fides.api.models.connectionconfig import ConnectionType
|
|
@@ -141,7 +141,9 @@ def get_connection_type_secret_schema(*, connection_type: str) -> dict[str, Any]
|
|
|
141
141
|
Note that this does not return actual secrets, instead we return the *types* of
|
|
142
142
|
secret fields needed to authenticate.
|
|
143
143
|
"""
|
|
144
|
-
connection_system_types: list[ConnectionSystemTypeMap] = get_connection_types(
|
|
144
|
+
connection_system_types: list[ConnectionSystemTypeMap] = get_connection_types(
|
|
145
|
+
include_test_connections=True
|
|
146
|
+
)
|
|
145
147
|
if not any(item.identifier == connection_type for item in connection_system_types):
|
|
146
148
|
raise NoSuchConnectionTypeSecretSchemaError(
|
|
147
149
|
f"No connection type found with name '{connection_type}'."
|
|
@@ -189,15 +191,15 @@ def get_connection_type_secret_schema(*, connection_type: str) -> dict[str, Any]
|
|
|
189
191
|
return schema
|
|
190
192
|
|
|
191
193
|
|
|
192
|
-
def
|
|
193
|
-
search
|
|
194
|
-
|
|
194
|
+
def _is_match(elem: str, search: Optional[str] = None) -> bool:
|
|
195
|
+
"""If a search query param was included, is it a substring of an available connector type?"""
|
|
196
|
+
return search.lower() in elem.lower() if search else True
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def get_saas_connection_types(
|
|
195
200
|
action_types: Set[ActionType] = SUPPORTED_ACTION_TYPES,
|
|
201
|
+
search: Optional[str] = None,
|
|
196
202
|
) -> list[ConnectionSystemTypeMap]:
|
|
197
|
-
def is_match(elem: str) -> bool:
|
|
198
|
-
"""If a search query param was included, is it a substring of an available connector type?"""
|
|
199
|
-
return search.lower() in elem.lower() if search else True
|
|
200
|
-
|
|
201
203
|
def saas_request_type_filter(connection_type: str) -> bool:
|
|
202
204
|
"""
|
|
203
205
|
If any of the request type filters are set to true,
|
|
@@ -216,6 +218,45 @@ def get_connection_types(
|
|
|
216
218
|
action_type in template.supported_actions for action_type in action_types
|
|
217
219
|
)
|
|
218
220
|
|
|
221
|
+
saas_connection_types: list[ConnectionSystemTypeMap] = []
|
|
222
|
+
saas_types: list[str] = sorted(
|
|
223
|
+
[
|
|
224
|
+
saas_type
|
|
225
|
+
for saas_type in ConnectorRegistry.connector_types()
|
|
226
|
+
if _is_match(saas_type, search) and saas_request_type_filter(saas_type)
|
|
227
|
+
]
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
for item in saas_types:
|
|
231
|
+
connector_template = ConnectorRegistry.get_connector_template(item)
|
|
232
|
+
if connector_template is not None:
|
|
233
|
+
saas_connection_types.append(
|
|
234
|
+
ConnectionSystemTypeMap(
|
|
235
|
+
identifier=item,
|
|
236
|
+
type=SystemType.saas,
|
|
237
|
+
human_readable=connector_template.human_readable,
|
|
238
|
+
encoded_icon=connector_template.icon,
|
|
239
|
+
authorization_required=connector_template.authorization_required,
|
|
240
|
+
user_guide=connector_template.user_guide,
|
|
241
|
+
supported_actions=connector_template.supported_actions,
|
|
242
|
+
)
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
return saas_connection_types
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
# FIXME: this function needs a refactor
|
|
249
|
+
def get_connection_types(
|
|
250
|
+
search: str | None = None,
|
|
251
|
+
system_type: SystemType | None = None,
|
|
252
|
+
action_types: Set[ActionType] = SUPPORTED_ACTION_TYPES,
|
|
253
|
+
include_test_connections: bool = False,
|
|
254
|
+
) -> list[ConnectionSystemTypeMap]:
|
|
255
|
+
"""
|
|
256
|
+
Returns a list of ConnectionSystemTypeMap objects that match the given search and system type.
|
|
257
|
+
|
|
258
|
+
If include_test_connections is True, test connections like test_website will be included in the response.
|
|
259
|
+
"""
|
|
219
260
|
connection_system_types: list[ConnectionSystemTypeMap] = []
|
|
220
261
|
if (system_type == SystemType.database or system_type is None) and (
|
|
221
262
|
ActionType.access in action_types or ActionType.erasure in action_types
|
|
@@ -238,7 +279,7 @@ def get_connection_types(
|
|
|
238
279
|
ConnectionType.sovrn,
|
|
239
280
|
ConnectionType.test_website,
|
|
240
281
|
]
|
|
241
|
-
and
|
|
282
|
+
and _is_match(conn_type.value, search)
|
|
242
283
|
],
|
|
243
284
|
key=lambda x: x.value,
|
|
244
285
|
)
|
|
@@ -254,28 +295,10 @@ def get_connection_types(
|
|
|
254
295
|
]
|
|
255
296
|
)
|
|
256
297
|
if system_type == SystemType.saas or system_type is None:
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
saas_type
|
|
260
|
-
for saas_type in ConnectorRegistry.connector_types()
|
|
261
|
-
if is_match(saas_type) and saas_request_type_filter(saas_type)
|
|
262
|
-
]
|
|
298
|
+
saas_connection_types = get_saas_connection_types(
|
|
299
|
+
action_types=action_types, search=search
|
|
263
300
|
)
|
|
264
|
-
|
|
265
|
-
for item in saas_types:
|
|
266
|
-
connector_template = ConnectorRegistry.get_connector_template(item)
|
|
267
|
-
if connector_template is not None:
|
|
268
|
-
connection_system_types.append(
|
|
269
|
-
ConnectionSystemTypeMap(
|
|
270
|
-
identifier=item,
|
|
271
|
-
type=SystemType.saas,
|
|
272
|
-
human_readable=connector_template.human_readable,
|
|
273
|
-
encoded_icon=connector_template.icon,
|
|
274
|
-
authorization_required=connector_template.authorization_required,
|
|
275
|
-
user_guide=connector_template.user_guide,
|
|
276
|
-
supported_actions=connector_template.supported_actions,
|
|
277
|
-
)
|
|
278
|
-
)
|
|
301
|
+
connection_system_types.extend(saas_connection_types)
|
|
279
302
|
|
|
280
303
|
if (system_type == SystemType.manual or system_type is None) and (
|
|
281
304
|
ActionType.access in action_types or ActionType.erasure in action_types
|
|
@@ -285,7 +308,7 @@ def get_connection_types(
|
|
|
285
308
|
manual_type.value
|
|
286
309
|
for manual_type in ConnectionType
|
|
287
310
|
if manual_type == ConnectionType.manual_webhook
|
|
288
|
-
and
|
|
311
|
+
and _is_match(manual_type.value, search)
|
|
289
312
|
]
|
|
290
313
|
)
|
|
291
314
|
connection_system_types.extend(
|
|
@@ -307,7 +330,7 @@ def get_connection_types(
|
|
|
307
330
|
for email_type in ConnectionType
|
|
308
331
|
if email_type
|
|
309
332
|
in ERASURE_EMAIL_CONNECTOR_TYPES + CONSENT_EMAIL_CONNECTOR_TYPES
|
|
310
|
-
and
|
|
333
|
+
and _is_match(email_type.value, search)
|
|
311
334
|
and ( # include consent or erasure connectors if requested, respectively
|
|
312
335
|
(
|
|
313
336
|
ActionType.consent in action_types
|
|
@@ -339,4 +362,16 @@ def get_connection_types(
|
|
|
339
362
|
]
|
|
340
363
|
)
|
|
341
364
|
|
|
365
|
+
if include_test_connections and (
|
|
366
|
+
system_type == SystemType.website or system_type is None
|
|
367
|
+
):
|
|
368
|
+
connection_system_types.append(
|
|
369
|
+
ConnectionSystemTypeMap(
|
|
370
|
+
identifier=ConnectionType.test_website.value,
|
|
371
|
+
type=SystemType.website,
|
|
372
|
+
human_readable=ConnectionType.test_website.human_readable,
|
|
373
|
+
supported_actions=[],
|
|
374
|
+
)
|
|
375
|
+
)
|
|
376
|
+
|
|
342
377
|
return connection_system_types
|
|
@@ -61,6 +61,10 @@ class ExecutionSettings(FidesSettings):
|
|
|
61
61
|
default=3,
|
|
62
62
|
description="The number of times a privacy request will be requeued when its tasks are interrupted before being marked as error",
|
|
63
63
|
)
|
|
64
|
+
async_tasks_status_polling_interval_seconds: int = Field(
|
|
65
|
+
default=3600,
|
|
66
|
+
description="Seconds between polling for async tasks to requeue",
|
|
67
|
+
)
|
|
64
68
|
use_dsr_3_0: bool = Field(
|
|
65
69
|
default=False,
|
|
66
70
|
description="Temporary flag to switch to using DSR 3.0 to process your tasks.",
|
|
@@ -87,7 +87,7 @@ services:
|
|
|
87
87
|
|
|
88
88
|
fides-db:
|
|
89
89
|
container_name: fides-db
|
|
90
|
-
image: postgres:
|
|
90
|
+
image: postgres:16
|
|
91
91
|
healthcheck:
|
|
92
92
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
93
93
|
interval: 15s
|
|
@@ -104,14 +104,14 @@ services:
|
|
|
104
104
|
|
|
105
105
|
redis:
|
|
106
106
|
container_name: fides-redis
|
|
107
|
-
image: redis:
|
|
107
|
+
image: redis:8.0-alpine
|
|
108
108
|
command: redis-server --requirepass redispassword
|
|
109
109
|
ports:
|
|
110
110
|
- "7379:6379"
|
|
111
111
|
|
|
112
112
|
postgres-test:
|
|
113
113
|
container_name: fides-postgres-example-db
|
|
114
|
-
image: postgres:
|
|
114
|
+
image: postgres:16
|
|
115
115
|
healthcheck:
|
|
116
116
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
117
117
|
interval: 15s
|
|
@@ -7,6 +7,7 @@ from sqlalchemy.orm import Session
|
|
|
7
7
|
from fides.api.common_exceptions import (
|
|
8
8
|
FidesopsException,
|
|
9
9
|
MessageDispatchException,
|
|
10
|
+
PrivacyRequestError,
|
|
10
11
|
RedisNotConfigured,
|
|
11
12
|
)
|
|
12
13
|
from fides.api.models.audit_log import AuditLog, AuditLogAction
|
|
@@ -51,15 +52,6 @@ from fides.service.messaging.messaging_service import (
|
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
|
|
54
|
-
class PrivacyRequestError(Exception):
|
|
55
|
-
"""Base exception for privacy request operations."""
|
|
56
|
-
|
|
57
|
-
def __init__(self, message: str, data: Optional[Dict] = None):
|
|
58
|
-
self.message = message
|
|
59
|
-
self.data = data
|
|
60
|
-
super().__init__(message)
|
|
61
|
-
|
|
62
|
-
|
|
63
55
|
class PrivacyRequestService:
|
|
64
56
|
def __init__(
|
|
65
57
|
self,
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base taxonomy handler and core validation functions.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from typing import Any, Dict, List, Optional, Type
|
|
7
|
+
|
|
8
|
+
from sqlalchemy.orm import Session
|
|
9
|
+
|
|
10
|
+
from fides.api.db.base_class import FidesBase
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TaxonomyHandler(ABC):
|
|
14
|
+
"""Abstract handler for taxonomy CRUD operations."""
|
|
15
|
+
|
|
16
|
+
def __init__(self, db: Session, taxonomy_type: str):
|
|
17
|
+
self.db = db
|
|
18
|
+
self.taxonomy_type = taxonomy_type
|
|
19
|
+
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def get_model(self) -> Type[FidesBase]:
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
@abstractmethod
|
|
25
|
+
def get_elements(self, active_only: bool, parent_key: Optional[str]) -> List[Any]:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
@abstractmethod
|
|
29
|
+
def get_element(self, fides_key: str) -> Optional[Any]:
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
@abstractmethod
|
|
33
|
+
def create_element(self, element_data: Dict) -> Any:
|
|
34
|
+
pass
|
|
35
|
+
|
|
36
|
+
@abstractmethod
|
|
37
|
+
def update_element(self, fides_key: str, element_data: Dict) -> Optional[Any]:
|
|
38
|
+
pass
|
|
39
|
+
|
|
40
|
+
@abstractmethod
|
|
41
|
+
def delete_element(self, fides_key: str) -> None:
|
|
42
|
+
pass
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Legacy taxonomy handler for DataCategory, DataUse, and DataSubject models.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Dict, List, Optional, Type, Union
|
|
6
|
+
|
|
7
|
+
from sqlalchemy.orm import Query, Session
|
|
8
|
+
|
|
9
|
+
from fides.api.models.sql_models import ( # type:ignore[attr-defined]
|
|
10
|
+
DataCategory,
|
|
11
|
+
DataSubject,
|
|
12
|
+
DataUse,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
from .base import TaxonomyHandler
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class LegacyTaxonomyHandler(TaxonomyHandler):
|
|
19
|
+
"""Handler for legacy taxonomy models (DataCategory, DataUse, DataSubject)."""
|
|
20
|
+
|
|
21
|
+
def __init__(self, db: Session, taxonomy_type: str) -> None:
|
|
22
|
+
super().__init__(db, taxonomy_type)
|
|
23
|
+
self.models = {
|
|
24
|
+
"data_categories": DataCategory,
|
|
25
|
+
"data_uses": DataUse,
|
|
26
|
+
"data_subjects": DataSubject,
|
|
27
|
+
}
|
|
28
|
+
if taxonomy_type not in self.models:
|
|
29
|
+
raise ValueError(
|
|
30
|
+
f"Taxonomy type '{taxonomy_type}' not supported. Supported types: {list(self.models.keys())}"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def get_elements(
|
|
34
|
+
self, active_only: bool, parent_key: Optional[str]
|
|
35
|
+
) -> List[Union[DataCategory, DataUse, DataSubject]]:
|
|
36
|
+
model_class = self.get_model()
|
|
37
|
+
query = self._build_query(model_class, active_only, parent_key)
|
|
38
|
+
return query.all()
|
|
39
|
+
|
|
40
|
+
def get_element(
|
|
41
|
+
self, fides_key: str
|
|
42
|
+
) -> Optional[Union[DataCategory, DataUse, DataSubject]]:
|
|
43
|
+
model_class = self.get_model()
|
|
44
|
+
element = (
|
|
45
|
+
self.db.query(model_class)
|
|
46
|
+
.filter(model_class.fides_key == fides_key)
|
|
47
|
+
.first()
|
|
48
|
+
)
|
|
49
|
+
return element
|
|
50
|
+
|
|
51
|
+
def create_element(
|
|
52
|
+
self, element_data: Dict
|
|
53
|
+
) -> Union[DataCategory, DataUse, DataSubject]:
|
|
54
|
+
model_class = self.get_model()
|
|
55
|
+
element = model_class.create(self.db, data=element_data)
|
|
56
|
+
return element
|
|
57
|
+
|
|
58
|
+
def update_element(
|
|
59
|
+
self, fides_key: str, element_data: Dict
|
|
60
|
+
) -> Optional[Union[DataCategory, DataUse, DataSubject]]:
|
|
61
|
+
model_class = self.get_model()
|
|
62
|
+
element = (
|
|
63
|
+
self.db.query(model_class)
|
|
64
|
+
.filter(model_class.fides_key == fides_key)
|
|
65
|
+
.first()
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
if not element:
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
return element.update(db=self.db, data=element_data)
|
|
72
|
+
|
|
73
|
+
def delete_element(self, fides_key: str) -> None:
|
|
74
|
+
model_class = self.get_model()
|
|
75
|
+
element = (
|
|
76
|
+
self.db.query(model_class)
|
|
77
|
+
.filter(model_class.fides_key == fides_key)
|
|
78
|
+
.first()
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
if element:
|
|
82
|
+
self.db.delete(element)
|
|
83
|
+
|
|
84
|
+
def get_model(self) -> Type[Union[DataCategory, DataUse, DataSubject]]:
|
|
85
|
+
return self.models[self.taxonomy_type]
|
|
86
|
+
|
|
87
|
+
def _build_query(
|
|
88
|
+
self, model_class: Type, active_only: bool, parent_key: Optional[str]
|
|
89
|
+
) -> Query:
|
|
90
|
+
query = self.db.query(model_class)
|
|
91
|
+
if active_only:
|
|
92
|
+
query = query.filter(model_class.active.is_(True))
|
|
93
|
+
if parent_key and hasattr(model_class, "parent_key"):
|
|
94
|
+
query = query.filter(model_class.parent_key == parent_key)
|
|
95
|
+
return query
|