ethyca-fides 2.66.2b2__py2.py3-none-any.whl → 2.66.2rc0__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.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/RECORD +259 -270
- fides/_version.py +3 -3
- fides/api/api/v1/endpoints/dataset_config_endpoints.py +5 -13
- fides/api/api/v1/endpoints/drp_endpoints.py +1 -7
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +1 -44
- fides/api/api/v1/endpoints/user_endpoints.py +7 -83
- fides/api/app_setup.py +2 -3
- fides/api/common_exceptions.py +0 -4
- fides/api/db/base.py +0 -1
- fides/api/db/database.py +1 -1
- fides/api/graph/execution.py +0 -30
- fides/api/graph/traversal.py +1 -1
- fides/api/models/{manual_task/manual_task.py → manual_task.py} +0 -10
- fides/api/models/policy.py +0 -23
- fides/api/models/privacy_request/execution_log.py +0 -1
- fides/api/models/privacy_request/privacy_request.py +13 -31
- fides/api/oauth/roles.py +0 -2
- fides/api/schemas/application_config.py +1 -11
- fides/api/schemas/masking/masking_secrets.py +1 -1
- fides/api/schemas/policy.py +0 -1
- fides/api/schemas/privacy_request.py +0 -5
- fides/api/service/connectors/base_connector.py +0 -1
- fides/api/service/connectors/bigquery_connector.py +19 -67
- fides/api/service/connectors/dynamodb_connector.py +1 -2
- fides/api/service/connectors/fides_connector.py +0 -1
- fides/api/service/connectors/http_connector.py +0 -1
- fides/api/service/connectors/manual_task_connector.py +0 -1
- fides/api/service/connectors/manual_webhook_connector.py +1 -2
- fides/api/service/connectors/mongodb_connector.py +0 -1
- fides/api/service/connectors/okta_connector.py +0 -1
- fides/api/service/connectors/query_configs/bigquery_query_config.py +32 -91
- fides/api/service/connectors/rds_mysql_connector.py +0 -1
- fides/api/service/connectors/rds_postgres_connector.py +0 -1
- fides/api/service/connectors/s3_connector.py +0 -1
- fides/api/service/connectors/saas_connector.py +0 -1
- fides/api/service/connectors/scylla_connector.py +0 -1
- fides/api/service/connectors/sql_connector.py +4 -36
- fides/api/service/connectors/website_connector.py +0 -1
- fides/api/service/privacy_request/request_runner_service.py +53 -142
- fides/api/service/privacy_request/request_service.py +22 -1
- fides/api/task/create_request_tasks.py +1 -1
- fides/api/task/deprecated_graph_task.py +6 -24
- fides/api/task/execute_request_tasks.py +12 -89
- fides/api/task/filter_results.py +1 -1
- fides/api/task/graph_task.py +3 -38
- fides/api/task/manual/manual_task_graph_task.py +126 -118
- fides/api/task/manual/manual_task_utils.py +105 -52
- fides/api/util/cache.py +0 -5
- fides/api/util/encryption/secrets_util.py +18 -48
- fides/common/api/scope_registry.py +0 -3
- fides/common/api/v1/urn_registry.py +1 -1
- fides/config/execution_settings.py +0 -4
- fides/config/utils.py +0 -1
- fides/service/privacy_request/privacy_request_service.py +1 -6
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/8108ANFxs99VY7KZ_Xev2/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-e601e737e3cc7a0e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{203-4e777c324a01dbec.js → 203-5a663f465ba26bb4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/431-34f0b91c26f8d9ab.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6780-e3d40aa17a4bf2e9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-f2c3d287bac00395.js → _app-39ccb07327c2c5d5.js} +56 -56
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2265ecb899d45fbc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-5d522637871ac6c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-f10a7dcf7541c865.js → integrations-e2d5d7e2a5265e68.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-05616e2ae20ff4f8.js → table-migration-69ad86b7a8a9a115.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-32600543eb7b584f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-10ce53ea356f8bad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-5501bbb129fee9c4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cbe4c8f9096b6543.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-ff5738706da07801.js +1 -0
- fides/ui-build/static/admin/_next/static/css/2cadb5f62dcd7c2b.css +1 -0
- fides/ui-build/static/admin/_next/static/css/{23cf870196941c9a.css → 5bfb2473e5701527.css} +1 -1
- fides/ui-build/static/admin/_next/static/css/{8bc1833f1fa53ff0.css → 94965f224bc991e9.css} +1 -1
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- fides/ui-build/static/admin/lib/fides.js +3 -3
- 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/api/alembic/migrations/versions/7e9a2b52f498_adding_masking_secrets.py +0 -60
- fides/api/alembic/migrations/versions/a7065df4dcf1_add_finalized_fields_to_privacy_request.py +0 -65
- fides/api/alembic/migrations/versions/d0031087eacb_create_manualtaskconditionaldependency_.py +0 -106
- fides/api/models/manual_task/__init__.py +0 -2
- fides/api/models/manual_task/conditional_dependency.py +0 -144
- fides/api/models/masking_secret.py +0 -72
- fides/api/task/conditional_dependencies/__init__.py +0 -0
- fides/api/task/conditional_dependencies/evaluator.py +0 -109
- fides/api/task/conditional_dependencies/schemas.py +0 -54
- fides/api/task/manual/manual_task_address.py +0 -46
- fides/ui-build/static/admin/_next/static/EACyrT3Bb5qN9POVQHTCB/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-6f35f58cd08b04ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/431-ade3e312fac3430b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6780-a00c87739acc004d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8237-55049f8f5fd5e058.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-71579a199158952e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-7d3115059503b904.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-c73497fc333c324d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-7498d1d5974a78b0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-2d3a2d967767a131.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a9068df48bdee05.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-fe58cebba358119d.js +0 -1
- fides/ui-build/static/admin/_next/static/css/79e296c724c1568c.css +0 -1
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.66.2b2.dist-info → ethyca_fides-2.66.2rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{EACyrT3Bb5qN9POVQHTCB → 8108ANFxs99VY7KZ_Xev2}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-86f1547ac40a5cdf.js → 2921-455e6357b74d2f76.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3450-1cc2bb07ed142203.js → 3450-0ba194991d0cca88.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3855-e2fa6db53d32c3de.js → 3855-e172870d3e21b0dd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3872-84b7e380b88b4454.js → 3872-46cebf7ec1b31a2b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-13a6b4da2d51bf8f.js → 3923-6cc911dafccc5f63.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-3cc1fee61494e3bd.js → 401-1b529d5800aa1f3a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{409-45a125437261580c.js → 409-a257e14acebcd73b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4121-f50675521dfee6eb.js → 4121-2bc09fc4ddbfe5cb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4230-840c287045c88b34.js → 4230-60100f7ef3ddcde1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4608-a8e3100e2806dbff.js → 4608-bbb7bf511a05c3c2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5309-1172322bf91b5d57.js → 5309-b2c4803370634ff8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5574-9312f97b637d9ee2.js → 5574-b13021775a15bfd2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6084-5d7598b7bcb548cf.js → 6084-7178ff6ea6822475.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6662-efb2cf74641647f2.js → 6662-507be5d46e5b719b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-4f8bf6558f8c6a46.js → 6853-2ad3e08fe6f9f5f2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6882-586b84aeb02d5830.js → 6882-6af16fef26c21e06.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-34e062e4bffc7e71.js → 6954-bb875d9ac89f6030.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7476-d206c11823c91088.js → 7476-281ee9a8286556f3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-b1c93688013ef013.js → 7630-9aac73191ed5ed13.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{787-cbe2d0bfb513d90a.js → 787-fb41002f797eb2df.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{79-3db1941d274f40c7.js → 79-7e87aff851423d4a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-98d4bd68909fbe1e.js → 796-329a5f823ec258a5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9046-c8233981762585b4.js → 9046-5c4c22c375de25b1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9226-72ad691ca57b83ef.js → 9226-746771d47dff6266.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-3c578665c6d3b21d.js → 9826-111aaee8bd8dbd09.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9951-595d0f1588215081.js → 9951-9b753ad7c3f51bdf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-2d803dab6a00f353.js → 404-aece2c920ea14514.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-acb59f8b5e97512a.js → manual-98777246bec9dc2a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-8ff7f37913ad736a.js → multiple-dc75dc6e37e52f05.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-0943633a8e422695.js → add-systems-a71c0aff4e0e6535.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-d00c9034cdeb0236.js → add-vendors-24d226b5a8de5c74.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-0e1ca0f4c8e7f4da.js → configure-6a8ef51138ac926a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-fc3a011154a2e1de.js → [id]-1edf582ba3cd3bbb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-09d4408014bcfe1c.js → privacy-experience-685771e5f7196d87.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-d67542783ef5ddac.js → [id]-6ccedc70dc447089.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-3f20e8a316bb3d5b.js → new-944bca1cc57985b5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-23e9dcd4590312d2.js → privacy-notices-84f4bd14ce8673bc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-057cad65e7414a44.js → properties-6f86ab63a08a6528.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-8f891957c8944137.js → reporting-afdbd4665657cfa1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-e17c56eec8d91371.js → consent-73d3cbf68f7c3a31.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-99c9092d65c94807.js → [resourceUrn]-11d52f1570759c4d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-80a6cc8e8573514a.js → [projectUrn]-6ba9e160dae64695.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-774fecea22ba8852.js → projects-32eac8bbd217615a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-f6bd6aff389cb9fe.js → [resourceUrn]-b83afa5565d0c84e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-6c3714ee97a718c1.js → resources-7648bbd4f6711e4d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-8a7f9285da66b965.js → data-catalog-6f630d42ac9fb6b4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-85e140788e251272.js → action-center-9ddb52ebb7ac4c71.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-5af9381f02b2aff6.js → activity-9aa744d56cdacb0d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-31e6c54794a9883e.js → [resourceUrn]-393e20924c83373e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-2822a423a7ad0550.js → detection-8733807dad4bc96e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-6421ce247549c5d6.js → [resourceUrn]-14bd7500362ff224.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-3eac407ac5181a3c.js → discovery-9e7dfd5a6acc2e8f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-d2b275d83089820d.js → datamap-7674b97d655c193b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-1c98bd0959d9570a.js → [...subfieldNames]-c0d2bfd465df20e0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-e548cabda7da32c9.js → [collectionName]-28280a8a39a6e37c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-a8e8b5f4ee7af86c.js → [datasetId]-006b695e5af5ef24.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-513c862c3a707735.js → new-82fb246d87e58ebd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-747b7a13289f1cd7.js → dataset-20165c31ab1bc7cf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-3d22525b3c327b2e.js → [id]-b4a6bcc87d126840.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-d2cad97495e86adb.js → new-f95d7b0bbfc58f5a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-0f29b47402292070.js → datastore-connection-c391c6fad56eec48.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-12ac3e317fc86f21.js → index-1919aab9e5834b51.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-f9c0eac932188593.js → [id]-0a58aee2d1e7fa01.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-5627d0d0668077f9.js → [id]-53fecfb9dd6a1e0c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-feca66ad5c5fe54a.js → add-template-76b01cec5fde10a9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-c1bd3e7adbe8d2d3.js → messaging-5094ffea13f32ed9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-64a322d01aae5ca7.js → ant-components-5c08e8447c45ce44.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-8bca16a7726e7eb2.js → AntForm-06ad5f34585480aa.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-b0f246fc3b67ebf7.js → FormikAntFormItem-6f071c2bc9446cb0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-1a0852b090bfc392.js → FormikControlled-efcc38c58991ac9e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-11f3de1b45e36583.js → FormikField-430ba5c979abfb7c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-1b73a1c2b6c6285f.js → forms-5c561880bf131afb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-e551a860ec727802.js → configure-d888a69a3bbe040e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-dd99183f93763ae4.js → [id]-d3d8e3d7583ec635.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-0bdbc1fcbf553b8f.js → add-property-1af10ed303815d46.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-e959378bb32b6b73.js → properties-cebc0dc186be499a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-2a98bd257edd8f47.js → datamap-e130c0197362e8f3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-8f98a4895e74725e.js → alpha-5e1322de868d615e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-8155a35a62fdb5ae.js → about-241f95e372b65d0f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-668d74c041d74650.js → [purpose_id]-fc201657f4a782c7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-a989532a12c40dcf.js → consent-c2d39cba8396ef3a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-45bea76ff7eda3cb.js → custom-fields-d992103cc55901ae.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-51333dbd21cb37c8.js → domain-records-41242f805599feda.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-bde86e5f6c09da5a.js → domains-2e885f74c92f669c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-4f9a5cc8bea7725b.js → email-templates-ff112655ad5f41e5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-6946e78a5d43e654.js → locations-023e1895552817de.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-55a10e01dffc8039.js → organization-ac403c0886b20e20.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-102efd9199e87124.js → regulations-86062a18e081a52a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-f91f22cf96566ed4.js → test-datasets-7a3396ac819c7904.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-d4a57ea18935dd70.js → [id]-8314a819837f5b2a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-648a0ff4920579ce.js → systems-21f423a7c417aa9d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-0b9d1a24188f65a9.js → taxonomy-6387fcc8cce872eb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-bc4eb541906781e6.js → new-a2524414e968f862.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-45bfa04e45a7d13f.js → user-management-173ac3a1ed2b05a6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{webpack-63a0c45b150a1037.js → webpack-ff0cd6bff75588da.js} +0 -0
|
@@ -14,7 +14,6 @@ from fides.api.common_exceptions import (
|
|
|
14
14
|
ClientUnsuccessfulException,
|
|
15
15
|
IdentityNotFoundException,
|
|
16
16
|
ManualWebhookFieldsUnset,
|
|
17
|
-
MaskingSecretsExpired,
|
|
18
17
|
MessageDispatchException,
|
|
19
18
|
NoCachedManualWebhookEntry,
|
|
20
19
|
PrivacyRequestExit,
|
|
@@ -76,7 +75,6 @@ from fides.api.task.graph_task import (
|
|
|
76
75
|
from fides.api.task.manual.manual_task_utils import create_manual_task_artificial_graphs
|
|
77
76
|
from fides.api.tasks import DatabaseTask, celery_app
|
|
78
77
|
from fides.api.tasks.scheduled.scheduler import scheduler
|
|
79
|
-
from fides.api.util.cache import get_all_masking_secret_keys
|
|
80
78
|
from fides.api.util.collection_util import Row
|
|
81
79
|
from fides.api.util.logger import Pii, _log_exception, _log_warning
|
|
82
80
|
from fides.api.util.logger_context_utils import LoggerContextKeys, log_context
|
|
@@ -480,21 +478,12 @@ def run_privacy_request(
|
|
|
480
478
|
connection_configs
|
|
481
479
|
)
|
|
482
480
|
|
|
483
|
-
# If the privacy request requires manual finalization and has not yet been finalized, we exit here
|
|
484
|
-
if (
|
|
485
|
-
privacy_request.status
|
|
486
|
-
== PrivacyRequestStatus.requires_manual_finalization
|
|
487
|
-
and privacy_request.finalized_at is None
|
|
488
|
-
):
|
|
489
|
-
return
|
|
490
|
-
|
|
491
481
|
# Access CHECKPOINT
|
|
492
482
|
if (
|
|
493
483
|
policy.get_rules_for_action(action_type=ActionType.access)
|
|
494
484
|
or policy.get_rules_for_action(action_type=ActionType.erasure)
|
|
495
485
|
) and can_run_checkpoint(
|
|
496
|
-
request_checkpoint=CurrentStep.access,
|
|
497
|
-
from_checkpoint=resume_step,
|
|
486
|
+
request_checkpoint=CurrentStep.access, from_checkpoint=resume_step
|
|
498
487
|
):
|
|
499
488
|
privacy_request.cache_failed_checkpoint_details(CurrentStep.access)
|
|
500
489
|
access_runner(
|
|
@@ -539,12 +528,9 @@ def run_privacy_request(
|
|
|
539
528
|
if policy.get_rules_for_action(
|
|
540
529
|
action_type=ActionType.erasure
|
|
541
530
|
) and can_run_checkpoint(
|
|
542
|
-
request_checkpoint=CurrentStep.erasure,
|
|
543
|
-
from_checkpoint=resume_step,
|
|
531
|
+
request_checkpoint=CurrentStep.erasure, from_checkpoint=resume_step
|
|
544
532
|
):
|
|
545
533
|
privacy_request.cache_failed_checkpoint_details(CurrentStep.erasure)
|
|
546
|
-
_verify_masking_secrets(policy, privacy_request, resume_step)
|
|
547
|
-
|
|
548
534
|
# We only need to run the erasure once until masking strategies are handled
|
|
549
535
|
erasure_runner(
|
|
550
536
|
privacy_request=privacy_request,
|
|
@@ -666,111 +652,58 @@ def run_privacy_request(
|
|
|
666
652
|
if not proceed:
|
|
667
653
|
return
|
|
668
654
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
)
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
"Marking privacy request '{}' as finalized.",
|
|
700
|
-
privacy_request.id,
|
|
701
|
-
)
|
|
702
|
-
privacy_request.add_success_execution_log(
|
|
703
|
-
session,
|
|
704
|
-
connection_key=None,
|
|
705
|
-
dataset_name="Request finalized",
|
|
706
|
-
collection_name=None,
|
|
707
|
-
message=f"Request finalized for privacy request: {privacy_request.id}",
|
|
708
|
-
action_type=privacy_request.policy.get_action_type(), # type: ignore
|
|
709
|
-
)
|
|
710
|
-
|
|
711
|
-
logger.info(
|
|
712
|
-
"Marking privacy request '{}' as complete.",
|
|
713
|
-
privacy_request.id,
|
|
714
|
-
)
|
|
715
|
-
AuditLog.create(
|
|
716
|
-
db=session,
|
|
717
|
-
data={
|
|
718
|
-
"user_id": "system",
|
|
719
|
-
"privacy_request_id": privacy_request.id,
|
|
720
|
-
"action": AuditLogAction.finished,
|
|
721
|
-
"message": "",
|
|
722
|
-
},
|
|
655
|
+
legacy_request_completion_enabled = ConfigProxy(
|
|
656
|
+
session
|
|
657
|
+
).notifications.send_request_completion_notification
|
|
658
|
+
|
|
659
|
+
action_type = (
|
|
660
|
+
MessagingActionType.PRIVACY_REQUEST_COMPLETE_ACCESS
|
|
661
|
+
if policy.get_rules_for_action(action_type=ActionType.access)
|
|
662
|
+
else MessagingActionType.PRIVACY_REQUEST_COMPLETE_DELETION
|
|
663
|
+
)
|
|
664
|
+
|
|
665
|
+
if message_send_enabled(
|
|
666
|
+
session,
|
|
667
|
+
privacy_request.property_id,
|
|
668
|
+
action_type,
|
|
669
|
+
legacy_request_completion_enabled,
|
|
670
|
+
) and not policy.get_rules_for_action(action_type=ActionType.consent):
|
|
671
|
+
try:
|
|
672
|
+
if not access_result_urls:
|
|
673
|
+
# For DSR 3.0, if the request had both access and erasure rules, this needs to be fetched
|
|
674
|
+
# from the database because the Privacy Request would have exited
|
|
675
|
+
# processing and lost access to the access_result_urls in memory
|
|
676
|
+
access_result_urls = (
|
|
677
|
+
privacy_request.access_result_urls or {}
|
|
678
|
+
).get("access_result_urls", [])
|
|
679
|
+
initiate_privacy_request_completion_email(
|
|
680
|
+
session,
|
|
681
|
+
policy,
|
|
682
|
+
access_result_urls,
|
|
683
|
+
identity_data,
|
|
684
|
+
privacy_request.property_id,
|
|
723
685
|
)
|
|
724
|
-
|
|
725
|
-
privacy_request.
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
action_type,
|
|
746
|
-
legacy_request_completion_enabled,
|
|
747
|
-
) and not policy.get_rules_for_action(
|
|
748
|
-
action_type=ActionType.consent
|
|
749
|
-
):
|
|
750
|
-
if not access_result_urls:
|
|
751
|
-
# For DSR 3.0, if the request had both access and erasure rules, this needs to be fetched
|
|
752
|
-
# from the database because the Privacy Request would have exited
|
|
753
|
-
# processing and lost access to the access_result_urls in memory
|
|
754
|
-
access_result_urls = (
|
|
755
|
-
privacy_request.access_result_urls or {}
|
|
756
|
-
).get("access_result_urls", [])
|
|
757
|
-
|
|
758
|
-
try:
|
|
759
|
-
initiate_privacy_request_completion_email(
|
|
760
|
-
session,
|
|
761
|
-
policy,
|
|
762
|
-
access_result_urls,
|
|
763
|
-
identity_data,
|
|
764
|
-
privacy_request.property_id,
|
|
765
|
-
)
|
|
766
|
-
except (
|
|
767
|
-
IdentityNotFoundException,
|
|
768
|
-
MessageDispatchException,
|
|
769
|
-
) as e:
|
|
770
|
-
privacy_request.error_processing(db=session)
|
|
771
|
-
# If dev mode, log traceback
|
|
772
|
-
_log_exception(e, CONFIG.dev_mode)
|
|
773
|
-
return
|
|
686
|
+
except (IdentityNotFoundException, MessageDispatchException) as e:
|
|
687
|
+
privacy_request.error_processing(db=session)
|
|
688
|
+
# If dev mode, log traceback
|
|
689
|
+
_log_exception(e, CONFIG.dev_mode)
|
|
690
|
+
return
|
|
691
|
+
|
|
692
|
+
# Only mark as complete if not in error state
|
|
693
|
+
if privacy_request.status != PrivacyRequestStatus.error:
|
|
694
|
+
privacy_request.finished_processing_at = datetime.utcnow()
|
|
695
|
+
AuditLog.create(
|
|
696
|
+
db=session,
|
|
697
|
+
data={
|
|
698
|
+
"user_id": "system",
|
|
699
|
+
"privacy_request_id": privacy_request.id,
|
|
700
|
+
"action": AuditLogAction.finished,
|
|
701
|
+
"message": "",
|
|
702
|
+
},
|
|
703
|
+
)
|
|
704
|
+
privacy_request.status = PrivacyRequestStatus.complete
|
|
705
|
+
logger.info("Privacy request run completed.")
|
|
706
|
+
privacy_request.save(db=session)
|
|
774
707
|
|
|
775
708
|
|
|
776
709
|
def initiate_privacy_request_completion_email(
|
|
@@ -1067,25 +1000,3 @@ def run_webhooks_and_report_status(
|
|
|
1067
1000
|
return False
|
|
1068
1001
|
|
|
1069
1002
|
return True
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
def _verify_masking_secrets(
|
|
1073
|
-
policy: Policy, privacy_request: PrivacyRequest, resume_step: Optional[CurrentStep]
|
|
1074
|
-
) -> None:
|
|
1075
|
-
"""
|
|
1076
|
-
Checks that the required masking secrets are still cached for the given request.
|
|
1077
|
-
Raises an exception if masking secrets are needed for the given policy but they don't exist.
|
|
1078
|
-
"""
|
|
1079
|
-
|
|
1080
|
-
if resume_step is None:
|
|
1081
|
-
return
|
|
1082
|
-
|
|
1083
|
-
# if masking can be performed without any masking secrets, we skip the cache check
|
|
1084
|
-
if (
|
|
1085
|
-
policy.generate_masking_secrets()
|
|
1086
|
-
and not get_all_masking_secret_keys(privacy_request.id)
|
|
1087
|
-
and not privacy_request.masking_secrets
|
|
1088
|
-
):
|
|
1089
|
-
raise MaskingSecretsExpired(
|
|
1090
|
-
f"The masking secrets for privacy request ID '{privacy_request.id}' have expired. Please submit a new erasure request."
|
|
1091
|
-
)
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import json
|
|
4
4
|
from asyncio import sleep
|
|
5
5
|
from datetime import datetime, timedelta
|
|
6
|
-
from typing import Any, Dict, Optional, Set
|
|
6
|
+
from typing import Any, Dict, List, Optional, Set
|
|
7
7
|
|
|
8
8
|
from httpx import AsyncClient
|
|
9
9
|
from loguru import logger
|
|
@@ -11,6 +11,7 @@ from sqlalchemy import text
|
|
|
11
11
|
from sqlalchemy.sql.elements import TextClause
|
|
12
12
|
|
|
13
13
|
from fides.api.common_exceptions import PrivacyRequestNotFound
|
|
14
|
+
from fides.api.models.policy import Policy
|
|
14
15
|
from fides.api.models.privacy_request import (
|
|
15
16
|
EXITED_EXECUTION_LOG_STATUSES,
|
|
16
17
|
PrivacyRequest,
|
|
@@ -18,12 +19,14 @@ from fides.api.models.privacy_request import (
|
|
|
18
19
|
)
|
|
19
20
|
from fides.api.models.worker_task import ExecutionLogStatus
|
|
20
21
|
from fides.api.schemas.drp_privacy_request import DrpPrivacyRequestCreate
|
|
22
|
+
from fides.api.schemas.masking.masking_secrets import MaskingSecretCache
|
|
21
23
|
from fides.api.schemas.policy import ActionType
|
|
22
24
|
from fides.api.schemas.privacy_request import (
|
|
23
25
|
PrivacyRequestResponse,
|
|
24
26
|
PrivacyRequestStatus,
|
|
25
27
|
)
|
|
26
28
|
from fides.api.schemas.redis_cache import Identity
|
|
29
|
+
from fides.api.service.masking.strategy.masking_strategy import MaskingStrategy
|
|
27
30
|
from fides.api.tasks import DSR_QUEUE_NAME, DatabaseTask, celery_app
|
|
28
31
|
from fides.api.tasks.scheduled.scheduler import scheduler
|
|
29
32
|
from fides.api.util.cache import (
|
|
@@ -66,6 +69,7 @@ def build_required_privacy_request_kwargs(
|
|
|
66
69
|
|
|
67
70
|
def cache_data(
|
|
68
71
|
privacy_request: PrivacyRequest,
|
|
72
|
+
policy: Policy,
|
|
69
73
|
identity: Identity,
|
|
70
74
|
encryption_key: Optional[str],
|
|
71
75
|
drp_request_body: Optional[DrpPrivacyRequestCreate],
|
|
@@ -78,6 +82,23 @@ def cache_data(
|
|
|
78
82
|
privacy_request.cache_custom_privacy_request_fields(custom_privacy_request_fields)
|
|
79
83
|
privacy_request.cache_encryption(encryption_key) # handles None already
|
|
80
84
|
|
|
85
|
+
# Store masking secrets in the cache
|
|
86
|
+
logger.info("Caching masking secrets for privacy request {}", privacy_request.id)
|
|
87
|
+
erasure_rules = policy.get_rules_for_action(action_type=ActionType.erasure)
|
|
88
|
+
unique_masking_strategies_by_name: Set[str] = set()
|
|
89
|
+
for rule in erasure_rules:
|
|
90
|
+
strategy_name: str = rule.masking_strategy["strategy"] # type: ignore
|
|
91
|
+
configuration = rule.masking_strategy["configuration"] # type: ignore
|
|
92
|
+
if strategy_name in unique_masking_strategies_by_name:
|
|
93
|
+
continue
|
|
94
|
+
unique_masking_strategies_by_name.add(strategy_name)
|
|
95
|
+
masking_strategy = MaskingStrategy.get_strategy(strategy_name, configuration)
|
|
96
|
+
if masking_strategy.secrets_required():
|
|
97
|
+
masking_secrets: List[MaskingSecretCache] = (
|
|
98
|
+
masking_strategy.generate_secrets_for_cache()
|
|
99
|
+
)
|
|
100
|
+
for masking_secret in masking_secrets:
|
|
101
|
+
privacy_request.cache_masking_secret(masking_secret)
|
|
81
102
|
if drp_request_body:
|
|
82
103
|
privacy_request.cache_drp_request_body(drp_request_body)
|
|
83
104
|
|
|
@@ -33,8 +33,8 @@ from fides.api.models.worker_task import ExecutionLogStatus
|
|
|
33
33
|
from fides.api.schemas.policy import ActionType
|
|
34
34
|
from fides.api.task.deprecated_graph_task import format_data_use_map_for_caching
|
|
35
35
|
from fides.api.task.execute_request_tasks import log_task_queued, queue_request_task
|
|
36
|
-
from fides.api.task.manual.manual_task_address import ManualTaskAddress
|
|
37
36
|
from fides.api.task.manual.manual_task_utils import (
|
|
37
|
+
ManualTaskAddress,
|
|
38
38
|
create_manual_task_instances_for_privacy_request,
|
|
39
39
|
)
|
|
40
40
|
from fides.api.util.logger_context_utils import log_context
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# pylint: disable=too-many-lines
|
|
2
|
-
from functools import partial
|
|
3
2
|
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
|
|
4
3
|
|
|
5
4
|
import dask
|
|
@@ -253,33 +252,16 @@ def run_erasure_request_deprecated( # pylint: disable = too-many-arguments
|
|
|
253
252
|
|
|
254
253
|
access_request_data[ROOT_COLLECTION_ADDRESS.value] = [identity]
|
|
255
254
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
# `inputs` kwarg on each task's `erasure_request` method. The resulting
|
|
260
|
-
# callable accepts the original positional arguments expected by Dask.
|
|
261
|
-
|
|
262
|
-
dsk: Dict[CollectionAddress, Any] = {}
|
|
263
|
-
for k, t in env.items():
|
|
264
|
-
# Collect upstream access data in the same order as the input keys
|
|
265
|
-
upstream_access_data: List[List[Row]] = [
|
|
266
|
-
access_request_data.get(str(input_key), [])
|
|
267
|
-
for input_key in t.execution_node.input_keys
|
|
268
|
-
]
|
|
269
|
-
|
|
270
|
-
# Bind the `inputs` keyword argument so it is supplied when the task executes
|
|
271
|
-
erasure_fn_with_inputs = partial(
|
|
272
|
-
t.erasure_request, inputs=upstream_access_data
|
|
273
|
-
)
|
|
274
|
-
|
|
275
|
-
# Build the task tuple: (callable, retrieved_data, *prereqs)
|
|
276
|
-
dsk[k] = (
|
|
277
|
-
erasure_fn_with_inputs,
|
|
255
|
+
dsk: Dict[CollectionAddress, Any] = {
|
|
256
|
+
k: (
|
|
257
|
+
t.erasure_request,
|
|
278
258
|
access_request_data.get(
|
|
279
259
|
str(k), []
|
|
280
|
-
), #
|
|
260
|
+
), # Pass in the results of the access request for this collection
|
|
281
261
|
*_evaluate_erasure_dependencies(t, erasure_end_nodes),
|
|
282
262
|
)
|
|
263
|
+
for k, t in env.items()
|
|
264
|
+
}
|
|
283
265
|
|
|
284
266
|
# root node returns 0 to be consistent with the output of the other erasure tasks
|
|
285
267
|
dsk[ROOT_COLLECTION_ADDRESS] = 0
|
|
@@ -29,8 +29,8 @@ from fides.api.task.graph_task import (
|
|
|
29
29
|
GraphTask,
|
|
30
30
|
mark_current_and_downstream_nodes_as_failed,
|
|
31
31
|
)
|
|
32
|
-
from fides.api.task.manual.manual_task_address import ManualTaskAddress
|
|
33
32
|
from fides.api.task.manual.manual_task_graph_task import ManualTaskGraphTask
|
|
33
|
+
from fides.api.task.manual.manual_task_utils import ManualTaskAddress
|
|
34
34
|
from fides.api.task.task_resources import TaskResources
|
|
35
35
|
from fides.api.tasks import DSR_QUEUE_NAME, DatabaseTask, celery_app
|
|
36
36
|
from fides.api.util.cache import cache_task_tracking_key
|
|
@@ -298,11 +298,17 @@ def run_access_node(
|
|
|
298
298
|
)
|
|
299
299
|
# Currently, upstream tasks and "input keys" (which are built by data dependencies)
|
|
300
300
|
# are the same, but they may not be the same in the future.
|
|
301
|
-
|
|
302
|
-
|
|
301
|
+
ordered_upstream_tasks: List[Optional[RequestTask]] = (
|
|
302
|
+
_order_tasks_by_input_key(
|
|
303
303
|
graph_task.execution_node.input_keys, upstream_results
|
|
304
304
|
)
|
|
305
305
|
)
|
|
306
|
+
# Pass in access data dependencies in the same order as the input keys.
|
|
307
|
+
# If we don't have access data for an upstream node, pass in an empty list
|
|
308
|
+
upstream_access_data: List[List[Row]] = [
|
|
309
|
+
upstream.get_access_data() if upstream else []
|
|
310
|
+
for upstream in ordered_upstream_tasks
|
|
311
|
+
]
|
|
306
312
|
# Run the main access function
|
|
307
313
|
graph_task.access_request(*upstream_access_data)
|
|
308
314
|
|
|
@@ -353,7 +359,7 @@ def run_erasure_node(
|
|
|
353
359
|
session,
|
|
354
360
|
) as resources:
|
|
355
361
|
# Build GraphTask resource to facilitate execution
|
|
356
|
-
|
|
362
|
+
graph_task: GraphTask = create_graph_task(
|
|
357
363
|
session, request_task, resources
|
|
358
364
|
)
|
|
359
365
|
# Get access data that was saved in the erasure format that was collected from the
|
|
@@ -362,24 +368,8 @@ def run_erasure_node(
|
|
|
362
368
|
request_task.get_data_for_erasures() or []
|
|
363
369
|
)
|
|
364
370
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
try:
|
|
368
|
-
upstream_access_data = (
|
|
369
|
-
get_upstream_access_data_for_erasure_task(
|
|
370
|
-
request_task, session, resources
|
|
371
|
-
)
|
|
372
|
-
)
|
|
373
|
-
except Exception as e:
|
|
374
|
-
logger.error(
|
|
375
|
-
f"Unable to get upstream access data for erasure task {request_task.collection_address}: {e}"
|
|
376
|
-
)
|
|
377
|
-
|
|
378
|
-
# Run the main erasure function, passing along the upstream access data.
|
|
379
|
-
# The extra data is currently only needed for generating BigQuery delete statements.
|
|
380
|
-
erasure_graph_task.erasure_request(
|
|
381
|
-
retrieved_data, inputs=upstream_access_data
|
|
382
|
-
)
|
|
371
|
+
# Run the main erasure function!
|
|
372
|
+
graph_task.erasure_request(retrieved_data)
|
|
383
373
|
|
|
384
374
|
queue_downstream_tasks_with_retries(
|
|
385
375
|
self,
|
|
@@ -497,73 +487,6 @@ def _order_tasks_by_input_key(
|
|
|
497
487
|
return tasks
|
|
498
488
|
|
|
499
489
|
|
|
500
|
-
def get_upstream_access_data_for_erasure_task(
|
|
501
|
-
erasure_request_task: RequestTask,
|
|
502
|
-
session: Session,
|
|
503
|
-
resources: TaskResources,
|
|
504
|
-
) -> List[List[Row]]:
|
|
505
|
-
"""
|
|
506
|
-
Retrieves upstream access data for a given erasure request task.
|
|
507
|
-
|
|
508
|
-
This function finds the corresponding access task for the erasure task,
|
|
509
|
-
creates a GraphTask to extract input keys, and builds the upstream access data
|
|
510
|
-
needed for erasure operations (particularly for BigQuery delete statements).
|
|
511
|
-
|
|
512
|
-
Args:
|
|
513
|
-
erasure_request_task: The erasure task that needs upstream access data
|
|
514
|
-
session: Database session for querying
|
|
515
|
-
resources: Task resources for creating GraphTask
|
|
516
|
-
|
|
517
|
-
Returns:
|
|
518
|
-
List[List[Row]]: Upstream access data ordered by input keys
|
|
519
|
-
|
|
520
|
-
Raises:
|
|
521
|
-
Exception: If the corresponding access task cannot be found
|
|
522
|
-
"""
|
|
523
|
-
# Get the corresponding access task for the current erasure task
|
|
524
|
-
access_request_task = (
|
|
525
|
-
session.query(RequestTask)
|
|
526
|
-
.filter(
|
|
527
|
-
RequestTask.privacy_request_id == erasure_request_task.privacy_request_id,
|
|
528
|
-
RequestTask.collection_address == erasure_request_task.collection_address,
|
|
529
|
-
RequestTask.action_type == ActionType.access,
|
|
530
|
-
)
|
|
531
|
-
.first()
|
|
532
|
-
)
|
|
533
|
-
|
|
534
|
-
if not access_request_task:
|
|
535
|
-
raise Exception(
|
|
536
|
-
f"Unable to find access request task for erasure task {erasure_request_task.collection_address}"
|
|
537
|
-
)
|
|
538
|
-
|
|
539
|
-
# Convert the request task to a GraphTask to get the input_keys
|
|
540
|
-
access_graph_task: GraphTask = create_graph_task(
|
|
541
|
-
session, access_request_task, resources
|
|
542
|
-
)
|
|
543
|
-
|
|
544
|
-
# Build and return the upstream access data
|
|
545
|
-
return _build_upstream_access_data(
|
|
546
|
-
access_graph_task.execution_node.input_keys,
|
|
547
|
-
access_request_task.upstream_tasks_objects(session),
|
|
548
|
-
)
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
def _build_upstream_access_data(
|
|
552
|
-
input_keys: List[CollectionAddress],
|
|
553
|
-
upstream_tasks: Query,
|
|
554
|
-
) -> List[List[Row]]:
|
|
555
|
-
"""
|
|
556
|
-
Helper function to build the access data for the current node.
|
|
557
|
-
The access data is passed in the same order as the input keys.
|
|
558
|
-
If we don't have access data for an upstream node, return an empty list.
|
|
559
|
-
"""
|
|
560
|
-
|
|
561
|
-
ordered_upstream: List[Optional[RequestTask]] = _order_tasks_by_input_key(
|
|
562
|
-
input_keys, upstream_tasks
|
|
563
|
-
)
|
|
564
|
-
return [task.get_access_data() if task else [] for task in ordered_upstream]
|
|
565
|
-
|
|
566
|
-
|
|
567
490
|
mapping = {
|
|
568
491
|
ActionType.access.value: run_access_node,
|
|
569
492
|
ActionType.erasure.value: run_erasure_node,
|
fides/api/task/filter_results.py
CHANGED
|
@@ -6,7 +6,7 @@ from loguru import logger
|
|
|
6
6
|
|
|
7
7
|
from fides.api.graph.config import CollectionAddress, FieldPath
|
|
8
8
|
from fides.api.graph.graph import DatasetGraph
|
|
9
|
-
from fides.api.task.manual.
|
|
9
|
+
from fides.api.task.manual.manual_task_utils import ManualTaskAddress
|
|
10
10
|
from fides.api.util.collection_util import Row
|
|
11
11
|
|
|
12
12
|
|
fides/api/task/graph_task.py
CHANGED
|
@@ -421,7 +421,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
421
421
|
action_type: ActionType,
|
|
422
422
|
ex: Optional[BaseException] = None,
|
|
423
423
|
success_override_msg: Optional[str] = None,
|
|
424
|
-
record_count: Optional[int] = None,
|
|
425
424
|
) -> None:
|
|
426
425
|
"""On completion activities"""
|
|
427
426
|
if ex:
|
|
@@ -441,23 +440,8 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
441
440
|
mark_current_and_downstream_nodes_as_failed(request_task, db)
|
|
442
441
|
else:
|
|
443
442
|
logger.info("Ending {}, {}", self.resources.request.id, self.key)
|
|
444
|
-
|
|
445
|
-
# Build standardized success message with record count
|
|
446
|
-
base_message = (
|
|
447
|
-
str(success_override_msg) if success_override_msg else "success"
|
|
448
|
-
)
|
|
449
|
-
if record_count is not None:
|
|
450
|
-
if action_type == ActionType.access:
|
|
451
|
-
message = f"{base_message} - retrieved {record_count} records"
|
|
452
|
-
elif action_type == ActionType.erasure:
|
|
453
|
-
message = f"{base_message} - masked {record_count} records"
|
|
454
|
-
else:
|
|
455
|
-
message = f"{base_message} - processed {record_count} records"
|
|
456
|
-
else:
|
|
457
|
-
message = base_message
|
|
458
|
-
|
|
459
443
|
self.update_status(
|
|
460
|
-
|
|
444
|
+
str(success_override_msg) if success_override_msg else "success",
|
|
461
445
|
build_affected_field_logs(
|
|
462
446
|
self.execution_node, self.resources.policy, action_type
|
|
463
447
|
),
|
|
@@ -653,11 +637,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
653
637
|
if messages:
|
|
654
638
|
success_message = "\n".join(messages)
|
|
655
639
|
|
|
656
|
-
self.log_end(
|
|
657
|
-
ActionType.access,
|
|
658
|
-
success_override_msg=success_message,
|
|
659
|
-
record_count=len(filtered_output),
|
|
660
|
-
)
|
|
640
|
+
self.log_end(ActionType.access, success_override_msg=success_message)
|
|
661
641
|
return filtered_output
|
|
662
642
|
|
|
663
643
|
@retry(action_type=ActionType.erasure, default_return=0)
|
|
@@ -665,15 +645,9 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
665
645
|
self,
|
|
666
646
|
retrieved_data: List[Row],
|
|
667
647
|
*erasure_prereqs: int, # TODO Remove when we stop support for DSR 2.0. DSR 3.0 enforces with downstream_tasks.
|
|
668
|
-
inputs: Optional[
|
|
669
|
-
List[List[Row]]
|
|
670
|
-
] = None, # Upstream data from corresponding access task
|
|
671
648
|
) -> int:
|
|
672
649
|
"""Run erasure request"""
|
|
673
650
|
|
|
674
|
-
if inputs is None:
|
|
675
|
-
inputs = []
|
|
676
|
-
|
|
677
651
|
# if there is no primary key specified in the graph node configuration
|
|
678
652
|
# note this in the execution log and perform no erasures on this node
|
|
679
653
|
if (
|
|
@@ -720,10 +694,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
720
694
|
)
|
|
721
695
|
return 0
|
|
722
696
|
|
|
723
|
-
formatted_input_data: NodeInput = self.pre_process_input_data(
|
|
724
|
-
*inputs, group_dependent_fields=True
|
|
725
|
-
)
|
|
726
|
-
|
|
727
697
|
# Use execution context to capture postprocessor messages
|
|
728
698
|
with collect_execution_log_messages() as messages:
|
|
729
699
|
output = self.connector.mask_data(
|
|
@@ -732,7 +702,6 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
732
702
|
self.resources.request,
|
|
733
703
|
self.resources.privacy_request_task,
|
|
734
704
|
retrieved_data,
|
|
735
|
-
formatted_input_data,
|
|
736
705
|
)
|
|
737
706
|
|
|
738
707
|
if self.request_task.id:
|
|
@@ -751,11 +720,7 @@ class GraphTask(ABC): # pylint: disable=too-many-instance-attributes
|
|
|
751
720
|
if messages:
|
|
752
721
|
success_message = "\n".join(messages)
|
|
753
722
|
|
|
754
|
-
self.log_end(
|
|
755
|
-
ActionType.erasure,
|
|
756
|
-
success_override_msg=success_message,
|
|
757
|
-
record_count=output,
|
|
758
|
-
)
|
|
723
|
+
self.log_end(ActionType.erasure, success_override_msg=success_message)
|
|
759
724
|
return output
|
|
760
725
|
|
|
761
726
|
@retry(action_type=ActionType.consent, default_return=False)
|