ethyca-fides 2.66.2rc0__py2.py3-none-any.whl → 2.67.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0.dist-info}/RECORD +297 -282
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/7e9a2b52f498_adding_masking_secrets.py +60 -0
- fides/api/alembic/migrations/versions/a7065df4dcf1_add_finalized_fields_to_privacy_request.py +65 -0
- fides/api/alembic/migrations/versions/d0031087eacb_create_manualtaskconditionaldependency_.py +106 -0
- fides/api/api/v1/endpoints/dataset_config_endpoints.py +13 -5
- fides/api/api/v1/endpoints/drp_endpoints.py +7 -1
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +44 -1
- fides/api/api/v1/endpoints/user_endpoints.py +83 -7
- fides/api/app_setup.py +3 -2
- fides/api/common_exceptions.py +8 -0
- fides/api/db/base.py +1 -0
- fides/api/db/database.py +1 -1
- fides/api/graph/execution.py +46 -0
- fides/api/graph/graph.py +13 -2
- fides/api/graph/traversal.py +126 -39
- fides/api/models/manual_task/__init__.py +2 -0
- fides/api/models/manual_task/conditional_dependency.py +144 -0
- fides/api/models/{manual_task.py → manual_task/manual_task.py} +10 -0
- fides/api/models/masking_secret.py +72 -0
- fides/api/models/policy.py +23 -0
- fides/api/models/privacy_request/execution_log.py +1 -0
- fides/api/models/privacy_request/privacy_request.py +64 -26
- fides/api/oauth/roles.py +2 -0
- fides/api/schemas/application_config.py +12 -1
- fides/api/schemas/connection_configuration/connection_secrets_datahub.py +10 -1
- fides/api/schemas/masking/masking_secrets.py +1 -1
- fides/api/schemas/policy.py +1 -0
- fides/api/schemas/privacy_request.py +5 -0
- fides/api/service/connectors/base_connector.py +15 -0
- fides/api/service/connectors/bigquery_connector.py +72 -19
- fides/api/service/connectors/dynamodb_connector.py +2 -1
- fides/api/service/connectors/fides_connector.py +1 -0
- fides/api/service/connectors/http_connector.py +1 -0
- fides/api/service/connectors/manual_task_connector.py +1 -0
- fides/api/service/connectors/manual_webhook_connector.py +2 -1
- fides/api/service/connectors/mongodb_connector.py +1 -0
- fides/api/service/connectors/okta_connector.py +1 -0
- fides/api/service/connectors/query_configs/bigquery_query_config.py +95 -36
- fides/api/service/connectors/query_configs/snowflake_query_config.py +3 -3
- fides/api/service/connectors/rds_mysql_connector.py +1 -0
- fides/api/service/connectors/rds_postgres_connector.py +1 -0
- fides/api/service/connectors/s3_connector.py +1 -0
- fides/api/service/connectors/saas_connector.py +1 -0
- fides/api/service/connectors/scylla_connector.py +1 -0
- fides/api/service/connectors/snowflake_connector.py +55 -2
- fides/api/service/connectors/sql_connector.py +159 -13
- fides/api/service/connectors/website_connector.py +1 -0
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +2 -2
- fides/api/service/privacy_request/request_runner_service.py +145 -55
- fides/api/service/privacy_request/request_service.py +172 -52
- fides/api/task/conditional_dependencies/__init__.py +0 -0
- fides/api/task/conditional_dependencies/evaluator.py +109 -0
- fides/api/task/conditional_dependencies/schemas.py +54 -0
- fides/api/task/create_request_tasks.py +1 -1
- fides/api/task/deprecated_graph_task.py +24 -6
- fides/api/task/execute_request_tasks.py +93 -12
- fides/api/task/filter_results.py +1 -1
- fides/api/task/graph_task.py +86 -5
- fides/api/task/manual/manual_task_address.py +46 -0
- fides/api/task/manual/manual_task_graph_task.py +118 -126
- fides/api/task/manual/manual_task_utils.py +52 -105
- fides/api/util/aws_util.py +5 -1
- fides/api/util/cache.py +61 -0
- fides/api/util/encryption/secrets_util.py +48 -18
- fides/api/util/memory_watchdog.py +286 -0
- fides/common/api/scope_registry.py +3 -0
- fides/common/api/v1/urn_registry.py +1 -1
- fides/config/execution_settings.py +12 -0
- fides/config/utils.py +2 -0
- fides/service/privacy_request/privacy_request_service.py +6 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/MNlh9olWjgbqAHKyQY3LF/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-b78b58ae3b75d75a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1975.7d4634a0e823a02b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{203-5a663f465ba26bb4.js → 203-cd78ea279cecba60.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2150-930ffaf2c4718edc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/255-1bc0cbef7a59cdc6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3450-0ba194991d0cca88.js → 3450-69f4e16978971bb8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3550-d04125c828d591a1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3855-e172870d3e21b0dd.js → 3855-509ca7ac99b5eada.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3872-46cebf7ec1b31a2b.js → 3872-0a0f0032ca39a93f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/409-ea70638a59296659.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4121-2bc09fc4ddbfe5cb.js → 4121-877e19d3fa078c7b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{4230-60100f7ef3ddcde1.js → 4230-114e31621c19ea69.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4259.d1507e0db19cbed7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/431-1db919f6569a4021.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4608-bbb7bf511a05c3c2.js → 4608-f16f281f2d05d963.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5309-d9a488457898263b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{905-ffdbd0b14167e8bd.js → 5596-4378b2927dae65b2.js} +3 -3
- fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6084-7178ff6ea6822475.js → 6084-ddbad3149364725d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6148-59a59d5c5925344f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6419-d0c00d661b01f8fa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6662-507be5d46e5b719b.js → 6662-a9e54ead3dc53644.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-b42a27e72707936d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6853-2ad3e08fe6f9f5f2.js → 6853-d0190d2cca9dbde2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6882-6af16fef26c21e06.js → 6882-59ea739e3616ce83.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-ba98e778a5b45ebf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7476-281ee9a8286556f3.js → 7476-cc0d9a94ed7aad53.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7725-539d3a906f627531.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{787-fb41002f797eb2df.js → 787-c57185ad89c4e288.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{79-7e87aff851423d4a.js → 79-2aab56be75e16187.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{796-329a5f823ec258a5.js → 796-3bdda2a7868464af.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/8735-40caf91800a3610c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9046-7085a401297c5520.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9226-746771d47dff6266.js → 9226-2dcac54ab3fb94be.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9951-9b753ad7c3f51bdf.js → 9951-7c6639e5d062779e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-39ccb07327c2c5d5.js → _app-750d6bd16c971bb9.js} +56 -56
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-98777246bec9dc2a.js → manual-2a655ff3a97f2492.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-a71c0aff4e0e6535.js → add-systems-0902f0bb4080643e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1edf582ba3cd3bbb.js → [id]-f22ddd9b48a5c418.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-06bb3b0bf097fcdb.js → new-e74cb5ea87f15b40.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-685771e5f7196d87.js → privacy-experience-21f997c69fc3b4c2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-6ccedc70dc447089.js → [id]-da4124b7600a2a1d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-944bca1cc57985b5.js → new-a57d251c88ce68ae.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-84f4bd14ce8673bc.js → privacy-notices-ad105181bc91209b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-b0c4235fe6d0b0c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-11d52f1570759c4d.js → [resourceUrn]-aad6047a4604b945.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-32eac8bbd217615a.js → projects-29784a11fe0fbd0a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b83afa5565d0c84e.js → [resourceUrn]-b6b98cea25dd94fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-6f630d42ac9fb6b4.js → data-catalog-7770a8dc34bd0fc0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-3e5725cd06d7fe6c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-92b0bd97d8e79340.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-ee3c0a103346fc06.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-9aa744d56cdacb0d.js → activity-ad6a84a6276f914c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-14bd7500362ff224.js → [resourceUrn]-f98dd251babb7e28.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9e7dfd5a6acc2e8f.js → discovery-56eb4c014f0d96a3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-d23b3ae139f0428b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-c0d2bfd465df20e0.js → [...subfieldNames]-15301bd6bf7cf718.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-28280a8a39a6e37c.js → [collectionName]-0fa72873e464f581.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-82fb246d87e58ebd.js → new-0d50084fbdf9b84c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-20165c31ab1bc7cf.js → dataset-f3348d0a92543bab.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-b4a6bcc87d126840.js → [id]-7d6027570d05c57f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-f95d7b0bbfc58f5a.js → new-c6614583b14dc9f2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-5d8fd1af75f19e2f.js → fides-js-docs-1f4335dca5c09860.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-1919aab9e5834b51.js → index-fbf9b845bb901238.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-8e346fb36e8034d2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-e2d5d7e2a5265e68.js → integrations-7f15cd8538cdc24d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-1bae386d8c190348.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-69ad86b7a8a9a115.js → table-migration-05616e2ae20ff4f8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-79f1576b1126975c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-f1d818242d8550f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-d40a26bddb126c5c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-96a08c4431b5462c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-9d1840f8309b706e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-fc201657f4a782c7.js → [purpose_id]-e891d01ece59669e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-c2d39cba8396ef3a.js → consent-f61b87e79367865b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-d992103cc55901ae.js → custom-fields-f8eea5d508c60c64.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-023e1895552817de.js → locations-ed6a140b362c5baa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-ac403c0886b20e20.js → organization-ff9a34264d48c35f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-7a3396ac819c7904.js → test-datasets-a4b6d41ca679298b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-8314a819837f5b2a.js → [id]-c8f5fbaa83dd9945.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-21f423a7c417aa9d.js → systems-c05b49ddec1a1b4f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-df0d88716578e295.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-da68efc31998dc66.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-173ac3a1ed2b05a6.js → user-management-e98dfc7d4f2a4e16.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-90e8ec1fc5c6455b.js +1 -0
- fides/ui-build/static/admin/_next/static/css/{5bfb2473e5701527.css → 23cf870196941c9a.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/{94965f224bc991e9.css → 8bc1833f1fa53ff0.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/d9924caa849931b3.css +1 -0
- fides/ui-build/static/admin/_next/static/css/dbcf63488933a4d5.css +29 -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-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +4 -4
- fides/ui-build/static/admin/lib/fides.js +4 -4
- 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/8108ANFxs99VY7KZ_Xev2/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1316-6cc72a45ebf7ff81.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-e601e737e3cc7a0e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/255-7db55b0e3a0f9dea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2599-6c4d22e75028d8b6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2858-0b44609b6be7850b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2866-a73888c17a195cbe.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/409-a257e14acebcd73b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-34f0b91c26f8d9ab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5309-b2c4803370634ff8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-e3d40aa17a4bf2e9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-bb875d9ac89f6030.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7062.fda15dcb7df85675.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7c79804f.7a7112aece470725.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9046-5c4c22c375de25b1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-9b1b5970f0702668.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9392.f4520f66206d347d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/ea076c0a.84423f606aef37cd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-afdbd4665657cfa1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2265ecb899d45fbc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5d522637871ac6c8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9ddb52ebb7ac4c71.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-7674b97d655c193b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-0a58aee2d1e7fa01.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-5094ffea13f32ed9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-32600543eb7b584f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-10ce53ea356f8bad.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-5501bbb129fee9c4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cbe4c8f9096b6543.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-e130c0197362e8f3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-6387fcc8cce872eb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-ff5738706da07801.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-ff0cd6bff75588da.js +0 -1
- fides/ui-build/static/admin/_next/static/css/2cadb5f62dcd7c2b.css +0 -1
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.66.2rc0.dist-info → ethyca_fides-2.67.0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{8108ANFxs99VY7KZ_Xev2 → MNlh9olWjgbqAHKyQY3LF}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-455e6357b74d2f76.js → 2921-86f1547ac40a5cdf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-6cc911dafccc5f63.js → 3923-13a6b4da2d51bf8f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-1b529d5800aa1f3a.js → 401-3cc1fee61494e3bd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5574-b13021775a15bfd2.js → 5574-9312f97b637d9ee2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-9aac73191ed5ed13.js → 7630-b1c93688013ef013.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-111aaee8bd8dbd09.js → 9826-3c578665c6d3b21d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-aece2c920ea14514.js → 404-2d803dab6a00f353.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-dc75dc6e37e52f05.js → multiple-8ff7f37913ad736a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-24d226b5a8de5c74.js → add-vendors-d00c9034cdeb0236.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-6a8ef51138ac926a.js → configure-0e1ca0f4c8e7f4da.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-6f86ab63a08a6528.js → properties-057cad65e7414a44.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-73d3cbf68f7c3a31.js → consent-e17c56eec8d91371.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-6ba9e160dae64695.js → [projectUrn]-80a6cc8e8573514a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-7648bbd4f6711e4d.js → resources-6c3714ee97a718c1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-393e20924c83373e.js → [resourceUrn]-31e6c54794a9883e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-8733807dad4bc96e.js → detection-2822a423a7ad0550.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-006b695e5af5ef24.js → [datasetId]-a8e8b5f4ee7af86c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-c391c6fad56eec48.js → datastore-connection-3bd77864da523d41.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-53fecfb9dd6a1e0c.js → [id]-5627d0d0668077f9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-76b01cec5fde10a9.js → add-template-feca66ad5c5fe54a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-5c08e8447c45ce44.js → ant-components-64a322d01aae5ca7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-06ad5f34585480aa.js → AntForm-8bca16a7726e7eb2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-6f071c2bc9446cb0.js → FormikAntFormItem-b0f246fc3b67ebf7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-efcc38c58991ac9e.js → FormikControlled-1a0852b090bfc392.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-430ba5c979abfb7c.js → FormikField-11f3de1b45e36583.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-5c561880bf131afb.js → forms-1b73a1c2b6c6285f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d888a69a3bbe040e.js → configure-e551a860ec727802.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-d3d8e3d7583ec635.js → [id]-dd99183f93763ae4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-1af10ed303815d46.js → add-property-0bdbc1fcbf553b8f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-cebc0dc186be499a.js → properties-e959378bb32b6b73.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-5e1322de868d615e.js → alpha-1066f0c202ef744c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-241f95e372b65d0f.js → about-37ba24a72a06862e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-41242f805599feda.js → domain-records-51333dbd21cb37c8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-2e885f74c92f669c.js → domains-bde86e5f6c09da5a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-ff112655ad5f41e5.js → email-templates-4f9a5cc8bea7725b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-86062a18e081a52a.js → regulations-102efd9199e87124.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-a2524414e968f862.js → new-de8cb3739ab99c09.js} +0 -0
|
@@ -50,6 +50,7 @@ from fides.api.models.comment import Comment, CommentReference, CommentReference
|
|
|
50
50
|
from fides.api.models.fides_user import FidesUser
|
|
51
51
|
from fides.api.models.field_types import EncryptedLargeDataDescriptor
|
|
52
52
|
from fides.api.models.manual_webhook import AccessManualWebhook
|
|
53
|
+
from fides.api.models.masking_secret import MaskingSecret
|
|
53
54
|
from fides.api.models.policy import (
|
|
54
55
|
Policy,
|
|
55
56
|
PolicyPreWebhook,
|
|
@@ -98,7 +99,6 @@ from fides.api.util.cache import (
|
|
|
98
99
|
get_drp_request_body_cache_key,
|
|
99
100
|
get_encryption_cache_key,
|
|
100
101
|
get_identity_cache_key,
|
|
101
|
-
get_masking_secret_cache_key,
|
|
102
102
|
)
|
|
103
103
|
from fides.api.util.collection_util import Row, extract_key_for_address
|
|
104
104
|
from fides.api.util.constants import API_DATE_FORMAT
|
|
@@ -145,6 +145,12 @@ class PrivacyRequest(
|
|
|
145
145
|
ForeignKey(FidesUser.id_field_path, ondelete="SET NULL"),
|
|
146
146
|
nullable=True,
|
|
147
147
|
)
|
|
148
|
+
finalized_at = Column(DateTime(timezone=True), nullable=True)
|
|
149
|
+
finalized_by = Column(
|
|
150
|
+
String,
|
|
151
|
+
ForeignKey(FidesUser.id_field_path, ondelete="SET NULL"),
|
|
152
|
+
nullable=True,
|
|
153
|
+
)
|
|
148
154
|
submitted_by = Column(
|
|
149
155
|
String,
|
|
150
156
|
ForeignKey(FidesUser.id_field_path, ondelete="SET NULL"),
|
|
@@ -289,6 +295,13 @@ class PrivacyRequest(
|
|
|
289
295
|
order_by="RequestTask.created_at",
|
|
290
296
|
)
|
|
291
297
|
|
|
298
|
+
masking_secrets: "RelationshipProperty[List[MaskingSecret]]" = relationship(
|
|
299
|
+
"MaskingSecret",
|
|
300
|
+
back_populates="privacy_request",
|
|
301
|
+
uselist=True,
|
|
302
|
+
passive_deletes="all",
|
|
303
|
+
)
|
|
304
|
+
|
|
292
305
|
@property
|
|
293
306
|
def days_left(self: PrivacyRequest) -> Union[int, None]:
|
|
294
307
|
if self.due_date is None:
|
|
@@ -566,19 +579,24 @@ class PrivacyRequest(
|
|
|
566
579
|
encryption_key,
|
|
567
580
|
)
|
|
568
581
|
|
|
569
|
-
def
|
|
570
|
-
|
|
571
|
-
|
|
582
|
+
def persist_masking_secrets(
|
|
583
|
+
self, masking_secrets: List[MaskingSecretCache]
|
|
584
|
+
) -> None:
|
|
585
|
+
"""Persists masking encryption secrets to database."""
|
|
586
|
+
if not masking_secrets:
|
|
572
587
|
return
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
588
|
+
|
|
589
|
+
session = Session.object_session(self)
|
|
590
|
+
for masking_secret in masking_secrets:
|
|
591
|
+
MaskingSecret.create(
|
|
592
|
+
db=session,
|
|
593
|
+
data={
|
|
594
|
+
"privacy_request_id": self.id,
|
|
595
|
+
"secret": masking_secret.secret,
|
|
596
|
+
"masking_strategy": masking_secret.masking_strategy,
|
|
597
|
+
"secret_type": masking_secret.secret_type,
|
|
598
|
+
},
|
|
599
|
+
)
|
|
582
600
|
|
|
583
601
|
def get_cached_identity_data(self) -> Dict[str, Any]:
|
|
584
602
|
"""Retrieves any identity data pertaining to this request from the cache"""
|
|
@@ -991,6 +1009,38 @@ class PrivacyRequest(
|
|
|
991
1009
|
request_task_celery_ids.append(request_task_id)
|
|
992
1010
|
return request_task_celery_ids
|
|
993
1011
|
|
|
1012
|
+
def cancel_celery_tasks(self) -> None:
|
|
1013
|
+
"""Cancel all Celery tasks associated with this privacy request.
|
|
1014
|
+
|
|
1015
|
+
This includes both the main privacy request task and any sub-tasks (Request Tasks).
|
|
1016
|
+
"""
|
|
1017
|
+
task_ids: List[str] = []
|
|
1018
|
+
|
|
1019
|
+
# Add the main privacy request task ID
|
|
1020
|
+
parent_task_id = self.get_cached_task_id()
|
|
1021
|
+
if parent_task_id:
|
|
1022
|
+
task_ids.append(parent_task_id)
|
|
1023
|
+
|
|
1024
|
+
# Add all request task IDs
|
|
1025
|
+
request_task_celery_ids = self.get_request_task_celery_task_ids()
|
|
1026
|
+
task_ids.extend(request_task_celery_ids)
|
|
1027
|
+
|
|
1028
|
+
if not task_ids:
|
|
1029
|
+
return
|
|
1030
|
+
|
|
1031
|
+
# Revoke all Celery tasks in batch
|
|
1032
|
+
logger.info(f"Revoking {len(task_ids)} tasks for privacy request {self.id}")
|
|
1033
|
+
try:
|
|
1034
|
+
# Use terminate=False to allow graceful shutdown if already running
|
|
1035
|
+
celery_app.control.revoke(task_ids, terminate=False)
|
|
1036
|
+
logger.info(
|
|
1037
|
+
f"Successfully revoked {len(task_ids)} tasks for privacy request {self.id}"
|
|
1038
|
+
)
|
|
1039
|
+
except Exception as exc:
|
|
1040
|
+
logger.warning(
|
|
1041
|
+
f"Failed to revoke {len(task_ids)} tasks for privacy request {self.id}: {exc}"
|
|
1042
|
+
)
|
|
1043
|
+
|
|
994
1044
|
def cancel_processing(self, db: Session, cancel_reason: Optional[str]) -> None:
|
|
995
1045
|
"""Cancels a privacy request. Currently should only cancel 'pending' tasks
|
|
996
1046
|
|
|
@@ -1003,19 +1053,7 @@ class PrivacyRequest(
|
|
|
1003
1053
|
self.canceled_at = datetime.utcnow()
|
|
1004
1054
|
self.save(db)
|
|
1005
1055
|
|
|
1006
|
-
|
|
1007
|
-
self.get_request_task_celery_task_ids()
|
|
1008
|
-
) # Celery tasks for sub tasks (DSR 3.0 Request Tasks)
|
|
1009
|
-
parent_task_id = (
|
|
1010
|
-
self.get_cached_task_id()
|
|
1011
|
-
) # Celery task for current Privacy Request
|
|
1012
|
-
if parent_task_id:
|
|
1013
|
-
task_ids.append(parent_task_id)
|
|
1014
|
-
|
|
1015
|
-
for celery_task_id in task_ids:
|
|
1016
|
-
logger.info("Revoking task {} for request {}", celery_task_id, self.id)
|
|
1017
|
-
# Only revokes if execution is not already in progress.
|
|
1018
|
-
celery_app.control.revoke(celery_task_id, terminate=False)
|
|
1056
|
+
self.cancel_celery_tasks()
|
|
1019
1057
|
|
|
1020
1058
|
def error_processing(self, db: Session) -> None:
|
|
1021
1059
|
"""Mark privacy request as errored, and note time processing was finished"""
|
fides/api/oauth/roles.py
CHANGED
|
@@ -47,6 +47,7 @@ from fides.common.api.scope_registry import (
|
|
|
47
47
|
SYSTEM_READ,
|
|
48
48
|
USER_PERMISSION_ASSIGN_OWNERS,
|
|
49
49
|
USER_READ,
|
|
50
|
+
USER_READ_OWN,
|
|
50
51
|
WEBHOOK_READ,
|
|
51
52
|
)
|
|
52
53
|
|
|
@@ -126,6 +127,7 @@ viewer_scopes = [ # Intentionally omitted USER_PERMISSION_READ and PRIVACY_REQU
|
|
|
126
127
|
|
|
127
128
|
respondent_scopes = [
|
|
128
129
|
PRIVACY_REQUEST_MANUAL_STEPS_RESPOND, # allows respondents to respond to assigned manual steps
|
|
130
|
+
USER_READ_OWN,
|
|
129
131
|
]
|
|
130
132
|
|
|
131
133
|
external_respondent_scopes = [
|
|
@@ -11,6 +11,14 @@ from fides.api.schemas.messaging.messaging import MessagingServiceType
|
|
|
11
11
|
from fides.config.admin_ui_settings import ErrorNotificationMode
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
class SqlDryRunMode(str, Enum):
|
|
15
|
+
"""SQL dry run mode for controlling execution of SQL statements in privacy requests"""
|
|
16
|
+
|
|
17
|
+
none = "none"
|
|
18
|
+
access = "access"
|
|
19
|
+
erasure = "erasure"
|
|
20
|
+
|
|
21
|
+
|
|
14
22
|
class StorageTypeApiAccepted(Enum):
|
|
15
23
|
"""Enum for storage destination types accepted in API updates"""
|
|
16
24
|
|
|
@@ -62,7 +70,10 @@ class ExecutionApplicationConfig(FidesSchema):
|
|
|
62
70
|
subject_identity_verification_required: Optional[bool] = None
|
|
63
71
|
disable_consent_identity_verification: Optional[bool] = None
|
|
64
72
|
require_manual_request_approval: Optional[bool] = None
|
|
65
|
-
|
|
73
|
+
memory_watchdog_enabled: Optional[bool] = None
|
|
74
|
+
sql_dry_run: Optional[SqlDryRunMode] = None
|
|
75
|
+
|
|
76
|
+
model_config = ConfigDict(use_enum_values=True, extra="forbid")
|
|
66
77
|
|
|
67
78
|
|
|
68
79
|
class AdminUIConfig(FidesSchema):
|
|
@@ -16,6 +16,15 @@ class PeriodicIntegrationFrequency(Enum):
|
|
|
16
16
|
daily = "daily"
|
|
17
17
|
weekly = "weekly"
|
|
18
18
|
monthly = "monthly"
|
|
19
|
+
not_scheduled = "not scheduled"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
PERIODIC_INTEGRATION_FREQUENCY_TO_DAYS = {
|
|
23
|
+
PeriodicIntegrationFrequency.daily.value: 1,
|
|
24
|
+
PeriodicIntegrationFrequency.weekly.value: 7,
|
|
25
|
+
PeriodicIntegrationFrequency.monthly.value: 30,
|
|
26
|
+
PeriodicIntegrationFrequency.not_scheduled.value: -1, # negative value to indicate that the integration is not scheduled
|
|
27
|
+
}
|
|
19
28
|
|
|
20
29
|
|
|
21
30
|
class DatahubSchema(ConnectionConfigSecretsSchema):
|
|
@@ -30,7 +39,7 @@ class DatahubSchema(ConnectionConfigSecretsSchema):
|
|
|
30
39
|
)
|
|
31
40
|
frequency: PeriodicIntegrationFrequency = Field(
|
|
32
41
|
title="Frequency",
|
|
33
|
-
description="The frequency at which the integration should run. Available options are daily, weekly, and
|
|
42
|
+
description="The frequency at which the integration should run. Available options are daily, weekly, monthly, and not scheduled.",
|
|
34
43
|
)
|
|
35
44
|
glossary_node: str = Field(
|
|
36
45
|
title="Glossary node",
|
fides/api/schemas/policy.py
CHANGED
|
@@ -124,6 +124,8 @@ class PrivacyRequestResubmit(PrivacyRequestCreate):
|
|
|
124
124
|
identity_verified_at: Optional[datetime] = None
|
|
125
125
|
custom_privacy_request_fields_approved_at: Optional[datetime] = None
|
|
126
126
|
custom_privacy_request_fields_approved_by: Optional[str] = None
|
|
127
|
+
finalized_at: Optional[datetime] = None
|
|
128
|
+
finalized_by: Optional[str] = None
|
|
127
129
|
|
|
128
130
|
|
|
129
131
|
class ConsentRequestCreate(FidesSchema):
|
|
@@ -287,6 +289,7 @@ class PrivacyRequestStatus(str, EnumType):
|
|
|
287
289
|
complete = "complete"
|
|
288
290
|
paused = "paused"
|
|
289
291
|
awaiting_email_send = "awaiting_email_send"
|
|
292
|
+
requires_manual_finalization = "requires_manual_finalization"
|
|
290
293
|
canceled = "canceled"
|
|
291
294
|
error = "error"
|
|
292
295
|
|
|
@@ -320,6 +323,8 @@ class PrivacyRequestResponse(FidesSchema):
|
|
|
320
323
|
source: Optional[PrivacyRequestSource] = None
|
|
321
324
|
deleted_at: Optional[datetime] = None
|
|
322
325
|
deleted_by: Optional[str] = None
|
|
326
|
+
finalized_at: Optional[datetime] = None
|
|
327
|
+
finalized_by: Optional[str] = None
|
|
323
328
|
model_config = ConfigDict(from_attributes=True, use_enum_values=True)
|
|
324
329
|
|
|
325
330
|
|
|
@@ -82,6 +82,7 @@ class BaseConnector(Generic[DB_CONNECTOR_TYPE], ABC):
|
|
|
82
82
|
privacy_request: PrivacyRequest,
|
|
83
83
|
request_task: RequestTask,
|
|
84
84
|
rows: List[Row],
|
|
85
|
+
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
85
86
|
) -> int:
|
|
86
87
|
"""Execute a masking request. Return the number of rows that have been updated
|
|
87
88
|
|
|
@@ -143,3 +144,17 @@ class BaseConnector(Generic[DB_CONNECTOR_TYPE], ABC):
|
|
|
143
144
|
# Defaulting to true for now so we can keep the default behavior and
|
|
144
145
|
# incrementally determine the need for primary keys across all connectors
|
|
145
146
|
return True
|
|
147
|
+
|
|
148
|
+
def get_qualified_table_name(self, node: ExecutionNode) -> str:
|
|
149
|
+
"""
|
|
150
|
+
Get the fully qualified table name for the given execution node.
|
|
151
|
+
"""
|
|
152
|
+
raise NotImplementedError(
|
|
153
|
+
"get_qualified_table_name is not implemented by this connector"
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
def table_exists(self, qualified_table_name: str) -> bool:
|
|
157
|
+
"""
|
|
158
|
+
Check if a table exists in the datastore.
|
|
159
|
+
"""
|
|
160
|
+
raise NotImplementedError("table_exists is not implemented by this connector")
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
from typing import List, Optional
|
|
1
|
+
from typing import Any, Dict, List, Optional
|
|
2
2
|
|
|
3
3
|
from loguru import logger
|
|
4
4
|
from sqlalchemy import text
|
|
5
|
-
from sqlalchemy.engine import
|
|
6
|
-
Connection,
|
|
7
|
-
Engine,
|
|
8
|
-
LegacyCursorResult,
|
|
9
|
-
create_engine,
|
|
10
|
-
)
|
|
5
|
+
from sqlalchemy.engine import Connection, Engine, create_engine # type: ignore
|
|
11
6
|
from sqlalchemy.orm import Session
|
|
12
7
|
from sqlalchemy.sql import Executable # type: ignore
|
|
13
8
|
from sqlalchemy.sql.elements import TextClause
|
|
@@ -17,6 +12,7 @@ from fides.api.graph.execution import ExecutionNode
|
|
|
17
12
|
from fides.api.models.connectionconfig import ConnectionTestStatus
|
|
18
13
|
from fides.api.models.policy import Policy
|
|
19
14
|
from fides.api.models.privacy_request import PrivacyRequest, RequestTask
|
|
15
|
+
from fides.api.schemas.application_config import SqlDryRunMode
|
|
20
16
|
from fides.api.schemas.connection_configuration.connection_secrets_bigquery import (
|
|
21
17
|
BigQuerySchema,
|
|
22
18
|
)
|
|
@@ -74,6 +70,11 @@ class BigQueryConnector(SQLConnector):
|
|
|
74
70
|
node, SQLConnector.get_namespace_meta(db, node.address.dataset)
|
|
75
71
|
)
|
|
76
72
|
|
|
73
|
+
def get_qualified_table_name(self, node: ExecutionNode) -> str:
|
|
74
|
+
"""Get fully qualified BigQuery table name using existing query config logic"""
|
|
75
|
+
query_config = self.query_config(node)
|
|
76
|
+
return query_config.generate_table_name()
|
|
77
|
+
|
|
77
78
|
def partitioned_retrieval(
|
|
78
79
|
self,
|
|
79
80
|
query_config: SQLQueryConfig,
|
|
@@ -99,6 +100,16 @@ class BigQueryConnector(SQLConnector):
|
|
|
99
100
|
logger.info(
|
|
100
101
|
f"Executing {len(partition_clauses)} partition queries for node '{query_config.node.address}' in DSR execution"
|
|
101
102
|
)
|
|
103
|
+
|
|
104
|
+
if self.should_dry_run(SqlDryRunMode.access):
|
|
105
|
+
for partition_clause in partition_clauses:
|
|
106
|
+
existing_bind_params = stmt.compile().params
|
|
107
|
+
partitioned_stmt = text(
|
|
108
|
+
f"{stmt} AND ({text(partition_clause)})"
|
|
109
|
+
).params(existing_bind_params)
|
|
110
|
+
logger.warning(f"SQL DRY RUN - Would execute SQL: {partitioned_stmt}")
|
|
111
|
+
return []
|
|
112
|
+
|
|
102
113
|
rows = []
|
|
103
114
|
for partition_clause in partition_clauses:
|
|
104
115
|
logger.debug(
|
|
@@ -135,6 +146,39 @@ class BigQueryConnector(SQLConnector):
|
|
|
135
146
|
logger.exception(f"Error testing connection to remote BigQuery {str(e)}")
|
|
136
147
|
raise ConnectionException(f"Connection error: {e}")
|
|
137
148
|
|
|
149
|
+
def _execute_statements_with_sql_dry_run(
|
|
150
|
+
self,
|
|
151
|
+
statements: List[Executable],
|
|
152
|
+
sql_dry_run_enabled: bool,
|
|
153
|
+
client: Engine,
|
|
154
|
+
) -> int:
|
|
155
|
+
"""
|
|
156
|
+
Execute SQL statements with sql_dry_run support.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
statements: List of SQL statements to execute
|
|
160
|
+
sql_dry_run_enabled: Whether sql_dry_run mode is enabled
|
|
161
|
+
client: Database engine
|
|
162
|
+
|
|
163
|
+
Returns:
|
|
164
|
+
int: Number of affected rows (0 in sql_dry_run mode)
|
|
165
|
+
"""
|
|
166
|
+
if not statements:
|
|
167
|
+
return 0
|
|
168
|
+
|
|
169
|
+
if sql_dry_run_enabled:
|
|
170
|
+
for stmt in statements:
|
|
171
|
+
logger.warning(f"SQL DRY RUN - Would execute SQL: {stmt}")
|
|
172
|
+
return 0
|
|
173
|
+
|
|
174
|
+
row_count = 0
|
|
175
|
+
with client.connect() as connection:
|
|
176
|
+
for stmt in statements:
|
|
177
|
+
results = connection.execute(stmt)
|
|
178
|
+
logger.debug(f"Affected {results.rowcount} rows")
|
|
179
|
+
row_count += results.rowcount
|
|
180
|
+
return row_count
|
|
181
|
+
|
|
138
182
|
def mask_data(
|
|
139
183
|
self,
|
|
140
184
|
node: ExecutionNode,
|
|
@@ -142,22 +186,31 @@ class BigQueryConnector(SQLConnector):
|
|
|
142
186
|
privacy_request: PrivacyRequest,
|
|
143
187
|
request_task: RequestTask,
|
|
144
188
|
rows: List[Row],
|
|
189
|
+
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
145
190
|
) -> int:
|
|
146
191
|
"""Execute a masking request. Returns the number of records updated or deleted"""
|
|
192
|
+
|
|
147
193
|
query_config = self.query_config(node)
|
|
148
194
|
update_or_delete_ct = 0
|
|
149
195
|
client = self.client()
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
196
|
+
|
|
197
|
+
if query_config.uses_delete_masking_strategy():
|
|
198
|
+
delete_stmts = query_config.generate_delete(client, input_data or {})
|
|
199
|
+
logger.debug(f"Generated {len(delete_stmts)} DELETE statements")
|
|
200
|
+
update_or_delete_ct += self._execute_statements_with_sql_dry_run(
|
|
201
|
+
delete_stmts, self.should_dry_run(SqlDryRunMode.erasure), client
|
|
155
202
|
)
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
203
|
+
else:
|
|
204
|
+
for row in rows:
|
|
205
|
+
update_or_delete_stmts: List[Executable] = query_config.generate_update(
|
|
206
|
+
row, policy, privacy_request, client
|
|
207
|
+
)
|
|
208
|
+
logger.debug(
|
|
209
|
+
f"Generated {len(update_or_delete_stmts)} UPDATE statements"
|
|
210
|
+
)
|
|
211
|
+
update_or_delete_ct += self._execute_statements_with_sql_dry_run(
|
|
212
|
+
update_or_delete_stmts,
|
|
213
|
+
self.should_dry_run(SqlDryRunMode.erasure),
|
|
214
|
+
client,
|
|
215
|
+
)
|
|
163
216
|
return update_or_delete_ct
|
|
@@ -140,8 +140,9 @@ class DynamoDBConnector(BaseConnector[Any]): # type: ignore
|
|
|
140
140
|
privacy_request: PrivacyRequest,
|
|
141
141
|
request_task: RequestTask,
|
|
142
142
|
rows: List[Row],
|
|
143
|
+
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
143
144
|
) -> int:
|
|
144
|
-
"""Execute a masking
|
|
145
|
+
"""Execute a masking request for DynamoDB"""
|
|
145
146
|
|
|
146
147
|
query_config = self.query_config(node)
|
|
147
148
|
collection_name = node.address.collection
|
|
@@ -142,6 +142,7 @@ class FidesConnector(BaseConnector[FidesClient]):
|
|
|
142
142
|
privacy_request: PrivacyRequest,
|
|
143
143
|
request_task: RequestTask,
|
|
144
144
|
rows: List[Row],
|
|
145
|
+
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
145
146
|
) -> int:
|
|
146
147
|
"""Execute an erasure request on remote fides"""
|
|
147
148
|
identity_data = {
|
|
@@ -90,6 +90,7 @@ class HTTPSConnector(BaseConnector[None]):
|
|
|
90
90
|
privacy_request: PrivacyRequest,
|
|
91
91
|
request_task: RequestTask,
|
|
92
92
|
rows: List[Row],
|
|
93
|
+
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
93
94
|
) -> int:
|
|
94
95
|
"""Currently not supported as webhooks are not called at the collection level"""
|
|
95
96
|
raise NotImplementedError(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Dict, List
|
|
1
|
+
from typing import Any, Dict, List, Optional
|
|
2
2
|
|
|
3
3
|
from fides.api.graph.execution import ExecutionNode
|
|
4
4
|
from fides.api.models.connectionconfig import ConnectionConfig, ConnectionTestStatus
|
|
@@ -53,6 +53,7 @@ class ManualWebhookConnector(BaseConnector[None]):
|
|
|
53
53
|
privacy_request: PrivacyRequest,
|
|
54
54
|
request_task: RequestTask,
|
|
55
55
|
rows: List[Row],
|
|
56
|
+
input_data: Optional[List[List[Row]]] = None,
|
|
56
57
|
) -> None:
|
|
57
58
|
"""
|
|
58
59
|
Not applicable for a manual webhook. Manual webhooks are not called as part of the traversal.
|
|
@@ -126,6 +126,7 @@ class MongoDBConnector(BaseConnector[MongoClient]):
|
|
|
126
126
|
privacy_request: PrivacyRequest,
|
|
127
127
|
request_task: RequestTask,
|
|
128
128
|
rows: List[Row],
|
|
129
|
+
input_data: Optional[Dict[str, List[Any]]] = None,
|
|
129
130
|
) -> int:
|
|
130
131
|
"""Execute a masking request"""
|
|
131
132
|
query_config = self.query_config(node)
|