ethyca-fides 2.63.1b4__py2.py3-none-any.whl → 2.63.1rc0__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.1b4.dist-info → ethyca_fides-2.63.1rc0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.63.1b4.dist-info → ethyca_fides-2.63.1rc0.dist-info}/RECORD +114 -126
- fides/_version.py +3 -3
- fides/api/db/base.py +0 -2
- fides/api/main.py +0 -1
- fides/api/models/attachment.py +23 -36
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +46 -264
- fides/api/service/privacy_request/dsr_package/templates/collection_index.html +9 -34
- fides/api/service/privacy_request/dsr_package/templates/item.html +37 -0
- fides/api/service/privacy_request/dsr_package/templates/main.css +2 -45
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +8 -12
- fides/api/service/privacy_request/request_runner_service.py +139 -258
- fides/api/service/storage/gcs.py +3 -15
- fides/api/service/storage/s3.py +14 -28
- fides/api/service/storage/util.py +7 -45
- fides/api/tasks/storage.py +91 -85
- fides/api/util/cache.py +1 -77
- fides/config/redis_settings.py +8 -99
- fides/service/messaging/aws_ses_service.py +1 -5
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/{X2nvWLg2_-vsCTkhSWpzw → PEElhfUdgE5bJjiyu5QCD}/_buildManifest.js +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-8cab04871908cfeb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-150d40428245ee0c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-20cdb2c8a03deae1.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/api/alembic/migrations/versions/5efcdf18438e_add_manual_task_tables.py +0 -160
- fides/api/models/manual_tasks/__init__.py +0 -8
- fides/api/models/manual_tasks/manual_task.py +0 -110
- fides/api/models/manual_tasks/manual_task_log.py +0 -100
- fides/api/schemas/manual_tasks/__init__.py +0 -0
- fides/api/schemas/manual_tasks/manual_task_schemas.py +0 -79
- fides/api/schemas/manual_tasks/manual_task_status.py +0 -151
- fides/api/service/privacy_request/attachment_handling.py +0 -132
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +0 -33
- fides/api/tasks/csv_utils.py +0 -170
- fides/api/tasks/encryption_utils.py +0 -42
- fides/service/manual_tasks/__init__.py +0 -0
- fides/service/manual_tasks/manual_task_service.py +0 -150
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-c583a61302f02add.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-20d20a8d1736f7c4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-0e557d79e1e43c2b.js +0 -1
- {ethyca_fides-2.63.1b4.dist-info → ethyca_fides-2.63.1rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.63.1b4.dist-info → ethyca_fides-2.63.1rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.63.1b4.dist-info → ethyca_fides-2.63.1rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.63.1b4.dist-info → ethyca_fides-2.63.1rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{X2nvWLg2_-vsCTkhSWpzw → PEElhfUdgE5bJjiyu5QCD}/_ssgManifest.js +0 -0
@@ -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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.css" data-n-g=""/><link rel="preload" href="/_next/static/css/92fc10cc7ed1aba3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/92fc10cc7ed1aba3.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/2858-0b44609b6be7850b.js" defer=""></script><script src="/_next/static/chunks/2866-a73888c17a195cbe.js" defer=""></script><script src="/_next/static/chunks/9278-9b1b5970f0702668.js" defer=""></script><script src="/_next/static/chunks/5277-e8a036319456127f.js" defer=""></script><script src="/_next/static/chunks/7553-08bc3d9f66695111.js" defer=""></script><script src="/_next/static/chunks/4481-7f6710c928bb0cb0.js" defer=""></script><script src="/_next/static/chunks/401-7e800aed05537126.js" defer=""></script><script src="/_next/static/chunks/7980-736f9fd1e749ddd2.js" defer=""></script><script src="/_next/static/chunks/8499-1fd392d0be9e8ee4.js" defer=""></script><script src="/_next/static/chunks/6202-081545c7822d09af.js" defer=""></script><script src="/_next/static/chunks/4132-9b1731bfec6ee537.js" defer=""></script><script src="/_next/static/chunks/8032-74d94f7bd5b81c89.js" defer=""></script><script src="/_next/static/chunks/pages/systems/configure/%5Bid%5D-86de9e6d72098e45.js" defer=""></script><script src="/_next/static/
|
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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.css" data-n-g=""/><link rel="preload" href="/_next/static/css/92fc10cc7ed1aba3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/92fc10cc7ed1aba3.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/2858-0b44609b6be7850b.js" defer=""></script><script src="/_next/static/chunks/2866-a73888c17a195cbe.js" defer=""></script><script src="/_next/static/chunks/9278-9b1b5970f0702668.js" defer=""></script><script src="/_next/static/chunks/5277-e8a036319456127f.js" defer=""></script><script src="/_next/static/chunks/7553-08bc3d9f66695111.js" defer=""></script><script src="/_next/static/chunks/4481-7f6710c928bb0cb0.js" defer=""></script><script src="/_next/static/chunks/401-7e800aed05537126.js" defer=""></script><script src="/_next/static/chunks/7980-736f9fd1e749ddd2.js" defer=""></script><script src="/_next/static/chunks/8499-1fd392d0be9e8ee4.js" defer=""></script><script src="/_next/static/chunks/6202-081545c7822d09af.js" defer=""></script><script src="/_next/static/chunks/4132-9b1731bfec6ee537.js" defer=""></script><script src="/_next/static/chunks/8032-74d94f7bd5b81c89.js" defer=""></script><script src="/_next/static/chunks/pages/systems/configure/%5Bid%5D-86de9e6d72098e45.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_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":"/systems/configure/[id]","query":{},"buildId":"PEElhfUdgE5bJjiyu5QCD","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/7553-08bc3d9f66695111.js" defer=""></script><script src="/_next/static/chunks/4481-7f6710c928bb0cb0.js" defer=""></script><script src="/_next/static/chunks/pages/systems-cac52e6c3abf6a15.js" defer=""></script><script src="/_next/static/
|
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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/7553-08bc3d9f66695111.js" defer=""></script><script src="/_next/static/chunks/4481-7f6710c928bb0cb0.js" defer=""></script><script src="/_next/static/chunks/pages/systems-cac52e6c3abf6a15.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_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":"/systems","query":{},"buildId":"PEElhfUdgE5bJjiyu5QCD","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.css" data-n-g=""/><link rel="preload" href="/_next/static/css/34a7eb08b86ddb57.css" as="style"/><link rel="stylesheet" href="/_next/static/css/34a7eb08b86ddb57.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/678d4732-50255cc09048e643.js" defer=""></script><script src="/_next/static/chunks/2858-0b44609b6be7850b.js" defer=""></script><script src="/_next/static/chunks/2866-a73888c17a195cbe.js" defer=""></script><script src="/_next/static/chunks/9278-9b1b5970f0702668.js" defer=""></script><script src="/_next/static/chunks/3662-f6a1ddca5ee42076.js" defer=""></script><script src="/_next/static/chunks/3983-17ae9c232bddc413.js" defer=""></script><script src="/_next/static/chunks/7980-736f9fd1e749ddd2.js" defer=""></script><script src="/_next/static/chunks/pages/taxonomy-60d5930b6855679b.js" defer=""></script><script src="/_next/static/
|
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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.css" data-n-g=""/><link rel="preload" href="/_next/static/css/34a7eb08b86ddb57.css" as="style"/><link rel="stylesheet" href="/_next/static/css/34a7eb08b86ddb57.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/678d4732-50255cc09048e643.js" defer=""></script><script src="/_next/static/chunks/2858-0b44609b6be7850b.js" defer=""></script><script src="/_next/static/chunks/2866-a73888c17a195cbe.js" defer=""></script><script src="/_next/static/chunks/9278-9b1b5970f0702668.js" defer=""></script><script src="/_next/static/chunks/3662-f6a1ddca5ee42076.js" defer=""></script><script src="/_next/static/chunks/3983-17ae9c232bddc413.js" defer=""></script><script src="/_next/static/chunks/7980-736f9fd1e749ddd2.js" defer=""></script><script src="/_next/static/chunks/pages/taxonomy-60d5930b6855679b.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_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":"/taxonomy","query":{},"buildId":"PEElhfUdgE5bJjiyu5QCD","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/3513-5c2d412a84a78971.js" defer=""></script><script src="/_next/static/chunks/4121-66b0e00d5e7ae817.js" defer=""></script><script src="/_next/static/chunks/pages/user-management/new-b124cc24b930c9e1.js" defer=""></script><script src="/_next/static/
|
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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/3513-5c2d412a84a78971.js" defer=""></script><script src="/_next/static/chunks/4121-66b0e00d5e7ae817.js" defer=""></script><script src="/_next/static/chunks/pages/user-management/new-b124cc24b930c9e1.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_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":"/user-management/new","query":{},"buildId":"PEElhfUdgE5bJjiyu5QCD","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/3513-5c2d412a84a78971.js" defer=""></script><script src="/_next/static/chunks/4121-66b0e00d5e7ae817.js" defer=""></script><script src="/_next/static/chunks/pages/user-management/profile/%5Bid%5D-b0f4c34752d32c73.js" defer=""></script><script src="/_next/static/
|
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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/3513-5c2d412a84a78971.js" defer=""></script><script src="/_next/static/chunks/4121-66b0e00d5e7ae817.js" defer=""></script><script src="/_next/static/chunks/pages/user-management/profile/%5Bid%5D-b0f4c34752d32c73.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_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":"/user-management/profile/[id]","query":{},"buildId":"PEElhfUdgE5bJjiyu5QCD","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/3513-5c2d412a84a78971.js" defer=""></script><script src="/_next/static/chunks/pages/user-management-7dee83dd6d9292aa.js" defer=""></script><script src="/_next/static/
|
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/1fdf5c593349dbc6.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1fdf5c593349dbc6.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-8457bad7859c44f0.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-33bc23b79bffe07c.js" defer=""></script><script src="/_next/static/chunks/3513-5c2d412a84a78971.js" defer=""></script><script src="/_next/static/chunks/pages/user-management-7dee83dd6d9292aa.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js" defer=""></script><script src="/_next/static/PEElhfUdgE5bJjiyu5QCD/_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":"/user-management","query":{},"buildId":"PEElhfUdgE5bJjiyu5QCD","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -1,160 +0,0 @@
|
|
1
|
-
"""add manual task tables
|
2
|
-
|
3
|
-
Revision ID: 5efcdf18438e
|
4
|
-
Revises: c586a56c25e7
|
5
|
-
Create Date: 2025-06-04 17:24:00.300170
|
6
|
-
|
7
|
-
"""
|
8
|
-
|
9
|
-
import sqlalchemy as sa
|
10
|
-
from alembic import op
|
11
|
-
from sqlalchemy.dialects import postgresql
|
12
|
-
from sqlalchemy.sql import func
|
13
|
-
|
14
|
-
# revision identifiers, used by Alembic.
|
15
|
-
revision = "5efcdf18438e"
|
16
|
-
down_revision = "c586a56c25e7"
|
17
|
-
branch_labels = None
|
18
|
-
depends_on = None
|
19
|
-
|
20
|
-
|
21
|
-
def upgrade():
|
22
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
23
|
-
op.create_table(
|
24
|
-
"manual_task",
|
25
|
-
sa.Column("id", sa.String(), nullable=False),
|
26
|
-
sa.Column(
|
27
|
-
"created_at",
|
28
|
-
sa.DateTime(timezone=True),
|
29
|
-
nullable=False,
|
30
|
-
server_default=func.now(),
|
31
|
-
),
|
32
|
-
sa.Column(
|
33
|
-
"updated_at",
|
34
|
-
sa.DateTime(timezone=True),
|
35
|
-
nullable=False,
|
36
|
-
server_default=func.now(),
|
37
|
-
),
|
38
|
-
sa.Column(
|
39
|
-
"task_type", sa.String(), nullable=False, server_default="privacy_request"
|
40
|
-
),
|
41
|
-
sa.Column("parent_entity_id", sa.String(), nullable=False),
|
42
|
-
sa.Column("parent_entity_type", sa.String(), nullable=False),
|
43
|
-
sa.Column("due_date", sa.DateTime(timezone=True), nullable=True),
|
44
|
-
sa.PrimaryKeyConstraint("id"),
|
45
|
-
sa.UniqueConstraint(
|
46
|
-
"parent_entity_id",
|
47
|
-
"parent_entity_type",
|
48
|
-
name="uq_manual_task_parent_entity",
|
49
|
-
),
|
50
|
-
)
|
51
|
-
|
52
|
-
op.create_table(
|
53
|
-
"manual_task_reference",
|
54
|
-
sa.Column("id", sa.String(), nullable=False),
|
55
|
-
sa.Column(
|
56
|
-
"created_at",
|
57
|
-
sa.DateTime(timezone=True),
|
58
|
-
nullable=False,
|
59
|
-
server_default=func.now(),
|
60
|
-
),
|
61
|
-
sa.Column(
|
62
|
-
"updated_at",
|
63
|
-
sa.DateTime(timezone=True),
|
64
|
-
nullable=False,
|
65
|
-
server_default=func.now(),
|
66
|
-
),
|
67
|
-
sa.Column("task_id", sa.String(), nullable=False),
|
68
|
-
sa.Column("reference_id", sa.String(), nullable=False),
|
69
|
-
sa.Column("reference_type", sa.String(), nullable=False),
|
70
|
-
sa.ForeignKeyConstraint(
|
71
|
-
["task_id"],
|
72
|
-
["manual_task.id"],
|
73
|
-
ondelete="CASCADE",
|
74
|
-
),
|
75
|
-
sa.PrimaryKeyConstraint("id"),
|
76
|
-
)
|
77
|
-
|
78
|
-
op.create_table(
|
79
|
-
"manual_task_log",
|
80
|
-
sa.Column("id", sa.String(), nullable=False),
|
81
|
-
sa.Column(
|
82
|
-
"created_at",
|
83
|
-
sa.DateTime(timezone=True),
|
84
|
-
nullable=False,
|
85
|
-
server_default=func.now(),
|
86
|
-
),
|
87
|
-
sa.Column(
|
88
|
-
"updated_at",
|
89
|
-
sa.DateTime(timezone=True),
|
90
|
-
nullable=False,
|
91
|
-
server_default=func.now(),
|
92
|
-
),
|
93
|
-
sa.Column("task_id", sa.String(), nullable=False),
|
94
|
-
sa.Column("config_id", sa.String(), nullable=True),
|
95
|
-
sa.Column("instance_id", sa.String(), nullable=True),
|
96
|
-
sa.Column("status", sa.String(), nullable=False),
|
97
|
-
sa.Column("message", sa.String(), nullable=True),
|
98
|
-
sa.Column("details", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
99
|
-
sa.ForeignKeyConstraint(
|
100
|
-
["task_id"],
|
101
|
-
["manual_task.id"],
|
102
|
-
ondelete="CASCADE",
|
103
|
-
),
|
104
|
-
sa.PrimaryKeyConstraint("id"),
|
105
|
-
)
|
106
|
-
|
107
|
-
# Create indexes for manual_task
|
108
|
-
op.create_index("ix_manual_task_task_type", "manual_task", ["task_type"])
|
109
|
-
op.create_index(
|
110
|
-
"ix_manual_task_parent_entity",
|
111
|
-
"manual_task",
|
112
|
-
["parent_entity_type", "parent_entity_id"],
|
113
|
-
)
|
114
|
-
op.create_index("ix_manual_task_due_date", "manual_task", ["due_date"])
|
115
|
-
|
116
|
-
# Create indexes for manual_task_reference
|
117
|
-
op.create_index(
|
118
|
-
"ix_manual_task_reference_task_id", "manual_task_reference", ["task_id"]
|
119
|
-
)
|
120
|
-
op.create_index(
|
121
|
-
"ix_manual_task_reference_reference",
|
122
|
-
"manual_task_reference",
|
123
|
-
["reference_id", "reference_type"],
|
124
|
-
)
|
125
|
-
|
126
|
-
# Create indexes for manual_task_log
|
127
|
-
op.create_index("ix_manual_task_log_task_id", "manual_task_log", ["task_id"])
|
128
|
-
op.create_index("ix_manual_task_log_config_id", "manual_task_log", ["config_id"])
|
129
|
-
op.create_index(
|
130
|
-
"ix_manual_task_log_instance_id", "manual_task_log", ["instance_id"]
|
131
|
-
)
|
132
|
-
op.create_index("ix_manual_task_log_status", "manual_task_log", ["status"])
|
133
|
-
op.create_index("ix_manual_task_log_created_at", "manual_task_log", ["created_at"])
|
134
|
-
|
135
|
-
# ### end Alembic commands ###
|
136
|
-
|
137
|
-
|
138
|
-
def downgrade():
|
139
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
140
|
-
# Drop indexes first
|
141
|
-
op.drop_index("ix_manual_task_log_created_at", table_name="manual_task_log")
|
142
|
-
op.drop_index("ix_manual_task_log_status", table_name="manual_task_log")
|
143
|
-
op.drop_index("ix_manual_task_log_instance_id", table_name="manual_task_log")
|
144
|
-
op.drop_index("ix_manual_task_log_config_id", table_name="manual_task_log")
|
145
|
-
op.drop_index("ix_manual_task_log_task_id", table_name="manual_task_log")
|
146
|
-
op.drop_index(
|
147
|
-
"ix_manual_task_reference_reference", table_name="manual_task_reference"
|
148
|
-
)
|
149
|
-
op.drop_index(
|
150
|
-
"ix_manual_task_reference_task_id", table_name="manual_task_reference"
|
151
|
-
)
|
152
|
-
op.drop_index("ix_manual_task_due_date", table_name="manual_task")
|
153
|
-
op.drop_index("ix_manual_task_parent_entity", table_name="manual_task")
|
154
|
-
op.drop_index("ix_manual_task_task_type", table_name="manual_task")
|
155
|
-
|
156
|
-
# Then drop tables
|
157
|
-
op.drop_table("manual_task_log")
|
158
|
-
op.drop_table("manual_task_reference")
|
159
|
-
op.drop_table("manual_task")
|
160
|
-
# ### end Alembic commands ###
|
@@ -1,110 +0,0 @@
|
|
1
|
-
from typing import Any
|
2
|
-
|
3
|
-
from sqlalchemy import Column, DateTime, ForeignKey, String
|
4
|
-
from sqlalchemy.ext.declarative import declared_attr
|
5
|
-
from sqlalchemy.orm import Session, relationship
|
6
|
-
|
7
|
-
from fides.api.db.base_class import Base
|
8
|
-
from fides.api.db.util import EnumColumn
|
9
|
-
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
10
|
-
from fides.api.schemas.manual_tasks.manual_task_schemas import (
|
11
|
-
ManualTaskLogStatus,
|
12
|
-
ManualTaskParentEntityType,
|
13
|
-
ManualTaskReferenceType,
|
14
|
-
ManualTaskType,
|
15
|
-
)
|
16
|
-
|
17
|
-
|
18
|
-
class ManualTask(Base):
|
19
|
-
"""Model for storing manual tasks.
|
20
|
-
|
21
|
-
This model can be used for both privacy request tasks and general tasks.
|
22
|
-
For privacy requests, it replaces the functionality of manual webhooks.
|
23
|
-
For other use cases, it provides a flexible task management system.
|
24
|
-
|
25
|
-
There can only be one ManualTask per parent entity.
|
26
|
-
You can create multiple Configs for the same ManualTask.
|
27
|
-
"""
|
28
|
-
|
29
|
-
@declared_attr
|
30
|
-
def __tablename__(cls) -> str:
|
31
|
-
"""Overriding base class method to set the table name."""
|
32
|
-
return "manual_task"
|
33
|
-
|
34
|
-
# Database columns
|
35
|
-
task_type = Column(
|
36
|
-
EnumColumn(ManualTaskType),
|
37
|
-
nullable=False,
|
38
|
-
default=ManualTaskType.privacy_request,
|
39
|
-
)
|
40
|
-
parent_entity_id = Column(String, nullable=False)
|
41
|
-
parent_entity_type = Column(
|
42
|
-
EnumColumn(ManualTaskParentEntityType),
|
43
|
-
nullable=False,
|
44
|
-
default=ManualTaskParentEntityType.connection_config,
|
45
|
-
)
|
46
|
-
due_date = Column(DateTime, nullable=True)
|
47
|
-
|
48
|
-
# Relationships
|
49
|
-
references = relationship(
|
50
|
-
"ManualTaskReference",
|
51
|
-
back_populates="task",
|
52
|
-
uselist=True,
|
53
|
-
cascade="all, delete-orphan",
|
54
|
-
)
|
55
|
-
logs = relationship(
|
56
|
-
"ManualTaskLog",
|
57
|
-
back_populates="task",
|
58
|
-
primaryjoin="and_(ManualTask.id == ManualTaskLog.task_id)",
|
59
|
-
viewonly=True,
|
60
|
-
order_by="ManualTaskLog.created_at",
|
61
|
-
)
|
62
|
-
|
63
|
-
# Properties
|
64
|
-
@property
|
65
|
-
def assigned_users(self) -> list[str]:
|
66
|
-
"""Get all users assigned to this task."""
|
67
|
-
if not self.references:
|
68
|
-
return []
|
69
|
-
return [
|
70
|
-
ref.reference_id
|
71
|
-
for ref in self.references
|
72
|
-
if ref.reference_type == ManualTaskReferenceType.assigned_user
|
73
|
-
]
|
74
|
-
|
75
|
-
# CRUD Operations
|
76
|
-
@classmethod
|
77
|
-
def create(
|
78
|
-
cls, db: Session, *, data: dict[str, Any], check_name: bool = True
|
79
|
-
) -> "ManualTask":
|
80
|
-
"""Create a new manual task."""
|
81
|
-
task = super().create(db=db, data=data, check_name=check_name)
|
82
|
-
ManualTaskLog.create_log(
|
83
|
-
db=db,
|
84
|
-
task_id=task.id,
|
85
|
-
status=ManualTaskLogStatus.created,
|
86
|
-
message=f"Created manual task for {data['task_type']}",
|
87
|
-
)
|
88
|
-
return task
|
89
|
-
|
90
|
-
|
91
|
-
class ManualTaskReference(Base):
|
92
|
-
"""Join table to associate manual tasks with multiple references.
|
93
|
-
|
94
|
-
A single task may have many references including privacy requests, configurations, and assigned users.
|
95
|
-
"""
|
96
|
-
|
97
|
-
@declared_attr
|
98
|
-
def __tablename__(cls) -> str:
|
99
|
-
"""Overriding base class method to set the table name."""
|
100
|
-
return "manual_task_reference"
|
101
|
-
|
102
|
-
# Database columns
|
103
|
-
task_id = Column(
|
104
|
-
String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
|
105
|
-
)
|
106
|
-
reference_id = Column(String, nullable=False)
|
107
|
-
reference_type = Column(EnumColumn(ManualTaskReferenceType), nullable=False)
|
108
|
-
|
109
|
-
# Relationships
|
110
|
-
task = relationship("ManualTask", back_populates="references")
|
@@ -1,100 +0,0 @@
|
|
1
|
-
from typing import TYPE_CHECKING, Any, Optional
|
2
|
-
|
3
|
-
from sqlalchemy import Column, ForeignKey, String
|
4
|
-
from sqlalchemy.dialects.postgresql import JSONB
|
5
|
-
from sqlalchemy.ext.declarative import declared_attr
|
6
|
-
from sqlalchemy.orm import Session, relationship
|
7
|
-
|
8
|
-
from fides.api.db.base_class import Base
|
9
|
-
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
|
10
|
-
|
11
|
-
if TYPE_CHECKING:
|
12
|
-
from fides.api.models.manual_tasks.manual_task import ManualTask
|
13
|
-
|
14
|
-
|
15
|
-
class ManualTaskLog(Base):
|
16
|
-
"""Model for storing manual task execution logs."""
|
17
|
-
|
18
|
-
@declared_attr
|
19
|
-
def __tablename__(cls) -> str:
|
20
|
-
"""Overriding base class method to set the table name."""
|
21
|
-
return "manual_task_log"
|
22
|
-
|
23
|
-
task_id = Column(
|
24
|
-
String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
|
25
|
-
)
|
26
|
-
# TODO: Add foreign key constraints when config and instance are implemented
|
27
|
-
config_id = Column(String, nullable=True)
|
28
|
-
instance_id = Column(String, nullable=True)
|
29
|
-
status = Column(String, nullable=False)
|
30
|
-
message = Column(String, nullable=True)
|
31
|
-
details = Column(JSONB, nullable=True)
|
32
|
-
|
33
|
-
# Relationships - using string references to avoid circular imports
|
34
|
-
task = relationship("ManualTask", back_populates="logs", foreign_keys=[task_id])
|
35
|
-
# TODO: Add config and instance relationships when they are implemented
|
36
|
-
# config = relationship("ManualTaskConfig", back_populates="logs")
|
37
|
-
# instance = relationship("ManualTaskInstance", back_populates="logs")
|
38
|
-
|
39
|
-
@classmethod
|
40
|
-
def create_log(
|
41
|
-
cls,
|
42
|
-
db: Session,
|
43
|
-
status: ManualTaskLogStatus,
|
44
|
-
task_id: str,
|
45
|
-
config_id: Optional[str] = None,
|
46
|
-
instance_id: Optional[str] = None,
|
47
|
-
message: Optional[str] = None,
|
48
|
-
details: Optional[dict[str, Any]] = None,
|
49
|
-
) -> "ManualTaskLog":
|
50
|
-
"""Create a new task log entry.
|
51
|
-
|
52
|
-
Args:
|
53
|
-
db: Database session
|
54
|
-
task_id: ID of the task
|
55
|
-
status: Status of the log entry
|
56
|
-
message: Optional message describing the event
|
57
|
-
details: Optional additional details about the event
|
58
|
-
"""
|
59
|
-
data = {
|
60
|
-
"task_id": task_id,
|
61
|
-
"config_id": config_id,
|
62
|
-
"instance_id": instance_id,
|
63
|
-
"status": status,
|
64
|
-
"message": message,
|
65
|
-
"details": details,
|
66
|
-
}
|
67
|
-
return cls.create(db=db, data=data)
|
68
|
-
|
69
|
-
@classmethod
|
70
|
-
def create_error_log(
|
71
|
-
cls,
|
72
|
-
db: Session,
|
73
|
-
task_id: str,
|
74
|
-
message: str,
|
75
|
-
config_id: Optional[str] = None,
|
76
|
-
instance_id: Optional[str] = None,
|
77
|
-
details: Optional[dict[str, Any]] = None,
|
78
|
-
) -> "ManualTaskLog":
|
79
|
-
"""Create a new error log entry.
|
80
|
-
|
81
|
-
Args:
|
82
|
-
db: Database session
|
83
|
-
task_id: ID of the task
|
84
|
-
message: Error message describing what went wrong
|
85
|
-
config_id: Optional ID of the configuration
|
86
|
-
instance_id: Optional ID of the instance
|
87
|
-
details: Optional additional details about the error
|
88
|
-
|
89
|
-
Returns:
|
90
|
-
The created error log entry
|
91
|
-
"""
|
92
|
-
return cls.create_log(
|
93
|
-
db=db,
|
94
|
-
status=ManualTaskLogStatus.error,
|
95
|
-
task_id=task_id,
|
96
|
-
config_id=config_id,
|
97
|
-
instance_id=instance_id,
|
98
|
-
message=message,
|
99
|
-
details=details,
|
100
|
-
)
|
File without changes
|
@@ -1,79 +0,0 @@
|
|
1
|
-
from datetime import datetime
|
2
|
-
from enum import Enum
|
3
|
-
from typing import Annotated, Any, Optional
|
4
|
-
|
5
|
-
from pydantic import ConfigDict, Field
|
6
|
-
|
7
|
-
from fides.api.schemas.base_class import FidesSchema
|
8
|
-
|
9
|
-
|
10
|
-
class ManualTaskType(str, Enum):
|
11
|
-
"""Enum for manual task types."""
|
12
|
-
|
13
|
-
privacy_request = "privacy_request"
|
14
|
-
# Add more task types as needed
|
15
|
-
|
16
|
-
|
17
|
-
class ManualTaskParentEntityType(str, Enum):
|
18
|
-
"""Enum for manual task parent entity types."""
|
19
|
-
|
20
|
-
connection_config = (
|
21
|
-
"connection_config" # used for access and erasure privacy requests
|
22
|
-
)
|
23
|
-
# Add more parent entity types as needed
|
24
|
-
|
25
|
-
|
26
|
-
class ManualTaskReferenceType(str, Enum):
|
27
|
-
"""Enum for manual task reference types."""
|
28
|
-
|
29
|
-
privacy_request = "privacy_request"
|
30
|
-
connection_config = "connection_config"
|
31
|
-
manual_task_config = "manual_task_config"
|
32
|
-
assigned_user = "assigned_user" # Reference to the user assigned to the task
|
33
|
-
# Add more reference types as needed
|
34
|
-
|
35
|
-
|
36
|
-
class ManualTaskLogStatus(str, Enum):
|
37
|
-
"""Enum for manual task log status."""
|
38
|
-
|
39
|
-
created = "created"
|
40
|
-
updated = "updated"
|
41
|
-
in_processing = "in_processing"
|
42
|
-
complete = "complete"
|
43
|
-
error = "error"
|
44
|
-
retrying = "retrying"
|
45
|
-
paused = "paused"
|
46
|
-
awaiting_input = "awaiting_input"
|
47
|
-
|
48
|
-
|
49
|
-
class ManualTaskLogCreate(FidesSchema):
|
50
|
-
"""Schema for creating a manual task log entry."""
|
51
|
-
|
52
|
-
model_config = ConfigDict(extra="forbid")
|
53
|
-
|
54
|
-
task_id: Annotated[str, Field(..., description="ID of the task")]
|
55
|
-
status: Annotated[ManualTaskLogStatus, Field(..., description="Log status")]
|
56
|
-
message: Annotated[Optional[str], Field(None, description="Log message")]
|
57
|
-
details: Annotated[
|
58
|
-
Optional[dict[str, Any]], Field(None, description="Additional details")
|
59
|
-
]
|
60
|
-
config_id: Annotated[Optional[str], Field(None, description="Configuration ID")]
|
61
|
-
instance_id: Annotated[Optional[str], Field(None, description="Instance ID")]
|
62
|
-
|
63
|
-
|
64
|
-
class ManualTaskLogResponse(FidesSchema):
|
65
|
-
"""Schema for manual task log response."""
|
66
|
-
|
67
|
-
model_config = ConfigDict(extra="forbid")
|
68
|
-
|
69
|
-
id: Annotated[str, Field(..., description="Log ID")]
|
70
|
-
task_id: Annotated[str, Field(..., description="Task ID")]
|
71
|
-
status: Annotated[ManualTaskLogStatus, Field(..., description="Log status")]
|
72
|
-
message: Annotated[Optional[str], Field(None, description="Log message")]
|
73
|
-
details: Annotated[
|
74
|
-
Optional[dict[str, Any]], Field(None, description="Additional details")
|
75
|
-
]
|
76
|
-
config_id: Annotated[Optional[str], Field(None, description="Configuration ID")]
|
77
|
-
instance_id: Annotated[Optional[str], Field(None, description="Instance ID")]
|
78
|
-
created_at: Annotated[datetime, Field(..., description="Creation timestamp")]
|
79
|
-
updated_at: Annotated[datetime, Field(..., description="Last update timestamp")]
|