ethyca-fides 2.73.1rc2__py2.py3-none-any.whl → 2.73.2b1__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.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/METADATA +1 -1
- {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/RECORD +238 -235
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
- fides/api/api/v1/endpoints/generic_overrides.py +7 -7
- fides/api/models/privacy_request/duplicate_group.py +84 -0
- fides/api/models/privacy_request/privacy_request.py +12 -2
- fides/api/models/taxonomy.py +14 -4
- fides/api/schemas/privacy_request.py +2 -1
- fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +13 -6
- fides/api/service/privacy_request/duplication_detection.py +357 -0
- fides/api/service/saas_request/saas_request_override_factory.py +7 -2
- fides/common/api/scope_registry.py +0 -7
- fides/service/taxonomy/handlers/legacy_handler.py +3 -3
- fides/service/taxonomy/taxonomy_service.py +15 -15
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5909-56b37040ff0e6933.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7245-c9bc628d078c2170.js → 7245-c41aa2528645a47d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9899-5eea93b50aee65f7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-ee588a308812715d.js → _app-2986534ccbf5e4a5.js} +2 -2
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-b74862be16b8e2ae.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-cc9e47f347b657bf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-9692057d7ba62e04.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-652edb2ad165a845.js +1 -0
- fides/ui-build/static/admin/_next/static/wfI6N9ecEPXinU3OlxHLy/_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/datastore/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website.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/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/new-privacy-requests.html +1 -1
- fides/ui-build/static/admin/notifications/digests/[id].html +1 -1
- fides/ui-build/static/admin/notifications/digests/new.html +1 -1
- fides/ui-build/static/admin/notifications/digests.html +1 -1
- fides/ui-build/static/admin/notifications/providers/[key].html +1 -1
- fides/ui-build/static/admin/notifications/providers/new.html +1 -1
- fides/ui-build/static/admin/notifications/providers.html +1 -1
- fides/ui-build/static/admin/notifications/templates/[id].html +1 -1
- fides/ui-build/static/admin/notifications/templates/add-template.html +1 -1
- fides/ui-build/static/admin/notifications/templates.html +1 -1
- fides/ui-build/static/admin/notifications.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/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/sandbox/privacy-notices.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/[id].html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/new.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/privacy-requests.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3873-d18e47b327445db5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9899-addc35c81190203d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-21a0f5f1b5450976.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-df0c95e408c54c7e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6e4c535b6d614596.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-d2eb5a81d4a19c7d.js +0 -1
- fides/ui-build/static/admin/_next/static/oFlSfw1FVW7HAJICOLe4Y/_buildManifest.js +0 -1
- {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.73.1rc2.dist-info → ethyca_fides-2.73.2b1.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1099-31f9d973bc287df8.js → 1099-53dc1dd16a1e615b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1115-26393b586775ea29.js → 1115-5f133b52b4c719f2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1437-8b1f6c8797c68bfd.js → 1437-9485f6a257000689.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{155-f6302d32cba4cab6.js → 155-c4b86b97419eee1b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1817-2d5cf537a2992c79.js → 1817-a317936d371df0d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2040-7eed8491ca7276ed.js → 2040-041247847a1d23c9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2397-083fc511acb6105d.js → 2397-2426b7f2f3c61c4b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2921-34a43f2f8f5e5e69.js → 2921-4ee55c84908dcb6e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3377-988ac2f3a2e8d5d4.js → 3377-421918a9708a85fa.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3696-6f90e41a53d22920.js → 3696-a22951845ef33489.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3700-f695f2f6b8251971.js → 3700-5cd6f6a219952e84.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3772-9f1713f9d5f97a10.js → 3772-240d907365cfd536.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-f0a85dc5c3684fa0.js → 3923-c0d5a344c1bcb75f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{401-7c345d019bb9bcbd.js → 401-2ae64c1931df4bbe.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4496-4ff19366c597ec16.js → 4496-94d9ef9a7b77bcd8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4817-1f3e6ea38625d8d5.js → 4817-119bf7124a66b06d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5185-e7f8b81dd3dfbe0b.js → 5185-6220718ffe0578af.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5258-62d6bc19add60aa6.js → 5258-566264abf15c818e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5279-bd6cccabdd6ca447.js → 5279-d702b465ff72c384.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{549-28537a6de666944b.js → 549-9ea1f2819cfa2b47.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5643-3459282d296a3c59.js → 5643-2c3308ff2cee965d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5783-21775c232dce7af7.js → 5783-50e5735cf9cb0f2e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6277-3759894435cb8569.js → 6277-7c765deedc54e9a6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6315-e2fb5ea77179a871.js → 6315-9f22209b868f61a5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6853-de9905d28e5b19b3.js → 6853-748e92c6414f313e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-84789a4e4fb04eb9.js → 6954-2a52d012b8c44598.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7476-a02d970ea4d3f7d0.js → 7476-c1e9b034b4d3b1b6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7488-cf92601852e3c509.js → 7488-4145699c604c9554.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-a11610c2b31ab2ca.js → 7630-a6631a3a78029573.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7773-9ae233109bc64ec2.js → 7773-dd824bff406d3057.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-e36d610066135f8c.js → 796-8f56cd4d8dfa663e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8011-75af8b480fa114e6.js → 8011-3d6cc0af757b41de.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8212-393420e5a9751791.js → 8212-10bf793014dafd8b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8373-22b4d20e8cc06b3a.js → 8373-9b5db3cceef9add4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9046-d9c6498368b993d1.js → 9046-48bd5b591ff9cadc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9330-f753636a31c4ea04.js → 9330-4a29ef6a17e61b3f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9682-d1a3afa1394f8304.js → 9682-1cfc98b906cf0d97.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-a737a9956c1d0905.js → 9826-517b8ba731a6642e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9965-25621dd507e0cfd6.js → 9965-e3a7ac5848e62b5f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{404-eb019192ce498f32.js → 404-e30ec05084303d6b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-7081e0e49f67716c.js → manual-6466b8cdac3674ea.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-a188f84239f4b2a8.js → multiple-bc06457d27216fad.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-ee9df33ebd471099.js → add-systems-eeba4d74db895be7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-4f9cf087fcee87e6.js → add-vendors-ff54e031f93924ad.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-9af75caefc74eaca.js → configure-13651347dee871d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1b02a4991201b7e4.js → [id]-3645a8f2244cdcf8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-b08abefec298ccf1.js → privacy-experience-c33ebeb4a7288596.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-8c164c4b8310214e.js → [id]-d1868093b96d5dd0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-db789002d84c8829.js → new-a3de236a9ae52934.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-6528eb24165aceb6.js → privacy-notices-e530117d048ce019.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-5cba30eba1e97e56.js → properties-29b62430692da924.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-11f1683aa15e1a62.js → reporting-4d1f50fbe0ed1562.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-614af0a2c2ba966c.js → consent-5bebe58701b192c8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-d60761c20382b259.js → [projectUrn]-cb92b6b0bda753df.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-07e7d38ce34e1e6c.js → projects-52a3660671c248ed.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-aed94957009eb3fd.js → resources-26155daa740bcc3a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-127c114dd8f102ed.js → data-catalog-487fcb8f2caed2da.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/{[systemId]-899bf30dde8b3292.js → [systemId]-3d9fe61dd9e6f664.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/{[monitorId]-73085f50abb775c0.js → [monitorId]-958927ffa1fd8645.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-823d0dd77e66585b.js → action-center-037f91cf033616bc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-24a82e07a0008516.js → activity-a1cfa65b549a8612.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-3b100c44ea9e3988.js → datamap-2f28227308bcddd3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-5f88280db168083e.js → [...subfieldNames]-6d342de24c1a91ad.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-bfbcf19c28c794ae.js → [collectionName]-8f78f42dafb99e59.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-6fbe2b584a509226.js → [datasetId]-2b3cdd68b333aadf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-3d1e48f4b95d7f6b.js → new-1072d90df5d75ba1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-d3c6ecf7f29bea6e.js → dataset-bf9e1cd7b8a91e81.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-0a4aa42be2da0255.js → [id]-e2a756a05906ce5b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-14313e441a13192c.js → new-7435d78fcf749e65.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-f139d1ce26404f30.js → datastore-connection-dc50c7e9717c31ce.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-1343fa525a206571.js → index-91fb482245b14d86.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-b2d3d28b10a758e6.js → [id]-6166dab37d311c92.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-a733e5d7c3ce9bb8.js → integrations-82ffe15ce196c688.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{[id]-63b3be660fb12c0f.js → [id]-0c7b41a17cd81544.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{new-d3b577962dd33266.js → new-7e02a48cc86f7835.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{digests-aed9afd988a48acf.js → digests-b0c864e6411cb8b9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{[key]-720cde29f81db47f.js → [key]-c5e272e1f0c9b097.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{new-3668866076b53016.js → new-3cce4a6b31154b54.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{providers-36a0ac36062abd02.js → providers-4136309c03cd69b9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{[id]-8063dceb32310c85.js → [id]-95aa9b844d3f19d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{add-template-4931c70bee62232f.js → add-template-dbdfa8cd7fbb5e3c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/notifications/{templates-a14c876b49422597.js → templates-a4ce2e4c547ab85a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{notifications-93af719dab3bd053.js → notifications-7d2e09a261df0655.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-9cfb469de7b4aeab.js → ant-components-8ab33b70c0087799.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-e715cc654fb6a5cd.js → AntForm-c0f0b4344f2d120a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-72ae299bcb6adae6.js → FormikAntFormItem-d6567b5b37000e85.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-2337f8c81a766eb0.js → FormikControlled-4f632928b6dfd0d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-0af454f55494f6fa.js → FormikField-ec194d81e022bc47.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-d1b90ffa996fbd89.js → forms-dad16174a6bfd99c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-19724b9e0581b96d.js → table-migration-55db71ad40292372.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-cdd3754289a28317.js → [id]-4dd70793c7edf0a8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-cc41ae605f2b55ae.js → storage-63588b8a340002fd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-fa82cffba448ccd8.js → configure-415700a23b1d3c11.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-bc1c289647e52c48.js → [id]-61469c255ff06e69.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-cbfaa23d96f5ed0b.js → add-property-4be683f2820027cd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-a15a3fd0ed88f39c.js → properties-b32d615283f0c31b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-632b3ee563d070f2.js → datamap-1b4bdd9277062e60.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/{privacy-notices-afe921f6e2a526fb.js → privacy-notices-f28535ed0a0080ad.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-19de0024418a4924.js → [purpose_id]-b1500de5cd1fe441.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-5b6807dced8d03c5.js → consent-f136f4204c5d6fc5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-7dce52bfc1b2652c.js → custom-fields-bf9b2ac61418b508.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-3b87002753b23ca5.js → domain-records-318bcdad75571ca2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-aacd9d0ad47082d4.js → domains-1d0b2c16a3565091.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-3cdd0b39901190ba.js → email-templates-33a5f7e22a7f8b71.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-61076eedbfd137b9.js → locations-e2d25e574b5b46ee.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-b07b11d6002f8c8c.js → organization-0055cabba6190e47.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{privacy-requests-084a2b4431d35322.js → privacy-requests-f521263a3beaac9b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-b7c0d3b1b754e70f.js → regulations-8329b9cd8cd89579.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-b72d36243a0a545c.js → test-datasets-81530b3fc0daa137.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-59c89489fa32a4cb.js → [id]-4d94d20d4f7089f7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-cfaa37a0df83674b.js → systems-22e7979c69e25bda.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-5d5a68e555d18693.js → [id]-1d7d51b194f9dcc6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-e6a211d8a0401086.js → user-management-b23b698c019a9560.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{webpack-c2c11809187b9f84.js → webpack-d8c0ff59e7dbc75d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{oFlSfw1FVW7HAJICOLe4Y → wfI6N9ecEPXinU3OlxHLy}/_ssgManifest.js +0 -0
fides/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-10-
|
|
11
|
+
"date": "2025-10-31T14:51:49+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.73.
|
|
14
|
+
"full-revisionid": "3a382cb972e2ea964f078259f93ed9b6ea0b1d02",
|
|
15
|
+
"version": "2.73.2b1"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""added duplicate group table
|
|
2
|
+
|
|
3
|
+
Revision ID: 80d28dea3b6b
|
|
4
|
+
Revises: c09e76282dd1
|
|
5
|
+
Create Date: 2025-10-29 16:59:09.551676
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy.dialects import postgresql
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "80d28dea3b6b"
|
|
15
|
+
down_revision = "c09e76282dd1"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
22
|
+
op.create_table(
|
|
23
|
+
"duplicate_group",
|
|
24
|
+
sa.Column(
|
|
25
|
+
"created_at",
|
|
26
|
+
sa.DateTime(timezone=True),
|
|
27
|
+
server_default=sa.text("now()"),
|
|
28
|
+
nullable=True,
|
|
29
|
+
),
|
|
30
|
+
sa.Column(
|
|
31
|
+
"updated_at",
|
|
32
|
+
sa.DateTime(timezone=True),
|
|
33
|
+
server_default=sa.text("now()"),
|
|
34
|
+
nullable=True,
|
|
35
|
+
),
|
|
36
|
+
sa.Column("id", postgresql.UUID(as_uuid=True), nullable=False),
|
|
37
|
+
sa.Column("rule_version", sa.Text(), nullable=False),
|
|
38
|
+
sa.Column("is_active", sa.Boolean(), server_default="t", nullable=False),
|
|
39
|
+
sa.Column("dedup_key", sa.Text(), nullable=False),
|
|
40
|
+
sa.PrimaryKeyConstraint("id"),
|
|
41
|
+
)
|
|
42
|
+
op.drop_index(
|
|
43
|
+
"ix_privacyrequest_duplicate_request_group_id", table_name="privacyrequest"
|
|
44
|
+
)
|
|
45
|
+
op.drop_column("privacyrequest", "duplicate_request_group_id")
|
|
46
|
+
op.add_column(
|
|
47
|
+
"privacyrequest",
|
|
48
|
+
sa.Column(
|
|
49
|
+
"duplicate_request_group_id", postgresql.UUID(as_uuid=True), nullable=True
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
op.create_foreign_key(
|
|
53
|
+
"fk_privacyrequest_duplicate_group",
|
|
54
|
+
"privacyrequest",
|
|
55
|
+
"duplicate_group",
|
|
56
|
+
["duplicate_request_group_id"],
|
|
57
|
+
["id"],
|
|
58
|
+
)
|
|
59
|
+
# ### end Alembic commands ###
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def downgrade():
|
|
63
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
64
|
+
op.drop_constraint(
|
|
65
|
+
"fk_privacyrequest_duplicate_group", "privacyrequest", type_="foreignkey"
|
|
66
|
+
)
|
|
67
|
+
op.drop_column("privacyrequest", "duplicate_request_group_id")
|
|
68
|
+
op.add_column(
|
|
69
|
+
"privacyrequest",
|
|
70
|
+
sa.Column("duplicate_request_group_id", sa.String(), nullable=True),
|
|
71
|
+
)
|
|
72
|
+
op.create_index(
|
|
73
|
+
"ix_privacyrequest_duplicate_request_group_id",
|
|
74
|
+
"privacyrequest",
|
|
75
|
+
["duplicate_request_group_id"],
|
|
76
|
+
unique=False,
|
|
77
|
+
)
|
|
78
|
+
op.drop_table("duplicate_group")
|
|
79
|
+
# ### end Alembic commands ###
|
|
@@ -368,7 +368,7 @@ async def create_data_use(
|
|
|
368
368
|
"""
|
|
369
369
|
try:
|
|
370
370
|
return taxonomy_service.create_or_update_element(
|
|
371
|
-
"
|
|
371
|
+
"data_use", data_use.model_dump()
|
|
372
372
|
)
|
|
373
373
|
except KeyOrNameAlreadyExists:
|
|
374
374
|
raise HTTPException(
|
|
@@ -399,7 +399,7 @@ async def create_data_category(
|
|
|
399
399
|
|
|
400
400
|
try:
|
|
401
401
|
return taxonomy_service.create_or_update_element(
|
|
402
|
-
"
|
|
402
|
+
"data_category", data_category.model_dump()
|
|
403
403
|
)
|
|
404
404
|
except KeyOrNameAlreadyExists:
|
|
405
405
|
raise HTTPException(
|
|
@@ -430,7 +430,7 @@ async def create_data_subject(
|
|
|
430
430
|
|
|
431
431
|
try:
|
|
432
432
|
return taxonomy_service.create_or_update_element(
|
|
433
|
-
"
|
|
433
|
+
"data_subject", data_subject.model_dump()
|
|
434
434
|
)
|
|
435
435
|
except KeyOrNameAlreadyExists:
|
|
436
436
|
raise HTTPException(
|
|
@@ -465,7 +465,7 @@ async def update_data_use(
|
|
|
465
465
|
)
|
|
466
466
|
try:
|
|
467
467
|
result = taxonomy_service.update_element(
|
|
468
|
-
"
|
|
468
|
+
"data_use", data_use.fides_key, data_use.model_dump()
|
|
469
469
|
)
|
|
470
470
|
if not result:
|
|
471
471
|
raise HTTPException(
|
|
@@ -501,7 +501,7 @@ async def update_data_category(
|
|
|
501
501
|
)
|
|
502
502
|
try:
|
|
503
503
|
result = taxonomy_service.update_element(
|
|
504
|
-
"
|
|
504
|
+
"data_category", data_category.fides_key, data_category.model_dump()
|
|
505
505
|
)
|
|
506
506
|
if not result:
|
|
507
507
|
raise HTTPException(
|
|
@@ -534,7 +534,7 @@ async def update_data_category_tagging_instructions(
|
|
|
534
534
|
"""
|
|
535
535
|
try:
|
|
536
536
|
result = taxonomy_service.update_element(
|
|
537
|
-
"
|
|
537
|
+
"data_category",
|
|
538
538
|
fides_key,
|
|
539
539
|
{"tagging_instructions": tagging_instructions},
|
|
540
540
|
)
|
|
@@ -568,7 +568,7 @@ async def delete_data_category_tagging_instructions(
|
|
|
568
568
|
"""
|
|
569
569
|
try:
|
|
570
570
|
result = taxonomy_service.update_element(
|
|
571
|
-
"
|
|
571
|
+
"data_category",
|
|
572
572
|
fides_key,
|
|
573
573
|
{"tagging_instructions": None},
|
|
574
574
|
)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
import json
|
|
3
|
+
import uuid
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from sqlalchemy import Boolean, Column, Text
|
|
7
|
+
from sqlalchemy.dialects.postgresql import UUID
|
|
8
|
+
from sqlalchemy.ext.declarative import declared_attr
|
|
9
|
+
from sqlalchemy.orm import Session, relationship
|
|
10
|
+
|
|
11
|
+
from fides.api.db.base_class import Base # type: ignore[attr-defined]
|
|
12
|
+
from fides.config.duplicate_detection_settings import DuplicateDetectionSettings
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from fides.api.models.privacy_request.privacy_request import PrivacyRequest
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def generate_deterministic_uuid(rule_version: str, dedup_key: str) -> uuid.UUID:
|
|
19
|
+
"""Overrides the base class method to generate a deterministic group id.
|
|
20
|
+
|
|
21
|
+
The actual rule version is a hash of the duplicate detection settings config,
|
|
22
|
+
using simple examples here for illustration:
|
|
23
|
+
- under rule "email", duplicate@example.com → group A,
|
|
24
|
+
- under rule "email|phone", duplicate@example.com|1234567890 → group B.
|
|
25
|
+
- ... and so on.
|
|
26
|
+
|
|
27
|
+
No collisions, no overlap.
|
|
28
|
+
"""
|
|
29
|
+
# Combine the rule version and the key into a stable hash
|
|
30
|
+
hash_input = f"{rule_version}:{dedup_key}".encode("utf-8")
|
|
31
|
+
return uuid.UUID(hashlib.md5(hash_input).hexdigest())
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def generate_rule_version(config: DuplicateDetectionSettings) -> str:
|
|
35
|
+
"""Generate a stable short hash for the dedup rule config."""
|
|
36
|
+
normalized = json.dumps(config.model_dump(), sort_keys=True)
|
|
37
|
+
return hashlib.sha256(normalized.encode("utf-8")).hexdigest()[:8]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class DuplicateGroup(Base):
|
|
41
|
+
"""
|
|
42
|
+
A table for storing duplicate request group information.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
@declared_attr
|
|
46
|
+
def __tablename__(self) -> str:
|
|
47
|
+
return "duplicate_group"
|
|
48
|
+
|
|
49
|
+
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
50
|
+
rule_version = Column(Text, nullable=False)
|
|
51
|
+
# TODO: The is_active column is not used yet since we are defaulting to just email for
|
|
52
|
+
# duplicate detection. When we allow users to configure the duplicate detection settings,
|
|
53
|
+
# we will need to add a way to activate/deactivate duplicate groups.
|
|
54
|
+
# This should be done by getting the previous rule version and deactivating all groups with
|
|
55
|
+
# that rule version. New groups will be created with the new rule version.
|
|
56
|
+
is_active = Column(Boolean, default=True, nullable=False)
|
|
57
|
+
dedup_key = Column(Text, nullable=False)
|
|
58
|
+
privacy_requests = relationship(
|
|
59
|
+
"PrivacyRequest",
|
|
60
|
+
back_populates="duplicate_group",
|
|
61
|
+
lazy="dynamic",
|
|
62
|
+
primaryjoin="and_(DuplicateGroup.id == PrivacyRequest.duplicate_request_group_id)",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def create(
|
|
67
|
+
cls, db: Session, *, data: dict[str, Any], check_name: bool = False
|
|
68
|
+
) -> "DuplicateGroup":
|
|
69
|
+
"""Create a new duplicate group.
|
|
70
|
+
Override the base class method to generate a deterministic group id.
|
|
71
|
+
If the group already exists, update the is_active column to True and return the group.
|
|
72
|
+
"""
|
|
73
|
+
group_id = generate_deterministic_uuid(data["rule_version"], data["dedup_key"])
|
|
74
|
+
# If the group already exists, update the is_active column to True and return the group
|
|
75
|
+
duplicate_group = (
|
|
76
|
+
db.query(DuplicateGroup).filter(DuplicateGroup.id == group_id).one_or_none()
|
|
77
|
+
)
|
|
78
|
+
if duplicate_group:
|
|
79
|
+
duplicate_group.update(db, data={"is_active": True})
|
|
80
|
+
return duplicate_group
|
|
81
|
+
|
|
82
|
+
# If the group does not exist, create a new one
|
|
83
|
+
data["id"] = group_id
|
|
84
|
+
return super().create(db, data=data, check_name=check_name)
|
|
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Union
|
|
|
9
9
|
from celery.result import AsyncResult
|
|
10
10
|
from loguru import logger
|
|
11
11
|
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String
|
|
12
|
-
from sqlalchemy.dialects.postgresql import JSONB
|
|
12
|
+
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
|
13
13
|
from sqlalchemy.ext.declarative import declared_attr
|
|
14
14
|
from sqlalchemy.ext.mutable import MutableDict, MutableList
|
|
15
15
|
from sqlalchemy.orm import Query, RelationshipProperty, Session, backref, relationship
|
|
@@ -69,6 +69,7 @@ from fides.api.models.pre_approval_webhook import (
|
|
|
69
69
|
PreApprovalWebhook,
|
|
70
70
|
PreApprovalWebhookReply,
|
|
71
71
|
)
|
|
72
|
+
from fides.api.models.privacy_request.duplicate_group import DuplicateGroup
|
|
72
73
|
from fides.api.models.privacy_request.execution_log import (
|
|
73
74
|
COMPLETED_EXECUTION_LOG_STATUSES,
|
|
74
75
|
EXITED_EXECUTION_LOG_STATUSES,
|
|
@@ -225,7 +226,16 @@ class PrivacyRequest(
|
|
|
225
226
|
location = Column(String, nullable=True)
|
|
226
227
|
|
|
227
228
|
# Duplicate detection - group ID to link duplicates together
|
|
228
|
-
duplicate_request_group_id = Column(
|
|
229
|
+
duplicate_request_group_id = Column(
|
|
230
|
+
UUID(as_uuid=True),
|
|
231
|
+
ForeignKey("duplicate_group.id"),
|
|
232
|
+
nullable=True,
|
|
233
|
+
)
|
|
234
|
+
duplicate_group = relationship(
|
|
235
|
+
DuplicateGroup,
|
|
236
|
+
back_populates="privacy_requests",
|
|
237
|
+
uselist=False,
|
|
238
|
+
)
|
|
229
239
|
|
|
230
240
|
# A PrivacyRequest can be soft deleted, so we store when it was deleted
|
|
231
241
|
deleted_at = Column(DateTime(timezone=True), nullable=True)
|
fides/api/models/taxonomy.py
CHANGED
|
@@ -21,7 +21,15 @@ from fides.api.common_exceptions import ValidationError
|
|
|
21
21
|
from fides.api.db.base_class import Base
|
|
22
22
|
from fides.api.models.sql_models import FidesBase # type: ignore[attr-defined]
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
# Legacy Fideslang taxonomy keys
|
|
25
|
+
LEGACY_TAXONOMY_KEYS = {
|
|
26
|
+
"data_category",
|
|
27
|
+
"data_use",
|
|
28
|
+
"data_subject",
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Taxonomies that are managed by Fides (legacy taxonomies and system group)
|
|
32
|
+
MANAGED_TAXONOMY_KEYS = {"data_category", "data_use", "data_subject", "system_group"}
|
|
25
33
|
|
|
26
34
|
|
|
27
35
|
class TargetType(str, Enum):
|
|
@@ -81,7 +89,9 @@ class Taxonomy(Base, FidesBase):
|
|
|
81
89
|
"""Create a new Taxonomy with proper handling of applies_to."""
|
|
82
90
|
# Disallow creating taxonomies that represent legacy types
|
|
83
91
|
fides_key = data.get("fides_key")
|
|
84
|
-
|
|
92
|
+
# Specifically exclude system_group to allow for creation during tests
|
|
93
|
+
# We already have unique constraints on fides_key to prevent duplicates on DB level
|
|
94
|
+
if fides_key in MANAGED_TAXONOMY_KEYS:
|
|
85
95
|
raise ValidationError(
|
|
86
96
|
f"Cannot create taxonomy '{fides_key}'. This is a taxonomy managed by the system."
|
|
87
97
|
)
|
|
@@ -166,7 +176,7 @@ class TaxonomyAllowedUsage(Base):
|
|
|
166
176
|
|
|
167
177
|
target_type can be either:
|
|
168
178
|
- A generic type: "system", "privacy_declaration", "taxonomy"
|
|
169
|
-
- A taxonomy key: "
|
|
179
|
+
- A taxonomy key: "data_category", "data_use", etc.
|
|
170
180
|
"""
|
|
171
181
|
|
|
172
182
|
@declared_attr
|
|
@@ -193,7 +203,7 @@ class TaxonomyAllowedUsage(Base):
|
|
|
193
203
|
)
|
|
194
204
|
target_type: Column[str] = Column(
|
|
195
205
|
String, primary_key=True
|
|
196
|
-
) # Can be "system", "dataset", OR a taxonomy key like "
|
|
206
|
+
) # Can be "system", "dataset", OR a taxonomy key like "data_category"
|
|
197
207
|
|
|
198
208
|
|
|
199
209
|
class TaxonomyElement(Base, FidesBase):
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
from enum import Enum as EnumType
|
|
3
3
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
4
|
+
from uuid import UUID
|
|
4
5
|
|
|
5
6
|
from fideslang.validation import FidesKey
|
|
6
7
|
from pydantic import ConfigDict, Field, field_serializer, field_validator
|
|
@@ -343,7 +344,7 @@ class PrivacyRequestResponse(FidesSchema):
|
|
|
343
344
|
deleted_by: Optional[str] = None
|
|
344
345
|
finalized_at: Optional[datetime] = None
|
|
345
346
|
finalized_by: Optional[str] = None
|
|
346
|
-
duplicate_request_group_id: Optional[
|
|
347
|
+
duplicate_request_group_id: Optional[UUID] = None
|
|
347
348
|
|
|
348
349
|
model_config = ConfigDict(from_attributes=True, use_enum_values=True)
|
|
349
350
|
|
|
@@ -551,13 +551,20 @@ class AsyncPollingStrategy(AsyncDSRStrategy):
|
|
|
551
551
|
self.result_request.result_path,
|
|
552
552
|
)
|
|
553
553
|
|
|
554
|
-
#
|
|
555
|
-
if
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
554
|
+
# Checks if we have a polling result, response could be empty in case there was no data to access
|
|
555
|
+
if polling_result:
|
|
556
|
+
# Ensure we have the expected polling result type
|
|
557
|
+
if not isinstance(polling_result, PollingResult):
|
|
558
|
+
raise PrivacyRequestError(
|
|
559
|
+
"Polling result must be PollingResult instance"
|
|
560
|
+
)
|
|
560
561
|
|
|
562
|
+
# Store results on the sub-request
|
|
563
|
+
self._store_sub_request_result(polling_result, sub_request, polling_task)
|
|
564
|
+
else:
|
|
565
|
+
logger.info(
|
|
566
|
+
f"No result response for sub-request {sub_request.id} for task {polling_task.id}"
|
|
567
|
+
)
|
|
561
568
|
# Mark as complete using existing method
|
|
562
569
|
sub_request.update_status(self.session, ExecutionLogStatus.complete.value)
|
|
563
570
|
|