ethyca-fides 2.63.5rc0__py2.py3-none-any.whl → 2.64.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.
- {ethyca_fides-2.63.5rc0.dist-info → ethyca_fides-2.64.0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.63.5rc0.dist-info → ethyca_fides-2.64.0.dist-info}/RECORD +249 -242
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/ba414a58ba90_create_manual_task_config_tables.py +121 -0
- fides/api/api/v1/endpoints/connection_endpoints.py +16 -3
- fides/api/api/v1/endpoints/oauth_endpoints.py +8 -2
- fides/api/db/base.py +4 -0
- fides/api/models/attachment.py +37 -23
- fides/api/models/manual_tasks/__init__.py +6 -0
- fides/api/models/manual_tasks/manual_task.py +11 -1
- fides/api/models/manual_tasks/manual_task_config.py +136 -0
- fides/api/models/manual_tasks/manual_task_log.py +13 -9
- fides/api/schemas/connection_configuration/connection_config.py +19 -4
- fides/api/schemas/manual_tasks/manual_task_config.py +311 -0
- fides/api/schemas/manual_tasks/manual_task_schemas.py +1 -1
- fides/api/schemas/manual_tasks/manual_task_status.py +1 -1
- fides/api/schemas/privacy_request.py +2 -0
- fides/api/service/connectors/query_configs/saas_query_config.py +15 -0
- fides/api/service/privacy_request/attachment_handling.py +132 -0
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +264 -46
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +33 -0
- fides/api/service/privacy_request/dsr_package/templates/collection_index.html +34 -9
- fides/api/service/privacy_request/dsr_package/templates/main.css +45 -2
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +12 -8
- fides/api/service/privacy_request/request_runner_service.py +258 -139
- fides/api/service/storage/gcs.py +15 -3
- fides/api/service/storage/s3.py +28 -14
- fides/api/service/storage/util.py +45 -7
- fides/api/tasks/csv_utils.py +170 -0
- fides/api/tasks/encryption_utils.py +42 -0
- fides/api/tasks/storage.py +85 -91
- fides/api/util/cache.py +6 -3
- fides/api/util/saas_util.py +1 -0
- fides/config/redis_settings.py +105 -44
- fides/service/manual_tasks/manual_task_config_service.py +370 -0
- fides/service/manual_tasks/manual_task_service.py +231 -87
- fides/service/manual_tasks/utils.py +185 -0
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/JnAJNZ-6yNjlkUkjzXxai/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1040-630c7f4284dc6f70.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1100-d43cb04522a6505c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1316-6cc72a45ebf7ff81.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-b4688ba5042ec687.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2599-6c4d22e75028d8b6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2921-aabf41bf3d7573f9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3450-bdaeb35442d810b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3505-a79256cd851dfab4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3513-8677ee280eaef0da.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3855-0dec3e7d9e886550.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-ffa16c2df7ef0ab6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3923-5d580fbb1dd6ae01.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-fceaae662cfca5a5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4060-71cd041e5a57ca5a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/409-037cfc3f096150f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4121-78a76e980acbd539.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4230-1cdb7ea1be370ed3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/431-f72599f01b98f07d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4481-f597a7cf03f8c9e1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5309-4511df9708d5a63c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5574-3cd33b3a6c937899.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-3fb4c7fc790a6d20.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6662-6a6b90fc8f11558f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6853-a4097260e402980e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6882-3cc73d407a088d7d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/69-6889d6674c95e7b5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-13a25cef3a8fdd76.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7553-a95939c32d54b5b7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/79-5670e31eb65d0a53.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/796-9a6b13c838e25538.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8433-adb1fcb29d82f1b7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9046-fdf53cc7e926a8c1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{905-8ab919e7b274ed50.js → 905-742074a074be1055.js} +2 -2
- fides/ui-build/static/admin/_next/static/chunks/9226-ba6587e46ec7659a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9392.81edc11e3a175275.js → 9392.25024e070026343d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.e60a53f1f5890847.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9767-e49b065d03ce4e80.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9951-f9ab5cac7e2c05ab.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/404-ac2f0844e5c4b4cd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-f70bffa5a7903c46.js → _app-f32f997d9c03a84e.js} +10 -10
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-0a5f2310ce6b1059.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-00cb904825aad7e3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-587e21d14e0a5196.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-fa7305b88c1afd20.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-f140ec9d8e8a0f7a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-0edb7c92518e7d21.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-d8d926f0735a2546.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-5c949f2e3cef2398.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-130155cfb4a0bcc7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-1135ad8924d32c36.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-776855e370414beb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-21c23f75ff1135d9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-4d5ea70a77df1bb8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-18e3faf7963962e4.js → [resourceUrn]-c623d6f1a61c8ea9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-030ee304cbe5e530.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-cfac259a30641e68.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-7320524a47104798.js → [resourceUrn]-57bd5cdf784f059f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-7b5aec33da578745.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-c948f93c833d4358.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-333f53caab751428.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-27205f8457a1ecb0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-20a1043f6a06198f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-4c526db0c30c488a.js → [resourceUrn]-06edce289876dea1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-6f27dbb7c8edc69d.js → detection-faf326a6200637d0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-562d2b8ae90dd1f0.js → [resourceUrn]-64acf269256ee74f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-fe7f51502eda57c9.js → discovery-8c3e4be6d36da66d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-fb50de22f83edd4a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-41ab27c4195cfa93.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-6e2caba24b3e78c2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-904d43e31157aa55.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d4e31a1c4a58800e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-8f7d16bc5e9229c8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-4a33dd0371dbaebc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-e88509346b2d2851.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-80b241bf6cddb72e.js → fides-js-docs-5d8fd1af75f19e2f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-1adb6bcb71701ac2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-fdc2964fa7d1d8fd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-adc286ff254e7f41.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-9b4d1d61c7c97509.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-f8fd4795e260887c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-aa744ae8b61e5ff2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-3407158757fb3627.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-47e947c02ae90fd0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-24f9a44512ce8827.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-e567a69f8c37fb9a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-35a33f9c7def2220.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-780e18dde8e38099.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7a17dffa515e5560.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-91dd0039cc2b70bc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-b01cbbaac34dadbc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a15410de7f1d0f84.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-1a1aa83a3f88844c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c4e1b69fb5bab61a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-19737d4f21aadbee.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-9ccb295110feee20.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties-3a1037a2e036212a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-4cdbbb8cd1d8698e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-965cc21889b25e44.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-0e1c381d488a7ada.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-d0e350d2a2667883.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-7796fbf458f8f159.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-6f866bc799a5f67f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-0b44b2b224077dcd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-5d00e1155bd11178.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-d2cdbe770683e9df.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-811dadb489f23d7d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-24108f615ff5e1e7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-54f142bc3e4c95ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-6eb886e7b7e6785b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-7b71274334c559a4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-18534d2a79a3850b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-75d41fde668b9025.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dd43755b687c09a7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +1 -0
- fides/ui-build/static/admin/_next/static/css/c693338e3bc8dcc6.css +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/images/connector-logos/salesforce.svg +41 -0
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
- fides/ui-build/static/admin/lib/fides.js +2 -2
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/api/service/privacy_request/dsr_package/templates/item.html +0 -37
- fides/ui-build/static/admin/_next/static/CusFTpvTru1E2j2Mvq9Bl/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-667e84655846e78c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1100-0b01f500b1eaf60d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-951f58ddd5d46081.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1904-964f8eb328dc2715.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2310-744354001d01f366.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-49af55ad7c631c93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3119-e36ae5071c8f27a5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3505-113f9c95d34b7aae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3513-5c2d412a84a78971.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-45cc725e241211f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3923-b4f701ada3ef0ee0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-7e800aed05537126.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-90a52a9afc655bfc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-66b0e00d5e7ae817.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4132-9b1731bfec6ee537.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4481-7f6710c928bb0cb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-2079138c8cc34f6c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5404-2694509cf5fa96da.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5487-2cbd8d2169eb2a65.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5683-37137111b3e769fb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6202-081545c7822d09af.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-459e054b2702c60e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/641-7e4eef3222cbda70.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6853-688df0b88fe65fd5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/69-00cba94689b9e740.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-4e313b4599b8763d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7553-08bc3d9f66695111.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-fc548561beed136f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-d6586308ed44334b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7980-736f9fd1e749ddd2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8032-74d94f7bd5b81c89.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8433-51870336908fb253.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8499-1fd392d0be9e8ee4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8702-d1c8296f9f6afc10.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9033-fdd87182c15b91e2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-851756440f79cd75.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9327-6a53461c9764b16f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9494-1ffb888b95289891.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.61cf5f6d6a083175.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-afd674014a1d1152.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/404-ec04f826f3dd79ea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-1bec086d567aacff.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-f68bf100e4e60e88.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-effde5cfe49de55f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-ec95ed8cb0712828.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-4cc195e15e0c3cc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-be8972c79fb39705.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-ccf96207de3b74ea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-b9823cc008372cee.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-373f5772ab41bc93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-b9beeee1bde5ca79.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-6ab3a5baafebd199.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-8562790ae07f17c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-42d4d2d6e0253671.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-9d1df6d890671b0c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-7eb08af333baaa8e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-bb57eed84f59a932.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-47eb34aef3e31ac6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-76cefefc53e84c7f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9d8e84a8b4bf568d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-f208fef5e72dafd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-db45aa864e9dda8a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-d5cfdebc74654337.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-618b89228f83435e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-12fc86f15a4c764e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-c23d18a9b56c2e3c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-e3b2d8e3980ab093.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-6e27257eccf65f01.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-bbac1f624424282d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-84eb56f5a07bdf4f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-773182b5e35d0045.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-eb28c927da5bd653.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-781808bca01f8048.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-b51bee8680d66b20.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-1de479533f733fbd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-7dc295b3ed3d2224.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-f64dac3392f5ded7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-eb020bfac4bee532.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-0bd62e28b539e114.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-936877004113c2a6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-6416f01524482af9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-3f4e1313d1f2969b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-1db7a54437db7db0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-64236fd0141414fd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-8cab04871908cfeb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-150d40428245ee0c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b6c876dceb16ad1b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-20cdb2c8a03deae1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-54bcc875592d1fb9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-644dc669b508a79a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties-9a88220d03e7e02f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-70dc1081df37ea69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-3c71b4dbcb6fd6c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-7cb16e0000dd16c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-a18d8f12ee8dcf5d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-dc220e116ad5c09e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-55ddc5f25b86f28e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-5ca7decded228bc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-a6fafa1be2834c40.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-e633750d2b45ddd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-3948686cbd372969.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-04ece499c22d23f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-7752305084280cca.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9e5f9066be6f218d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-86de9e6d72098e45.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-cac52e6c3abf6a15.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-60d5930b6855679b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-b0f4c34752d32c73.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-7dee83dd6d9292aa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-8457bad7859c44f0.js +0 -1
- fides/ui-build/static/admin/_next/static/css/1fdf5c593349dbc6.css +0 -1
- {ethyca_fides-2.63.5rc0.dist-info → ethyca_fides-2.64.0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.63.5rc0.dist-info → ethyca_fides-2.64.0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.63.5rc0.dist-info → ethyca_fides-2.64.0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.63.5rc0.dist-info → ethyca_fides-2.64.0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{CusFTpvTru1E2j2Mvq9Bl → JnAJNZ-6yNjlkUkjzXxai}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Optional
|
1
|
+
from typing import Any, Optional, cast
|
2
2
|
|
3
3
|
from loguru import logger
|
4
4
|
from sqlalchemy import select
|
@@ -6,18 +6,22 @@ from sqlalchemy.orm import Session
|
|
6
6
|
|
7
7
|
from fides.api.models.fides_user import FidesUser
|
8
8
|
from fides.api.models.manual_tasks.manual_task import ManualTask, ManualTaskReference
|
9
|
-
from fides.api.models.manual_tasks.
|
9
|
+
from fides.api.models.manual_tasks.manual_task_config import ManualTaskConfig
|
10
10
|
from fides.api.schemas.manual_tasks.manual_task_schemas import (
|
11
|
-
ManualTaskLogStatus,
|
12
11
|
ManualTaskParentEntityType,
|
13
12
|
ManualTaskReferenceType,
|
14
13
|
ManualTaskType,
|
15
14
|
)
|
15
|
+
from fides.service.manual_tasks.manual_task_config_service import (
|
16
|
+
ManualTaskConfigService,
|
17
|
+
)
|
18
|
+
from fides.service.manual_tasks.utils import with_task_logging
|
16
19
|
|
17
20
|
|
18
21
|
class ManualTaskService:
|
19
22
|
def __init__(self, db: Session):
|
20
23
|
self.db = db
|
24
|
+
self.config_service = ManualTaskConfigService(db)
|
21
25
|
|
22
26
|
def get_task(
|
23
27
|
self,
|
@@ -25,9 +29,12 @@ class ManualTaskService:
|
|
25
29
|
parent_entity_id: Optional[str] = None,
|
26
30
|
parent_entity_type: Optional[ManualTaskParentEntityType] = None,
|
27
31
|
task_type: Optional[ManualTaskType] = None,
|
28
|
-
) ->
|
32
|
+
) -> ManualTask:
|
29
33
|
"""Get the manual task using provided filters.
|
30
34
|
|
35
|
+
This is a flexible lookup method that can find tasks based on various filters.
|
36
|
+
It's normal for this method to return None if no task matches the given filters.
|
37
|
+
|
31
38
|
Args:
|
32
39
|
task_id: The task ID
|
33
40
|
parent_entity_id: The parent entity ID
|
@@ -35,89 +42,203 @@ class ManualTaskService:
|
|
35
42
|
task_type: The task type
|
36
43
|
|
37
44
|
Returns:
|
38
|
-
|
45
|
+
ManualTask: The matching task
|
39
46
|
"""
|
40
47
|
if not any([task_id, parent_entity_id, parent_entity_type, task_type]):
|
41
|
-
logger.
|
42
|
-
|
48
|
+
logger.debug("No filters provided to get_task")
|
49
|
+
raise ValueError("No filters provided to get_task")
|
43
50
|
|
44
|
-
|
51
|
+
# Build filter conditions and a human-readable description
|
52
|
+
filters = []
|
53
|
+
filter_desc = []
|
45
54
|
if task_id:
|
46
|
-
|
55
|
+
filters.append(ManualTask.id == task_id)
|
56
|
+
filter_desc.append(f"task_id={task_id}")
|
47
57
|
if parent_entity_id:
|
48
|
-
|
58
|
+
filters.append(ManualTask.parent_entity_id == parent_entity_id)
|
59
|
+
filter_desc.append(f"parent_entity_id={parent_entity_id}")
|
49
60
|
if parent_entity_type:
|
50
|
-
|
61
|
+
filters.append(ManualTask.parent_entity_type == parent_entity_type)
|
62
|
+
filter_desc.append(f"parent_entity_type={parent_entity_type}")
|
51
63
|
if task_type:
|
52
|
-
|
53
|
-
|
64
|
+
filters.append(ManualTask.task_type == task_type)
|
65
|
+
filter_desc.append(f"task_type={task_type}")
|
54
66
|
|
55
|
-
|
56
|
-
|
57
|
-
|
67
|
+
# Apply all filters at once
|
68
|
+
stmt = select(ManualTask) # type: ignore[arg-type]
|
69
|
+
if filters:
|
70
|
+
stmt = stmt.where(*filters)
|
71
|
+
|
72
|
+
task = self.db.execute(stmt).scalar_one_or_none()
|
73
|
+
if task is None:
|
74
|
+
logger.debug(f"No task found with filters: {filter_desc}")
|
75
|
+
raise ValueError(f"No task found with filters: {filter_desc}")
|
76
|
+
return task
|
77
|
+
|
78
|
+
@with_task_logging("Provided user IDs verified")
|
79
|
+
def _non_existent_users(
|
80
|
+
self, non_existent_user_ids: list[str], *, task_id: str
|
58
81
|
) -> None:
|
59
|
-
"""
|
82
|
+
"""This is a helper function to raise an error if users do not exist.
|
83
|
+
If non_existent_user_ids is empty, this function will instead create
|
84
|
+
a success log entry.
|
60
85
|
|
61
86
|
Args:
|
62
|
-
|
63
|
-
|
64
|
-
|
87
|
+
non_existent_user_ids: List of non-existent user IDs
|
88
|
+
task_id: The task ID
|
89
|
+
|
90
|
+
Returns:
|
91
|
+
None
|
65
92
|
"""
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
# Create new user assignment
|
71
|
-
for user_id in user_ids:
|
72
|
-
# if user is already assigned, skip
|
73
|
-
if user_id in task.assigned_users:
|
74
|
-
continue
|
75
|
-
# verify user exists
|
76
|
-
user = db.query(FidesUser).filter_by(id=user_id).first()
|
77
|
-
if not user:
|
78
|
-
ManualTaskLog.create_error_log(
|
79
|
-
db=db,
|
80
|
-
task_id=task.id,
|
81
|
-
message=f"Failed to add user {user_id} to task {task.id}: user does not exist",
|
82
|
-
details={"user_id": user_id},
|
83
|
-
)
|
84
|
-
continue
|
85
|
-
|
86
|
-
ManualTaskReference.create(
|
87
|
-
db=db,
|
88
|
-
data={
|
89
|
-
"task_id": task.id,
|
90
|
-
"reference_id": user_id,
|
91
|
-
"reference_type": ManualTaskReferenceType.assigned_user,
|
92
|
-
},
|
93
|
+
if len(non_existent_user_ids) > 0:
|
94
|
+
raise ValueError(
|
95
|
+
f"User(s) {sorted(list(non_existent_user_ids))} do not exist"
|
93
96
|
)
|
94
97
|
|
95
|
-
|
96
|
-
|
97
|
-
db=db,
|
98
|
-
task_id=task.id,
|
99
|
-
status=ManualTaskLogStatus.updated,
|
100
|
-
message=f"User {user_id} assigned to task",
|
101
|
-
details={"assigned_user_id": user_id},
|
102
|
-
)
|
98
|
+
def _create_log_data(self, task_id: str, details: dict[str, Any]) -> dict[str, Any]:
|
99
|
+
"""Create standard log data structure.
|
103
100
|
|
104
|
-
|
105
|
-
|
101
|
+
Args:
|
102
|
+
task_id: The task ID
|
103
|
+
details: The log details
|
104
|
+
|
105
|
+
Returns:
|
106
|
+
dict: The log data structure
|
107
|
+
"""
|
108
|
+
return {
|
109
|
+
"task_id": task_id,
|
110
|
+
"details": details,
|
111
|
+
}
|
112
|
+
|
113
|
+
def _handle_user_errors(
|
114
|
+
self,
|
115
|
+
non_existent_users: list[str],
|
116
|
+
task_id: str,
|
117
|
+
details: dict[str, Any],
|
118
|
+
success_count: int,
|
119
|
+
error_key: str,
|
106
120
|
) -> None:
|
107
|
-
"""
|
121
|
+
"""Handle errors for non-existent users.
|
108
122
|
|
109
123
|
Args:
|
110
|
-
|
111
|
-
|
112
|
-
|
124
|
+
non_existent_users: List of non-existent user IDs
|
125
|
+
task_id: The task ID
|
126
|
+
details: The log details to update
|
127
|
+
success_count: Number of successful operations
|
128
|
+
error_key: Key to use for error details
|
129
|
+
|
130
|
+
Raises:
|
131
|
+
ValueError: If no successful operations and users don't exist
|
132
|
+
"""
|
133
|
+
try:
|
134
|
+
self._non_existent_users(non_existent_users, task_id=task_id)
|
135
|
+
except ValueError as e:
|
136
|
+
details[error_key] = sorted(non_existent_users)
|
137
|
+
if success_count == 0:
|
138
|
+
raise e
|
139
|
+
|
140
|
+
def _get_existing_users(self, user_ids: list[str]) -> set[str]:
|
141
|
+
"""Get set of existing user IDs from the provided list.
|
142
|
+
|
143
|
+
Args:
|
144
|
+
user_ids: List of user IDs to check
|
145
|
+
|
146
|
+
Returns:
|
147
|
+
set: Set of existing user IDs
|
113
148
|
"""
|
114
|
-
|
115
|
-
|
116
|
-
|
149
|
+
return set(
|
150
|
+
user.id
|
151
|
+
for user in self.db.query(FidesUser)
|
152
|
+
.filter(FidesUser.id.in_(user_ids))
|
153
|
+
.all()
|
154
|
+
)
|
117
155
|
|
118
|
-
|
119
|
-
|
120
|
-
|
156
|
+
def _handle_user_operation(
|
157
|
+
self,
|
158
|
+
task_id: str,
|
159
|
+
user_ids: list[str],
|
160
|
+
operation_type: str,
|
161
|
+
current_users: Optional[set[str]] = None,
|
162
|
+
) -> tuple[set[str], dict[str, Any]]:
|
163
|
+
"""Handle user assignment/unassignment operations.
|
164
|
+
|
165
|
+
Args:
|
166
|
+
task_id: The task ID
|
167
|
+
user_ids: List of user IDs to process
|
168
|
+
operation_type: Type of operation ('assign' or 'unassign')
|
169
|
+
current_users: Optional set of current users
|
170
|
+
|
171
|
+
Returns:
|
172
|
+
tuple: (processed_users, log_data)
|
173
|
+
"""
|
174
|
+
if not (user_ids := list(set(user_ids))):
|
175
|
+
raise ValueError(f"User ID is required for {operation_type}ment")
|
176
|
+
|
177
|
+
existing_users = set(
|
178
|
+
u.id
|
179
|
+
for u in self.db.query(FidesUser).filter(FidesUser.id.in_(user_ids)).all()
|
180
|
+
)
|
181
|
+
processed_users = (
|
182
|
+
existing_users - (current_users or set())
|
183
|
+
if operation_type == "assign"
|
184
|
+
else existing_users
|
185
|
+
)
|
186
|
+
details = {f"{operation_type}ed_users": sorted(list(processed_users))}
|
187
|
+
|
188
|
+
if non_existing := list(set(user_ids) - existing_users):
|
189
|
+
try:
|
190
|
+
self._non_existent_users(non_existing, task_id=task_id)
|
191
|
+
except ValueError as e:
|
192
|
+
details[f"user_ids_not_{operation_type}ed"] = sorted(non_existing)
|
193
|
+
if not processed_users:
|
194
|
+
raise e
|
195
|
+
|
196
|
+
return processed_users, {"task_id": task_id, "details": details}
|
197
|
+
|
198
|
+
@with_task_logging("Assign users to task")
|
199
|
+
def assign_users_to_task(
|
200
|
+
self, task_id: str, user_ids: list[str]
|
201
|
+
) -> tuple[ManualTask, dict[str, Any]]:
|
202
|
+
"""Assign users to a task.
|
203
|
+
|
204
|
+
Args:
|
205
|
+
task_id: The task ID
|
206
|
+
user_ids: List of user IDs to assign
|
207
|
+
|
208
|
+
Returns:
|
209
|
+
Tuple containing the task and log data, the log data is
|
210
|
+
captured by the with_task_logging decorator. and the task is
|
211
|
+
returned to the caller.
|
212
|
+
"""
|
213
|
+
task = self.get_task(task_id=task_id)
|
214
|
+
users_to_assign, log_data = self._handle_user_operation(
|
215
|
+
task_id, user_ids, "assign", set(task.assigned_users)
|
216
|
+
)
|
217
|
+
|
218
|
+
if users_to_assign:
|
219
|
+
self.db.bulk_insert_mappings(
|
220
|
+
ManualTaskReference,
|
221
|
+
[
|
222
|
+
{
|
223
|
+
"task_id": task.id,
|
224
|
+
"reference_id": user_id,
|
225
|
+
"reference_type": ManualTaskReferenceType.assigned_user,
|
226
|
+
}
|
227
|
+
for user_id in users_to_assign
|
228
|
+
],
|
229
|
+
)
|
230
|
+
self.db.flush()
|
231
|
+
self.db.refresh(task)
|
232
|
+
|
233
|
+
return task, log_data
|
234
|
+
|
235
|
+
@with_task_logging("Unassign users from task")
|
236
|
+
def unassign_users_from_task(
|
237
|
+
self, task_id: str, user_ids: list[str]
|
238
|
+
) -> tuple[ManualTask, dict[str, Any]]:
|
239
|
+
task = self.get_task(task_id=task_id)
|
240
|
+
refs_to_unassign = (
|
241
|
+
self.db.query(ManualTaskReference)
|
121
242
|
.filter(
|
122
243
|
ManualTaskReference.task_id == task.id,
|
123
244
|
ManualTaskReference.reference_type
|
@@ -127,24 +248,47 @@ class ManualTaskService:
|
|
127
248
|
.all()
|
128
249
|
)
|
129
250
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
status=ManualTaskLogStatus.updated,
|
137
|
-
message=f"User {ref.reference_id} unassigned from task",
|
138
|
-
details={"unassigned_user_id": ref.reference_id},
|
139
|
-
)
|
251
|
+
if refs_to_unassign:
|
252
|
+
self.db.query(ManualTaskReference).filter(
|
253
|
+
ManualTaskReference.id.in_([ref.id for ref in refs_to_unassign])
|
254
|
+
).delete(synchronize_session=False)
|
255
|
+
self.db.flush()
|
256
|
+
self.db.refresh(task)
|
140
257
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
]
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
258
|
+
_, log_data = self._handle_user_operation(task_id, user_ids, "unassign")
|
259
|
+
return task, log_data
|
260
|
+
|
261
|
+
def create_config(
|
262
|
+
self, config_type: str, fields: list[dict], task_id: str
|
263
|
+
) -> ManualTaskConfig:
|
264
|
+
"""Create a new config for a task.
|
265
|
+
|
266
|
+
Args:
|
267
|
+
config_type: The config type
|
268
|
+
fields: The fields for the config
|
269
|
+
task_id: The task ID
|
270
|
+
|
271
|
+
Returns:
|
272
|
+
ManualTaskConfig: The new config
|
273
|
+
"""
|
274
|
+
task = self.get_task(task_id=task_id)
|
275
|
+
config = self.config_service.create_new_version(task, config_type, fields)
|
276
|
+
return cast(ManualTaskConfig, config)
|
277
|
+
|
278
|
+
def delete_config(self, config: ManualTaskConfig, task_id: str) -> None:
|
279
|
+
"""Delete this configuration.
|
280
|
+
Args:
|
281
|
+
config: The config to delete
|
282
|
+
task_id: The task ID
|
283
|
+
Raises:
|
284
|
+
ValueError: If there are active instances using this configuration
|
285
|
+
ValueError: If the task does not exist
|
286
|
+
|
287
|
+
Returns:
|
288
|
+
dict[str, Any]: The log details - intercepted by the `with_task_logging` decorator.
|
289
|
+
"""
|
290
|
+
task = self.get_task(task_id=task_id)
|
291
|
+
|
292
|
+
# Delete the configuration
|
293
|
+
config_id = config.id
|
294
|
+
self.config_service.delete_config(task, config_id)
|
@@ -0,0 +1,185 @@
|
|
1
|
+
from functools import wraps
|
2
|
+
from typing import Any, Callable, Optional, TypeVar
|
3
|
+
|
4
|
+
from loguru import logger
|
5
|
+
from pydantic import ValidationError
|
6
|
+
|
7
|
+
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
8
|
+
from fides.api.schemas.manual_tasks.manual_task_config import ManualTaskFieldBase
|
9
|
+
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
|
10
|
+
from fides.api.schemas.manual_tasks.manual_task_status import StatusType
|
11
|
+
|
12
|
+
T = TypeVar("T")
|
13
|
+
|
14
|
+
|
15
|
+
def validate_fields(fields: list[dict[str, Any]], is_submission: bool = False) -> None:
|
16
|
+
"""Validate field data against the appropriate Pydantic model.
|
17
|
+
|
18
|
+
Args:
|
19
|
+
fields: List of field data to validate
|
20
|
+
is_submission: Whether the fields are for a submission (True) or configuration (False)
|
21
|
+
|
22
|
+
Raises:
|
23
|
+
ValueError: If the field data is invalid
|
24
|
+
"""
|
25
|
+
# Check for duplicate field keys
|
26
|
+
if len({str(field.get("field_key")) for field in fields}) != len(fields):
|
27
|
+
raise ValueError(
|
28
|
+
"Duplicate field keys found in field updates, field keys must be unique."
|
29
|
+
)
|
30
|
+
|
31
|
+
for field in fields:
|
32
|
+
if not field.get("field_key"):
|
33
|
+
raise ValueError("Invalid field data: field_key is required")
|
34
|
+
if not field.get("field_type"):
|
35
|
+
raise ValueError("Invalid field data: field_type is required")
|
36
|
+
if is_submission and "value" not in field:
|
37
|
+
raise ValueError("Invalid field data: value is required for submissions")
|
38
|
+
if not is_submission:
|
39
|
+
try:
|
40
|
+
field_model = ManualTaskFieldBase.get_field_model_for_type(
|
41
|
+
field["field_type"]
|
42
|
+
)
|
43
|
+
field_model.model_validate(field)
|
44
|
+
except ValidationError as e:
|
45
|
+
raise ValueError(f"Invalid field data: {str(e)}")
|
46
|
+
|
47
|
+
|
48
|
+
class TaskLogger:
|
49
|
+
"""Class-based decorator for logging operation success/failure in service methods.
|
50
|
+
Args:
|
51
|
+
operation_name: The name of the operation to log
|
52
|
+
success_status: The status to log for successful operations
|
53
|
+
|
54
|
+
The decorated function can return either:
|
55
|
+
- A tuple of (return_value, log_details)
|
56
|
+
- Just the return value (in which case log details will be extracted from it)
|
57
|
+
"""
|
58
|
+
|
59
|
+
def __init__(
|
60
|
+
self,
|
61
|
+
operation_name: str,
|
62
|
+
success_status: ManualTaskLogStatus = ManualTaskLogStatus.complete,
|
63
|
+
) -> None:
|
64
|
+
self.operation_name = operation_name
|
65
|
+
self.success_status = success_status
|
66
|
+
|
67
|
+
def __call__(self, func: Callable[..., T]) -> Callable[..., T]:
|
68
|
+
@wraps(func)
|
69
|
+
def wrapped(service_self: Any, *args: Any, **kwargs: Any) -> T:
|
70
|
+
try:
|
71
|
+
result = func(service_self, *args, **kwargs)
|
72
|
+
return_value, log_data = (
|
73
|
+
result
|
74
|
+
if isinstance(result, tuple) and len(result) == 2
|
75
|
+
else (result, {})
|
76
|
+
)
|
77
|
+
if hasattr(service_self, "db") and (
|
78
|
+
task_id := self._get_task_id(return_value, kwargs)
|
79
|
+
):
|
80
|
+
self._log_success(
|
81
|
+
service_self.db, task_id, return_value, log_data, kwargs
|
82
|
+
)
|
83
|
+
return return_value
|
84
|
+
except Exception as e:
|
85
|
+
self._log_error(service_self, e, kwargs)
|
86
|
+
raise
|
87
|
+
|
88
|
+
return wrapped
|
89
|
+
|
90
|
+
def _get_task_id(self, result: Any, kwargs: dict) -> Optional[str]:
|
91
|
+
"""Extract task_id from result or kwargs."""
|
92
|
+
return getattr(result, "task_id", None) or kwargs.get("task_id")
|
93
|
+
|
94
|
+
def _get_log_data(self, result: Any, kwargs: dict) -> dict:
|
95
|
+
"""Create log data from result and kwargs."""
|
96
|
+
log_data = {}
|
97
|
+
for field in ["task_id", "config_id", "instance_id"]:
|
98
|
+
if value := getattr(result, field, None) or kwargs.get(field):
|
99
|
+
log_data[field] = value
|
100
|
+
log_data["details"] = kwargs.get("details", {})
|
101
|
+
return log_data
|
102
|
+
|
103
|
+
def _log_success(
|
104
|
+
self, db: Any, task_id: str, result: Any, log_data: dict, kwargs: dict
|
105
|
+
) -> None:
|
106
|
+
"""Log successful operation."""
|
107
|
+
ManualTaskLog.create_log(
|
108
|
+
db=db,
|
109
|
+
**self._get_log_data(result, kwargs | log_data),
|
110
|
+
status=self.success_status,
|
111
|
+
message=self.operation_name,
|
112
|
+
)
|
113
|
+
|
114
|
+
def _log_error(self, service_self: Any, error: Exception, kwargs: dict) -> None:
|
115
|
+
"""Log operation error."""
|
116
|
+
logger.error(f"Error in {self.operation_name}: {str(error)}")
|
117
|
+
if hasattr(service_self, "db") and (task_id := self._get_task_id({}, kwargs)):
|
118
|
+
ManualTaskLog.create_log(
|
119
|
+
db=service_self.db,
|
120
|
+
task_id=task_id,
|
121
|
+
**{
|
122
|
+
k: v
|
123
|
+
for k, v in self._get_log_data({}, kwargs).items()
|
124
|
+
if k != "task_id"
|
125
|
+
},
|
126
|
+
status=ManualTaskLogStatus.error,
|
127
|
+
message=f"Error in {self.operation_name}: {str(error)}",
|
128
|
+
)
|
129
|
+
|
130
|
+
@staticmethod
|
131
|
+
def log_status_change(
|
132
|
+
db: Any,
|
133
|
+
task_id: str,
|
134
|
+
config_id: Optional[str] = None,
|
135
|
+
instance_id: Optional[str] = None,
|
136
|
+
previous_status: Optional[StatusType] = None,
|
137
|
+
new_status: Optional[StatusType] = None,
|
138
|
+
user_id: Optional[str] = None,
|
139
|
+
) -> None:
|
140
|
+
"""Log a status change event."""
|
141
|
+
ManualTaskLog.create_log(
|
142
|
+
db=db,
|
143
|
+
task_id=task_id,
|
144
|
+
config_id=config_id,
|
145
|
+
instance_id=instance_id,
|
146
|
+
status=ManualTaskLogStatus.in_progress,
|
147
|
+
message=f"Task instance status transitioning from {previous_status} to {new_status}",
|
148
|
+
details={
|
149
|
+
"previous_status": previous_status,
|
150
|
+
"new_status": new_status,
|
151
|
+
"user_id": user_id,
|
152
|
+
},
|
153
|
+
)
|
154
|
+
|
155
|
+
@staticmethod
|
156
|
+
def log_create(
|
157
|
+
db: Any,
|
158
|
+
task_id: str,
|
159
|
+
entity_type: str,
|
160
|
+
entity_id: str,
|
161
|
+
details: Optional[dict] = None,
|
162
|
+
user_id: Optional[str] = None,
|
163
|
+
status: ManualTaskLogStatus = ManualTaskLogStatus.created,
|
164
|
+
) -> None:
|
165
|
+
"""Log a creation event."""
|
166
|
+
id_fields = {
|
167
|
+
"task": {"task_id": task_id},
|
168
|
+
"config": {"task_id": task_id, "config_id": entity_id},
|
169
|
+
"instance": {"task_id": task_id, "instance_id": entity_id},
|
170
|
+
"submission": {"task_id": task_id, "instance_id": entity_id},
|
171
|
+
}
|
172
|
+
if entity_type not in id_fields:
|
173
|
+
raise ValueError(f"Invalid entity type: {entity_type}")
|
174
|
+
|
175
|
+
ManualTaskLog.create_log(
|
176
|
+
db=db,
|
177
|
+
**id_fields[entity_type],
|
178
|
+
status=status,
|
179
|
+
message=f"Created new {entity_type}",
|
180
|
+
details=(details or {}) | ({"user_id": user_id} if user_id else {}),
|
181
|
+
)
|
182
|
+
|
183
|
+
|
184
|
+
# Alias the class to maintain the original decorator name
|
185
|
+
with_task_logging = TaskLogger
|
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/c693338e3bc8dcc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/c693338e3bc8dcc6.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-0a61b5bd21a41fe6.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-f32f997d9c03a84e.js" defer=""></script><script src="/_next/static/chunks/pages/404-ac2f0844e5c4b4cd.js" defer=""></script><script src="/_next/static/JnAJNZ-6yNjlkUkjzXxai/_buildManifest.js" defer=""></script><script src="/_next/static/JnAJNZ-6yNjlkUkjzXxai/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"JnAJNZ-6yNjlkUkjzXxai","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -0,0 +1 @@
|
|
1
|
+
self.__BUILD_MANIFEST=function(s,e,t,a,c,n,i,d,o,r,p,u,g,f,m,b,j,k,h,y,l,v,I,F,x,_,U,w,q,N,A,S,B,C,z,D,E,L,M,T,P,G,H,J,K,O,Q,R,V,W,X){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[_,"static/chunks/pages/index-1adb6bcb71701ac2.js"],"/404":["static/chunks/pages/404-ac2f0844e5c4b4cd.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[e,_,"static/chunks/pages/add-systems-587e21d14e0a5196.js"],"/add-systems/manual":[s,t,c,n,i,o,b,e,a,d,u,j,l,U,w,"static/chunks/pages/add-systems/manual-0a5f2310ce6b1059.js"],"/add-systems/multiple":[s,t,e,a,u,k,q,"static/chunks/pages/add-systems/multiple-00cb904825aad7e3.js"],"/consent":["static/chunks/pages/consent-4d5ea70a77df1bb8.js"],"/consent/configure":[s,t,e,a,u,k,"static/chunks/pages/consent/configure-f140ec9d8e8a0f7a.js"],"/consent/configure/add-vendors":[s,t,e,a,u,k,q,"static/chunks/pages/consent/configure/add-vendors-fa7305b88c1afd20.js"],"/consent/privacy-experience":[s,t,b,e,a,N,"static/chunks/pages/consent/privacy-experience-d8d926f0735a2546.js"],"/consent/privacy-experience/new":[c,n,g,A,r,h,S,"static/chunks/pages/consent/privacy-experience/new-a0039f216fb3eb93.js"],"/consent/privacy-experience/[id]":[c,n,g,A,r,h,S,"static/chunks/pages/consent/privacy-experience/[id]-0edb7c92518e7d21.js"],"/consent/privacy-notices":[s,t,e,a,N,"static/chunks/pages/consent/privacy-notices-1135ad8924d32c36.js"],"/consent/privacy-notices/new":[c,n,g,B,r,h,C,"static/chunks/pages/consent/privacy-notices/new-130155cfb4a0bcc7.js"],"/consent/privacy-notices/[id]":[c,n,g,B,r,h,C,"static/chunks/pages/consent/privacy-notices/[id]-5c949f2e3cef2398.js"],"/consent/properties":[s,t,e,a,z,"static/chunks/pages/consent/properties-776855e370414beb.js"],"/consent/reporting":[s,t,c,e,a,"static/chunks/pages/consent/reporting-21c23f75ff1135d9.js"],"/data-catalog":[s,t,c,n,i,e,a,d,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-7b5aec33da578745.js"],"/data-catalog/[systemId]/projects":[s,t,c,n,i,e,a,d,v,p,"static/chunks/pages/data-catalog/[systemId]/projects-cfac259a30641e68.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[s,t,e,a,D,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-030ee304cbe5e530.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,t,c,n,i,e,a,d,v,E,p,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-c623d6f1a61c8ea9.js"],"/data-catalog/[systemId]/resources":[s,t,e,a,D,"static/chunks/pages/data-catalog/[systemId]/resources-51d99174c8006eb5.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,t,c,n,i,e,a,d,v,E,p,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-57bd5cdf784f059f.js"],"/data-discovery/action-center":[s,t,e,a,"static/chunks/pages/data-discovery/action-center-27205f8457a1ecb0.js"],"/data-discovery/action-center/[monitorId]":[s,t,c,n,i,e,a,I,"static/chunks/pages/data-discovery/action-center/[monitorId]-333f53caab751428.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,t,c,n,i,e,a,d,u,l,"static/css/81642473e38c67a5.css","static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-c948f93c833d4358.js"],"/data-discovery/activity":[s,t,e,a,m,"static/chunks/pages/data-discovery/activity-20a1043f6a06198f.js"],"/data-discovery/detection":[s,t,e,a,m,L,"static/chunks/pages/data-discovery/detection-faf326a6200637d0.js"],"/data-discovery/detection/[resourceUrn]":[s,t,e,a,m,L,"static/chunks/pages/data-discovery/detection/[resourceUrn]-06edce289876dea1.js"],"/data-discovery/discovery":[s,t,c,n,i,e,a,d,m,M,p,"static/chunks/pages/data-discovery/discovery-8c3e4be6d36da66d.js"],"/data-discovery/discovery/[resourceUrn]":[s,t,c,n,i,e,a,d,m,M,p,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-64acf269256ee74f.js"],"/datamap":[s,t,"static/chunks/255-7db55b0e3a0f9dea.js",e,a,j,T,"static/chunks/pages/datamap-fb50de22f83edd4a.js"],"/dataset":[s,t,f,e,a,y,"static/chunks/pages/dataset-8f7d16bc5e9229c8.js"],"/dataset/new":[f,y,"static/chunks/pages/dataset/new-d4e31a1c4a58800e.js"],"/dataset/[datasetId]":[s,t,"static/chunks/9729-fcf6ff4e3534e4a8.js",e,a,F,"static/chunks/pages/dataset/[datasetId]-904d43e31157aa55.js"],"/dataset/[datasetId]/[collectionName]":[s,t,c,n,i,o,e,a,d,F,p,"static/chunks/pages/dataset/[datasetId]/[collectionName]-6e2caba24b3e78c2.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,t,c,n,i,o,e,a,d,F,p,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-41ab27c4195cfa93.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js"],"/datastore-connection/new":[c,o,f,b,P,y,G,"static/chunks/pages/datastore-connection/new-e88509346b2d2851.js"],"/datastore-connection/[id]":[c,o,f,P,y,G,"static/chunks/pages/datastore-connection/[id]-4a33dd0371dbaebc.js"],"/fides-js-docs":["static/chunks/2fbcc6de-a6c61724c327e9fa.js","static/chunks/e3251fe7-5777b5d778e6fffa.js",c,n,i,o,f,H,"static/css/ab65b8cc3144bfc8.css","static/chunks/905-742074a074be1055.js","static/chunks/pages/fides-js-docs-5d8fd1af75f19e2f.js"],"/integrations":[s,t,c,n,i,o,g,J,e,a,K,p,"static/chunks/pages/integrations-adc286ff254e7f41.js"],"/integrations/[id]":[s,t,c,n,i,o,g,J,e,a,K,"static/css/e458b5f1afdbb7fc.css","static/chunks/pages/integrations/[id]-fdc2964fa7d1d8fd.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,t,c,n,i,e,a,"static/chunks/pages/messaging-aa744ae8b61e5ff2.js"],"/messaging/add-template":[r,O,"static/chunks/pages/messaging/add-template-f8fd4795e260887c.js"],"/messaging/[id]":[r,O,"static/chunks/pages/messaging/[id]-9b4d1d61c7c97509.js"],"/poc/ant-components":["static/chunks/pages/poc/ant-components-3407158757fb3627.js"],"/poc/form-experiments/AntForm":["static/chunks/pages/poc/form-experiments/AntForm-47e947c02ae90fd0.js"],"/poc/form-experiments/FormikAntFormItem":["static/chunks/pages/poc/form-experiments/FormikAntFormItem-24f9a44512ce8827.js"],"/poc/form-experiments/FormikControlled":["static/chunks/pages/poc/form-experiments/FormikControlled-e567a69f8c37fb9a.js"],"/poc/form-experiments/FormikField":["static/chunks/pages/poc/form-experiments/FormikField-35a33f9c7def2220.js"],"/poc/form-experiments/FormikSpreadField":[Q,"static/chunks/pages/poc/form-experiments/FormikSpreadField-af097d661f6abcf4.js"],"/poc/forms":[Q,"static/chunks/pages/poc/forms-780e18dde8e38099.js"],"/poc/table-migration":[u,k,"static/chunks/pages/poc/table-migration-7a17dffa515e5560.js"],"/privacy-requests":[s,t,e,a,R,"static/chunks/pages/privacy-requests-c4e1b69fb5bab61a.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-1a1aa83a3f88844c.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-b01cbbaac34dadbc.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-a15410de7f1d0f84.js"],"/privacy-requests/[id]":[R,"static/css/5ded47c57dae5baf.css","static/chunks/pages/privacy-requests/[id]-91dd0039cc2b70bc.js"],"/properties":[s,t,e,a,z,"static/chunks/pages/properties-3a1037a2e036212a.js"],"/properties/add-property":[r,V,"static/chunks/pages/properties/add-property-9ccb295110feee20.js"],"/properties/[id]":[r,V,"static/chunks/pages/properties/[id]-19737d4f21aadbee.js"],"/reporting/datamap":[s,t,c,n,i,H,e,a,j,T,"static/chunks/pages/reporting/datamap-4cdbbb8cd1d8698e.js"],"/settings/about":["static/chunks/pages/settings/about-0e1c381d488a7ada.js"],"/settings/about/alpha":["static/chunks/pages/settings/about/alpha-965cc21889b25e44.js"],"/settings/consent":["static/chunks/pages/settings/consent-7796fbf458f8f159.js"],"/settings/consent/[configuration_id]/[purpose_id]":[s,t,e,a,"static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-d0e350d2a2667883.js"],"/settings/custom-fields":[s,t,e,a,"static/chunks/pages/settings/custom-fields-6f866bc799a5f67f.js"],"/settings/domain-records":[s,t,e,a,"static/chunks/pages/settings/domain-records-0b44b2b224077dcd.js"],"/settings/domains":["static/chunks/pages/settings/domains-5d00e1155bd11178.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-d2cdbe770683e9df.js"],"/settings/locations":[s,W,I,"static/chunks/pages/settings/locations-811dadb489f23d7d.js"],"/settings/organization":["static/chunks/pages/settings/organization-24108f615ff5e1e7.js"],"/settings/regulations":[s,W,I,"static/chunks/pages/settings/regulations-54f142bc3e4c95ba.js"],"/systems":[s,t,e,a,"static/chunks/pages/systems-7b71274334c559a4.js"],"/systems/configure/[id]":[s,t,c,n,i,o,b,e,a,d,u,j,l,U,w,"static/chunks/pages/systems/configure/[id]-6eb886e7b7e6785b.js"],"/systems/configure/[id]/test-datasets":[f,"static/chunks/pages/systems/configure/[id]/test-datasets-fef247a87baeb080.js"],"/taxonomy":["static/chunks/678d4732-50255cc09048e643.js",c,n,i,g,"static/chunks/3983-17ae9c232bddc413.js","static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-18534d2a79a3850b.js"],"/user-management":[x,"static/chunks/pages/user-management-dd43755b687c09a7.js"],"/user-management/new":[x,X,"static/chunks/pages/user-management/new-b124cc24b930c9e1.js"],"/user-management/profile/[id]":[x,X,"static/chunks/pages/user-management/profile/[id]-75d41fde668b9025.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/fides-js-docs","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/poc/ant-components","/poc/form-experiments/AntForm","/poc/form-experiments/FormikAntFormItem","/poc/form-experiments/FormikControlled","/poc/form-experiments/FormikField","/poc/form-experiments/FormikSpreadField","/poc/forms","/poc/table-migration","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/about/alpha","/settings/consent","/settings/consent/[configuration_id]/[purpose_id]","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/c78d26b1-88a3e1bacb2a03c2.js","static/chunks/7553-a95939c32d54b5b7.js","static/chunks/6060-cb1ab5be7067bf7b.js","static/chunks/4481-f597a7cf03f8c9e1.js","static/chunks/2858-0b44609b6be7850b.js","static/chunks/2866-a73888c17a195cbe.js","static/chunks/9278-9b1b5970f0702668.js","static/chunks/409-037cfc3f096150f0.js","static/chunks/699-8ca44b0de9fa20f0.js","static/chunks/69-6889d6674c95e7b5.js","static/css/d2d4e9a6923e6730.css","static/chunks/401-fceaae662cfca5a5.js","static/chunks/3662-f6a1ddca5ee42076.js","static/chunks/6527-0eed08abe252a918.js","static/chunks/431-f72599f01b98f07d.js","static/chunks/5277-e8a036319456127f.js","static/chunks/9951-f9ab5cac7e2c05ab.js","static/chunks/3923-5d580fbb1dd6ae01.js","static/chunks/6277-3fb4c7fc790a6d20.js","static/chunks/5574-3cd33b3a6c937899.js","static/chunks/1040-630c7f4284dc6f70.js","static/chunks/6882-3cc73d407a088d7d.js","static/css/eb46b504bb5d980d.css","static/chunks/9226-ba6587e46ec7659a.js","static/chunks/3513-8677ee280eaef0da.js","static/css/972dc7eef106ee7c.css","static/chunks/3450-bdaeb35442d810b4.js","static/css/92fc10cc7ed1aba3.css","static/chunks/796-9a6b13c838e25538.js","static/chunks/6853-a4097260e402980e.js","static/chunks/3670-2abd9b2f17770872.js","static/chunks/1817-b4688ba5042ec687.js","static/chunks/6659-b2088f525bf13c17.js","static/chunks/6954-13a25cef3a8fdd76.js","static/chunks/79-5670e31eb65d0a53.js","static/chunks/3872-ffa16c2df7ef0ab6.js","static/chunks/3855-0dec3e7d9e886550.js","static/chunks/5309-4511df9708d5a63c.js","static/chunks/9046-fdf53cc7e926a8c1.js","static/chunks/4230-1cdb7ea1be370ed3.js","static/chunks/2430-b480401d44c55416.js","static/chunks/9767-e49b065d03ce4e80.js","static/chunks/2599-6c4d22e75028d8b6.js","static/chunks/1316-6cc72a45ebf7ff81.js","static/chunks/6662-6a6b90fc8f11558f.js","static/chunks/1100-d43cb04522a6505c.js","static/chunks/2921-aabf41bf3d7573f9.js","static/chunks/8433-adb1fcb29d82f1b7.js","static/chunks/4060-71cd041e5a57ca5a.js","static/chunks/3505-a79256cd851dfab4.js","static/chunks/4121-78a76e980acbd539.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|