ethyca-fides 2.64.2b0__py2.py3-none-any.whl → 2.64.2rc0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/METADATA +2 -2
- {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/RECORD +235 -235
- fides/_version.py +3 -3
- fides/api/db/base.py +0 -4
- fides/api/db/database.py +2 -27
- fides/api/models/attachment.py +3 -15
- fides/api/models/comment.py +5 -22
- fides/api/models/connectionconfig.py +0 -11
- fides/api/models/db_cache.py +1 -1
- fides/api/models/detection_discovery/core.py +15 -15
- fides/api/models/fides_user_respondent_email_verification.py +2 -27
- fides/api/models/manual_tasks/__init__.py +1 -7
- fides/api/models/manual_tasks/manual_task.py +4 -68
- fides/api/models/manual_tasks/manual_task_config.py +12 -123
- fides/api/models/manual_tasks/manual_task_log.py +10 -48
- fides/api/models/tcf_publisher_restrictions.py +4 -16
- fides/api/schemas/manual_tasks/manual_task_schemas.py +0 -42
- fides/api/schemas/manual_tasks/manual_task_status.py +46 -107
- fides/common/api/v1/urn_registry.py +0 -4
- fides/service/manual_tasks/manual_task_config_service.py +5 -17
- fides/service/manual_tasks/manual_task_service.py +10 -66
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1040-fa06cd3b94d97493.js → 1040-af383f535c11eb24.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1100-2dfb464ef0359d6d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1817-a3813209d7a6d28d.js → 1817-b4688ba5042ec687.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{2921-81a48418f77bc9a7.js → 2921-aabf41bf3d7573f9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3450-f6fc4ed04a63935f.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-24db696153a0778b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3855-b85ad4e52433d519.js → 3855-0dec3e7d9e886550.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3872-09f81435f7905d76.js → 3872-ffa16c2df7ef0ab6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3923-2565d952c662555c.js → 3923-b0fb0989671407b7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{401-8ea41700c5437d38.js → 401-6721f8bcb14a6537.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-cb74476245af456e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{409-e0d39af1d9ce8ff2.js → 409-037cfc3f096150f0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-8a791c8cc79d28c4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4230-b3fe52af1035dff5.js → 4230-18f4849f9db58a08.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{431-c74dab231c8ac968.js → 431-f72599f01b98f07d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4481-f597a7cf03f8c9e1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5309-0e44dbd914896514.js → 5309-4511df9708d5a63c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5574-917c5ff63d222308.js → 5574-3cd33b3a6c937899.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +4 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-32adfa799bfd1616.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6662-0ce35f1a7a4d07b0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6853-8d0a099f61c758d1.js → 6853-a4097260e402980e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6882-13d6f8d95b1e404f.js → 6882-3cc73d407a088d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/69-9952d261ca57275e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6954-4e106b3f7097fe6e.js → 6954-8bac07b8278ded5c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7553-a95939c32d54b5b7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{79-3f742fe4efd9893f.js → 79-5670e31eb65d0a53.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{796-83a8bbdcdb67f2ba.js → 796-9a6b13c838e25538.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/8433-0acacfca722ce475.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9046-6995482a030e323c.js → 9046-fdf53cc7e926a8c1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{905-ffdbd0b14167e8bd.js → 905-742074a074be1055.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9226-2be3a6efb127148f.js → 9226-50427ff861ffa8bf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9392.9a948112de74781b.js → 9392.25024e070026343d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9676.cc515c853b8cf578.js → 9676.e60a53f1f5890847.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-118e4abca85bbd97.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9951-57c0a671463e0ebb.js → 9951-7de52d41dc1319f7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-488f8f03fe0ffbc7.js → 404-ac2f0844e5c4b4cd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-5e6fbbf17a62ac76.js → _app-8310662c216e8f04.js} +65 -68
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-1e88ac28bc7a41b6.js → manual-0a5f2310ce6b1059.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-f2c9451fffaaa529.js → multiple-00cb904825aad7e3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-9fee3bc13b393070.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-b17d160147365cf3.js → add-vendors-fa7305b88c1afd20.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-8e168d78acdf0cfe.js → configure-f140ec9d8e8a0f7a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-5ca2467de7986929.js → [id]-0edb7c92518e7d21.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-06bb3b0bf097fcdb.js → new-a0039f216fb3eb93.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-3c11fecc2797ab68.js → privacy-experience-d8d926f0735a2546.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-92bc6c7b82a679b4.js → [id]-5c949f2e3cef2398.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-a3da3243526b7ecb.js → new-130155cfb4a0bcc7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-b7d82386e7521041.js → privacy-notices-1135ad8924d32c36.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-20a2029b7e7fc895.js → properties-776855e370414beb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-0ce299131db4c3e5.js → reporting-21c23f75ff1135d9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-9f6a7a231bba17b7.js → consent-4d5ea70a77df1bb8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-11d52f1570759c4d.js → [resourceUrn]-c623d6f1a61c8ea9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-fd705968b357e99a.js → [projectUrn]-030ee304cbe5e530.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-45b585deee0b2371.js → projects-cfac259a30641e68.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-b83afa5565d0c84e.js → [resourceUrn]-57bd5cdf784f059f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-d8db234a44a2ddf4.js → resources-51d99174c8006eb5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-4fd60a74c0369e3e.js → data-catalog-132e54310cd047af.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-e861699a8866c64b.js → [systemId]-c948f93c833d4358.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-5dd2fbf33e228f9c.js → [monitorId]-333f53caab751428.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-806cae6bc128cd38.js → action-center-27205f8457a1ecb0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-487285bd5eca2595.js → activity-20a1043f6a06198f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-393e20924c83373e.js → [resourceUrn]-06edce289876dea1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-8733807dad4bc96e.js → detection-faf326a6200637d0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-14bd7500362ff224.js → [resourceUrn]-64acf269256ee74f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9e7dfd5a6acc2e8f.js → discovery-8c3e4be6d36da66d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-c9509d72c538d22b.js → datamap-fb50de22f83edd4a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-4e8a436297a055b2.js → [...subfieldNames]-41ab27c4195cfa93.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-6ce02295bb7f5b6d.js → [collectionName]-6e2caba24b3e78c2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-9eaa907437fde063.js → [datasetId]-904d43e31157aa55.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-3f997c29f6d8cb24.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-dcdec3644f05188d.js → dataset-5a24f549246605b2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-81ab412e337d2888.js → [id]-4a33dd0371dbaebc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-34dfc172165dbb1c.js → new-e88509346b2d2851.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-8f9b8890018e1ea5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-de954b741cbca022.js → index-1adb6bcb71701ac2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-dba625eddca48f69.js → [id]-41c4f321da3c6169.js} +1 -1
- 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]-42edcab11e8b5c3c.js → [id]-9b4d1d61c7c97509.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-333e54ac8c3ad57a.js → add-template-f8fd4795e260887c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-8e1e6f3782983225.js → messaging-aa744ae8b61e5ff2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-25c74d51a49b2403.js → ant-components-3407158757fb3627.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-920338760f5a71b5.js → AntForm-47e947c02ae90fd0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-7462fb387a9de3f8.js → FormikAntFormItem-24f9a44512ce8827.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-6148fce7a4e2e9ca.js → FormikControlled-e567a69f8c37fb9a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-30efd8c937bf19e4.js → FormikField-35a33f9c7def2220.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-c44de83e0952d1e0.js → forms-780e18dde8e38099.js} +1 -1
- 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-dda47b868cf8ea27.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-53acc4a492d160ab.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-1d981663e1a84166.js → configure-1a1aa83a3f88844c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-138e4697e269d339.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-b08a69b1c460c7fe.js → [id]-19737d4f21aadbee.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-a5d1c65ec21df69d.js → add-property-9ccb295110feee20.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-3a75c6ed8308d126.js → properties-3a1037a2e036212a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-911996819aa16e04.js → datamap-959d2a35ca015976.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-6773158ba6ccf4b0.js → alpha-965cc21889b25e44.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-2e046d177d52465c.js → about-0e1c381d488a7ada.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-a5420c3ba02fe6a5.js → [purpose_id]-1ad018d87c79a9d6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4c56222e847986ff.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-06075fbf122c98d0.js → custom-fields-9d5310145cbdc8ba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-2c7ecff0a8a74c42.js → domain-records-0b44b2b224077dcd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-50bdc72e2f34c39e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-983fbf2cf335b945.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-8d4383584c72eb5a.js → locations-811dadb489f23d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-5ae1bdd93c5bd72a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-29892065d99ff113.js → regulations-54f142bc3e4c95ba.js} +1 -1
- 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]-8fa8a2f238e08791.js → [id]-6eb886e7b7e6785b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-acdbdd3dfd21162f.js → systems-7b71274334c559a4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-88178d29a15ba479.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-a2524414e968f862.js → new-b124cc24b930c9e1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-87ed17fa1d9f8f72.js → [id]-75d41fde668b9025.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-6b4e0764bb8816b8.js → user-management-dd43755b687c09a7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-0a61b5bd21a41fe6.js +1 -0
- fides/ui-build/static/admin/_next/static/css/{67ac3d00a5f134a2.css → c693338e3bc8dcc6.css} +1 -1
- fides/ui-build/static/admin/_next/static/rJbP2kuATyoki-YIQWFdS/_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-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/6a76a1fa4f3f_add_manual_task_instance_table.py +0 -256
- fides/api/alembic/migrations/versions/aadfe83c5644_add_manual_task_to_connectiontype_enum.py +0 -46
- fides/api/models/manual_tasks/manual_task_instance.py +0 -294
- fides/service/manual_tasks/manual_task_instance_service.py +0 -285
- fides/ui-build/static/admin/_next/static/chunks/1169-f75d7958fbe6e136.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3450-2bb9f1b5a23fb520.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-55f5b0bcb5ba41fb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6084-57446e3c99078be8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6662-45b8977f48a219f5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7476-b5fb1c0cf4ad8f63.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-e3d06546f9dfeb91.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/787-381156db4e81dbe8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-980699a4d0f56acc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9826-303b14ef4fc7ab4a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-40a6b572d49c2b68.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-de5e9ccfecdf31b1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-cdb77886d7fd4f44.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-40a3cd14264796e2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-7852aa60090c8c9a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-11dd6152bf6607cc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-83a548813fec4f90.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-a087847d6cbccc65.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6a5794999a1cc0b6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-2a95eb36aa2b47a6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-afed8ba5498a9f93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-c1d3f3cb9c6ca463.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-aae79a344a96a367.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9669fa6b20545530.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-9b4d28f02df3a238.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-da78c536f3d86d06.js +0 -1
- fides/ui-build/static/admin/_next/static/jg8bMUMFAG7KlEnEbTRct/_buildManifest.js +0 -1
- {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.64.2b0.dist-info → ethyca_fides-2.64.2rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{jg8bMUMFAG7KlEnEbTRct → rJbP2kuATyoki-YIQWFdS}/_ssgManifest.js +0 -0
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
from typing import TYPE_CHECKING, Any, Optional
|
|
2
|
-
|
|
3
|
-
from sqlalchemy import
|
|
4
|
-
Boolean,
|
|
5
|
-
Column,
|
|
6
|
-
DateTime,
|
|
7
|
-
ForeignKey,
|
|
8
|
-
Index,
|
|
9
|
-
Integer,
|
|
10
|
-
String,
|
|
11
|
-
UniqueConstraint,
|
|
12
|
-
)
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
|
|
13
4
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
14
5
|
from sqlalchemy.ext.declarative import declared_attr
|
|
15
6
|
from sqlalchemy.orm import Session, relationship
|
|
16
|
-
from sqlalchemy.sql import func
|
|
17
7
|
|
|
18
|
-
from fides.api.db.base_class import Base
|
|
8
|
+
from fides.api.db.base_class import Base
|
|
19
9
|
from fides.api.db.util import EnumColumn
|
|
20
10
|
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
|
21
11
|
from fides.api.schemas.manual_tasks.manual_task_config import (
|
|
@@ -23,19 +13,10 @@ from fides.api.schemas.manual_tasks.manual_task_config import (
|
|
|
23
13
|
ManualTaskFieldMetadata,
|
|
24
14
|
ManualTaskFieldType,
|
|
25
15
|
)
|
|
26
|
-
from fides.api.schemas.manual_tasks.manual_task_schemas import
|
|
27
|
-
ManualTaskExecutionTiming,
|
|
28
|
-
ManualTaskLogStatus,
|
|
29
|
-
)
|
|
16
|
+
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
|
|
30
17
|
|
|
31
18
|
if TYPE_CHECKING: # pragma: no cover
|
|
32
19
|
from fides.api.models.manual_tasks.manual_task import ManualTask # pragma: no cover
|
|
33
|
-
from fides.api.models.manual_tasks.manual_task_instance import (
|
|
34
|
-
ManualTaskInstance, # pragma: no cover
|
|
35
|
-
)
|
|
36
|
-
from fides.api.models.manual_tasks.manual_task_instance import (
|
|
37
|
-
ManualTaskSubmission, # pragma: no cover
|
|
38
|
-
)
|
|
39
20
|
|
|
40
21
|
|
|
41
22
|
class ManualTaskConfig(Base):
|
|
@@ -47,53 +28,13 @@ class ManualTaskConfig(Base):
|
|
|
47
28
|
def __tablename__(cls) -> str:
|
|
48
29
|
return "manual_task_config"
|
|
49
30
|
|
|
50
|
-
|
|
51
|
-
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
52
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
53
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
54
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
55
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
56
|
-
created_at = Column(
|
|
57
|
-
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
58
|
-
)
|
|
59
|
-
updated_at = Column(
|
|
60
|
-
DateTime(timezone=True),
|
|
61
|
-
server_default=func.now(),
|
|
62
|
-
onupdate=func.now(),
|
|
63
|
-
nullable=False,
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
task_id = Column(
|
|
67
|
-
String,
|
|
68
|
-
ForeignKey(
|
|
69
|
-
"manual_task.id",
|
|
70
|
-
name="manual_task_config_task_id_fkey",
|
|
71
|
-
ondelete="CASCADE",
|
|
72
|
-
),
|
|
73
|
-
nullable=False,
|
|
74
|
-
)
|
|
31
|
+
task_id = Column(String, ForeignKey("manual_task.id"), nullable=False)
|
|
75
32
|
config_type = Column(EnumColumn(ManualTaskConfigurationType), nullable=False)
|
|
76
33
|
version = Column(Integer, nullable=False, default=1)
|
|
77
34
|
is_current = Column(Boolean, nullable=False, default=True)
|
|
78
|
-
execution_timing = Column(
|
|
79
|
-
EnumColumn(ManualTaskExecutionTiming),
|
|
80
|
-
nullable=False,
|
|
81
|
-
default=ManualTaskExecutionTiming.pre_execution,
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
__table_args__ = (
|
|
85
|
-
Index("ix_manual_task_config_config_type", "config_type"),
|
|
86
|
-
Index("ix_manual_task_config_task_id", "task_id"),
|
|
87
|
-
)
|
|
88
35
|
|
|
89
36
|
# Relationships
|
|
90
|
-
task = relationship("ManualTask", back_populates="configs"
|
|
91
|
-
instances = relationship(
|
|
92
|
-
"ManualTaskInstance", back_populates="config", uselist=True, viewonly=True
|
|
93
|
-
)
|
|
94
|
-
submissions = relationship(
|
|
95
|
-
"ManualTaskSubmission", back_populates="config", uselist=True, viewonly=True
|
|
96
|
-
)
|
|
37
|
+
task = relationship("ManualTask", back_populates="configs")
|
|
97
38
|
field_definitions = relationship(
|
|
98
39
|
"ManualTaskConfigField",
|
|
99
40
|
back_populates="config",
|
|
@@ -104,7 +45,7 @@ class ManualTaskConfig(Base):
|
|
|
104
45
|
"ManualTaskLog",
|
|
105
46
|
back_populates="config",
|
|
106
47
|
primaryjoin="ManualTaskConfig.id == ManualTaskLog.config_id",
|
|
107
|
-
|
|
48
|
+
viewonly=True,
|
|
108
49
|
)
|
|
109
50
|
|
|
110
51
|
@classmethod
|
|
@@ -148,72 +89,20 @@ class ManualTaskConfigField(Base):
|
|
|
148
89
|
def __tablename__(cls) -> str:
|
|
149
90
|
return "manual_task_config_field"
|
|
150
91
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
154
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
155
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
156
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
157
|
-
created_at = Column(
|
|
158
|
-
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
159
|
-
)
|
|
160
|
-
updated_at = Column(
|
|
161
|
-
DateTime(timezone=True),
|
|
162
|
-
server_default=func.now(),
|
|
163
|
-
onupdate=func.now(),
|
|
164
|
-
nullable=False,
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
task_id = Column(
|
|
168
|
-
String,
|
|
169
|
-
ForeignKey(
|
|
170
|
-
"manual_task.id",
|
|
171
|
-
name="manual_task_config_field_task_id_fkey",
|
|
172
|
-
ondelete="CASCADE",
|
|
173
|
-
),
|
|
174
|
-
nullable=False,
|
|
175
|
-
)
|
|
176
|
-
config_id = Column(
|
|
177
|
-
String,
|
|
178
|
-
ForeignKey(
|
|
179
|
-
"manual_task_config.id",
|
|
180
|
-
name="manual_task_config_field_config_id_fkey",
|
|
181
|
-
ondelete="CASCADE",
|
|
182
|
-
),
|
|
183
|
-
nullable=False,
|
|
184
|
-
)
|
|
92
|
+
task_id = Column(String, ForeignKey("manual_task.id"), nullable=False)
|
|
93
|
+
config_id = Column(String, ForeignKey("manual_task_config.id"), nullable=False)
|
|
185
94
|
field_key = Column(String, nullable=False)
|
|
186
95
|
field_type = Column(
|
|
187
96
|
EnumColumn(ManualTaskFieldType), nullable=False
|
|
188
97
|
) # Using ManualTaskFieldType
|
|
189
|
-
field_metadata
|
|
190
|
-
dict[str, Any], Column(JSONB, nullable=False, default={})
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
__table_args__ = (
|
|
194
|
-
UniqueConstraint("config_id", "field_key", name="unique_field_key_per_config"),
|
|
195
|
-
Index("ix_manual_task_config_field_config_id", "config_id"),
|
|
196
|
-
Index("ix_manual_task_config_field_field_key", "field_key"),
|
|
197
|
-
Index("ix_manual_task_config_field_task_id", "task_id"),
|
|
198
|
-
)
|
|
98
|
+
field_metadata = Column(JSONB, nullable=False, default={})
|
|
199
99
|
|
|
200
100
|
# Relationships
|
|
201
|
-
config = relationship(
|
|
202
|
-
"ManualTaskConfig", back_populates="field_definitions", viewonly=True
|
|
203
|
-
)
|
|
204
|
-
submissions = relationship(
|
|
205
|
-
"ManualTaskSubmission",
|
|
206
|
-
back_populates="field",
|
|
207
|
-
uselist=True,
|
|
208
|
-
cascade="all, delete-orphan",
|
|
209
|
-
)
|
|
101
|
+
config = relationship("ManualTaskConfig", back_populates="field_definitions")
|
|
210
102
|
|
|
211
103
|
@property
|
|
212
104
|
def field_metadata_model(self) -> ManualTaskFieldMetadata:
|
|
213
105
|
"""Get the field metadata as a Pydantic model."""
|
|
214
|
-
assert isinstance(
|
|
215
|
-
self.field_metadata, dict
|
|
216
|
-
), "field_metadata must be a dictionary"
|
|
217
106
|
return ManualTaskFieldMetadata.model_validate(self.field_metadata)
|
|
218
107
|
|
|
219
108
|
@classmethod
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
from typing import TYPE_CHECKING, Any, Optional
|
|
2
2
|
|
|
3
|
-
from sqlalchemy import Column,
|
|
3
|
+
from sqlalchemy import Column, ForeignKey, String
|
|
4
4
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
5
5
|
from sqlalchemy.ext.declarative import declared_attr
|
|
6
6
|
from sqlalchemy.orm import Session, relationship
|
|
7
|
-
from sqlalchemy.sql import func
|
|
8
7
|
|
|
9
|
-
from fides.api.db.base_class import Base
|
|
8
|
+
from fides.api.db.base_class import Base
|
|
10
9
|
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
|
|
11
10
|
|
|
12
11
|
if TYPE_CHECKING: # pragma: no cover
|
|
@@ -14,9 +13,6 @@ if TYPE_CHECKING: # pragma: no cover
|
|
|
14
13
|
from fides.api.models.manual_tasks.manual_task_config import (
|
|
15
14
|
ManualTaskConfig, # pragma: no cover
|
|
16
15
|
)
|
|
17
|
-
from fides.api.models.manual_tasks.manual_task_instance import ( # pragma: no cover
|
|
18
|
-
ManualTaskInstance,
|
|
19
|
-
)
|
|
20
16
|
|
|
21
17
|
|
|
22
18
|
class ManualTaskLog(Base):
|
|
@@ -27,56 +23,22 @@ class ManualTaskLog(Base):
|
|
|
27
23
|
"""Overriding base class method to set the table name."""
|
|
28
24
|
return "manual_task_log"
|
|
29
25
|
|
|
30
|
-
# redefined here because there's a minor, unintended discrepancy between
|
|
31
|
-
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
32
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
33
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
34
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
35
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
36
|
-
created_at = Column(
|
|
37
|
-
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
38
|
-
)
|
|
39
|
-
updated_at = Column(
|
|
40
|
-
DateTime(timezone=True),
|
|
41
|
-
server_default=func.now(),
|
|
42
|
-
onupdate=func.now(),
|
|
43
|
-
nullable=False,
|
|
44
|
-
)
|
|
45
|
-
|
|
46
26
|
task_id = Column(
|
|
47
27
|
String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
|
|
48
28
|
)
|
|
49
|
-
config_id = Column(
|
|
50
|
-
|
|
51
|
-
)
|
|
52
|
-
instance_id = Column(
|
|
53
|
-
String,
|
|
54
|
-
ForeignKey("manual_task_instance.id", ondelete="CASCADE"),
|
|
55
|
-
nullable=True,
|
|
56
|
-
)
|
|
29
|
+
config_id = Column(String, ForeignKey("manual_task_config.id"), nullable=True)
|
|
30
|
+
instance_id = Column(String, nullable=True)
|
|
57
31
|
status = Column(String, nullable=False)
|
|
58
|
-
message = Column(String, nullable=
|
|
32
|
+
message = Column(String, nullable=False)
|
|
59
33
|
details = Column(JSONB, nullable=True)
|
|
60
34
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Index("ix_manual_task_log_created_at", "created_at"),
|
|
64
|
-
Index("ix_manual_task_log_instance_id", "instance_id"),
|
|
65
|
-
Index("ix_manual_task_log_status", "status"),
|
|
66
|
-
Index("ix_manual_task_log_task_id", "task_id"),
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# Relationships
|
|
70
|
-
task = relationship(
|
|
71
|
-
"ManualTask", back_populates="logs", foreign_keys=[task_id], viewonly=True
|
|
72
|
-
)
|
|
35
|
+
# Relationships - using string references to avoid circular imports
|
|
36
|
+
task = relationship("ManualTask", back_populates="logs", foreign_keys=[task_id])
|
|
73
37
|
config = relationship(
|
|
74
|
-
"ManualTaskConfig",
|
|
75
|
-
back_populates="logs",
|
|
76
|
-
foreign_keys=[config_id],
|
|
77
|
-
viewonly=True,
|
|
38
|
+
"ManualTaskConfig", back_populates="logs", foreign_keys=[config_id]
|
|
78
39
|
)
|
|
79
|
-
instance
|
|
40
|
+
# TODO: Add instance relationship when it is implemented
|
|
41
|
+
# instance = relationship("ManualTaskInstance", back_populates="logs")
|
|
80
42
|
|
|
81
43
|
@classmethod
|
|
82
44
|
def create_log(
|
|
@@ -10,7 +10,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
10
10
|
from sqlalchemy.ext.declarative import declared_attr
|
|
11
11
|
from sqlalchemy.orm import Session, relationship
|
|
12
12
|
|
|
13
|
-
from fides.api.db.base_class import Base
|
|
13
|
+
from fides.api.db.base_class import Base
|
|
14
14
|
|
|
15
15
|
if TYPE_CHECKING:
|
|
16
16
|
from fides.api.models.privacy_experience import PrivacyExperienceConfig
|
|
@@ -83,13 +83,7 @@ class TCFConfiguration(Base):
|
|
|
83
83
|
def __tablename__(self) -> str:
|
|
84
84
|
return "tcf_configuration"
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
88
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
89
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
90
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
91
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
92
|
-
name = Column(String, nullable=False, unique=True)
|
|
86
|
+
name = Column(String, nullable=False, index=True, unique=True)
|
|
93
87
|
|
|
94
88
|
privacy_experience_configs = relationship(
|
|
95
89
|
"PrivacyExperienceConfig",
|
|
@@ -109,17 +103,11 @@ class TCFPublisherRestriction(Base):
|
|
|
109
103
|
def __tablename__(self) -> str:
|
|
110
104
|
return "tcf_publisher_restriction"
|
|
111
105
|
|
|
112
|
-
# redefined here because there's a minor, unintended discrepancy between
|
|
113
|
-
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
114
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
115
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
116
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
117
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
118
|
-
|
|
119
106
|
tcf_configuration_id = Column(
|
|
120
107
|
String(255),
|
|
121
108
|
ForeignKey("tcf_configuration.id", ondelete="CASCADE"),
|
|
122
109
|
nullable=False,
|
|
110
|
+
index=True,
|
|
123
111
|
)
|
|
124
112
|
purpose_id = Column(Integer, nullable=False)
|
|
125
113
|
restriction_type = Column(EnumColumn(TCFRestrictionType), nullable=False)
|
|
@@ -133,7 +121,7 @@ class TCFPublisherRestriction(Base):
|
|
|
133
121
|
# can be inferred from the presence of the end_vendor_id.
|
|
134
122
|
range_entries = Column(
|
|
135
123
|
ARRAY(JSONB),
|
|
136
|
-
nullable=
|
|
124
|
+
nullable=True,
|
|
137
125
|
server_default="{}",
|
|
138
126
|
default=list,
|
|
139
127
|
)
|
|
@@ -5,15 +5,6 @@ from typing import Annotated, Any, Optional
|
|
|
5
5
|
from pydantic import ConfigDict, Field
|
|
6
6
|
|
|
7
7
|
from fides.api.schemas.base_class import FidesSchema
|
|
8
|
-
from fides.api.schemas.manual_tasks.manual_task_status import StatusType
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ManualTaskExecutionTiming(str, Enum):
|
|
12
|
-
"""Enum for when a manual task should be executed in the privacy request DAG."""
|
|
13
|
-
|
|
14
|
-
pre_execution = "pre_execution" # Execute before the main DAG
|
|
15
|
-
post_execution = "post_execution" # Execute after the main DAG
|
|
16
|
-
parallel = "parallel" # Execute in parallel with the main DAG
|
|
17
8
|
|
|
18
9
|
|
|
19
10
|
class ManualTaskType(str, Enum):
|
|
@@ -32,13 +23,6 @@ class ManualTaskParentEntityType(str, Enum):
|
|
|
32
23
|
# Add more parent entity types as needed
|
|
33
24
|
|
|
34
25
|
|
|
35
|
-
class ManualTaskEntityType(str, Enum):
|
|
36
|
-
"""Enum for manual task entity types."""
|
|
37
|
-
|
|
38
|
-
privacy_request = "privacy_request"
|
|
39
|
-
# Add more entity types as needed
|
|
40
|
-
|
|
41
|
-
|
|
42
26
|
class ManualTaskReferenceType(str, Enum):
|
|
43
27
|
"""Enum for manual task reference types."""
|
|
44
28
|
|
|
@@ -62,32 +46,6 @@ class ManualTaskLogStatus(str, Enum):
|
|
|
62
46
|
awaiting_input = "awaiting_input"
|
|
63
47
|
|
|
64
48
|
|
|
65
|
-
class ManualTaskResponse(FidesSchema):
|
|
66
|
-
"""Schema for manual task response."""
|
|
67
|
-
|
|
68
|
-
model_config = ConfigDict(extra="forbid")
|
|
69
|
-
|
|
70
|
-
id: Annotated[str, Field(..., description="Task ID")]
|
|
71
|
-
parent_entity_id: Annotated[str, Field(..., description="Parent entity ID")]
|
|
72
|
-
parent_entity_type: Annotated[
|
|
73
|
-
ManualTaskParentEntityType, Field(..., description="Parent entity type")
|
|
74
|
-
]
|
|
75
|
-
status: Annotated[StatusType, Field(..., description="Task status")]
|
|
76
|
-
created_at: Annotated[datetime, Field(..., description="Creation timestamp")]
|
|
77
|
-
updated_at: Annotated[datetime, Field(..., description="Last update timestamp")]
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
class ManualTaskCreate(FidesSchema):
|
|
81
|
-
"""Schema for creating a manual task."""
|
|
82
|
-
|
|
83
|
-
model_config = ConfigDict(extra="forbid")
|
|
84
|
-
|
|
85
|
-
parent_entity_id: Annotated[str, Field(..., description="Parent entity ID")]
|
|
86
|
-
parent_entity_type: Annotated[
|
|
87
|
-
ManualTaskParentEntityType, Field(..., description="Parent entity type")
|
|
88
|
-
]
|
|
89
|
-
|
|
90
|
-
|
|
91
49
|
class ManualTaskLogCreate(FidesSchema):
|
|
92
50
|
"""Schema for creating a manual task log entry."""
|
|
93
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from datetime import datetime, timezone
|
|
2
2
|
from enum import Enum as EnumType
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Optional
|
|
4
4
|
|
|
5
5
|
from sqlalchemy.orm import Session
|
|
6
6
|
|
|
@@ -23,133 +23,61 @@ class StatusType(str, EnumType):
|
|
|
23
23
|
|
|
24
24
|
@classmethod
|
|
25
25
|
def get_valid_transitions(cls, current_status: "StatusType") -> list["StatusType"]:
|
|
26
|
-
"""Get valid transitions from the current status.
|
|
27
|
-
transitions = {
|
|
28
|
-
cls.pending: [cls.in_progress, cls.failed, cls.completed],
|
|
29
|
-
cls.in_progress: [cls.completed, cls.failed],
|
|
30
|
-
cls.completed: [],
|
|
31
|
-
cls.failed: [cls.pending, cls.in_progress],
|
|
32
|
-
}
|
|
33
|
-
return transitions.get(current_status, [])
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class StatusTransitionProtocol(Protocol):
|
|
37
|
-
"""Protocol for objects that support status transitions.
|
|
38
|
-
|
|
39
|
-
This protocol defines the interface that any object supporting status transitions
|
|
40
|
-
must implement. It includes both the required attributes and methods.
|
|
41
|
-
|
|
42
|
-
Example:
|
|
43
|
-
```python
|
|
44
|
-
# Any class that implements this protocol can be used interchangeably
|
|
45
|
-
def process_status_update(obj: StatusTransitionProtocol, db: Session) -> None:
|
|
46
|
-
if obj.is_pending:
|
|
47
|
-
obj.start_progress(db)
|
|
48
|
-
elif obj.is_in_progress:
|
|
49
|
-
obj.mark_completed(db, user_id="user123")
|
|
50
|
-
|
|
51
|
-
# This works with ManualTaskInstance or any other class implementing the protocol
|
|
52
|
-
instance = ManualTaskInstance(...)
|
|
53
|
-
process_status_update(instance, db)
|
|
54
|
-
```
|
|
55
|
-
"""
|
|
26
|
+
"""Get valid transitions from the current status.
|
|
56
27
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
completed_at: Optional[datetime] # Can be None when resetting to pending
|
|
60
|
-
completed_by_id: Optional[str] # Can be None when resetting to pending
|
|
28
|
+
Args:
|
|
29
|
+
current_status: The current status
|
|
61
30
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def mark_failed(self, db: Session) -> None:
|
|
75
|
-
"""Mark as failed."""
|
|
76
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
77
|
-
|
|
78
|
-
def start_progress(self, db: Session) -> None:
|
|
79
|
-
"""Mark as in progress."""
|
|
80
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
81
|
-
|
|
82
|
-
def reset_to_pending(self, db: Session) -> None:
|
|
83
|
-
"""Reset to pending status."""
|
|
84
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
85
|
-
|
|
86
|
-
@property
|
|
87
|
-
def is_completed(self) -> bool:
|
|
88
|
-
"""Check if completed."""
|
|
89
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
90
|
-
|
|
91
|
-
@property
|
|
92
|
-
def is_failed(self) -> bool:
|
|
93
|
-
"""Check if failed."""
|
|
94
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
95
|
-
|
|
96
|
-
@property
|
|
97
|
-
def is_in_progress(self) -> bool:
|
|
98
|
-
"""Check if in progress."""
|
|
99
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
100
|
-
|
|
101
|
-
@property
|
|
102
|
-
def is_pending(self) -> bool:
|
|
103
|
-
"""Check if pending."""
|
|
104
|
-
... # pylint: disable=unnecessary-ellipsis
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def validate_status_transition_object(obj: StatusTransitionProtocol) -> bool:
|
|
108
|
-
"""Validate that an object properly implements the StatusTransitionProtocol.
|
|
109
|
-
|
|
110
|
-
This function demonstrates how the Protocol can be used for runtime validation
|
|
111
|
-
and type checking.
|
|
112
|
-
"""
|
|
113
|
-
required_attrs = ["status", "completed_at", "completed_by_id"]
|
|
114
|
-
required_methods = [
|
|
115
|
-
"update_status",
|
|
116
|
-
"mark_completed",
|
|
117
|
-
"mark_failed",
|
|
118
|
-
"start_progress",
|
|
119
|
-
"reset_to_pending",
|
|
120
|
-
]
|
|
121
|
-
required_properties = ["is_completed", "is_failed", "is_in_progress", "is_pending"]
|
|
122
|
-
|
|
123
|
-
# Check all required elements
|
|
124
|
-
all_required = required_attrs + required_methods + required_properties
|
|
125
|
-
return all(hasattr(obj, attr) for attr in all_required) and all(
|
|
126
|
-
callable(getattr(obj, method)) for method in required_methods
|
|
127
|
-
)
|
|
31
|
+
Returns:
|
|
32
|
+
list[StatusType]: List of valid transitions
|
|
33
|
+
"""
|
|
34
|
+
if current_status == cls.pending:
|
|
35
|
+
return [cls.in_progress, cls.failed, cls.completed]
|
|
36
|
+
if current_status == cls.in_progress:
|
|
37
|
+
return [cls.completed, cls.failed]
|
|
38
|
+
if current_status == cls.completed:
|
|
39
|
+
return []
|
|
40
|
+
if current_status == cls.failed:
|
|
41
|
+
return [cls.pending, cls.in_progress]
|
|
42
|
+
return []
|
|
128
43
|
|
|
129
44
|
|
|
130
45
|
class StatusTransitionMixin:
|
|
131
46
|
"""Mixin for handling status transitions.
|
|
132
47
|
|
|
133
48
|
This mixin provides methods for managing status transitions and completion tracking.
|
|
134
|
-
It
|
|
49
|
+
It can be used by any model that needs status management.
|
|
135
50
|
"""
|
|
136
51
|
|
|
137
|
-
#
|
|
52
|
+
# These should be overridden by the implementing class
|
|
138
53
|
status: StatusType
|
|
139
54
|
completed_at: Optional[datetime]
|
|
140
55
|
completed_by_id: Optional[str]
|
|
141
56
|
|
|
142
57
|
def _get_valid_transitions(self) -> list[StatusType]:
|
|
143
|
-
"""Get valid transitions from the current status.
|
|
58
|
+
"""Get valid transitions from the current status.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
list[StatusType]: List of valid transitions
|
|
62
|
+
"""
|
|
144
63
|
return StatusType.get_valid_transitions(self.status)
|
|
145
64
|
|
|
146
65
|
def _validate_status_transition(self, new_status: StatusType) -> None:
|
|
147
|
-
"""Validate that a status transition is allowed.
|
|
66
|
+
"""Validate that a status transition is allowed.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
new_status: The new status to transition to
|
|
70
|
+
|
|
71
|
+
Raises:
|
|
72
|
+
StatusTransitionNotAllowed: If the transition is not allowed
|
|
73
|
+
"""
|
|
74
|
+
# Don't allow transitions to the same status
|
|
148
75
|
if new_status == self.status:
|
|
149
76
|
raise StatusTransitionNotAllowed(
|
|
150
77
|
f"Invalid status transition: already in status {new_status}"
|
|
151
78
|
)
|
|
152
79
|
|
|
80
|
+
# Get valid transitions for current status
|
|
153
81
|
valid_transitions = self._get_valid_transitions()
|
|
154
82
|
if new_status not in valid_transitions:
|
|
155
83
|
raise StatusTransitionNotAllowed(
|
|
@@ -160,7 +88,13 @@ class StatusTransitionMixin:
|
|
|
160
88
|
def update_status(
|
|
161
89
|
self, db: Session, new_status: StatusType, user_id: Optional[str] = None
|
|
162
90
|
) -> None:
|
|
163
|
-
"""Update the status with validation and completion handling.
|
|
91
|
+
"""Update the status with validation and completion handling.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
db: Database session
|
|
95
|
+
new_status: New status to set
|
|
96
|
+
user_id: Optional user ID who is making the change
|
|
97
|
+
"""
|
|
164
98
|
self._validate_status_transition(new_status)
|
|
165
99
|
|
|
166
100
|
if new_status == StatusType.completed:
|
|
@@ -176,7 +110,12 @@ class StatusTransitionMixin:
|
|
|
176
110
|
db.commit()
|
|
177
111
|
|
|
178
112
|
def mark_completed(self, db: Session, user_id: str) -> None:
|
|
179
|
-
"""Mark as completed.
|
|
113
|
+
"""Mark as completed.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
db: Database session
|
|
117
|
+
user_id: user ID who completed the task
|
|
118
|
+
"""
|
|
180
119
|
self.update_status(db, StatusType.completed, user_id)
|
|
181
120
|
|
|
182
121
|
def mark_failed(self, db: Session) -> None:
|
|
@@ -155,10 +155,6 @@ AUTHORIZE = "/connection/{connection_key}/authorize"
|
|
|
155
155
|
ACCESS_MANUAL_WEBHOOKS = "/access_manual_webhook"
|
|
156
156
|
ACCESS_MANUAL_WEBHOOK = CONNECTION_BY_KEY + "/access_manual_webhook"
|
|
157
157
|
|
|
158
|
-
# Manual Tasks
|
|
159
|
-
MANUAL_TASKS = "/manual-tasks"
|
|
160
|
-
MANUAL_TASK = CONNECTION_BY_KEY + "/manual-task"
|
|
161
|
-
|
|
162
158
|
# Collection URLs
|
|
163
159
|
DATASETS = "/dataset"
|
|
164
160
|
DATASET_CONFIG = "/datasetconfig"
|
|
@@ -15,14 +15,6 @@ from fides.api.schemas.manual_tasks.manual_task_config import (
|
|
|
15
15
|
from fides.service.manual_tasks.utils import validate_fields, with_task_logging
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class ManualTaskConfigError(Exception):
|
|
19
|
-
"""Exception raised when a manual task config error occurs."""
|
|
20
|
-
|
|
21
|
-
def __init__(self, message: str):
|
|
22
|
-
self.message = message
|
|
23
|
-
super().__init__(self.message)
|
|
24
|
-
|
|
25
|
-
|
|
26
18
|
class ManualTaskConfigService:
|
|
27
19
|
def __init__(self, db: Session):
|
|
28
20
|
self.db = db
|
|
@@ -59,8 +51,8 @@ class ManualTaskConfigService:
|
|
|
59
51
|
"""
|
|
60
52
|
try:
|
|
61
53
|
ManualTaskConfigurationType(config_type)
|
|
62
|
-
except
|
|
63
|
-
raise
|
|
54
|
+
except ValueError:
|
|
55
|
+
raise ValueError(f"Invalid config type: {config_type}")
|
|
64
56
|
|
|
65
57
|
# Set all existing versions to non-current
|
|
66
58
|
if is_current:
|
|
@@ -104,11 +96,7 @@ class ManualTaskConfigService:
|
|
|
104
96
|
modified_keys = set(fields_to_remove or [])
|
|
105
97
|
|
|
106
98
|
if field_updates:
|
|
107
|
-
|
|
108
|
-
validate_fields(field_updates, is_submission=False)
|
|
109
|
-
except ValueError as e:
|
|
110
|
-
raise ManualTaskConfigError(f"Invalid field updates: {e}") from e
|
|
111
|
-
|
|
99
|
+
validate_fields(field_updates, is_submission=False)
|
|
112
100
|
fields_to_create = [
|
|
113
101
|
{
|
|
114
102
|
"task_id": config.task_id,
|
|
@@ -179,7 +167,7 @@ class ManualTaskConfigService:
|
|
|
179
167
|
)
|
|
180
168
|
|
|
181
169
|
if not config:
|
|
182
|
-
raise
|
|
170
|
+
raise ValueError(
|
|
183
171
|
f"No current config found for task {task.id} and type {config_type}"
|
|
184
172
|
)
|
|
185
173
|
return config
|
|
@@ -367,7 +355,7 @@ class ManualTaskConfigService:
|
|
|
367
355
|
"""
|
|
368
356
|
config = self.db.query(ManualTaskConfig).filter_by(id=config_id).first()
|
|
369
357
|
if not config:
|
|
370
|
-
raise
|
|
358
|
+
raise ValueError(f"Config with ID {config_id} not found")
|
|
371
359
|
|
|
372
360
|
log_data = self._create_log_data(
|
|
373
361
|
task.id,
|