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,294 +0,0 @@
|
|
|
1
|
-
from datetime import datetime, timezone
|
|
2
|
-
from typing import TYPE_CHECKING, Optional
|
|
3
|
-
|
|
4
|
-
from sqlalchemy import Column, DateTime, ForeignKey, Index, String
|
|
5
|
-
from sqlalchemy.dialects.postgresql import JSONB
|
|
6
|
-
from sqlalchemy.ext.declarative import declared_attr
|
|
7
|
-
from sqlalchemy.orm import relationship
|
|
8
|
-
from sqlalchemy.sql import func
|
|
9
|
-
|
|
10
|
-
from fides.api.db.base_class import Base, FidesBase
|
|
11
|
-
from fides.api.db.util import EnumColumn
|
|
12
|
-
from fides.api.models.manual_tasks.manual_task_config import ManualTaskConfigField
|
|
13
|
-
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskEntityType
|
|
14
|
-
from fides.api.schemas.manual_tasks.manual_task_status import (
|
|
15
|
-
StatusTransitionMixin,
|
|
16
|
-
StatusType,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
if TYPE_CHECKING: # pragma: no cover
|
|
20
|
-
from fides.api.models.attachment import Attachment # pragma: no cover
|
|
21
|
-
from fides.api.models.fides_user import FidesUser # pragma: no cover
|
|
22
|
-
from fides.api.models.manual_tasks.manual_task import ManualTask # pragma: no cover
|
|
23
|
-
from fides.api.models.manual_tasks.manual_task_config import (
|
|
24
|
-
ManualTaskConfig, # pragma: no cover
|
|
25
|
-
)
|
|
26
|
-
from fides.api.models.manual_tasks.manual_task_log import (
|
|
27
|
-
ManualTaskLog, # pragma: no cover; pragma: no cover
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class ManualTaskInstance(Base, StatusTransitionMixin):
|
|
32
|
-
"""Model for tracking task status per entity instance.
|
|
33
|
-
|
|
34
|
-
This model implements StatusTransitionProtocol through the StatusTransitionMixin.
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
@declared_attr
|
|
38
|
-
def __tablename__(cls) -> str:
|
|
39
|
-
"""Overriding base class method to set the table name."""
|
|
40
|
-
return "manual_task_instance"
|
|
41
|
-
|
|
42
|
-
# redefined here because there's a minor, unintended discrepancy between
|
|
43
|
-
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
44
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
45
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
46
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
47
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
48
|
-
created_at = Column(
|
|
49
|
-
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
50
|
-
)
|
|
51
|
-
updated_at = Column(
|
|
52
|
-
DateTime(timezone=True),
|
|
53
|
-
server_default=func.now(),
|
|
54
|
-
onupdate=func.now(),
|
|
55
|
-
nullable=False,
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
# Database columns
|
|
59
|
-
task_id: Column[str] = Column(
|
|
60
|
-
String,
|
|
61
|
-
ForeignKey(
|
|
62
|
-
"manual_task.id",
|
|
63
|
-
name="manual_task_instance_task_id_fkey",
|
|
64
|
-
ondelete="CASCADE",
|
|
65
|
-
),
|
|
66
|
-
nullable=False,
|
|
67
|
-
)
|
|
68
|
-
config_id: Column[str] = Column(
|
|
69
|
-
String,
|
|
70
|
-
ForeignKey(
|
|
71
|
-
"manual_task_config.id",
|
|
72
|
-
name="manual_task_instance_config_id_fkey",
|
|
73
|
-
ondelete="CASCADE",
|
|
74
|
-
),
|
|
75
|
-
nullable=False,
|
|
76
|
-
)
|
|
77
|
-
# entity id is the entity that the instance relates to
|
|
78
|
-
# (e.g. a privacy request is an entity that has its own manual task instance)
|
|
79
|
-
entity_id: Column[str] = Column(String, nullable=False)
|
|
80
|
-
entity_type: Column[ManualTaskEntityType] = Column(
|
|
81
|
-
EnumColumn(ManualTaskEntityType), nullable=False
|
|
82
|
-
)
|
|
83
|
-
# ingnore[assignment] because the mypy and sqlalchemy types mismatch
|
|
84
|
-
# upgrading to 2.0 allows mapping which provides better type safety visibility.
|
|
85
|
-
status: Column[StatusType] = Column(EnumColumn(StatusType), nullable=False, default=StatusType.pending) # type: ignore[assignment]
|
|
86
|
-
completed_at: Column[Optional[datetime]] = Column(DateTime, nullable=True) # type: ignore[assignment]
|
|
87
|
-
completed_by_id: Column[Optional[str]] = Column(String, nullable=True) # type: ignore[assignment]
|
|
88
|
-
due_date: Column[Optional[datetime]] = Column(DateTime, nullable=True)
|
|
89
|
-
|
|
90
|
-
__table_args__ = (
|
|
91
|
-
Index("ix_manual_task_instance_completed_at", "completed_at"),
|
|
92
|
-
Index("ix_manual_task_instance_config_id", "config_id"),
|
|
93
|
-
Index("ix_manual_task_instance_entity", "entity_type", "entity_id"),
|
|
94
|
-
Index("ix_manual_task_instance_entity_id", "entity_id"),
|
|
95
|
-
Index("ix_manual_task_instance_entity_type", "entity_type"),
|
|
96
|
-
Index("ix_manual_task_instance_status", "status"),
|
|
97
|
-
Index("ix_manual_task_instance_task_id", "task_id"),
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
# Relationships
|
|
101
|
-
task = relationship("ManualTask", back_populates="instances")
|
|
102
|
-
config = relationship("ManualTaskConfig", back_populates="instances")
|
|
103
|
-
submissions = relationship(
|
|
104
|
-
"ManualTaskSubmission",
|
|
105
|
-
back_populates="instance",
|
|
106
|
-
cascade="all, delete-orphan",
|
|
107
|
-
uselist=True,
|
|
108
|
-
)
|
|
109
|
-
logs = relationship(
|
|
110
|
-
"ManualTaskLog",
|
|
111
|
-
back_populates="instance",
|
|
112
|
-
primaryjoin="ManualTaskInstance.id == ManualTaskLog.instance_id",
|
|
113
|
-
cascade="all, delete-orphan",
|
|
114
|
-
order_by="ManualTaskLog.created_at",
|
|
115
|
-
uselist=True,
|
|
116
|
-
)
|
|
117
|
-
attachments = relationship(
|
|
118
|
-
"Attachment",
|
|
119
|
-
secondary="attachment_reference",
|
|
120
|
-
primaryjoin="and_(ManualTaskInstance.id == ManualTaskSubmission.instance_id, "
|
|
121
|
-
"ManualTaskSubmission.id == AttachmentReference.reference_id, "
|
|
122
|
-
"AttachmentReference.reference_type == 'manual_task_submission')",
|
|
123
|
-
secondaryjoin="Attachment.id == AttachmentReference.attachment_id",
|
|
124
|
-
order_by="Attachment.created_at",
|
|
125
|
-
viewonly=True,
|
|
126
|
-
uselist=True,
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
@property
|
|
130
|
-
def required_fields(self) -> list["ManualTaskConfigField"]:
|
|
131
|
-
"""Get all required fields."""
|
|
132
|
-
return [
|
|
133
|
-
field
|
|
134
|
-
for field in self.config.field_definitions
|
|
135
|
-
if field.field_metadata.get("required", False)
|
|
136
|
-
]
|
|
137
|
-
|
|
138
|
-
@property
|
|
139
|
-
def incomplete_fields(self) -> list["ManualTaskConfigField"]:
|
|
140
|
-
"""Get all fields that haven't been completed yet.
|
|
141
|
-
A field is considered incomplete if:
|
|
142
|
-
1. It's required and has no submission
|
|
143
|
-
Returns:
|
|
144
|
-
list[ManualTaskConfigField]: List of incomplete fields
|
|
145
|
-
"""
|
|
146
|
-
return [
|
|
147
|
-
field
|
|
148
|
-
for field in self.required_fields
|
|
149
|
-
if not self.get_submission_for_field(field.id)
|
|
150
|
-
]
|
|
151
|
-
|
|
152
|
-
@property
|
|
153
|
-
def completed_fields(self) -> list["ManualTaskConfigField"]:
|
|
154
|
-
"""Get all fields that have been completed."""
|
|
155
|
-
return [
|
|
156
|
-
field
|
|
157
|
-
for field in self.config.field_definitions
|
|
158
|
-
if field.field_metadata.get("required", False)
|
|
159
|
-
and self.get_submission_for_field(field.id)
|
|
160
|
-
]
|
|
161
|
-
|
|
162
|
-
def get_submission_for_field(
|
|
163
|
-
self, field_id: str
|
|
164
|
-
) -> Optional["ManualTaskSubmission"]:
|
|
165
|
-
"""Get the submission for a specific field.
|
|
166
|
-
|
|
167
|
-
Args:
|
|
168
|
-
field_id: The ID of the field to get the submission for
|
|
169
|
-
|
|
170
|
-
Returns:
|
|
171
|
-
Optional[ManualTaskSubmission]: The submission for the field, or None if no submission exists
|
|
172
|
-
"""
|
|
173
|
-
return next(
|
|
174
|
-
(
|
|
175
|
-
submission
|
|
176
|
-
for submission in self.submissions
|
|
177
|
-
if submission.field_id == field_id
|
|
178
|
-
),
|
|
179
|
-
None,
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
class ManualTaskSubmission(Base):
|
|
184
|
-
"""Model for storing user submissions.
|
|
185
|
-
Each submission represents data for a single field.
|
|
186
|
-
"""
|
|
187
|
-
|
|
188
|
-
@declared_attr
|
|
189
|
-
def __tablename__(cls) -> str:
|
|
190
|
-
"""Overriding base class method to set the table name."""
|
|
191
|
-
return "manual_task_submission"
|
|
192
|
-
|
|
193
|
-
# redefined here because there's a minor, unintended discrepancy between
|
|
194
|
-
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
195
|
-
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
196
|
-
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
197
|
-
# primary key constraint, which will implicitly create an index for the field.
|
|
198
|
-
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
199
|
-
created_at = Column(
|
|
200
|
-
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
201
|
-
)
|
|
202
|
-
updated_at = Column(
|
|
203
|
-
DateTime(timezone=True),
|
|
204
|
-
server_default=func.now(),
|
|
205
|
-
onupdate=func.now(),
|
|
206
|
-
nullable=False,
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
# Database columns
|
|
210
|
-
task_id = Column(
|
|
211
|
-
String,
|
|
212
|
-
ForeignKey(
|
|
213
|
-
"manual_task.id",
|
|
214
|
-
name="manual_task_submission_task_id_fkey",
|
|
215
|
-
ondelete="CASCADE",
|
|
216
|
-
),
|
|
217
|
-
nullable=False,
|
|
218
|
-
)
|
|
219
|
-
config_id = Column(
|
|
220
|
-
String,
|
|
221
|
-
ForeignKey(
|
|
222
|
-
"manual_task_config.id",
|
|
223
|
-
name="manual_task_submission_config_id_fkey",
|
|
224
|
-
ondelete="CASCADE",
|
|
225
|
-
),
|
|
226
|
-
nullable=False,
|
|
227
|
-
)
|
|
228
|
-
field_id = Column(
|
|
229
|
-
String,
|
|
230
|
-
ForeignKey(
|
|
231
|
-
"manual_task_config_field.id",
|
|
232
|
-
name="manual_task_submission_field_id_fkey",
|
|
233
|
-
ondelete="CASCADE",
|
|
234
|
-
),
|
|
235
|
-
nullable=False,
|
|
236
|
-
)
|
|
237
|
-
instance_id = Column(
|
|
238
|
-
String,
|
|
239
|
-
ForeignKey(
|
|
240
|
-
"manual_task_instance.id",
|
|
241
|
-
name="manual_task_submission_instance_id_fkey",
|
|
242
|
-
ondelete="CASCADE",
|
|
243
|
-
),
|
|
244
|
-
nullable=False,
|
|
245
|
-
)
|
|
246
|
-
submitted_by = Column(
|
|
247
|
-
String,
|
|
248
|
-
ForeignKey(
|
|
249
|
-
"fidesuser.id",
|
|
250
|
-
name="manual_task_submission_submitted_by_fkey",
|
|
251
|
-
ondelete="SET NULL",
|
|
252
|
-
),
|
|
253
|
-
nullable=True,
|
|
254
|
-
)
|
|
255
|
-
submitted_at = Column(DateTime, default=datetime.now(timezone.utc), nullable=False)
|
|
256
|
-
data = Column(JSONB, nullable=False)
|
|
257
|
-
|
|
258
|
-
__table_args__ = (
|
|
259
|
-
Index("ix_manual_task_submission_config_id", "config_id"),
|
|
260
|
-
Index("ix_manual_task_submission_field_id", "field_id"),
|
|
261
|
-
Index("ix_manual_task_submission_instance_field", "instance_id", "field_id"),
|
|
262
|
-
Index("ix_manual_task_submission_instance_id", "instance_id"),
|
|
263
|
-
Index("ix_manual_task_submission_submitted_at", "submitted_at"),
|
|
264
|
-
Index("ix_manual_task_submission_submitted_by", "submitted_by"),
|
|
265
|
-
Index("ix_manual_task_submission_task_id", "task_id"),
|
|
266
|
-
)
|
|
267
|
-
|
|
268
|
-
# Relationships
|
|
269
|
-
task = relationship("ManualTask", back_populates="submissions", viewonly=True)
|
|
270
|
-
config = relationship(
|
|
271
|
-
"ManualTaskConfig", back_populates="submissions", viewonly=True
|
|
272
|
-
)
|
|
273
|
-
field = relationship(
|
|
274
|
-
"ManualTaskConfigField", back_populates="submissions", viewonly=True
|
|
275
|
-
)
|
|
276
|
-
instance = relationship(
|
|
277
|
-
"ManualTaskInstance", back_populates="submissions", viewonly=True
|
|
278
|
-
)
|
|
279
|
-
attachments = relationship(
|
|
280
|
-
"Attachment",
|
|
281
|
-
secondary="attachment_reference",
|
|
282
|
-
primaryjoin="and_(ManualTaskSubmission.id == AttachmentReference.reference_id, "
|
|
283
|
-
"AttachmentReference.reference_type == 'manual_task_submission')",
|
|
284
|
-
secondaryjoin="Attachment.id == AttachmentReference.attachment_id",
|
|
285
|
-
order_by="Attachment.created_at",
|
|
286
|
-
viewonly=True,
|
|
287
|
-
uselist=True,
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
user = relationship(
|
|
291
|
-
"FidesUser",
|
|
292
|
-
primaryjoin="FidesUser.id == ManualTaskSubmission.submitted_by",
|
|
293
|
-
viewonly=True,
|
|
294
|
-
)
|
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
from typing import Any, Optional
|
|
2
|
-
|
|
3
|
-
from loguru import logger
|
|
4
|
-
from sqlalchemy.orm import Session
|
|
5
|
-
|
|
6
|
-
from fides.api.models.attachment import Attachment
|
|
7
|
-
from fides.api.models.manual_tasks.manual_task_config import ManualTaskConfigField
|
|
8
|
-
from fides.api.models.manual_tasks.manual_task_instance import (
|
|
9
|
-
ManualTaskInstance,
|
|
10
|
-
ManualTaskSubmission,
|
|
11
|
-
)
|
|
12
|
-
from fides.api.schemas.manual_tasks.manual_task_status import (
|
|
13
|
-
StatusTransitionNotAllowed,
|
|
14
|
-
StatusType,
|
|
15
|
-
)
|
|
16
|
-
from fides.service.manual_tasks.utils import validate_fields, with_task_logging
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class ManualTaskInstanceError(Exception):
|
|
20
|
-
"""Exception raised when a manual task instance error occurs."""
|
|
21
|
-
|
|
22
|
-
def __init__(self, message: str):
|
|
23
|
-
self.message = message
|
|
24
|
-
super().__init__(self.message)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class ManualTaskSubmissionError(Exception):
|
|
28
|
-
"""Exception raised when a manual task submission error occurs."""
|
|
29
|
-
|
|
30
|
-
def __init__(self, message: str):
|
|
31
|
-
self.message = message
|
|
32
|
-
super().__init__(self.message)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class ManualTaskInstanceService:
|
|
36
|
-
def __init__(self, db: Session):
|
|
37
|
-
self.db = db
|
|
38
|
-
|
|
39
|
-
def _create_log_data(
|
|
40
|
-
self,
|
|
41
|
-
task_id: str,
|
|
42
|
-
config_id: str,
|
|
43
|
-
instance_id: str,
|
|
44
|
-
details: dict[str, Any],
|
|
45
|
-
) -> dict[str, Any]:
|
|
46
|
-
"""Create standard log data structure."""
|
|
47
|
-
return {
|
|
48
|
-
"task_id": task_id,
|
|
49
|
-
"config_id": config_id,
|
|
50
|
-
"instance_id": instance_id,
|
|
51
|
-
"details": details,
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
def _get_instance(
|
|
55
|
-
self, instance_id: str, allow_completed: bool = False
|
|
56
|
-
) -> ManualTaskInstance:
|
|
57
|
-
"""Get and validate instance."""
|
|
58
|
-
instance = self.db.query(ManualTaskInstance).filter_by(id=instance_id).first()
|
|
59
|
-
if not instance:
|
|
60
|
-
raise ManualTaskInstanceError(f"Instance with ID {instance_id} not found")
|
|
61
|
-
|
|
62
|
-
if not allow_completed and instance.status == StatusType.completed:
|
|
63
|
-
raise StatusTransitionNotAllowed(
|
|
64
|
-
"Instance is already completed, no further changes allowed"
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
return instance
|
|
68
|
-
|
|
69
|
-
def _get_field(
|
|
70
|
-
self, field_id: str, validate_data: Optional[dict[str, Any]] = None
|
|
71
|
-
) -> ManualTaskConfigField:
|
|
72
|
-
"""Get and validate field."""
|
|
73
|
-
field = ManualTaskConfigField.get_by_key_or_id(
|
|
74
|
-
db=self.db, data={"id": field_id}
|
|
75
|
-
)
|
|
76
|
-
if not field:
|
|
77
|
-
raise ManualTaskInstanceError(f"Field with ID {field_id} not found")
|
|
78
|
-
|
|
79
|
-
if validate_data:
|
|
80
|
-
try:
|
|
81
|
-
validate_fields([validate_data], is_submission=True)
|
|
82
|
-
except ValueError as e:
|
|
83
|
-
raise ManualTaskInstanceError(f"Invalid field data: {e}") from e
|
|
84
|
-
|
|
85
|
-
return field
|
|
86
|
-
|
|
87
|
-
def _update_instance_status(
|
|
88
|
-
self,
|
|
89
|
-
instance: ManualTaskInstance,
|
|
90
|
-
new_status: Optional[StatusType] = None,
|
|
91
|
-
user_id: Optional[str] = None,
|
|
92
|
-
silent: bool = False,
|
|
93
|
-
) -> None:
|
|
94
|
-
"""Update instance status with optional error suppression."""
|
|
95
|
-
try:
|
|
96
|
-
if not new_status:
|
|
97
|
-
new_status = (
|
|
98
|
-
StatusType.in_progress
|
|
99
|
-
if instance.submissions
|
|
100
|
-
else StatusType.pending
|
|
101
|
-
)
|
|
102
|
-
instance.update_status(self.db, new_status, user_id)
|
|
103
|
-
except StatusTransitionNotAllowed as e:
|
|
104
|
-
if not silent:
|
|
105
|
-
raise
|
|
106
|
-
logger.info(f"Status not transitioning: {e}")
|
|
107
|
-
|
|
108
|
-
@with_task_logging("Created task instance")
|
|
109
|
-
def create_instance(
|
|
110
|
-
self, task_id: str, config_id: str, entity_id: str, entity_type: str
|
|
111
|
-
) -> tuple[ManualTaskInstance, dict[str, Any]]:
|
|
112
|
-
"""Create a new instance for an entity."""
|
|
113
|
-
instance = ManualTaskInstance.create(
|
|
114
|
-
self.db,
|
|
115
|
-
data={
|
|
116
|
-
"task_id": task_id,
|
|
117
|
-
"config_id": config_id,
|
|
118
|
-
"entity_id": entity_id,
|
|
119
|
-
"entity_type": entity_type,
|
|
120
|
-
},
|
|
121
|
-
)
|
|
122
|
-
return instance, self._create_log_data(
|
|
123
|
-
task_id, config_id, instance.id, {"entity_type": entity_type}
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
def get_submission_for_field(
|
|
127
|
-
self, instance_id: str, field_id: str
|
|
128
|
-
) -> Optional[ManualTaskSubmission]:
|
|
129
|
-
"""Get the submission for a specific field."""
|
|
130
|
-
return self._get_instance(instance_id).get_submission_for_field(field_id)
|
|
131
|
-
|
|
132
|
-
@with_task_logging("Updated task instance status")
|
|
133
|
-
def update_status(
|
|
134
|
-
self,
|
|
135
|
-
instance_id: str,
|
|
136
|
-
new_status: Optional[StatusType] = None,
|
|
137
|
-
user_id: Optional[str] = None,
|
|
138
|
-
) -> tuple[ManualTaskInstance, dict[str, Any]]:
|
|
139
|
-
"""Update instance status with logging."""
|
|
140
|
-
instance = self._get_instance(instance_id)
|
|
141
|
-
previous_status = instance.status
|
|
142
|
-
self._update_instance_status(instance, new_status, user_id)
|
|
143
|
-
|
|
144
|
-
return instance, self._create_log_data(
|
|
145
|
-
instance.task_id,
|
|
146
|
-
instance.config_id,
|
|
147
|
-
instance.id,
|
|
148
|
-
{
|
|
149
|
-
"previous_status": previous_status,
|
|
150
|
-
"new_status": instance.status,
|
|
151
|
-
"user_id": user_id,
|
|
152
|
-
},
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
@with_task_logging("Created task submission")
|
|
156
|
-
def create_submission(
|
|
157
|
-
self,
|
|
158
|
-
instance_id: str,
|
|
159
|
-
field_id: str,
|
|
160
|
-
data: dict[str, Any],
|
|
161
|
-
) -> tuple[ManualTaskSubmission, dict[str, Any]]:
|
|
162
|
-
"""Create a new submission for a field."""
|
|
163
|
-
instance = self._get_instance(instance_id)
|
|
164
|
-
field = self._get_field(field_id, data)
|
|
165
|
-
|
|
166
|
-
if instance.get_submission_for_field(field_id):
|
|
167
|
-
raise ManualTaskInstanceError(
|
|
168
|
-
f"Submission for field {field.field_key} already exists for instance {instance.id}"
|
|
169
|
-
)
|
|
170
|
-
|
|
171
|
-
submission = ManualTaskSubmission.create(
|
|
172
|
-
self.db,
|
|
173
|
-
data={
|
|
174
|
-
"task_id": instance.task_id,
|
|
175
|
-
"config_id": instance.config_id,
|
|
176
|
-
"instance_id": instance.id,
|
|
177
|
-
"field_id": field.id,
|
|
178
|
-
"data": data,
|
|
179
|
-
},
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
# Update instance status to in_progress
|
|
183
|
-
self._update_instance_status(instance, StatusType.in_progress, silent=True)
|
|
184
|
-
|
|
185
|
-
return submission, self._create_log_data(
|
|
186
|
-
instance.task_id,
|
|
187
|
-
instance.config_id,
|
|
188
|
-
instance.id,
|
|
189
|
-
{
|
|
190
|
-
"field_key": field.field_key,
|
|
191
|
-
"field_type": field.field_type,
|
|
192
|
-
},
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
@with_task_logging("Updated task submission")
|
|
196
|
-
def update_submission(
|
|
197
|
-
self,
|
|
198
|
-
instance_id: str,
|
|
199
|
-
submission_id: str,
|
|
200
|
-
data: dict[str, Any],
|
|
201
|
-
) -> tuple[ManualTaskSubmission, dict[str, Any]]:
|
|
202
|
-
"""Update a submission for a field."""
|
|
203
|
-
instance = self._get_instance(instance_id)
|
|
204
|
-
submission = next(
|
|
205
|
-
(s for s in instance.submissions if s.id == submission_id),
|
|
206
|
-
None,
|
|
207
|
-
)
|
|
208
|
-
if not submission or not submission.field_id:
|
|
209
|
-
raise ManualTaskSubmissionError(
|
|
210
|
-
f"Valid submission with ID {submission_id} not found"
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
field = self._get_field(submission.field_id, data)
|
|
214
|
-
submission.update(self.db, data={"data": data})
|
|
215
|
-
self._update_instance_status(instance, silent=True)
|
|
216
|
-
|
|
217
|
-
return submission, self._create_log_data(
|
|
218
|
-
instance.task_id,
|
|
219
|
-
instance.config_id,
|
|
220
|
-
instance.id,
|
|
221
|
-
{
|
|
222
|
-
"field_key": field.field_key,
|
|
223
|
-
"field_type": field.field_type,
|
|
224
|
-
},
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
@with_task_logging("Delete task attachment")
|
|
228
|
-
def delete_attachment_by_id(
|
|
229
|
-
self,
|
|
230
|
-
submission_id: str,
|
|
231
|
-
attachment_id: str,
|
|
232
|
-
) -> None:
|
|
233
|
-
"""Delete an attachment for a field."""
|
|
234
|
-
submission = (
|
|
235
|
-
self.db.query(ManualTaskSubmission).filter_by(id=submission_id).first()
|
|
236
|
-
)
|
|
237
|
-
if not submission:
|
|
238
|
-
raise ManualTaskSubmissionError(
|
|
239
|
-
f"Submission with ID {submission_id} does not exist"
|
|
240
|
-
)
|
|
241
|
-
|
|
242
|
-
self._get_instance(
|
|
243
|
-
submission.instance_id
|
|
244
|
-
) # Validates instance is not completed
|
|
245
|
-
|
|
246
|
-
attachment = self.db.query(Attachment).filter_by(id=attachment_id).first()
|
|
247
|
-
if not attachment or attachment not in submission.attachments:
|
|
248
|
-
raise ManualTaskSubmissionError(
|
|
249
|
-
f"Attachment {attachment_id} not found in submission {submission_id}"
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
# Delete attachment and optionally submission
|
|
253
|
-
if (
|
|
254
|
-
len(submission.attachments) == 1
|
|
255
|
-
and submission.field.field_type == "attachment"
|
|
256
|
-
):
|
|
257
|
-
attachment.delete(self.db)
|
|
258
|
-
submission.delete(self.db)
|
|
259
|
-
else:
|
|
260
|
-
attachment.delete(self.db)
|
|
261
|
-
|
|
262
|
-
@with_task_logging("Completed task instance")
|
|
263
|
-
def complete_task_instance(
|
|
264
|
-
self, task_id: str, config_id: str, instance_id: str, user_id: str
|
|
265
|
-
) -> tuple[ManualTaskInstance, dict[str, Any]]:
|
|
266
|
-
"""Complete a task instance."""
|
|
267
|
-
instance = self._get_instance(instance_id)
|
|
268
|
-
|
|
269
|
-
missing_fields = [
|
|
270
|
-
field.field_key
|
|
271
|
-
for field in instance.required_fields
|
|
272
|
-
if not instance.get_submission_for_field(field.id)
|
|
273
|
-
]
|
|
274
|
-
if missing_fields:
|
|
275
|
-
raise StatusTransitionNotAllowed(
|
|
276
|
-
f"Cannot complete task instance. Missing required fields: {', '.join(missing_fields)}"
|
|
277
|
-
)
|
|
278
|
-
|
|
279
|
-
instance.update_status(self.db, StatusType.completed, user_id)
|
|
280
|
-
instance.completed_by_id = user_id
|
|
281
|
-
instance.save(self.db)
|
|
282
|
-
|
|
283
|
-
return instance, self._create_log_data(
|
|
284
|
-
task_id, config_id, instance_id, {"completed_by": user_id}
|
|
285
|
-
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1169],{59969:function(e,t,i){var r=i(24246),n=i(38355);i(27378);var s=i(8557);t.Z=e=>{let{daysLeft:t,includeText:i,status:l}=e;if(!t||l===s.q.COMPLETE||l===s.q.CANCELED||l===s.q.DENIED||l===s.q.IDENTITY_UNVERIFIED)return(0,r.jsx)("span",{children:"-"});let a="";switch(!0){case t>=10:a="success";break;case t<10&&t>4:a="warning";break;case t<5:a="error"}return(0,r.jsx)(n.j8w,{color:a,children:i?"".concat(t," days left"):t})}},18225:function(e,t,i){var r=i(24246),n=i(38355);t.Z=e=>{let{alignment:t="center",...i}=e;return(0,r.jsx)(n.kCb,{boxSize:"full",align:"center",justify:t,children:(0,r.jsx)(n.$jN,{color:"primary",...i})})}},58754:function(e,t,i){var r=i(24246),n=i(38355),s=i(70788);t.Z=e=>{let{heading:t,breadcrumbItems:i,isSticky:l=!0,children:a,rightContent:d,style:o,...c}=e;return(0,r.jsxs)("div",{...c,style:l?{position:"sticky",top:"-24px",paddingTop:"24px",paddingBottom:"24px",paddingLeft:"40px",marginLeft:"-40px",paddingRight:"40px",marginRight:"-40px",marginTop:"-24px",left:0,zIndex:20,backgroundColor:"white",...o}:{paddingBottom:"24px",...o},children:[(0,r.jsxs)(n.jqI,{justify:"space-between",children:["string"==typeof t?(0,r.jsx)(n.lQT,{className:i||a?"pb-4":void 0,level:1,"data-testid":"page-heading",children:t}):t,d&&(0,r.jsx)("div",{"data-testid":"page-header-right-content",children:d})]}),!!i&&(0,r.jsx)(s.m,{className:a?"pb-4":void 0,items:i,"data-testid":"page-breadcrumb"}),a]})}},19904:function(e,t,i){i.d(t,{Tg:function(){return l}});var r=i(24246),n=i(16134),s=i(31793);let l=e=>(0,n.C)(s.uu).filter(t=>e.includes(t)).length>0;t.ZP=e=>{let{scopes:t,children:i}=e;return l(t)?(0,r.jsx)(r.Fragment,{children:i}):null}},14047:function(e,t,i){i.d(t,{H:function(){return s},V:function(){return r.V}});var r=i(84306),n=i(812);let s=()=>{let{errorAlert:e}=(0,r.V)();return{handleError:t=>{let i="An unexpected error occurred. Please try again.";(0,n.Ot)(t)?i=t.data.detail:(0,n.tB)(t)&&(i=t.data.detail[0].msg),e(i)}}}},84306:function(e,t,i){i.d(t,{V:function(){return s}});var r=i(24246),n=i(38355);let s=()=>{let e=(0,n.pmc)();return{errorAlert:(t,i,s)=>{let l={...s,position:(null==s?void 0:s.position)||"top",render:e=>{let{onClose:s}=e;return(0,r.jsxs)(n.bZj,{alignItems:"normal",status:"error","data-testid":"error-alert",children:[(0,r.jsx)(n.zMQ,{}),(0,r.jsxs)(n.xuv,{children:[i&&(0,r.jsx)(n.CdC,{children:i}),(0,r.jsx)(n.XaZ,{children:t})]}),(0,r.jsx)(n.PZ7,{onClick:s,position:"relative",right:0,size:"sm",top:-1})]})}};(null==s?void 0:s.id)&&e.isActive(s.id)?e.update(s.id,l):e(l)},successAlert:(t,i,s)=>{let l={...s,position:(null==s?void 0:s.position)||"top",render:e=>{let{onClose:s}=e;return(0,r.jsxs)(n.bZj,{alignItems:"normal",status:"success",variant:"subtle","data-testid":"success-alert",children:[(0,r.jsx)(n.zMQ,{}),(0,r.jsxs)(n.xuv,{children:[i&&(0,r.jsx)(n.CdC,{children:i}),(0,r.jsx)(n.XaZ,{children:t})]}),(0,r.jsx)(n.PZ7,{onClick:s,position:"relative",right:0,size:"sm",top:-1})]})}};(null==s?void 0:s.id)&&e.isActive(s.id)?e.update(s.id,l):e(l)}}}},70788:function(e,t,i){i.d(t,{m:function(){return o}});var r=i(24246),n=i(38355),s=i(79894),l=i.n(s),a=i(27378);let{Text:d}=n.AntTypography,o=e=>{let{items:t,...i}=e,s=(0,a.useMemo)(()=>null==t?void 0:t.map((e,i)=>{let s=i===t.length-1,a={...e},o=a.onClick&&!a.href;return("string"==typeof a.title&&(a.title=(0,r.jsx)(d,{style:{color:"inherit",maxWidth:s?void 0:400},ellipsis:!s,children:a.title})),o)?a.title=(0,r.jsx)(n.wpx,{type:"text",size:"small",icon:a.icon,onClick:a.onClick,className:"ant-breadcrumb-link -mt-px px-1 text-inherit",children:a.title}):(a.icon&&(a.title=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"anticon align-text-bottom",children:a.icon}),a.title]})),a.href&&a.title&&(a.title=(0,r.jsx)(l(),{href:a.href,className:"ant-breadcrumb-link",children:a.title}),delete a.href)),a}),[t]);return(0,r.jsx)(n.zrq,{items:s,...i})}},57526:function(e,t,i){var r=i(24246),n=i(38355),s=i(27378);t.Z=e=>{let{isOpen:t,onClose:i,onApproveRequest:l,isLoading:a,subjectRequest:d}=e,{identity:o,identity_verified_at:c,custom_privacy_request_fields:u}=d,x=(0,s.useCallback)(()=>{l().then(()=>{i()})},[l,i]);return(0,r.jsxs)(n.u_l,{isOpen:t,onClose:i,size:"lg",isCentered:!0,children:[(0,r.jsx)(n.ZAr,{}),(0,r.jsxs)(n.hzk,{children:[(0,r.jsx)(n.xBx,{children:"Privacy request approval"}),(0,r.jsxs)(n.fef,{paddingTop:0,paddingBottom:0,children:[(0,r.jsx)(n.xvT,{color:"gray.500",fontSize:"14px",marginBottom:4,children:"Are you sure you want to approve this privacy request?"}),(0,r.jsxs)(n.QI$,{children:[Object.entries(o).filter(e=>{let[,{value:t}]=e;return null!==t}).map(e=>{let[t,{value:i,label:s}]=e;return(0,r.jsx)(n.HCh,{children:(0,r.jsxs)(n.kCb,{alignItems:"flex-start",children:[(0,r.jsxs)(n.xvT,{mr:2,fontSize:"sm",color:"gray.900",fontWeight:"500",children:[s,":"]}),(0,r.jsx)(n.xvT,{color:"gray.600",fontWeight:"500",fontSize:"sm",mr:2,children:i}),"(",c?"Verified":"Unverified",")"]},t)},t)}),u&&Object.entries(u).filter(e=>{let[,t]=e;return t.value}).map(e=>{let[t,i]=e;return(0,r.jsx)(n.HCh,{children:(0,r.jsxs)(n.kCb,{alignItems:"flex-start",children:[(0,r.jsxs)(n.xvT,{mr:2,fontSize:"sm",color:"gray.900",fontWeight:"500",children:[i.label,":"]}),(0,r.jsxs)(n.xvT,{color:"gray.600",fontWeight:"500",fontSize:"sm",mr:2,children:[Array.isArray(i.value)?i.value.join(", "):i.value," "]}),"(Unverified)"]},t)},t)})]})]}),(0,r.jsx)(n.mzw,{children:(0,r.jsxs)(n.MIq,{columns:2,width:"100%",children:[(0,r.jsx)(n.wpx,{onClick:i,className:"mr-3","data-testid":"cancel-btn",children:"Cancel"}),(0,r.jsx)(n.wpx,{type:"primary","data-testid":"continue-btn",onClick:x,loading:a,children:"Confirm"})]})})]})]})}},66548:function(e,t,i){var r=i(24246),n=i(40324),s=i(38355),l=i(34090),a=i(27378),d=i(55484);let o={denialReason:""};t.Z=e=>{let{isOpen:t,onClose:i,onDenyRequest:c}=e,u=(0,a.useCallback)((e,t)=>{let{setSubmitting:r}=t;c(e.denialReason).then(()=>{r(!1),i()})},[c,i]);return(0,r.jsxs)(s.u_l,{isOpen:t,onClose:i,isCentered:!0,returnFocusOnClose:!1,children:[(0,r.jsx)(s.ZAr,{}),(0,r.jsx)(s.hzk,{width:"100%",maxWidth:"456px","data-testid":"deny-privacy-request-modal",children:(0,r.jsx)(l.J9,{initialValues:o,validationSchema:d.Ry({denialReason:d.Z_().required().label("Reason for denial")}),onSubmit:u,children:e=>{let{isSubmitting:t,dirty:a,isValid:d}=e;return(0,r.jsxs)(l.l0,{children:[(0,r.jsx)(s.xBx,{children:"Privacy request denial"}),(0,r.jsx)(s.fef,{color:"gray.500",fontSize:"14px",children:"Please enter a reason for denying this privacy request. Please note: this can be seen by the user in their notification email."}),(0,r.jsx)(s.fef,{children:(0,r.jsx)(n.Ks,{name:"denialReason",textAreaProps:{focusBorderColor:"primary.600",resize:"none"}})}),(0,r.jsxs)(s.mzw,{className:"flex w-full gap-4",children:[(0,r.jsx)(s.wpx,{disabled:t,onClick:i,className:"grow",children:"Cancel"}),(0,r.jsx)(s.wpx,{htmlType:"submit",type:"primary",disabled:!a||!d,loading:t,className:"grow","data-testid":"deny-privacy-request-modal-btn",children:"Confirm"})]})]})}})})]})}},45489:function(e,t,i){i.d(t,{Z:function(){return n}});var r=i(90867);let n=e=>{let{subjectRequest:t}=e,[i,n]=(0,r.RW)({fixedCacheKey:t.id}),[s,l]=(0,r.F1)({fixedCacheKey:t.id}),[a,d]=(0,r.rC)({fixedCacheKey:t.id}),o=l.isLoading||n.isLoading;return{approveRequest:i,approveRequestResult:n,denyRequest:s,denyRequestResult:l,handleApproveRequest:()=>i(t),handleDenyRequest:e=>s({id:t.id,reason:e}),handleDeleteRequest:()=>a(t),softDeleteRequestResult:d,isLoading:o}}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1807],{96586:function(t,e,r){var n=r(57753),o=r(82452),i=r(22115),a=r(38256),s=r(67426);function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},36301:function(t,e,r){var n=r(69417),o=r(72470),i=r(66165),a=r(71873),s=r(52556);function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},74554:function(t,e,r){var n=r(39448),o=r(7738),i=r(66575),a=r(7238),s=r(38738);function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},23694:function(t,e,r){var n=r(36301),o=r(7354),i=r(5863),a=r(12367),s=r(90748),u=r(97569);function l(t){var e=this.__data__=new n(t);this.size=e.size}l.prototype.clear=o,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=s,l.prototype.set=u,t.exports=l},59942:function(t,e,r){var n=r(77400).Uint8Array;t.exports=n},10263:function(t){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,i=[];++r<n;){var a=t[r];e(a,r,t)&&(i[o++]=a)}return i}},97141:function(t){t.exports=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t}},93382:function(t,e,r){var n=r(85638);t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return -1}},11324:function(t,e,r){var n=r(97141),o=r(19785);t.exports=function(t,e,r){var i=e(t);return o(t)?i:n(i,r(t))}},51385:function(t,e,r){var n=r(11324),o=r(83080),i=r(50098);t.exports=function(t){return n(t,i,o)}},95899:function(t,e,r){var n=r(54479);t.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},83080:function(t,e,r){var n=r(10263),o=r(15937),i=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(t){return null==t?[]:n(a(t=Object(t)),function(e){return i.call(t,e)})}:o;t.exports=s},57753:function(t,e,r){var n=r(35718);t.exports=function(){this.__data__=n?n(null):{},this.size=0}},82452:function(t){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},22115:function(t,e,r){var n=r(35718),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return o.call(e,t)?e[t]:void 0}},38256:function(t,e,r){var n=r(35718),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:o.call(e,t)}},67426:function(t,e,r){var n=r(35718);t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?"__lodash_hash_undefined__":e,this}},54479:function(t){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},69417:function(t){t.exports=function(){this.__data__=[],this.size=0}},72470:function(t,e,r){var n=r(93382),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0)&&(r==e.length-1?e.pop():o.call(e,r,1),--this.size,!0)}},66165:function(t,e,r){var n=r(93382);t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},71873:function(t,e,r){var n=r(93382);t.exports=function(t){return n(this.__data__,t)>-1}},52556:function(t,e,r){var n=r(93382);t.exports=function(t,e){var r=this.__data__,o=n(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}},39448:function(t,e,r){var n=r(96586),o=r(36301),i=r(44538);t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(i||o),string:new n}}},7738:function(t,e,r){var n=r(95899);t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},66575:function(t,e,r){var n=r(95899);t.exports=function(t){return n(this,t).get(t)}},7238:function(t,e,r){var n=r(95899);t.exports=function(t){return n(this,t).has(t)}},38738:function(t,e,r){var n=r(95899);t.exports=function(t,e){var r=n(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}},35718:function(t,e,r){var n=r(81822)(Object,"create");t.exports=n},7354:function(t,e,r){var n=r(36301);t.exports=function(){this.__data__=new n,this.size=0}},5863:function(t){t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},12367:function(t){t.exports=function(t){return this.__data__.get(t)}},90748:function(t){t.exports=function(t){return this.__data__.has(t)}},97569:function(t,e,r){var n=r(36301),o=r(44538),i=r(74554);t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var a=r.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++r.size,this;r=this.__data__=new i(a)}return r.set(t,e),this.size=r.size,this}},30454:function(t,e,r){var n=r(40699);t.exports=function(t){return n(t,5)}},85638:function(t){t.exports=function(t,e){return t===e||t!=t&&e!=e}},15937:function(t){t.exports=function(){return[]}},76737:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),function(t,e){for(var r in e)Object.defineProperty(t,r,{enumerable:!0,get:e[r]})}(e,{default:function(){return s},noSSR:function(){return a}});let n=r(51538);r(24246),r(27378);let o=n._(r(21887));function i(t){return{default:(null==t?void 0:t.default)||t}}function a(t,e){return delete e.webpack,delete e.modules,t(e)}function s(t,e){let r=o.default,n={loading:t=>{let{error:e,isLoading:r,pastDelay:n}=t;return null}};t instanceof Promise?n.loader=()=>t:"function"==typeof t?n.loader=t:"object"==typeof t&&(n={...n,...t});let s=(n={...n,...e}).loader;return(n.loadableGenerated&&(n={...n,...n.loadableGenerated},delete n.loadableGenerated),"boolean"!=typeof n.ssr||n.ssr)?r({...n,loader:()=>null!=s?s().then(i):Promise.resolve(i(()=>null))}):(delete n.webpack,delete n.modules,a(r,n))}("function"==typeof e.default||"object"==typeof e.default&&null!==e.default)&&void 0===e.default.__esModule&&(Object.defineProperty(e.default,"__esModule",{value:!0}),Object.assign(e.default,e),t.exports=e.default)},28438:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"LoadableContext",{enumerable:!0,get:function(){return n}});let n=r(51538)._(r(27378)).default.createContext(null)},21887:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return f}});let n=r(51538)._(r(27378)),o=r(28438),i=[],a=[],s=!1;function u(t){let e=t(),r={loading:!0,loaded:null,error:null};return r.promise=e.then(t=>(r.loading=!1,r.loaded=t,t)).catch(t=>{throw r.loading=!1,r.error=t,t}),r}class l{promise(){return this._res.promise}retry(){this._clearTimeouts(),this._res=this._loadFn(this._opts.loader),this._state={pastDelay:!1,timedOut:!1};let{_res:t,_opts:e}=this;t.loading&&("number"==typeof e.delay&&(0===e.delay?this._state.pastDelay=!0:this._delay=setTimeout(()=>{this._update({pastDelay:!0})},e.delay)),"number"==typeof e.timeout&&(this._timeout=setTimeout(()=>{this._update({timedOut:!0})},e.timeout))),this._res.promise.then(()=>{this._update({}),this._clearTimeouts()}).catch(t=>{this._update({}),this._clearTimeouts()}),this._update({})}_update(t){this._state={...this._state,error:this._res.error,loaded:this._res.loaded,loading:this._res.loading,...t},this._callbacks.forEach(t=>t())}_clearTimeouts(){clearTimeout(this._delay),clearTimeout(this._timeout)}getCurrentValue(){return this._state}subscribe(t){return this._callbacks.add(t),()=>{this._callbacks.delete(t)}}constructor(t,e){this._loadFn=t,this._opts=e,this._callbacks=new Set,this._delay=null,this._timeout=null,this.retry()}}function c(t){return function(t,e){let r=Object.assign({loader:null,loading:null,delay:200,timeout:null,webpack:null,modules:null},e),i=null;function u(){if(!i){let e=new l(t,r);i={getCurrentValue:e.getCurrentValue.bind(e),subscribe:e.subscribe.bind(e),retry:e.retry.bind(e),promise:e.promise.bind(e)}}return i.promise()}if(!s){let t=r.webpack?r.webpack():r.modules;t&&a.push(e=>{for(let r of t)if(e.includes(r))return u()})}function c(t,e){!function(){u();let t=n.default.useContext(o.LoadableContext);t&&Array.isArray(r.modules)&&r.modules.forEach(e=>{t(e)})}();let a=n.default.useSyncExternalStore(i.subscribe,i.getCurrentValue,i.getCurrentValue);return n.default.useImperativeHandle(e,()=>({retry:i.retry}),[]),n.default.useMemo(()=>{var e;return a.loading||a.error?n.default.createElement(r.loading,{isLoading:a.loading,pastDelay:a.pastDelay,timedOut:a.timedOut,error:a.error,retry:i.retry}):a.loaded?n.default.createElement((e=a.loaded)&&e.default?e.default:e,t):null},[t,a])}return c.preload=()=>u(),c.displayName="LoadableComponent",n.default.forwardRef(c)}(u,t)}function d(t,e){let r=[];for(;t.length;){let n=t.pop();r.push(n(e))}return Promise.all(r).then(()=>{if(t.length)return d(t,e)})}c.preloadAll=()=>new Promise((t,e)=>{d(i).then(t,e)}),c.preloadReady=t=>(void 0===t&&(t=[]),new Promise(e=>{let r=()=>(s=!0,e());d(a,t).then(r,r)})),window.__NEXT_PRELOADREADY=c.preloadReady;let f=c},65218:function(t,e,r){t.exports=r(76737)}}]);
|