ethyca-fides 2.70.5rc0__py2.py3-none-any.whl → 2.71.0rc0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.70.5rc0.dist-info → ethyca_fides-2.71.0rc0.dist-info}/METADATA +5 -3
- {ethyca_fides-2.70.5rc0.dist-info → ethyca_fides-2.71.0rc0.dist-info}/RECORD +236 -214
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/0eef0016cf06_adding_oauth2_config_for_.py +69 -0
- fides/api/alembic/migrations/versions/9e0dcbf67b9f_add_digest_config.py +84 -0
- fides/api/alembic/migrations/versions/a8e0c016afd_add_classification_benchmark_table.py +126 -0
- fides/api/alembic/migrations/versions/cd8649be3a2b_add_classifications_and_user_assigned_.py +74 -0
- fides/api/alembic/migrations/versions/e2cda8d6abc3_add_dismissed_in_activity_view_to_.py +29 -0
- fides/api/api/v1/endpoints/connection_endpoints.py +153 -2
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +18 -2
- fides/api/db/base.py +2 -0
- fides/api/db/crud.py +30 -2
- fides/api/db/database.py +1 -1
- fides/api/db/safe_crud.py +377 -0
- fides/api/migrations/post_upgrade_index_creation.py +10 -0
- fides/api/models/conditional_dependency/__init__.py +0 -0
- fides/api/models/conditional_dependency/conditional_dependency_base.py +82 -0
- fides/api/models/connection_oauth_credentials.py +57 -0
- fides/api/models/connectionconfig.py +7 -0
- fides/api/models/detection_discovery/__init__.py +2 -0
- fides/api/models/detection_discovery/classification_benchmark.py +140 -0
- fides/api/models/detection_discovery/core.py +11 -0
- fides/api/models/detection_discovery/monitor_task.py +2 -1
- fides/api/models/digest/__init__.py +10 -0
- fides/api/models/digest/conditional_dependencies.py +9 -0
- fides/api/models/digest/digest_config.py +76 -0
- fides/api/models/manual_task/conditional_dependency.py +21 -77
- fides/api/models/policy.py +24 -0
- fides/api/models/privacy_notice.py +1 -1
- fides/api/models/privacy_request/privacy_request.py +68 -0
- fides/api/models/privacy_request/webhook.py +3 -1
- fides/api/oauth/roles.py +2 -0
- fides/api/schemas/connection_configuration/connection_oauth_config.py +42 -0
- fides/api/schemas/privacy_request.py +5 -2
- fides/api/schemas/user.py +2 -2
- fides/api/service/connectors/http_connector.py +48 -12
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +2 -2
- fides/api/service/storage/streaming/smart_open_streaming_storage.py +36 -28
- fides/api/service/storage/util.py +11 -102
- fides/api/task/conditional_dependencies/sql_schemas.py +301 -0
- fides/api/task/conditional_dependencies/sql_translator.py +757 -0
- fides/api/task/manual/manual_task_utils.py +5 -6
- fides/common/api/v1/urn_registry.py +1 -0
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/155-047c3806cc41295e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2962-e92d525bf570a9a3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3550-83cb70e80cbe41ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3700-dc3f05d21e2a5ff6.js → 3700-08e0703b1ef770da.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{504-afd3588f1908ac33.js → 504-88caa30c03374e9b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5643-de406832755d9515.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6419-9b3a86af57c86791.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7218-e2983b96b95e33b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7476-0b6e114658b15eaa.js → 7476-d055aa931da47ac0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7725-f2a7be705b75dcc3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-a4e3c999afb28ee7.js → _app-a77584f9ad3334af.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-939253f8daf349b2.js → manual-75e99306393938e8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-293c1f2d9aefb447.js → [resourceUrn]-2fa4b3a58f75f81d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-18501152fa1e4f40.js → [resourceUrn]-5b31e3d7727b917a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2e1e2b7808d3b21f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-e8ec4080d9a3e22f.js → [monitorId]-0d512528b498d75c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-1901c26cdde820da.js → [resourceUrn]-5525cf287d4ab493.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-0cea22af5929c81f.js → discovery-ed4723e1b67d890e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-619f27c745188adb.js → datamap-15616bea02397ef4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-cc149157d290a94d.js → [id]-816e02b6cbe4a684.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-4c9fb068a5561658.js → new-b6838162200141b3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-8b13bb5f7bee61c6.js → [id]-01e025f878ba806c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-6f109ef64304ef59.js → integrations-14120a529d7dac27.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{[id]-8566e3b7b2a632fa.js → [id]-82ebad17eb17c149.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{privacy-requests-2c82cf73d20416f2.js → privacy-requests-7af00f72cf694077.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-5b423687e227ad4d.js → datamap-f7753e9effae3816.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-a653c05606c53063.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-90848e4a15057af1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-5edfec10a945ca43.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/{[key]-b0d93bf478bf63ee.js → [key]-77239269acc2d31a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/messaging-providers/{new-084f9756b9987285.js → new-8bf1821722b082e9.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-1895c6a13b543436.js → [id]-547c6ef0ad52b85d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-d266cc062b56beb2.js → systems-7238e025208078ec.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-a8cfa7de4948b374.js +1 -0
- fides/ui-build/static/admin/_next/static/css/64fac6fb884435c2.css +1 -0
- fides/ui-build/static/admin/_next/static/fY61mOXDNbYtO-3MNEDrx/_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/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/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/[id].html +1 -0
- fides/ui-build/static/admin/settings/custom-fields/new.html +1 -0
- 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/messaging-providers/[key].html +1 -1
- fides/ui-build/static/admin/settings/messaging-providers/new.html +1 -1
- fides/ui-build/static/admin/settings/messaging-providers.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/PZe9jkBWNOGDEEZ4Y_Rvq/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/155-88303b05c6e115a5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3550-d04125c828d591a1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6419-d0c00d661b01f8fa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7725-dd6736855807936a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9951-651d521d9a02b6df.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-b0e3f1886de28d66.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-26ce8fc493993765.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-07848c232d960f6a.js +0 -1
- fides/ui-build/static/admin/_next/static/css/1866822702989bb3.css +0 -1
- {ethyca_fides-2.70.5rc0.dist-info → ethyca_fides-2.71.0rc0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.70.5rc0.dist-info → ethyca_fides-2.71.0rc0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.70.5rc0.dist-info → ethyca_fides-2.71.0rc0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.70.5rc0.dist-info → ethyca_fides-2.71.0rc0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1115-7888473b3dc28cda.js → 1115-90baef2a89f361ad.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{1817-ee9e29a6b8c4af50.js → 1817-ca6473f31a67a804.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{2040-ab6212a3074f34f9.js → 2040-fdecc41a18e40bdc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3585-451504ea5ed7a1ea.js → 3585-efd5d41f08e180c4.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3696-c25dc8d1b0e1aee1.js → 3696-90c8b336bbc46782.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3872-3514b712afd683c0.js → 3872-04d3afbfa41a7782.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{3923-a551756b413367ea.js → 3923-98bea73b618292aa.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{4608-b22905c65f61db15.js → 4608-a9941d0c236ebca1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{502-a40d39e615f7b664.js → 502-d3ecae97b67befbd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5185-33f50cf9ae17b42e.js → 5185-51eaa78e3ed6bfb7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5574-b8c4cba5a6938c00.js → 5574-c31ea831371610d5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{5783-8de76df87af55e98.js → 5783-d119cb132abd8a91.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6084-2cd165179c428a6f.js → 6084-d0943ee628bf4388.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6416-264aadc6b336ee0a.js → 6416-0ccadfefcdad00cc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6882-447f15e87b8c48a5.js → 6882-10296485ec326e6b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6954-599f2de2c902e9b2.js → 6954-4b24e1731c1cc3b3.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7158-835ba42fd881d8dd.js → 7158-04745cc8d684b2e7.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{7630-e7ea13be69c118a1.js → 7630-d0d3a0fe3f95e971.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{796-e07ac2c543f569e3.js → 796-02086581996a0548.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{8002-25fd174aec9b077b.js → 8002-ed832921ad190832.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9226-2f960b7ca530642a.js → 9226-4a7027057f55ca2a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9826-c02be5882205bbbc.js → 9826-ccedc28e978ca9e1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-83ed7da0bb90b0a5.js → multiple-2ca59996860a33c5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-f90aa48500c1cbde.js → add-systems-58920afe2b67f952.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-46b88bda3d7b15c5.js → add-vendors-7a258b7ecd6da4b8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-c0db068d1863222f.js → configure-fb5017ff5fa54fcc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-92a337ee96845af2.js → privacy-experience-92182be6603c2842.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-1fd2cda8707314f6.js → [id]-9c23fbe813c997d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-2987e397445713c5.js → new-0e5e38bbcfe59fd2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-59a8aff5935482ec.js → privacy-notices-ab54b19609bff325.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-e5a33654a2dfaf35.js → consent-d2bf72508c3cad55.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-6a4b0d49dcbf17a8.js → [projectUrn]-4a1af12d2d7cd660.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-be7b385073f22414.js → projects-99573a1ee3ef8f4c.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-af80fdca3bbdc82f.js → resources-6e429b7511028d60.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-351caadeef03876a.js → data-catalog-56fd0f3e465e52b6.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-1554afcb8b9da2ab.js → action-center-040813022f0890c9.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-0497f3ffdb632516.js → [resourceUrn]-844a8de0d1b506e2.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-a780390da99f3e43.js → detection-11b07cf2d91b17ef.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-ef71f387fbbab425.js → [...subfieldNames]-d4031e438c363fff.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-d790553662caf5c3.js → [collectionName]-9463af37079762d0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-cb63db8594fe8dc1.js → [datasetId]-60a4a9eb4aab4c11.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-78e052c8f95110c4.js → new-ea198c4a7869f402.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-d6d7ee8bd8858a8a.js → dataset-0e3a6ac4797ffbbb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-a832084ce294f8af.js → datastore-connection-223c2d1ded51bfb1.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{index-269b8f81546dad66.js → index-b74d1e8608ae5b5d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-d8c5c03fb2f31d65.js → [id]-e8d2140787045acd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-0e0c06e3c8aabe02.js → add-template-e3f93462a08251bf.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-3f15804cf9625f01.js → messaging-b5f7d6afdecd013d.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-e551fccfcaae76e7.js → table-migration-29fb7b39f8962650.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-1b38b656807ed0cd.js → storage-648d775d0fce49dc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-b00532a0ad4f6927.js → configure-8f577df28ebca869.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-322a01e2bceab3fb.js → [id]-57a75c7e9659271a.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-777ed2d73812043d.js → add-property-8964c2300206bc89.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-55e36839d219a503.js → consent-e5d781b28f8e29c8.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-7ddf9d992fe714a6.js → domain-records-744f669431b84f71.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-7c78ae51f0dd7102.js → domains-a3275554ffe8e640.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-05ffbda19ab894b9.js → email-templates-604790638c656fbd.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-77fb85bdd0be42b5.js → locations-be2a885150adc133.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{messaging-providers-6c51ffd46bb598e7.js → messaging-providers-8d92be437793c96f.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-44456bfe54ac4ad5.js → organization-3c86162afe9759df.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{privacy-requests-fbe7e8030d837aed.js → privacy-requests-8cbdfd08e0fa88fb.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-2866ac99faa5a542.js → regulations-4fe3b90747d885e5.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-a86bafe1b4e1205f.js → test-datasets-2deb6becece69d46.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-6304dad2c5fab694.js → new-629c88e90699369b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-ff4711db191099cd.js → [id]-98f737e735eaa0f0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-82fcf1151e2fe2ba.js → user-management-562624e5461083ec.js} +0 -0
- /fides/ui-build/static/admin/_next/static/{PZe9jkBWNOGDEEZ4Y_Rvq → fY61mOXDNbYtO-3MNEDrx}/_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-09-24T16:
|
|
11
|
+
"date": "2025-09-24T16:33:32-0400",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.
|
|
14
|
+
"full-revisionid": "32f4216c8a85464d318fc4088c1f99d8e5e8d86e",
|
|
15
|
+
"version": "2.71.0rc0"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Adding OAuth2 config for ConnectionConfig
|
|
2
|
+
|
|
3
|
+
Revision ID: 0eef0016cf06
|
|
4
|
+
Revises: 9e0dcbf67b9f
|
|
5
|
+
Create Date: 2025-09-12 01:06:26.838560
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
import sqlalchemy_utils
|
|
11
|
+
from alembic import op
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "0eef0016cf06"
|
|
15
|
+
down_revision = "9e0dcbf67b9f"
|
|
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
|
+
"oauth_config",
|
|
24
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
25
|
+
sa.Column(
|
|
26
|
+
"created_at",
|
|
27
|
+
sa.DateTime(timezone=True),
|
|
28
|
+
server_default=sa.text("now()"),
|
|
29
|
+
nullable=True,
|
|
30
|
+
),
|
|
31
|
+
sa.Column(
|
|
32
|
+
"updated_at",
|
|
33
|
+
sa.DateTime(timezone=True),
|
|
34
|
+
server_default=sa.text("now()"),
|
|
35
|
+
nullable=True,
|
|
36
|
+
),
|
|
37
|
+
sa.Column("connection_config_id", sa.String(), nullable=False),
|
|
38
|
+
sa.Column(
|
|
39
|
+
"grant_type",
|
|
40
|
+
sa.Enum(
|
|
41
|
+
"authorization_code",
|
|
42
|
+
"client_credentials",
|
|
43
|
+
"password",
|
|
44
|
+
"implicit",
|
|
45
|
+
name="oauthgranttype",
|
|
46
|
+
),
|
|
47
|
+
nullable=False,
|
|
48
|
+
),
|
|
49
|
+
sa.Column("token_url", sa.String(), nullable=False),
|
|
50
|
+
sa.Column("scope", sa.String(), nullable=True),
|
|
51
|
+
sa.Column("client_id", sa.String(), nullable=False),
|
|
52
|
+
sa.Column(
|
|
53
|
+
"client_secret", sqlalchemy_utils.types.StringEncryptedType, nullable=False
|
|
54
|
+
),
|
|
55
|
+
sa.ForeignKeyConstraint(
|
|
56
|
+
["connection_config_id"],
|
|
57
|
+
["connectionconfig.id"],
|
|
58
|
+
),
|
|
59
|
+
sa.PrimaryKeyConstraint("id"),
|
|
60
|
+
)
|
|
61
|
+
op.create_index(op.f("ix_oauth_config_id"), "oauth_config", ["id"], unique=False)
|
|
62
|
+
# ### end Alembic commands ###
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def downgrade():
|
|
66
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
67
|
+
op.drop_index(op.f("ix_oauth_config_id"), table_name="oauth_config")
|
|
68
|
+
op.drop_table("oauth_config")
|
|
69
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""add digest config
|
|
2
|
+
|
|
3
|
+
Revision ID: 9e0dcbf67b9f
|
|
4
|
+
Revises: cd8649be3a2b
|
|
5
|
+
Create Date: 2025-09-22 20:23:48.258509
|
|
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 = "9e0dcbf67b9f"
|
|
15
|
+
down_revision = "cd8649be3a2b"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
op.create_table(
|
|
22
|
+
"digest_config",
|
|
23
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
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("digest_type", sa.String(length=255), nullable=False),
|
|
37
|
+
sa.Column("name", sa.String(length=255), nullable=False),
|
|
38
|
+
sa.Column("description", sa.Text(), nullable=True),
|
|
39
|
+
sa.Column("enabled", sa.Boolean(), nullable=False),
|
|
40
|
+
sa.Column("messaging_service_type", sa.String(length=255), nullable=False),
|
|
41
|
+
sa.Column("cron_expression", sa.String(length=100), nullable=False),
|
|
42
|
+
sa.Column("timezone", sa.String(length=50), nullable=False),
|
|
43
|
+
sa.Column("last_sent_at", sa.DateTime(timezone=True), nullable=True),
|
|
44
|
+
sa.Column("next_scheduled_at", sa.DateTime(timezone=True), nullable=True),
|
|
45
|
+
sa.Column(
|
|
46
|
+
"config_metadata", postgresql.JSONB(astext_type=sa.Text()), nullable=True
|
|
47
|
+
),
|
|
48
|
+
sa.PrimaryKeyConstraint("id"),
|
|
49
|
+
)
|
|
50
|
+
op.create_index(
|
|
51
|
+
op.f("ix_digest_config_digest_type"),
|
|
52
|
+
"digest_config",
|
|
53
|
+
["digest_type"],
|
|
54
|
+
unique=False,
|
|
55
|
+
)
|
|
56
|
+
op.create_index(
|
|
57
|
+
op.f("ix_digest_config_enabled"), "digest_config", ["enabled"], unique=False
|
|
58
|
+
)
|
|
59
|
+
op.create_index(op.f("ix_digest_config_id"), "digest_config", ["id"], unique=False)
|
|
60
|
+
op.create_index(
|
|
61
|
+
op.f("ix_digest_config_messaging_service_type"),
|
|
62
|
+
"digest_config",
|
|
63
|
+
["messaging_service_type"],
|
|
64
|
+
unique=False,
|
|
65
|
+
)
|
|
66
|
+
op.create_index(
|
|
67
|
+
op.f("ix_digest_config_next_scheduled_at"),
|
|
68
|
+
"digest_config",
|
|
69
|
+
["next_scheduled_at"],
|
|
70
|
+
unique=False,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def downgrade():
|
|
75
|
+
op.drop_index(
|
|
76
|
+
op.f("ix_digest_config_next_scheduled_at"), table_name="digest_config"
|
|
77
|
+
)
|
|
78
|
+
op.drop_index(
|
|
79
|
+
op.f("ix_digest_config_messaging_service_type"), table_name="digest_config"
|
|
80
|
+
)
|
|
81
|
+
op.drop_index(op.f("ix_digest_config_id"), table_name="digest_config")
|
|
82
|
+
op.drop_index(op.f("ix_digest_config_enabled"), table_name="digest_config")
|
|
83
|
+
op.drop_index(op.f("ix_digest_config_digest_type"), table_name="digest_config")
|
|
84
|
+
op.drop_table("digest_config")
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""Add classification benchmark table
|
|
2
|
+
|
|
3
|
+
Revision ID: a8e0c016afd
|
|
4
|
+
Revises: 4d8c0fcc5771
|
|
5
|
+
Create Date: 2024-12-19 12:00:00.000000
|
|
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 = "a8e0c016afd"
|
|
15
|
+
down_revision = "4d8c0fcc5771"
|
|
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
|
+
"classification_benchmark",
|
|
24
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
25
|
+
sa.Column(
|
|
26
|
+
"created_at",
|
|
27
|
+
sa.DateTime(timezone=True),
|
|
28
|
+
server_default=sa.text("now()"),
|
|
29
|
+
nullable=True,
|
|
30
|
+
),
|
|
31
|
+
sa.Column(
|
|
32
|
+
"updated_at",
|
|
33
|
+
sa.DateTime(timezone=True),
|
|
34
|
+
server_default=sa.text("now()"),
|
|
35
|
+
nullable=True,
|
|
36
|
+
),
|
|
37
|
+
sa.Column(
|
|
38
|
+
"monitor_config_key",
|
|
39
|
+
sa.String(),
|
|
40
|
+
sa.ForeignKey("monitorconfig.key", ondelete="CASCADE"),
|
|
41
|
+
nullable=False,
|
|
42
|
+
),
|
|
43
|
+
sa.Column(
|
|
44
|
+
"dataset_fides_key",
|
|
45
|
+
sa.String(),
|
|
46
|
+
sa.ForeignKey("ctl_datasets.fides_key", ondelete="CASCADE"),
|
|
47
|
+
nullable=False,
|
|
48
|
+
),
|
|
49
|
+
sa.Column(
|
|
50
|
+
"resource_urns",
|
|
51
|
+
postgresql.ARRAY(sa.String()),
|
|
52
|
+
nullable=False,
|
|
53
|
+
server_default="{}",
|
|
54
|
+
),
|
|
55
|
+
sa.Column(
|
|
56
|
+
"overall_metrics",
|
|
57
|
+
postgresql.JSONB(astext_type=sa.Text()),
|
|
58
|
+
nullable=True,
|
|
59
|
+
server_default=None,
|
|
60
|
+
),
|
|
61
|
+
sa.Column(
|
|
62
|
+
"field_accuracy_details",
|
|
63
|
+
postgresql.ARRAY(postgresql.JSONB(astext_type=sa.Text())),
|
|
64
|
+
nullable=False,
|
|
65
|
+
server_default="{}",
|
|
66
|
+
),
|
|
67
|
+
sa.Column(
|
|
68
|
+
"status",
|
|
69
|
+
sa.String(length=50),
|
|
70
|
+
nullable=False,
|
|
71
|
+
server_default="pending",
|
|
72
|
+
),
|
|
73
|
+
sa.Column(
|
|
74
|
+
"messages",
|
|
75
|
+
postgresql.ARRAY(sa.String()),
|
|
76
|
+
nullable=False,
|
|
77
|
+
server_default="{}",
|
|
78
|
+
),
|
|
79
|
+
sa.PrimaryKeyConstraint("id"),
|
|
80
|
+
)
|
|
81
|
+
op.create_index(
|
|
82
|
+
op.f("ix_classification_benchmark_id"),
|
|
83
|
+
"classification_benchmark",
|
|
84
|
+
["id"],
|
|
85
|
+
unique=False,
|
|
86
|
+
)
|
|
87
|
+
op.create_index(
|
|
88
|
+
op.f("ix_classification_benchmark_monitor_config_key"),
|
|
89
|
+
"classification_benchmark",
|
|
90
|
+
["monitor_config_key"],
|
|
91
|
+
unique=False,
|
|
92
|
+
)
|
|
93
|
+
op.create_index(
|
|
94
|
+
op.f("ix_classification_benchmark_dataset_fides_key"),
|
|
95
|
+
"classification_benchmark",
|
|
96
|
+
["dataset_fides_key"],
|
|
97
|
+
unique=False,
|
|
98
|
+
)
|
|
99
|
+
op.create_index(
|
|
100
|
+
op.f("ix_classification_benchmark_status"),
|
|
101
|
+
"classification_benchmark",
|
|
102
|
+
["status"],
|
|
103
|
+
unique=False,
|
|
104
|
+
)
|
|
105
|
+
# ### end Alembic commands ###
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def downgrade():
|
|
109
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
110
|
+
op.drop_index(
|
|
111
|
+
op.f("ix_classification_benchmark_status"),
|
|
112
|
+
table_name="classification_benchmark",
|
|
113
|
+
)
|
|
114
|
+
op.drop_index(
|
|
115
|
+
op.f("ix_classification_benchmark_dataset_fides_key"),
|
|
116
|
+
table_name="classification_benchmark",
|
|
117
|
+
)
|
|
118
|
+
op.drop_index(
|
|
119
|
+
op.f("ix_classification_benchmark_monitor_config_key"),
|
|
120
|
+
table_name="classification_benchmark",
|
|
121
|
+
)
|
|
122
|
+
op.drop_index(
|
|
123
|
+
op.f("ix_classification_benchmark_id"), table_name="classification_benchmark"
|
|
124
|
+
)
|
|
125
|
+
op.drop_table("classification_benchmark")
|
|
126
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""add classifications and user_assigned_data_categories indices
|
|
2
|
+
|
|
3
|
+
Revision ID: cd8649be3a2b
|
|
4
|
+
Revises: a8e0c016afd
|
|
5
|
+
Create Date: 2025-09-19 13:49:02.762672
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from loguru import logger
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "cd8649be3a2b"
|
|
15
|
+
down_revision = "a8e0c016afd"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
"""
|
|
20
|
+
WARNING - Conditional migration based on table size
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def upgrade():
|
|
25
|
+
# Check stagedresource table size
|
|
26
|
+
connection = op.get_bind()
|
|
27
|
+
|
|
28
|
+
# Check stagedresource table size to decide if we should create indexes immediately
|
|
29
|
+
table_size = connection.execute(
|
|
30
|
+
sa.text("SELECT COUNT(*) FROM stagedresource")
|
|
31
|
+
).scalar()
|
|
32
|
+
|
|
33
|
+
if table_size < 1000000:
|
|
34
|
+
logger.info(
|
|
35
|
+
f"stagedresource table has {table_size} rows, creating GIN indices directly"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Create GIN index for user_assigned_data_categories array operations (&&, @>, <@)
|
|
39
|
+
op.execute(
|
|
40
|
+
"CREATE INDEX idx_stagedresource_user_categories_gin "
|
|
41
|
+
"ON stagedresource USING GIN (user_assigned_data_categories)"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
# Create GIN index for classifications array operations (&&, @>, <@)
|
|
45
|
+
op.execute(
|
|
46
|
+
"CREATE INDEX idx_stagedresource_classifications_gin "
|
|
47
|
+
"ON stagedresource USING GIN (classifications)"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
logger.info("GIN indices created successfully")
|
|
51
|
+
|
|
52
|
+
else:
|
|
53
|
+
logger.warning(
|
|
54
|
+
"The stagedresource table has more than 1 million rows, "
|
|
55
|
+
"skipping index creation. Indexes will be created during application startup "
|
|
56
|
+
"via post_upgrade_index_creation.py"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def downgrade():
|
|
61
|
+
# Drop indices in reverse order
|
|
62
|
+
logger.info("Dropping GIN indices for stagedresource arrays")
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
op.drop_index("idx_stagedresource_classifications_gin", "stagedresource")
|
|
66
|
+
logger.info("Dropped classifications GIN index")
|
|
67
|
+
except Exception as e:
|
|
68
|
+
logger.warning(f"Could not drop classifications index: {e}")
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
op.drop_index("idx_stagedresource_user_categories_gin", "stagedresource")
|
|
72
|
+
logger.info("Dropped user_assigned_data_categories GIN index")
|
|
73
|
+
except Exception as e:
|
|
74
|
+
logger.warning(f"Could not drop user_categories index: {e}")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""add_dismissed_to_monitor_task
|
|
2
|
+
|
|
3
|
+
Revision ID: e2cda8d6abc3
|
|
4
|
+
Revises: 0eef0016cf06
|
|
5
|
+
Create Date: 2025-09-17 23:37:49.678071
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "e2cda8d6abc3"
|
|
14
|
+
down_revision = "0eef0016cf06"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
# Add the dismissed column to monitortask table
|
|
21
|
+
op.add_column(
|
|
22
|
+
"monitortask",
|
|
23
|
+
sa.Column("dismissed", sa.Boolean(), nullable=False, server_default="f"),
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def downgrade():
|
|
28
|
+
# Remove the dismissed column from monitortask table
|
|
29
|
+
op.drop_column("monitortask", "dismissed")
|
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Annotated, Any, Dict, List, Optional
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import sqlalchemy
|
|
6
|
+
from fastapi import Depends, HTTPException
|
|
6
7
|
from fastapi.params import Query, Security
|
|
7
8
|
from fastapi_pagination import Page, Params
|
|
8
9
|
from fastapi_pagination.bases import AbstractPage
|
|
@@ -13,9 +14,15 @@ from pydantic import Field
|
|
|
13
14
|
from sqlalchemy import null, or_
|
|
14
15
|
from sqlalchemy.orm import Session
|
|
15
16
|
from sqlalchemy_utils import escape_like
|
|
16
|
-
from starlette.status import
|
|
17
|
+
from starlette.status import (
|
|
18
|
+
HTTP_200_OK,
|
|
19
|
+
HTTP_204_NO_CONTENT,
|
|
20
|
+
HTTP_404_NOT_FOUND,
|
|
21
|
+
HTTP_422_UNPROCESSABLE_ENTITY,
|
|
22
|
+
)
|
|
17
23
|
|
|
18
24
|
from fides.api.api import deps
|
|
25
|
+
from fides.api.models.connection_oauth_credentials import OAuthConfig
|
|
19
26
|
from fides.api.models.connectionconfig import ConnectionConfig, ConnectionType
|
|
20
27
|
from fides.api.oauth.utils import verify_oauth_client
|
|
21
28
|
from fides.api.schemas.connection_configuration import connection_secrets_schemas
|
|
@@ -25,6 +32,9 @@ from fides.api.schemas.connection_configuration.connection_config import (
|
|
|
25
32
|
ConnectionConfigurationResponseWithSystemKey,
|
|
26
33
|
CreateConnectionConfigurationWithSecrets,
|
|
27
34
|
)
|
|
35
|
+
from fides.api.schemas.connection_configuration.connection_oauth_config import (
|
|
36
|
+
OAuthConfigSchema,
|
|
37
|
+
)
|
|
28
38
|
from fides.api.schemas.connection_configuration.connection_secrets import (
|
|
29
39
|
TestStatusMessage,
|
|
30
40
|
)
|
|
@@ -45,6 +55,7 @@ from fides.common.api.scope_registry import (
|
|
|
45
55
|
)
|
|
46
56
|
from fides.common.api.v1.urn_registry import (
|
|
47
57
|
CONNECTION_BY_KEY,
|
|
58
|
+
CONNECTION_OAUTH,
|
|
48
59
|
CONNECTION_SECRETS,
|
|
49
60
|
CONNECTION_TEST,
|
|
50
61
|
CONNECTIONS,
|
|
@@ -312,3 +323,143 @@ def test_connection_config_secrets(
|
|
|
312
323
|
connection_config = get_connection_config_or_error(db, connection_key)
|
|
313
324
|
msg = f"Test completed for ConnectionConfig with key: {connection_key}."
|
|
314
325
|
return connection_status(connection_config, msg, db)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
@router.put(
|
|
329
|
+
CONNECTION_OAUTH,
|
|
330
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_CREATE_OR_UPDATE])],
|
|
331
|
+
status_code=HTTP_200_OK,
|
|
332
|
+
)
|
|
333
|
+
def put_connection_oauth_config(
|
|
334
|
+
connection_key: FidesKey,
|
|
335
|
+
*,
|
|
336
|
+
oauth_config: OAuthConfigSchema,
|
|
337
|
+
db: Session = Depends(deps.get_db),
|
|
338
|
+
verify: Optional[bool] = True,
|
|
339
|
+
) -> TestStatusMessage:
|
|
340
|
+
"""
|
|
341
|
+
Create or update the OAuth2 configuration for a given connection.
|
|
342
|
+
"""
|
|
343
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
|
344
|
+
|
|
345
|
+
if connection_config.connection_type != ConnectionType.https:
|
|
346
|
+
raise HTTPException(
|
|
347
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
348
|
+
detail="OAuth2 configuration can only be set for HTTPS connections.",
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
logger.info("Updating OAuth2 config for '{}'", connection_key)
|
|
352
|
+
connection_config.oauth_config = OAuthConfig(
|
|
353
|
+
**oauth_config.model_dump(mode="json") # type: ignore[arg-type]
|
|
354
|
+
)
|
|
355
|
+
connection_config.save(db=db)
|
|
356
|
+
|
|
357
|
+
msg = (
|
|
358
|
+
f"OAuth2 configuration updated for ConnectionConfig with key: {connection_key}."
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
if verify:
|
|
362
|
+
return connection_status(connection_config, msg, db)
|
|
363
|
+
|
|
364
|
+
return TestStatusMessage(msg=msg, test_status=None)
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
@router.delete(
|
|
368
|
+
CONNECTION_OAUTH,
|
|
369
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_CREATE_OR_UPDATE])],
|
|
370
|
+
status_code=HTTP_204_NO_CONTENT,
|
|
371
|
+
response_model=None,
|
|
372
|
+
)
|
|
373
|
+
def delete_connection_oauth_config(
|
|
374
|
+
connection_key: FidesKey,
|
|
375
|
+
*,
|
|
376
|
+
db: Session = Depends(deps.get_db),
|
|
377
|
+
) -> None:
|
|
378
|
+
"""
|
|
379
|
+
Delete the OAuth2 configuration for a given connection.
|
|
380
|
+
"""
|
|
381
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
|
382
|
+
|
|
383
|
+
if connection_config.connection_type != ConnectionType.https:
|
|
384
|
+
raise HTTPException(
|
|
385
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
386
|
+
detail="OAuth2 configuration can only be deleted for HTTPS connections",
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
if not connection_config.oauth_config:
|
|
390
|
+
raise HTTPException(
|
|
391
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
392
|
+
detail="No OAuth2 configuration found to delete.",
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
logger.info("Deleting OAuth2 config for '{}'", connection_key)
|
|
396
|
+
connection_config.oauth_config = None
|
|
397
|
+
connection_config.save(db=db)
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
@router.patch(
|
|
401
|
+
CONNECTION_OAUTH,
|
|
402
|
+
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_CREATE_OR_UPDATE])],
|
|
403
|
+
status_code=HTTP_200_OK,
|
|
404
|
+
)
|
|
405
|
+
def patch_connection_oauth_config(
|
|
406
|
+
connection_key: FidesKey,
|
|
407
|
+
*,
|
|
408
|
+
oauth_config: OAuthConfigSchema,
|
|
409
|
+
db: Session = Depends(deps.get_db),
|
|
410
|
+
verify: Optional[bool] = True,
|
|
411
|
+
) -> TestStatusMessage:
|
|
412
|
+
"""
|
|
413
|
+
Partially update the OAuth2 configuration for a given connection.
|
|
414
|
+
"""
|
|
415
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
|
416
|
+
|
|
417
|
+
if connection_config.connection_type != ConnectionType.https:
|
|
418
|
+
raise HTTPException(
|
|
419
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
420
|
+
detail="OAuth2 configuration can only be set for HTTPS connections.",
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
existing_oauth_config: Optional[Dict[str, Any]] = (
|
|
424
|
+
{
|
|
425
|
+
"grant_type": connection_config.oauth_config.grant_type.value,
|
|
426
|
+
"token_url": connection_config.oauth_config.token_url,
|
|
427
|
+
"scope": connection_config.oauth_config.scope,
|
|
428
|
+
"client_id": connection_config.oauth_config.client_id,
|
|
429
|
+
"client_secret": connection_config.oauth_config.client_secret,
|
|
430
|
+
}
|
|
431
|
+
if connection_config.oauth_config
|
|
432
|
+
else None
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
# Combine the existing config with the new config overlaid
|
|
436
|
+
patched_oauth_config = {}
|
|
437
|
+
if existing_oauth_config:
|
|
438
|
+
patched_oauth_config = {**existing_oauth_config}
|
|
439
|
+
|
|
440
|
+
patched_oauth_config = {
|
|
441
|
+
**patched_oauth_config,
|
|
442
|
+
**{k: v for (k, v) in oauth_config.model_dump(mode="json").items() if v is not None}, # type: ignore[dict-item]
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
logger.info("Patching OAuth2 config for '{}'", connection_key)
|
|
446
|
+
validated_config = OAuthConfigSchema.model_validate(patched_oauth_config)
|
|
447
|
+
try:
|
|
448
|
+
connection_config.oauth_config = OAuthConfig(
|
|
449
|
+
**validated_config.model_dump(mode="json")
|
|
450
|
+
)
|
|
451
|
+
connection_config.save(db=db)
|
|
452
|
+
except sqlalchemy.exc.IntegrityError as exc:
|
|
453
|
+
raise HTTPException(
|
|
454
|
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
455
|
+
detail="Invalid OAuth2 configuration.",
|
|
456
|
+
) from exc
|
|
457
|
+
|
|
458
|
+
msg = (
|
|
459
|
+
f"OAuth2 configuration updated for ConnectionConfig with key: {connection_key}."
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
if verify:
|
|
463
|
+
return connection_status(connection_config, msg, db)
|
|
464
|
+
|
|
465
|
+
return TestStatusMessage(msg=msg, test_status=None)
|
|
@@ -4,7 +4,7 @@ import csv
|
|
|
4
4
|
import io
|
|
5
5
|
import json
|
|
6
6
|
from collections import defaultdict
|
|
7
|
-
from datetime import datetime, timezone
|
|
7
|
+
from datetime import datetime, timedelta, timezone
|
|
8
8
|
from typing import (
|
|
9
9
|
Annotated,
|
|
10
10
|
Any,
|
|
@@ -285,15 +285,19 @@ def privacy_request_csv_download(
|
|
|
285
285
|
"Status",
|
|
286
286
|
"Request Type",
|
|
287
287
|
"Time Received",
|
|
288
|
+
"Deadline",
|
|
288
289
|
"Reviewed By",
|
|
289
290
|
"Request ID",
|
|
290
291
|
"Time Approved/Denied",
|
|
291
292
|
"Denial Reason",
|
|
293
|
+
"Last Updated",
|
|
294
|
+
"Completed On",
|
|
292
295
|
]
|
|
293
296
|
+ identity_columns
|
|
294
297
|
+ with_prefix("Custom Field", list(custom_field_columns.values()))
|
|
295
298
|
)
|
|
296
299
|
|
|
300
|
+
pr: PrivacyRequest
|
|
297
301
|
for pr in privacy_request_query:
|
|
298
302
|
denial_reason = (
|
|
299
303
|
denial_audit_logs[pr.id]
|
|
@@ -301,14 +305,26 @@ def privacy_request_csv_download(
|
|
|
301
305
|
else None
|
|
302
306
|
)
|
|
303
307
|
|
|
308
|
+
action_types: List[str] = []
|
|
309
|
+
if pr and pr.policy:
|
|
310
|
+
for rule in pr.policy.rules or []: # type: ignore
|
|
311
|
+
action_types.append(rule.action_type)
|
|
312
|
+
|
|
313
|
+
deadline: Optional[datetime] = None
|
|
314
|
+
if pr.days_left and pr.created_at:
|
|
315
|
+
deadline = pr.created_at + timedelta(days=pr.days_left)
|
|
316
|
+
|
|
304
317
|
static_cells = [
|
|
305
318
|
pr.status.value if pr.status else None,
|
|
306
|
-
|
|
319
|
+
("+".join(action_types)),
|
|
307
320
|
pr.created_at,
|
|
321
|
+
deadline,
|
|
308
322
|
pr.reviewed_by,
|
|
309
323
|
pr.id,
|
|
310
324
|
pr.reviewed_at,
|
|
311
325
|
denial_reason,
|
|
326
|
+
pr.updated_at,
|
|
327
|
+
pr.finalized_at,
|
|
312
328
|
]
|
|
313
329
|
|
|
314
330
|
identity_cells = extract_identity_cells(identity_columns, pr)
|
fides/api/db/base.py
CHANGED
|
@@ -9,6 +9,7 @@ from fides.api.models.audit_log import AuditLog
|
|
|
9
9
|
from fides.api.models.authentication_request import AuthenticationRequest
|
|
10
10
|
from fides.api.models.client import ClientDetail
|
|
11
11
|
from fides.api.models.comment import Comment, CommentReference
|
|
12
|
+
from fides.api.models.connection_oauth_credentials import OAuthConfig
|
|
12
13
|
from fides.api.models.connectionconfig import ConnectionConfig
|
|
13
14
|
from fides.api.models.consent_automation import ConsentAutomation
|
|
14
15
|
from fides.api.models.custom_asset import CustomAsset
|
|
@@ -22,6 +23,7 @@ from fides.api.models.detection_discovery.monitor_task import (
|
|
|
22
23
|
MonitorTaskExecutionLog,
|
|
23
24
|
)
|
|
24
25
|
from fides.api.models.detection_discovery.web_monitor import WebMonitorGroupJob
|
|
26
|
+
from fides.api.models.digest import DigestConfig
|
|
25
27
|
from fides.api.models.event_audit import EventAudit
|
|
26
28
|
from fides.api.models.experience_notices import ExperienceNotices
|
|
27
29
|
from fides.api.models.fides_cloud import FidesCloud
|