ethyca-fides 2.63.3b0__py2.py3-none-any.whl → 2.64.0rc0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/RECORD +228 -225
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/ba414a58ba90_create_manual_task_config_tables.py +121 -0
- fides/api/db/base.py +4 -0
- fides/api/models/attachment.py +1 -0
- 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/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/util/cache.py +6 -3
- 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/chunks/1040-630c7f4284dc6f70.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1316-6cc72a45ebf7ff81.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/3450-bdaeb35442d810b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3855-0dec3e7d9e886550.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-fceaae662cfca5a5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/409-037cfc3f096150f0.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/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/6662-cb11881dcaabe5e2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6882-3cc73d407a088d7d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.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-5fe5124abfb5c542.js → 905-742074a074be1055.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9226-ba6587e46ec7659a.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/{_app-0e0fdbcc0ec1c76b.js → _app-8ec6e466f3373ac0.js} +6 -6
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-3065022f370ec055.js → manual-0a5f2310ce6b1059.js} +1 -1
- 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-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-18c144223277bc2e.js → action-center-27205f8457a1ecb0.js} +1 -1
- 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-9af01b6cf4cbe8af.js → datamap-fb50de22f83edd4a.js} +1 -1
- 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]-18ff06fc09c22c33.js → [id]-4a33dd0371dbaebc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-979eff6888e42b6b.js → new-e88509346b2d2851.js} +1 -1
- 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/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/reporting/datamap-4cdbbb8cd1d8698e.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/organization-24108f615ff5e1e7.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]-2b540203a2d7b59d.js → [id]-6eb886e7b7e6785b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-18534d2a79a3850b.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/_next/static/lDN8BtGGiw3b60__SDnAa/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/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 +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/ui-build/static/admin/_next/static/0S8UTwc7FKVdi3Eb4LgFK/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-f2199d5b88dd98b4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/155-8ad794121fef6281.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1904-e33cb75edb93d3d3.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2310-efaa2a52fc487db4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3119-9be74ade1504a7e7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-710009c2a7408818.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4132-76ca1bcf79bf1d77.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-8a1f7feddee7a960.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5404-a8a82985736363f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5487-483a111405f678e0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5683-7144f557d701406c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6202-86a62d94744e2c18.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/641-7e4eef3222cbda70.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7980-3da0fe6938b0b758.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8032-4b8bda7166eff954.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8499-a65187ae77b7307b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8702-d1c8296f9f6afc10.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-eb3b84680abcc660.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9494-04a0483ed0ddad7c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-a3ed98edff04e6ed.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-b02050eb3b7113d4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-ff211c7a968bda47.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-7f7435f28861ee78.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-ec4b981fd9cff542.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-e18f14b8d598e942.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-1987ef0d3c687aaa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-979828f48148b37c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e85c3537d3aade4a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-6d44abbe7d454435.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-42f276660c107e1c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-63361d914d70d647.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-fd73f276dad7a06c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-f85f92726a61a668.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-e090903a572cba68.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-f0c8e4eced9f5cc5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-f7a271ee53cb4e51.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-dd903f6e03c4ee4e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-493dc9b4595c9fb4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-6d790458dd21dde7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-abfd03ce7f1e55ac.js +0 -1
- fides/ui-build/static/admin/_next/static/css/c3377f99bf988d68.css +0 -1
- {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.63.3b0.dist-info → ethyca_fides-2.64.0rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1100-d617215143d70d3d.js → 1100-d43cb04522a6505c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1817-ddfdd6ed9529bba6.js → 1817-b4688ba5042ec687.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-19664dd93e2bf1ea.js → 2921-aabf41bf3d7573f9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3505-f6d55694ca5c9816.js → 3505-a79256cd851dfab4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3513-656df06b45fedba3.js → 3513-8677ee280eaef0da.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3872-09df90521f7db611.js → 3872-ffa16c2df7ef0ab6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-3d80020d02819c33.js → 3923-5d580fbb1dd6ae01.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4060-4e196835f56cc326.js → 4060-71cd041e5a57ca5a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4121-80ac9bcd08f9cd7a.js → 4121-78a76e980acbd539.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4481-be144b50994f5135.js → 4481-f597a7cf03f8c9e1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6277-0b1e3d23e97f5e19.js → 6277-3fb4c7fc790a6d20.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-d9c6c55d8562bc9b.js → 6853-a4097260e402980e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{69-a4d64cabe750b286.js → 69-6889d6674c95e7b5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-8ed05ffdbf2ec086.js → 6954-13a25cef3a8fdd76.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7553-77c9715868d6ad13.js → 7553-a95939c32d54b5b7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{79-6c977013b6bedc23.js → 79-5670e31eb65d0a53.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-1d77aa88b776ee4e.js → 796-9a6b13c838e25538.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8433-88fd946149dd1f27.js → 8433-adb1fcb29d82f1b7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-c50dccc133b332a9.js → 404-ac2f0844e5c4b4cd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-357ef3b269c576bb.js → multiple-00cb904825aad7e3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-e8ae218a9d124ba7.js → add-systems-587e21d14e0a5196.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-488507bb244cce9d.js → add-vendors-fa7305b88c1afd20.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-6f0b46ac2b112bfe.js → configure-f140ec9d8e8a0f7a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-5024b4ab40ba024c.js → [id]-0edb7c92518e7d21.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-2b62e5facfc51808.js → privacy-experience-d8d926f0735a2546.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-71791459da78e35d.js → [id]-5c949f2e3cef2398.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-26a7d52615b1ebb8.js → new-130155cfb4a0bcc7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-25836dd5142f37e8.js → privacy-notices-1135ad8924d32c36.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-3a9021850242c78f.js → properties-776855e370414beb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-9a5d3cc5cbb4ef27.js → reporting-21c23f75ff1135d9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-9e21184279f8e126.js → consent-4d5ea70a77df1bb8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-64cea013d41e348a.js → [projectUrn]-030ee304cbe5e530.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-343a3830b2d4cf22.js → datastore-connection-8f9b8890018e1ea5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-737b0c430bf2f7a0.js → index-1adb6bcb71701ac2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-91e865a65a88d1a4.js → [id]-9b4d1d61c7c97509.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-529c7e09b073edd2.js → add-template-f8fd4795e260887c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-6226faba9595da71.js → messaging-aa744ae8b61e5ff2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-0f7d4390e01f4ffb.js → ant-components-3407158757fb3627.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-a4e470f75a5553f8.js → AntForm-47e947c02ae90fd0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-d814c1c56b4b04d8.js → FormikAntFormItem-24f9a44512ce8827.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-0f68f2be09df2c76.js → FormikControlled-e567a69f8c37fb9a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-6b63d5c992466891.js → FormikField-35a33f9c7def2220.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-88eb9b98e8e4b426.js → forms-780e18dde8e38099.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-a3da91fd04eec8f5.js → table-migration-7a17dffa515e5560.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-b2ea863afce1d7f0.js → [id]-91dd0039cc2b70bc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-0831dfaa65ce0d50.js → messaging-b01cbbaac34dadbc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-709676f00a491bca.js → storage-a15410de7f1d0f84.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-0eac9951504b46a7.js → configure-1a1aa83a3f88844c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-88e20023c30113df.js → privacy-requests-c4e1b69fb5bab61a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-3acc3107e9a21260.js → [id]-19737d4f21aadbee.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-2bf13ee02d8d5ab9.js → add-property-9ccb295110feee20.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-822eac07220f55f8.js → properties-3a1037a2e036212a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-88999260f855b448.js → alpha-965cc21889b25e44.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-928b0b69e05fd430.js → about-0e1c381d488a7ada.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-611980eee1ce9c8a.js → domain-records-0b44b2b224077dcd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-382cb6df12684bf8.js → domains-5d00e1155bd11178.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-5d664f2a0f11b626.js → email-templates-d2cdbe770683e9df.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-ba569d22e1e3f6df.js → locations-811dadb489f23d7d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-fae8ecf7878bad2d.js → regulations-54f142bc3e4c95ba.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-a278608ba0ddc66c.js → systems-7b71274334c559a4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-eb30c9230a9ce9cc.js → [id]-75d41fde668b9025.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-381146aa81e3ffea.js → user-management-dd43755b687c09a7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{0S8UTwc7FKVdi3Eb4LgFK → lDN8BtGGiw3b60__SDnAa}/_ssgManifest.js +0 -0
@@ -0,0 +1,370 @@
|
|
1
|
+
from typing import Any, Optional
|
2
|
+
|
3
|
+
from loguru import logger
|
4
|
+
from sqlalchemy.orm import Query, Session, selectinload
|
5
|
+
|
6
|
+
from fides.api.models.manual_tasks.manual_task import ManualTask
|
7
|
+
from fides.api.models.manual_tasks.manual_task_config import (
|
8
|
+
ManualTaskConfig,
|
9
|
+
ManualTaskConfigField,
|
10
|
+
)
|
11
|
+
from fides.api.schemas.manual_tasks.manual_task_config import (
|
12
|
+
ManualTaskConfigResponse,
|
13
|
+
ManualTaskConfigurationType,
|
14
|
+
)
|
15
|
+
from fides.service.manual_tasks.utils import validate_fields, with_task_logging
|
16
|
+
|
17
|
+
|
18
|
+
class ManualTaskConfigService:
|
19
|
+
def __init__(self, db: Session):
|
20
|
+
self.db = db
|
21
|
+
|
22
|
+
def _create_log_data(
|
23
|
+
self, task_id: str, config_id: Optional[str], details: dict[str, Any]
|
24
|
+
) -> dict[str, Any]:
|
25
|
+
"""Create standard log data structure."""
|
26
|
+
return {"task_id": task_id, "config_id": config_id, "details": details}
|
27
|
+
|
28
|
+
def _get_base_config_query(self) -> Query:
|
29
|
+
"""Get base config query with field definitions loaded."""
|
30
|
+
return self.db.query(ManualTaskConfig).options(
|
31
|
+
selectinload(ManualTaskConfig.field_definitions)
|
32
|
+
)
|
33
|
+
|
34
|
+
def _create_config_version(
|
35
|
+
self,
|
36
|
+
task: ManualTask,
|
37
|
+
config_type: str,
|
38
|
+
version: int,
|
39
|
+
is_current: bool = True,
|
40
|
+
) -> ManualTaskConfig:
|
41
|
+
"""Create a new config version. This is a helper method that creates a new config
|
42
|
+
version and sets it as the current version.
|
43
|
+
|
44
|
+
Args:
|
45
|
+
task: The task to create the config for
|
46
|
+
config_type: The type of config to create
|
47
|
+
version: The version number of the config
|
48
|
+
is_current: Whether the config is the current version
|
49
|
+
Returns:
|
50
|
+
The new config
|
51
|
+
"""
|
52
|
+
try:
|
53
|
+
ManualTaskConfigurationType(config_type)
|
54
|
+
except ValueError:
|
55
|
+
raise ValueError(f"Invalid config type: {config_type}")
|
56
|
+
|
57
|
+
# Set all existing versions to non-current
|
58
|
+
if is_current:
|
59
|
+
self.db.query(ManualTaskConfig).filter(
|
60
|
+
ManualTaskConfig.task_id == task.id,
|
61
|
+
ManualTaskConfig.config_type == config_type,
|
62
|
+
).update({"is_current": False})
|
63
|
+
self.db.flush()
|
64
|
+
|
65
|
+
return ManualTaskConfig.create(
|
66
|
+
db=self.db,
|
67
|
+
data={
|
68
|
+
"task_id": task.id,
|
69
|
+
"config_type": config_type,
|
70
|
+
"version": version,
|
71
|
+
"is_current": is_current,
|
72
|
+
},
|
73
|
+
)
|
74
|
+
|
75
|
+
def _handle_field_updates(
|
76
|
+
self,
|
77
|
+
config: ManualTaskConfig,
|
78
|
+
field_updates: Optional[list[dict[str, Any]]] = None,
|
79
|
+
fields_to_remove: Optional[list[str]] = None,
|
80
|
+
previous_config: Optional[ManualTaskConfig] = None,
|
81
|
+
) -> set[str]:
|
82
|
+
"""Handle field updates, removals, and recreation from previous version. This is a helper
|
83
|
+
function that:
|
84
|
+
- Creates new fields from field_updates
|
85
|
+
- Recreates unmodified fields from previous version so they will remain in the config
|
86
|
+
- Removes fields that are no longer in the config
|
87
|
+
|
88
|
+
Args:
|
89
|
+
config: The config to update
|
90
|
+
field_updates: The fields to update
|
91
|
+
fields_to_remove: The fields to remove
|
92
|
+
previous_config: The previous config
|
93
|
+
Returns:
|
94
|
+
The modified keys
|
95
|
+
"""
|
96
|
+
modified_keys = set(fields_to_remove or [])
|
97
|
+
|
98
|
+
if field_updates:
|
99
|
+
validate_fields(field_updates, is_submission=False)
|
100
|
+
fields_to_create = [
|
101
|
+
{
|
102
|
+
"task_id": config.task_id,
|
103
|
+
"config_id": config.id,
|
104
|
+
"field_key": f["field_key"],
|
105
|
+
"field_type": f.get("field_type"),
|
106
|
+
"field_metadata": f.get("field_metadata", {}),
|
107
|
+
}
|
108
|
+
for f in field_updates
|
109
|
+
]
|
110
|
+
if fields_to_create:
|
111
|
+
self.db.bulk_insert_mappings(ManualTaskConfigField, fields_to_create)
|
112
|
+
modified_keys.update(f["field_key"] for f in field_updates)
|
113
|
+
|
114
|
+
if previous_config:
|
115
|
+
# Recreate unmodified fields from previous version
|
116
|
+
unmodified = [
|
117
|
+
{
|
118
|
+
"task_id": config.task_id,
|
119
|
+
"config_id": config.id,
|
120
|
+
"field_key": f.field_key,
|
121
|
+
"field_type": f.field_type,
|
122
|
+
"field_metadata": f.field_metadata,
|
123
|
+
}
|
124
|
+
for f in previous_config.field_definitions
|
125
|
+
if f.field_key not in modified_keys
|
126
|
+
]
|
127
|
+
if unmodified:
|
128
|
+
self.db.bulk_insert_mappings(ManualTaskConfigField, unmodified)
|
129
|
+
|
130
|
+
self.db.flush()
|
131
|
+
return modified_keys
|
132
|
+
|
133
|
+
def to_response(self, config: ManualTaskConfig) -> ManualTaskConfigResponse:
|
134
|
+
"""Convert config model to response object."""
|
135
|
+
return ManualTaskConfigResponse.model_validate(
|
136
|
+
{
|
137
|
+
"id": config.id,
|
138
|
+
"task_id": config.task_id,
|
139
|
+
"config_type": config.config_type,
|
140
|
+
"version": config.version,
|
141
|
+
"is_current": config.is_current,
|
142
|
+
"fields": [
|
143
|
+
{
|
144
|
+
"field_key": f.field_key,
|
145
|
+
"field_type": f.field_type,
|
146
|
+
"field_metadata": f.field_metadata,
|
147
|
+
}
|
148
|
+
for f in config.field_definitions
|
149
|
+
],
|
150
|
+
"created_at": config.created_at,
|
151
|
+
"updated_at": config.updated_at,
|
152
|
+
}
|
153
|
+
)
|
154
|
+
|
155
|
+
def get_current_config(
|
156
|
+
self, task: ManualTask, config_type: str
|
157
|
+
) -> ManualTaskConfig:
|
158
|
+
"""Get current config for task by type."""
|
159
|
+
config = (
|
160
|
+
self._get_base_config_query()
|
161
|
+
.filter(
|
162
|
+
ManualTaskConfig.task_id == task.id,
|
163
|
+
ManualTaskConfig.config_type == config_type,
|
164
|
+
ManualTaskConfig.is_current.is_(True),
|
165
|
+
)
|
166
|
+
.first()
|
167
|
+
)
|
168
|
+
|
169
|
+
if not config:
|
170
|
+
raise ValueError(
|
171
|
+
f"No current config found for task {task.id} and type {config_type}"
|
172
|
+
)
|
173
|
+
return config
|
174
|
+
|
175
|
+
def list_config_type_versions(
|
176
|
+
self, task: ManualTask, config_type: str
|
177
|
+
) -> list[ManualTaskConfig]:
|
178
|
+
"""List all versions of a config type for a task."""
|
179
|
+
return (
|
180
|
+
self._get_base_config_query()
|
181
|
+
.filter(
|
182
|
+
ManualTaskConfig.task_id == task.id,
|
183
|
+
ManualTaskConfig.config_type == config_type,
|
184
|
+
)
|
185
|
+
.order_by(ManualTaskConfig.version.desc())
|
186
|
+
.all()
|
187
|
+
)
|
188
|
+
|
189
|
+
def get_config(
|
190
|
+
self,
|
191
|
+
task: ManualTask,
|
192
|
+
config_type: str,
|
193
|
+
field_id: str,
|
194
|
+
config_id: str,
|
195
|
+
field_key: str,
|
196
|
+
version: int,
|
197
|
+
) -> Optional[ManualTaskConfig]:
|
198
|
+
"""Get config by various filters. This is a flexible lookup method that can find configs based on various filters.
|
199
|
+
|
200
|
+
Args:
|
201
|
+
task: The task to get the config for
|
202
|
+
config_type: The type of config to get
|
203
|
+
field_id: The ID of a field in the config
|
204
|
+
config_id: The ID of the config
|
205
|
+
field_key: The key of a field in the config
|
206
|
+
version: The version number of the config
|
207
|
+
Returns:
|
208
|
+
The matching config if found, None otherwise
|
209
|
+
"""
|
210
|
+
if not any([task, config_id, field_id, config_type]):
|
211
|
+
logger.debug("No filters provided to get_config")
|
212
|
+
return None
|
213
|
+
|
214
|
+
query = self._get_base_config_query()
|
215
|
+
if field_id or field_key:
|
216
|
+
query = query.join(ManualTaskConfig.field_definitions)
|
217
|
+
|
218
|
+
filters = [
|
219
|
+
f
|
220
|
+
for f in [
|
221
|
+
task and ManualTaskConfig.task_id == task.id,
|
222
|
+
config_id and ManualTaskConfig.id == config_id,
|
223
|
+
field_id and ManualTaskConfigField.id == field_id,
|
224
|
+
field_key and ManualTaskConfigField.field_key == field_key,
|
225
|
+
version and ManualTaskConfig.version == version,
|
226
|
+
config_type and ManualTaskConfig.config_type == config_type,
|
227
|
+
]
|
228
|
+
if f
|
229
|
+
]
|
230
|
+
|
231
|
+
return query.filter(*filters).first()
|
232
|
+
|
233
|
+
@with_task_logging("Creating new configuration version")
|
234
|
+
def create_new_version(
|
235
|
+
self,
|
236
|
+
task: ManualTask,
|
237
|
+
config_type: str,
|
238
|
+
field_updates: Optional[list[dict[str, Any]]] = None,
|
239
|
+
fields_to_remove: Optional[list[str]] = None,
|
240
|
+
previous_config: Optional[ManualTaskConfig] = None,
|
241
|
+
) -> tuple[ManualTaskConfig, dict[str, Any]]:
|
242
|
+
"""Create new version of configuration.
|
243
|
+
|
244
|
+
Args:
|
245
|
+
task: The task to create the config for
|
246
|
+
config_type: The type of config to create
|
247
|
+
field_updates: The fields to update
|
248
|
+
fields_to_remove: The fields to remove
|
249
|
+
previous_config: The previous config
|
250
|
+
|
251
|
+
Returns:
|
252
|
+
Tuple containing the new config and log data, the log data is
|
253
|
+
captured by the with_task_logging decorator. and the new config is
|
254
|
+
returned to the caller.
|
255
|
+
"""
|
256
|
+
new_config = self._create_config_version(
|
257
|
+
task, config_type, (previous_config.version + 1 if previous_config else 1)
|
258
|
+
)
|
259
|
+
|
260
|
+
self._handle_field_updates(
|
261
|
+
new_config, field_updates, fields_to_remove, previous_config
|
262
|
+
)
|
263
|
+
|
264
|
+
return new_config, self._create_log_data(
|
265
|
+
task.id,
|
266
|
+
new_config.id,
|
267
|
+
{
|
268
|
+
"config_type": config_type,
|
269
|
+
"version": new_config.version,
|
270
|
+
"added_field_keys": [f.get("field_key") for f in (field_updates or [])],
|
271
|
+
"removed_field_keys": fields_to_remove or [],
|
272
|
+
},
|
273
|
+
)
|
274
|
+
|
275
|
+
@with_task_logging("Adding fields to configuration")
|
276
|
+
def add_fields(
|
277
|
+
self, task: ManualTask, config_type: str, fields: list[dict[str, Any]]
|
278
|
+
) -> tuple[ManualTaskConfig, dict[str, Any]]:
|
279
|
+
"""Add fields to configuration.
|
280
|
+
|
281
|
+
Args:
|
282
|
+
task: The task to add the fields to
|
283
|
+
config_type: The type of config to add the fields to
|
284
|
+
fields: The fields to add
|
285
|
+
|
286
|
+
Returns:
|
287
|
+
Tuple containing the new config and log data, the log data is
|
288
|
+
captured by the with_task_logging decorator. and the new config is
|
289
|
+
returned to the caller.
|
290
|
+
"""
|
291
|
+
current = self.get_current_config(task, config_type)
|
292
|
+
self.create_new_version(task, config_type, fields, previous_config=current)
|
293
|
+
new_config = self.get_current_config(task, config_type)
|
294
|
+
|
295
|
+
return new_config, self._create_log_data(
|
296
|
+
task.id,
|
297
|
+
current.id,
|
298
|
+
{
|
299
|
+
"config_type": config_type,
|
300
|
+
"previous_version": current.version,
|
301
|
+
"added_field_keys": [f.get("field_key") for f in fields],
|
302
|
+
"new_config_id": new_config.id,
|
303
|
+
"new_config_version": new_config.version,
|
304
|
+
},
|
305
|
+
)
|
306
|
+
|
307
|
+
@with_task_logging("Removing fields from configuration")
|
308
|
+
def remove_fields(
|
309
|
+
self, task: ManualTask, config_type: str, field_keys: list[str]
|
310
|
+
) -> tuple[ManualTaskConfig, dict[str, Any]]:
|
311
|
+
"""Remove fields from configuration.
|
312
|
+
|
313
|
+
Args:
|
314
|
+
task: The task to remove the fields from
|
315
|
+
config_type: The type of config to remove the fields from
|
316
|
+
field_keys: The keys of the fields to remove
|
317
|
+
|
318
|
+
Returns:
|
319
|
+
Tuple containing the new config and log data, the log data is
|
320
|
+
captured by the with_task_logging decorator. and the new config is
|
321
|
+
returned to the caller.
|
322
|
+
"""
|
323
|
+
current = self.get_current_config(task, config_type)
|
324
|
+
self.create_new_version(
|
325
|
+
task, config_type, fields_to_remove=field_keys, previous_config=current
|
326
|
+
)
|
327
|
+
new_config = self.get_current_config(task, config_type)
|
328
|
+
|
329
|
+
return new_config, self._create_log_data(
|
330
|
+
task.id,
|
331
|
+
current.id,
|
332
|
+
{
|
333
|
+
"config_type": config_type,
|
334
|
+
"version": current.version,
|
335
|
+
"deleted_field_keys": field_keys,
|
336
|
+
"new_config_id": new_config.id,
|
337
|
+
"new_config_version": new_config.version,
|
338
|
+
},
|
339
|
+
)
|
340
|
+
|
341
|
+
@with_task_logging("Deleting Manual Task configuration")
|
342
|
+
def delete_config(
|
343
|
+
self, task: ManualTask, config_id: str
|
344
|
+
) -> tuple[ManualTaskConfig, dict[str, Any]]:
|
345
|
+
"""Delete config for task.
|
346
|
+
|
347
|
+
Args:
|
348
|
+
task: The task to delete the config for
|
349
|
+
config_id: The ID of the config to delete
|
350
|
+
|
351
|
+
Returns:
|
352
|
+
Tuple containing the deleted config and log data, the log data is
|
353
|
+
captured by the with_task_logging decorator. and the deleted config is
|
354
|
+
returned to the caller.
|
355
|
+
"""
|
356
|
+
config = self.db.query(ManualTaskConfig).filter_by(id=config_id).first()
|
357
|
+
if not config:
|
358
|
+
raise ValueError(f"Config with ID {config_id} not found")
|
359
|
+
|
360
|
+
log_data = self._create_log_data(
|
361
|
+
task.id,
|
362
|
+
None,
|
363
|
+
{
|
364
|
+
"config_type": config.config_type,
|
365
|
+
"version": config.version,
|
366
|
+
"deleted_config_id": config_id,
|
367
|
+
},
|
368
|
+
)
|
369
|
+
config.delete(self.db)
|
370
|
+
return config, log_data
|