ethyca-fides 2.64.5rc4__py2.py3-none-any.whl → 2.64.6b1__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.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/METADATA +3 -3
- {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/RECORD +252 -257
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/41a634d8c669_manual_task_restrict_deletes.py +257 -0
- fides/api/alembic/migrations/versions/6a76a1fa4f3f_add_manual_task_instance_table.py +256 -0
- fides/api/alembic/migrations/versions/aadfe83c5644_add_manual_task_to_connectiontype_enum.py +46 -0
- fides/api/api/v1/api.py +2 -0
- fides/api/api/v1/endpoints/partitioning_endpoints.py +108 -0
- fides/api/db/base.py +6 -3
- fides/api/db/database.py +27 -2
- fides/api/graph/config.py +16 -9
- fides/api/graph/traversal.py +18 -0
- fides/api/models/attachment.py +15 -3
- fides/api/models/comment.py +23 -5
- fides/api/models/connectionconfig.py +11 -0
- 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 +27 -2
- fides/api/models/manual_task.py +965 -0
- fides/api/models/tcf_publisher_restrictions.py +16 -4
- fides/api/schemas/partitioning/__init__.py +17 -0
- fides/api/schemas/partitioning/bigquery_time_based_partitioning.py +31 -0
- fides/api/schemas/partitioning/time_based_partitioning.py +1376 -0
- fides/api/service/connectors/__init__.py +4 -0
- fides/api/service/connectors/manual_task_connector.py +96 -0
- fides/api/service/connectors/query_configs/bigquery_query_config.py +44 -22
- fides/api/service/connectors/query_configs/query_config.py +5 -2
- fides/api/service/privacy_request/dsr_package/templates/collection_index.html +9 -1
- fides/api/service/privacy_request/dsr_package/templates/main.css +6 -2
- fides/api/service/privacy_request/request_runner_service.py +7 -0
- fides/api/task/create_request_tasks.py +16 -0
- fides/api/task/execute_request_tasks.py +10 -1
- fides/api/task/filter_results.py +6 -0
- fides/api/task/graph_task.py +1 -0
- fides/api/task/manual/manual_task_graph_task.py +300 -0
- fides/api/task/manual/manual_task_utils.py +322 -0
- fides/api/task/task_resources.py +3 -0
- fides/api/util/connection_util.py +25 -2
- fides/common/api/v1/urn_registry.py +4 -0
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{1040-c1c1372a7f909aef.js → 1040-d246ed641088a416.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1169-ae67fde0c6d69abc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1807-3beab149351d5ded.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1817-96182c1558f80b63.js → 1817-60f08a3619b9139c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2921-f5608275555bd7d9.js → 2921-85515257dd94ef4d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3450-272f26c102f3510d.js → 3450-4e472b9e2754fa47.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3855-beb58821d1ddba89.js → 3855-2d045674fbf72a3c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3872-82482e55e69b5a93.js → 3872-056ddf3ed9d10b51.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{3923-a54c286a2ba0a47a.js → 3923-257df982a95371b5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{401-d2ce0a5a9120e056.js → 401-3f2160e3910d075b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{409-86f4f687105917fb.js → 409-3e2248a63dd60e58.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-10bfa009892586fa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4230-63abbdfb9e9016b9.js → 4230-38c6e446801a8729.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{431-77d59d43e90058ca.js → 431-13b0ef67d5a3df2f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5309-10f68cf805817cfb.js → 5309-fd8cd5aedd45f7c1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{5574-b6db9d62362e72d9.js → 5574-028ef28c3cf16995.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/570-c99f07161bd339cd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6084-fa1c82d03f6c256a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6662-d8ae12f69d325004.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6853-8a1b8e1c8b249f2f.js → 6853-2644f28976b46c25.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6882-6c94583bffe85ba7.js → 6882-ea071425d25dd2b0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{6954-dc3540389daf94da.js → 6954-bb360fb60aac9440.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7476-7073ec015f84a3e0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7630-302a13c63f9bfb45.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/787-b393c03ade9d93dc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{79-26ccd45dfd6653a7.js → 79-b67ba449b0f2cc9c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{796-38c0f7e6755ad359.js → 796-b7608f09607288b8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/827-c6fe34fb336467ae.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9046-bbce3c73af16daf9.js → 9046-ece5efe762b810cb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{905-742074a074be1055.js → 905-ffdbd0b14167e8bd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9226-5e0ce31cfdedd5ee.js → 9226-c9111590692341b1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9392.25024e070026343d.js → 9392.9a948112de74781b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9676.e60a53f1f5890847.js → 9676.cc515c853b8cf578.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-277a0229aae7662a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9826-82c473dcaf892d00.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9951-d3d5d0fe4c4edb86.js → 9951-dbd76d7f3a7f1b9a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-d41660858638adee.js → 404-ef01376efb8427e1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-6b3539f8d82ce9ae.js → _app-7430e1499432b029.js} +92 -89
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-7c5e1e845372c99b.js → manual-4057c399f58d331e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-87e78f52af21c4a9.js → multiple-2726ca51f0327347.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-a2457d5da25aa854.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-6374a3a7747df964.js → add-vendors-9fe46ed10a7e7a1a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-0512151e2ed0f4c1.js → configure-095828301f22cdaa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-09435f4ab2deafd2.js → [id]-de60a5b74f6b20ff.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a0039f216fb3eb93.js → new-06bb3b0bf097fcdb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-cd036518b5d4efbe.js → privacy-experience-1ee05fd0bc012ec6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-0e534580abf670be.js → [id]-5a2e61c7d88bdda1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-bb1790eb87b63109.js → new-1bc69669215fa55c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-67e9846f877a3f38.js → privacy-notices-fa8394d2e1072aba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-69a92b6ddbc2bae2.js → properties-213c5405e9e4219c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-d07d05f4b898a5ed.js → reporting-44aa77149d71a6fe.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-23e886d692ab6d1a.js → consent-23ab7bd613a0ad53.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/{[resourceUrn]-c623d6f1a61c8ea9.js → [resourceUrn]-11d52f1570759c4d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-6c766c766dc97c5c.js → [projectUrn]-dae11464a091537f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-28937a8da3d73145.js → projects-7442023478422295.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/{[resourceUrn]-57bd5cdf784f059f.js → [resourceUrn]-b83afa5565d0c84e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{resources-51d99174c8006eb5.js → resources-d8db234a44a2ddf4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-627fbf19dce88e81.js → data-catalog-5597d2e691313bb0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/{[systemId]-ed1629b05519a370.js → [systemId]-da06d05d255d0cd0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/{[monitorId]-ad307bfc5f51fd9d.js → [monitorId]-895591fe32af0f4c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-07cbd61ede6e18ac.js → action-center-a932a39e29ac3489.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-6a2aaed8d0e66d82.js → activity-2cfdf4d55a7594ba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-06edce289876dea1.js → [resourceUrn]-393e20924c83373e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-faf326a6200637d0.js → detection-8733807dad4bc96e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-64acf269256ee74f.js → [resourceUrn]-14bd7500362ff224.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-8c3e4be6d36da66d.js → discovery-9e7dfd5a6acc2e8f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-b576a94b583a7940.js → datamap-07881d1a5fc03d41.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-4912858ffde4621a.js → [...subfieldNames]-57be9d40c67b0acb.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-df21dd7ca0f35718.js → [collectionName]-bd78d6c6264e2467.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-5ce28a329e8f667f.js → [datasetId]-3c9103487b55e76f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-e30a546a8cfb6658.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-c6fab547396df6ac.js → dataset-500610c0b60f9e7e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-d04c9925d324eee1.js → [id]-34958fe8183d9479.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-656abd09ea5ee39a.js → new-761294dbaf59bbe1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-59abd36059863e05.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-b66687e8194495a2.js → index-ae100a873eb66d59.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-8eee4d0314c83e50.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-bf3b87b0dd702551.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-b74db8488e2e4b58.js → [id]-2aada2c7b9156053.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-a607018ff097b6c2.js → add-template-fbb7b0c43dedf072.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-4a1a04c5179d2053.js → messaging-7230d7ee21368cef.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-1567c9770a5f05aa.js → ant-components-7c234412502f8102.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-4949fe7f1815462b.js → AntForm-72791aab60f3a4bf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-6085f73850302d55.js → FormikAntFormItem-da7d11d6146fa746.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-a3158e8217c13850.js → FormikControlled-3045d24344e99017.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-8576f1ef5c67d87d.js → FormikField-5b5b165d3f41a1de.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-341e67462b5e3352.js → forms-3afd8b6ba6234366.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-52d50286216bcb8c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-00fb442c4adb7371.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-535b6e5003d892eb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-7ded688a1e832c63.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d24230b890b13762.js → configure-08e0863d432b3348.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-c8b02ae92dd7e45b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-2bedc5013e13ab52.js → [id]-b8dcb1f5213521ef.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-9d68bd70299dd945.js → add-property-7d8418bb7cb9e1fd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-c3116b6bfe2e695e.js → properties-537003822f360ae7.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-6dfa7091b99d8321.js → datamap-ac25749935da453b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-9751059905bba190.js → alpha-647d59bb0aa060bf.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-ad29d77012ec9dba.js → about-73adc03fe0182e3f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-32e3190c1ad00b40.js → [purpose_id]-ffa9e9e79ad75828.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4fb6c8c4bd9cdb3f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-d2c0aac32f5d2930.js → custom-fields-94c1b7bfc6cec4d2.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-a10674380f94d014.js → domain-records-e9838b8e49e64e57.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-0de16778ad2f8865.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-aac71677024210ad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-cc7d629433fa6d44.js → locations-f43e238571b21643.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-f5e0a34f6ae473ad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-64a813cb2741683b.js → regulations-05d3c86ca3ca4d5d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-31fcf7b52d8028b0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-fb3d094e4f4585f6.js → [id]-6db01a1afe2f82d5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{systems-c2df5b7b0596a9cb.js → systems-8ec7472a7032301f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-84caae0fc02f8ae1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-b124cc24b930c9e1.js → new-a2524414e968f862.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-fd2ff6b13052c54e.js → [id]-e452541827698b1f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-fa052b0439920ef6.js → user-management-530be849391d2425.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{webpack-e61d457474e00565.js → webpack-e25ccaae1ef867a2.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/23391a3311f80cfe.css +1 -0
- fides/ui-build/static/admin/_next/static/css/399d4757862a3982.css +1 -0
- fides/ui-build/static/admin/_next/static/z7GzAZhoGiO521zm7WPYX/_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-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
- fides/ui-build/static/admin/lib/fides.js +2 -2
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/api/models/manual_tasks/__init__.py +0 -14
- fides/api/models/manual_tasks/manual_task.py +0 -120
- fides/api/models/manual_tasks/manual_task_config.py +0 -136
- fides/api/models/manual_tasks/manual_task_log.py +0 -104
- fides/api/schemas/manual_tasks/manual_task_config.py +0 -311
- fides/api/schemas/manual_tasks/manual_task_schemas.py +0 -79
- fides/api/schemas/manual_tasks/manual_task_status.py +0 -151
- fides/service/manual_tasks/__init__.py +0 -0
- fides/service/manual_tasks/manual_task_config_service.py +0 -370
- fides/service/manual_tasks/manual_task_service.py +0 -294
- fides/service/manual_tasks/utils.py +0 -185
- fides/ui-build/static/admin/_next/static/TUIhCXaasOCEZxPYTqsV5/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1100-3fdbdf211c3c2a5b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2430-b480401d44c55416.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3505-192986c86dc47869.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3513-a563133845dc990f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3670-2abd9b2f17770872.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3983-17ae9c232bddc413.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-3486b45081151b69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-f0aecb2abd384945.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4481-d181a9db72984adf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6060-cb1ab5be7067bf7b.js +0 -4
- fides/ui-build/static/admin/_next/static/chunks/6277-ccdb50f676a1b336.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6659-b2088f525bf13c17.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6662-42940a2b00933e79.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/69-943b19d39da339d9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7553-e7ae268701f3dcfe.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8433-1e065c55c8da73b0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-96ed554a043c3c4d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-68955d8441e60668.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-5287c76ecf600281.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-23fbec0590c8d192.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-906bc5f05702efb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-024a1facb9be04d0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-6f0e64f0c52bd68f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-6971c7773dbf9b51.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-303bd2182da03088.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-831572cc7f42615f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-569ff31eff637034.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13a17a4ace7293d1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-78449b0e02bced88.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-7d299c4cb3199036.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-a9fa55c40fa570a6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-547b0cfe1e49e6d2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-261deb6fb3e51cb3.js +0 -1
- fides/ui-build/static/admin/_next/static/css/5ded47c57dae5baf.css +0 -1
- fides/ui-build/static/admin/_next/static/css/c693338e3bc8dcc6.css +0 -1
- fides/ui-build/static/admin/_next/static/css/e458b5f1afdbb7fc.css +0 -1
- {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.64.5rc4.dist-info → ethyca_fides-2.64.6b1.dist-info}/top_level.txt +0 -0
- /fides/api/{schemas/manual_tasks → task/manual}/__init__.py +0 -0
- /fides/ui-build/static/admin/_next/static/{TUIhCXaasOCEZxPYTqsV5 → z7GzAZhoGiO521zm7WPYX}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from fastapi import HTTPException, Security, status
|
|
4
|
+
from loguru import logger
|
|
5
|
+
from sqlalchemy_bigquery import BigQueryDialect
|
|
6
|
+
|
|
7
|
+
from fides.api.oauth.utils import verify_oauth_client
|
|
8
|
+
from fides.api.schemas.partitioning.time_based_partitioning import (
|
|
9
|
+
TimeBasedPartitioning,
|
|
10
|
+
combine_partitions,
|
|
11
|
+
)
|
|
12
|
+
from fides.api.util.api_router import APIRouter
|
|
13
|
+
from fides.common.api.scope_registry import CTL_DATASET_READ
|
|
14
|
+
from fides.common.api.v1.urn_registry import V1_URL_PREFIX
|
|
15
|
+
|
|
16
|
+
router = APIRouter(tags=["Partitions"], prefix=V1_URL_PREFIX)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@router.post(
|
|
20
|
+
"/dataset/partitions/verify",
|
|
21
|
+
dependencies=[Security(verify_oauth_client, scopes=[CTL_DATASET_READ])],
|
|
22
|
+
response_model=List[str],
|
|
23
|
+
status_code=status.HTTP_200_OK,
|
|
24
|
+
name="Verify dataset partitioning schemas",
|
|
25
|
+
summary="Verify dataset partitioning schemas",
|
|
26
|
+
description="Validate the provided partitioning specs and return the rendered SQL WHERE clauses in the BigQuery dialect.",
|
|
27
|
+
openapi_extra={
|
|
28
|
+
"requestBody": {
|
|
29
|
+
"content": {
|
|
30
|
+
"application/json": {
|
|
31
|
+
"schema": {
|
|
32
|
+
"type": "array",
|
|
33
|
+
"items": {"$ref": "#/components/schemas/TimeBasedPartitioning"},
|
|
34
|
+
},
|
|
35
|
+
"examples": {
|
|
36
|
+
"recent_data_weekly": {
|
|
37
|
+
"summary": "Recent data partitioned weekly",
|
|
38
|
+
"description": "Partition the last 30 days of data into weekly chunks",
|
|
39
|
+
"value": [
|
|
40
|
+
{
|
|
41
|
+
"field": "created_at",
|
|
42
|
+
"start": "NOW() - 30 DAYS",
|
|
43
|
+
"end": "NOW()",
|
|
44
|
+
"interval": "7 DAYS",
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
"historical_data_monthly": {
|
|
49
|
+
"summary": "Historical data partitioned monthly",
|
|
50
|
+
"description": "Partition a specific year of data into monthly chunks",
|
|
51
|
+
"value": [
|
|
52
|
+
{
|
|
53
|
+
"field": "order_date",
|
|
54
|
+
"start": "2024-01-01",
|
|
55
|
+
"end": "2024-12-31",
|
|
56
|
+
"interval": "1 MONTH",
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
"multiple_partitions": {
|
|
61
|
+
"summary": "Multiple time ranges",
|
|
62
|
+
"description": "Combine historical monthly data with recent daily data",
|
|
63
|
+
"value": [
|
|
64
|
+
{
|
|
65
|
+
"field": "event_timestamp",
|
|
66
|
+
"start": "2023-01-01",
|
|
67
|
+
"end": "2023-12-31",
|
|
68
|
+
"interval": "1 MONTH",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"field": "event_timestamp",
|
|
72
|
+
"start": "NOW() - 14 DAYS",
|
|
73
|
+
"end": "NOW()",
|
|
74
|
+
"interval": "1 DAY",
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
"open_ended_partition": {
|
|
79
|
+
"summary": "Open-ended partition",
|
|
80
|
+
"description": "Partition all data from a specific date onwards",
|
|
81
|
+
"value": [
|
|
82
|
+
{"field": "user_created_at", "start": "2024-01-01"}
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
)
|
|
91
|
+
async def verify_dataset_partitioning(
|
|
92
|
+
partitions: List[TimeBasedPartitioning],
|
|
93
|
+
) -> List[str]:
|
|
94
|
+
"""Validate the provided partitioning specs and return the rendered SQL WHERE clauses in the BigQuery dialect."""
|
|
95
|
+
try:
|
|
96
|
+
expressions = combine_partitions(partitions)
|
|
97
|
+
dialect = BigQueryDialect()
|
|
98
|
+
compiled_clauses: List[str] = [
|
|
99
|
+
str(expr.compile(dialect=dialect, compile_kwargs={"literal_binds": True}))
|
|
100
|
+
for expr in expressions
|
|
101
|
+
]
|
|
102
|
+
return compiled_clauses
|
|
103
|
+
except Exception as exc:
|
|
104
|
+
logger.error("Partitioning verification failed", exc_info=True)
|
|
105
|
+
raise HTTPException(
|
|
106
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
|
107
|
+
detail=str(exc),
|
|
108
|
+
)
|
fides/api/db/base.py
CHANGED
|
@@ -31,12 +31,15 @@ from fides.api.models.fides_user_respondent_email_verification import (
|
|
|
31
31
|
)
|
|
32
32
|
from fides.api.models.identity_salt import IdentitySalt
|
|
33
33
|
from fides.api.models.location_regulation_selections import LocationRegulationSelections
|
|
34
|
-
from fides.api.models.
|
|
35
|
-
|
|
34
|
+
from fides.api.models.manual_task import (
|
|
35
|
+
ManualTask,
|
|
36
36
|
ManualTaskConfig,
|
|
37
37
|
ManualTaskConfigField,
|
|
38
|
+
ManualTaskInstance,
|
|
39
|
+
ManualTaskLog,
|
|
40
|
+
ManualTaskReference,
|
|
41
|
+
ManualTaskSubmission,
|
|
38
42
|
)
|
|
39
|
-
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
|
40
43
|
from fides.api.models.manual_webhook import AccessManualWebhook
|
|
41
44
|
from fides.api.models.messaging import MessagingConfig
|
|
42
45
|
from fides.api.models.messaging_template import MessagingTemplate
|
fides/api/db/database.py
CHANGED
|
@@ -15,8 +15,8 @@ from sqlalchemy_utils.types.encrypted.encrypted_type import InvalidCiphertextErr
|
|
|
15
15
|
|
|
16
16
|
from fides.api.db.base import Base # type: ignore[attr-defined]
|
|
17
17
|
from fides.api.db.seed import load_default_resources
|
|
18
|
+
from fides.api.db.session import get_db_engine
|
|
18
19
|
from fides.api.util.errors import get_full_exception_name
|
|
19
|
-
from fides.core.utils import get_db_engine
|
|
20
20
|
|
|
21
21
|
DatabaseHealth = Literal["healthy", "unhealthy", "needs migration"]
|
|
22
22
|
|
|
@@ -41,6 +41,14 @@ def upgrade_db(alembic_config: Config, revision: str = "head") -> None:
|
|
|
41
41
|
command.upgrade(alembic_config, revision)
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def init_db(database_url: str) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Runs the migrations and creates all of the database objects.
|
|
47
|
+
"""
|
|
48
|
+
alembic_config = get_alembic_config(database_url)
|
|
49
|
+
upgrade_db(alembic_config)
|
|
50
|
+
|
|
51
|
+
|
|
44
52
|
def downgrade_db(alembic_config: Config, revision: str = "head") -> None:
|
|
45
53
|
"""Downgrade the database to the specified migration revision."""
|
|
46
54
|
log.info(f"Running database downgrade to revision {revision}")
|
|
@@ -78,7 +86,7 @@ def reset_db(database_url: str) -> None:
|
|
|
78
86
|
Drops all tables/metadata from the database.
|
|
79
87
|
"""
|
|
80
88
|
log.info("Resetting database...")
|
|
81
|
-
engine = get_db_engine(database_url)
|
|
89
|
+
engine = get_db_engine(database_uri=database_url)
|
|
82
90
|
with engine.connect() as connection:
|
|
83
91
|
log.info("Dropping tables...")
|
|
84
92
|
Base.metadata.drop_all(connection)
|
|
@@ -136,3 +144,20 @@ def configure_db(database_url: str, revision: Optional[str] = "head") -> None:
|
|
|
136
144
|
log.error("Unable to configure database: {}: {}", error_type, error)
|
|
137
145
|
log.opt(exception=True).error(error)
|
|
138
146
|
raise
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def check_missing_migrations(database_url: str) -> None:
|
|
150
|
+
"""
|
|
151
|
+
Tries to autogenerate migrations, returns True if a migration
|
|
152
|
+
was generated.
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
engine = get_db_engine(database_uri=database_url)
|
|
156
|
+
connection = engine.connect()
|
|
157
|
+
|
|
158
|
+
migration_context = migration.MigrationContext.configure(connection)
|
|
159
|
+
result = command.autogen.compare_metadata(migration_context, Base.metadata) # type: ignore[attr-defined]
|
|
160
|
+
|
|
161
|
+
if result:
|
|
162
|
+
raise SystemExit("Migrations needs to be generated!")
|
|
163
|
+
print("No migrations need to be generated.")
|
fides/api/graph/config.py
CHANGED
|
@@ -95,6 +95,10 @@ from fides.api.graph.data_type import (
|
|
|
95
95
|
DataTypeConverter,
|
|
96
96
|
get_data_type_converter,
|
|
97
97
|
)
|
|
98
|
+
from fides.api.schemas.partitioning import TimeBasedPartitioning
|
|
99
|
+
from fides.api.schemas.partitioning.time_based_partitioning import (
|
|
100
|
+
validate_partitioning_list,
|
|
101
|
+
)
|
|
98
102
|
from fides.api.util.collection_util import merge_dicts
|
|
99
103
|
from fides.api.util.querytoken import QueryToken
|
|
100
104
|
|
|
@@ -459,7 +463,7 @@ class Collection(BaseModel):
|
|
|
459
463
|
grouped_inputs: Set[str] = set()
|
|
460
464
|
data_categories: Set[FidesKey] = set()
|
|
461
465
|
masking_strategy_override: Optional[MaskingStrategyOverride] = None
|
|
462
|
-
partitioning: Optional[Dict] = None
|
|
466
|
+
partitioning: Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]] = None
|
|
463
467
|
|
|
464
468
|
@property
|
|
465
469
|
def field_dict(self) -> Dict[FieldPath, Field]:
|
|
@@ -655,14 +659,12 @@ class Collection(BaseModel):
|
|
|
655
659
|
@field_validator("partitioning")
|
|
656
660
|
@classmethod
|
|
657
661
|
def validate_partitioning(
|
|
658
|
-
cls, partitioning: Optional[Dict[str, Any]]
|
|
659
|
-
) -> Optional[Dict[str, Any]]:
|
|
662
|
+
cls, partitioning: Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]]
|
|
663
|
+
) -> Optional[Union[List[TimeBasedPartitioning], Dict[str, Any]]]:
|
|
660
664
|
"""
|
|
661
|
-
Validates the `partitioning` dict
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
that it has the required and expected `where_clauses` key, whose value must be
|
|
665
|
-
a list of strings.
|
|
665
|
+
Validates the `partitioning` field, which may be either a single dict
|
|
666
|
+
or a list of dicts. Each dict must describe either legacy
|
|
667
|
+
`where_clauses` or the required keys for time-based partitioning.
|
|
666
668
|
|
|
667
669
|
The string values are validated to ensure they match the expected syntax, which
|
|
668
670
|
is strictly prescribed. The string values MUST be a valid SQL clause that defines
|
|
@@ -683,7 +685,12 @@ class Collection(BaseModel):
|
|
|
683
685
|
in its conditional
|
|
684
686
|
|
|
685
687
|
"""
|
|
686
|
-
|
|
688
|
+
|
|
689
|
+
if partitioning is None:
|
|
690
|
+
return partitioning
|
|
691
|
+
|
|
692
|
+
if isinstance(partitioning, list):
|
|
693
|
+
validate_partitioning_list(partitioning)
|
|
687
694
|
return partitioning
|
|
688
695
|
|
|
689
696
|
# NOTE: when we deprecate `where_clause` partitioning in favor of a more proper partitioning DSL,
|
fides/api/graph/traversal.py
CHANGED
|
@@ -114,6 +114,23 @@ class BaseTraversal:
|
|
|
114
114
|
)
|
|
115
115
|
)
|
|
116
116
|
|
|
117
|
+
# Ensure manual_task collections execute right after ROOT
|
|
118
|
+
from fides.api.task.manual.manual_task_utils import ManualTaskAddress
|
|
119
|
+
|
|
120
|
+
for addr in self.traversal_node_dict.keys():
|
|
121
|
+
if ManualTaskAddress.is_manual_task_address(addr):
|
|
122
|
+
# Add a simple synthetic edge ROOT.id -> manual_data.id
|
|
123
|
+
self.edges.add(
|
|
124
|
+
Edge(
|
|
125
|
+
FieldAddress(
|
|
126
|
+
ROOT_COLLECTION_ADDRESS.dataset,
|
|
127
|
+
ROOT_COLLECTION_ADDRESS.collection,
|
|
128
|
+
"id",
|
|
129
|
+
),
|
|
130
|
+
addr.field_address(FieldPath("id")),
|
|
131
|
+
)
|
|
132
|
+
)
|
|
133
|
+
|
|
117
134
|
self._verify_traversal()
|
|
118
135
|
|
|
119
136
|
def _verify_traversal(self) -> None:
|
|
@@ -192,6 +209,7 @@ class BaseTraversal:
|
|
|
192
209
|
)
|
|
193
210
|
finished_nodes: dict[CollectionAddress, TraversalNode] = {}
|
|
194
211
|
running_node_queue: MatchingQueue[TraversalNode] = MatchingQueue(self.root_node)
|
|
212
|
+
|
|
195
213
|
remaining_edges: Set[Edge] = self.edges.copy()
|
|
196
214
|
while not running_node_queue.is_empty():
|
|
197
215
|
# this is to support the "run traversal_node A AFTER traversal_node B functionality:"
|
fides/api/models/attachment.py
CHANGED
|
@@ -5,9 +5,9 @@ from typing import IO, TYPE_CHECKING, Any, Tuple
|
|
|
5
5
|
|
|
6
6
|
from fideslang.validation import AnyHttpUrlString
|
|
7
7
|
from loguru import logger as log
|
|
8
|
-
from sqlalchemy import Column
|
|
8
|
+
from sqlalchemy import Column, DateTime
|
|
9
9
|
from sqlalchemy import Enum as EnumColumn
|
|
10
|
-
from sqlalchemy import ForeignKey, String, UniqueConstraint, orm
|
|
10
|
+
from sqlalchemy import ForeignKey, Index, String, UniqueConstraint, func, orm
|
|
11
11
|
from sqlalchemy.ext.declarative import declared_attr
|
|
12
12
|
from sqlalchemy.orm import Session, relationship
|
|
13
13
|
|
|
@@ -64,8 +64,14 @@ class AttachmentReference(Base):
|
|
|
64
64
|
"""Overriding base class method to set the table name."""
|
|
65
65
|
return "attachment_reference"
|
|
66
66
|
|
|
67
|
+
created_at = Column(
|
|
68
|
+
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
69
|
+
)
|
|
70
|
+
|
|
67
71
|
attachment_id = Column(
|
|
68
|
-
String,
|
|
72
|
+
String,
|
|
73
|
+
ForeignKey("attachment.id", name="attachment_reference_attachment_id_fkey"),
|
|
74
|
+
nullable=False,
|
|
69
75
|
)
|
|
70
76
|
reference_id = Column(String, nullable=False)
|
|
71
77
|
reference_type = Column(EnumColumn(AttachmentReferenceType), nullable=False)
|
|
@@ -74,6 +80,8 @@ class AttachmentReference(Base):
|
|
|
74
80
|
UniqueConstraint(
|
|
75
81
|
"attachment_id", "reference_id", name="_attachment_reference_uc"
|
|
76
82
|
),
|
|
83
|
+
Index("ix_attachment_reference_reference_id", "reference_id"),
|
|
84
|
+
Index("ix_attachment_reference_reference_type", "reference_type"),
|
|
77
85
|
)
|
|
78
86
|
|
|
79
87
|
# Relationships
|
|
@@ -92,6 +100,10 @@ class Attachment(Base):
|
|
|
92
100
|
Stores information about an Attachment.
|
|
93
101
|
"""
|
|
94
102
|
|
|
103
|
+
created_at = Column(
|
|
104
|
+
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
105
|
+
)
|
|
106
|
+
|
|
95
107
|
user_id = Column(
|
|
96
108
|
String, ForeignKey("fidesuser.id", ondelete="SET NULL"), nullable=True
|
|
97
109
|
)
|
fides/api/models/comment.py
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from enum import Enum as EnumType
|
|
2
2
|
from typing import TYPE_CHECKING, Any
|
|
3
3
|
|
|
4
|
-
from sqlalchemy import Column
|
|
4
|
+
from sqlalchemy import Column, DateTime
|
|
5
5
|
from sqlalchemy import Enum as EnumColumn
|
|
6
|
-
from sqlalchemy import ForeignKey, String,
|
|
6
|
+
from sqlalchemy import ForeignKey, Index, String, func, orm
|
|
7
7
|
from sqlalchemy.ext.declarative import declared_attr
|
|
8
8
|
from sqlalchemy.orm import Session, relationship
|
|
9
9
|
|
|
10
|
-
from fides.api.db.base_class import Base
|
|
10
|
+
from fides.api.db.base_class import Base, FidesBase
|
|
11
11
|
from fides.api.models.attachment import Attachment, AttachmentReferenceType
|
|
12
12
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
@@ -36,6 +36,7 @@ class CommentReferenceType(str, EnumType):
|
|
|
36
36
|
access_manual_webhook = "access_manual_webhook"
|
|
37
37
|
erasure_manual_webhook = "erasure_manual_webhook"
|
|
38
38
|
privacy_request = "privacy_request"
|
|
39
|
+
manual_task_submission = "manual_task_submission"
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
class CommentReference(Base):
|
|
@@ -48,12 +49,24 @@ class CommentReference(Base):
|
|
|
48
49
|
"""Overriding base class method to set the table name."""
|
|
49
50
|
return "comment_reference"
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
53
|
+
created_at = Column(
|
|
54
|
+
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
comment_id = Column(
|
|
58
|
+
String,
|
|
59
|
+
ForeignKey(
|
|
60
|
+
"comment.id", name="comment_reference_comment_id_fkey", ondelete="CASCADE"
|
|
61
|
+
),
|
|
62
|
+
nullable=False,
|
|
63
|
+
)
|
|
52
64
|
reference_id = Column(String, nullable=False)
|
|
53
65
|
reference_type = Column(EnumColumn(CommentReferenceType), nullable=False)
|
|
54
66
|
|
|
55
67
|
__table_args__ = (
|
|
56
|
-
|
|
68
|
+
Index("ix_comment_reference_reference_id", "reference_id"),
|
|
69
|
+
Index("ix_comment_reference_reference_type", "reference_type"),
|
|
57
70
|
)
|
|
58
71
|
|
|
59
72
|
comment = relationship(
|
|
@@ -75,6 +88,11 @@ class Comment(Base):
|
|
|
75
88
|
Stores information about a Comment.
|
|
76
89
|
"""
|
|
77
90
|
|
|
91
|
+
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
92
|
+
created_at = Column(
|
|
93
|
+
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
94
|
+
)
|
|
95
|
+
|
|
78
96
|
user_id = Column(
|
|
79
97
|
String, ForeignKey("fidesuser.id", ondelete="SET NULL"), nullable=True
|
|
80
98
|
)
|
|
@@ -53,6 +53,7 @@ class ConnectionType(enum.Enum):
|
|
|
53
53
|
https = "https"
|
|
54
54
|
manual = "manual" # Deprecated - use manual_webhook instead
|
|
55
55
|
manual_webhook = "manual_webhook" # Runs upfront before the traversal
|
|
56
|
+
manual_task = "manual_task" # Manual task integration
|
|
56
57
|
mariadb = "mariadb"
|
|
57
58
|
mongodb = "mongodb"
|
|
58
59
|
mssql = "mssql"
|
|
@@ -88,6 +89,7 @@ class ConnectionType(enum.Enum):
|
|
|
88
89
|
ConnectionType.google_cloud_sql_postgres.value: "Google Cloud SQL for Postgres",
|
|
89
90
|
ConnectionType.https.value: "Policy Webhook",
|
|
90
91
|
ConnectionType.manual_webhook.value: "Manual Process",
|
|
92
|
+
ConnectionType.manual_task.value: "Manual Task",
|
|
91
93
|
ConnectionType.manual.value: "Manual Connector",
|
|
92
94
|
ConnectionType.mariadb.value: "MariaDB",
|
|
93
95
|
ConnectionType.mongodb.value: "MongoDB",
|
|
@@ -132,6 +134,7 @@ class ConnectionType(enum.Enum):
|
|
|
132
134
|
ConnectionType.google_cloud_sql_postgres.value: SystemType.database,
|
|
133
135
|
ConnectionType.https.value: SystemType.manual,
|
|
134
136
|
ConnectionType.manual_webhook.value: SystemType.manual,
|
|
137
|
+
ConnectionType.manual_task.value: SystemType.manual,
|
|
135
138
|
ConnectionType.manual.value: SystemType.manual,
|
|
136
139
|
ConnectionType.mariadb.value: SystemType.database,
|
|
137
140
|
ConnectionType.mongodb.value: SystemType.database,
|
|
@@ -229,6 +232,14 @@ class ConnectionConfig(Base):
|
|
|
229
232
|
uselist=False,
|
|
230
233
|
)
|
|
231
234
|
|
|
235
|
+
manual_task = relationship( # type: ignore[misc]
|
|
236
|
+
"ManualTask",
|
|
237
|
+
primaryjoin="and_(ConnectionConfig.id == foreign(ManualTask.parent_entity_id), "
|
|
238
|
+
"ManualTask.parent_entity_type == 'connection_config')",
|
|
239
|
+
cascade="delete",
|
|
240
|
+
uselist=False,
|
|
241
|
+
)
|
|
242
|
+
|
|
232
243
|
pre_approval_webhooks = relationship( # type: ignore[misc]
|
|
233
244
|
"PreApprovalWebhook",
|
|
234
245
|
back_populates="connection_config",
|
fides/api/models/db_cache.py
CHANGED
|
@@ -32,7 +32,7 @@ class DBCache(Base):
|
|
|
32
32
|
cache_value = Column(BYTEA, nullable=False)
|
|
33
33
|
|
|
34
34
|
__table_args__ = (
|
|
35
|
-
Index("ix_dbcache_namespace_cache_key", "namespace", "cache_key"),
|
|
35
|
+
Index("ix_dbcache_namespace_cache_key", "namespace", "cache_key", unique=True),
|
|
36
36
|
)
|
|
37
37
|
|
|
38
38
|
@classmethod
|
|
@@ -159,6 +159,8 @@ class MonitorConfig(Base):
|
|
|
159
159
|
"MonitorExecution",
|
|
160
160
|
cascade="all, delete-orphan",
|
|
161
161
|
backref="monitor_config",
|
|
162
|
+
primaryjoin="MonitorExecution.monitor_config_key == foreign(MonitorConfig.key)",
|
|
163
|
+
single_parent=True,
|
|
162
164
|
)
|
|
163
165
|
|
|
164
166
|
shared_config_id = Column(
|
|
@@ -342,16 +344,16 @@ class StagedResourceAncestor(Base):
|
|
|
342
344
|
Its entries should be deleted when the staged resource is deleted, via cascade.
|
|
343
345
|
"""
|
|
344
346
|
|
|
347
|
+
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
348
|
+
|
|
345
349
|
ancestor_urn = Column(
|
|
346
350
|
String,
|
|
347
351
|
ForeignKey("stagedresource.urn", ondelete="CASCADE"),
|
|
348
|
-
primary_key=True,
|
|
349
352
|
nullable=False,
|
|
350
353
|
)
|
|
351
354
|
descendant_urn = Column(
|
|
352
355
|
String,
|
|
353
356
|
ForeignKey("stagedresource.urn", ondelete="CASCADE"),
|
|
354
|
-
primary_key=True,
|
|
355
357
|
nullable=False,
|
|
356
358
|
)
|
|
357
359
|
|
|
@@ -372,6 +374,7 @@ class StagedResourceAncestor(Base):
|
|
|
372
374
|
UniqueConstraint(
|
|
373
375
|
"ancestor_urn", "descendant_urn", name="uq_staged_resource_ancestor"
|
|
374
376
|
),
|
|
377
|
+
Index("ix_staged_resource_ancestor_pkey", "id", unique=True),
|
|
375
378
|
Index("ix_staged_resource_ancestor_ancestor", "ancestor_urn"),
|
|
376
379
|
Index("ix_staged_resource_ancestor_descendant", "descendant_urn"),
|
|
377
380
|
)
|
|
@@ -470,12 +473,7 @@ class StagedResource(Base):
|
|
|
470
473
|
server_default="{}",
|
|
471
474
|
default=dict,
|
|
472
475
|
)
|
|
473
|
-
user_assigned_system_id = Column(
|
|
474
|
-
String,
|
|
475
|
-
ForeignKey(System.id_field_path),
|
|
476
|
-
nullable=True,
|
|
477
|
-
index=True,
|
|
478
|
-
)
|
|
476
|
+
user_assigned_system_id = Column(String, nullable=True, index=True)
|
|
479
477
|
|
|
480
478
|
# pointers to child and parent URNs
|
|
481
479
|
children = Column(
|
|
@@ -527,7 +525,7 @@ class StagedResource(Base):
|
|
|
527
525
|
|
|
528
526
|
data_uses = Column(
|
|
529
527
|
ARRAY(String),
|
|
530
|
-
nullable=
|
|
528
|
+
nullable=True,
|
|
531
529
|
server_default="{}",
|
|
532
530
|
default=dict,
|
|
533
531
|
)
|
|
@@ -588,12 +586,14 @@ class MonitorExecution(Base):
|
|
|
588
586
|
configuration details used in connecting to the external data store.
|
|
589
587
|
"""
|
|
590
588
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
)
|
|
589
|
+
# redefined here because there's a minor, unintended discrepancy between
|
|
590
|
+
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
591
|
+
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
592
|
+
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
593
|
+
# primary key constraint, which will implicitly create an index for the field.
|
|
594
|
+
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
595
|
+
|
|
596
|
+
monitor_config_key = Column(String, nullable=False, index=True)
|
|
597
597
|
status = Column(String, nullable=True)
|
|
598
598
|
started = Column(
|
|
599
599
|
DateTime(timezone=True),
|
|
@@ -3,12 +3,13 @@ from __future__ import annotations
|
|
|
3
3
|
from datetime import datetime, timedelta, timezone
|
|
4
4
|
from typing import TYPE_CHECKING, Any, Optional
|
|
5
5
|
|
|
6
|
-
from sqlalchemy import Column, DateTime, ForeignKey, String
|
|
6
|
+
from sqlalchemy import Column, DateTime, ForeignKey, Index, String
|
|
7
7
|
from sqlalchemy.ext.declarative import declared_attr
|
|
8
8
|
from sqlalchemy.orm import Session, relationship
|
|
9
|
+
from sqlalchemy.sql import func
|
|
9
10
|
|
|
10
11
|
from fides.api.cryptography.cryptographic_util import generate_secure_random_string
|
|
11
|
-
from fides.api.db.base_class import Base
|
|
12
|
+
from fides.api.db.base_class import Base, FidesBase
|
|
12
13
|
from fides.api.util.identity_verification import IdentityVerificationMixin
|
|
13
14
|
from fides.config import get_config
|
|
14
15
|
|
|
@@ -40,6 +41,22 @@ class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
|
|
|
40
41
|
def __tablename__(self) -> str:
|
|
41
42
|
return "fides_user_respondent_email_verification"
|
|
42
43
|
|
|
44
|
+
# redefined here because there's a minor, unintended discrepancy between
|
|
45
|
+
# this `id` field and that of the `Base` class, which explicitly sets `index=True`.
|
|
46
|
+
# TODO: we likely should _not_ be setting `index=True` on the `id`
|
|
47
|
+
# attribute of the `Base` class, as `primary_key=True` already specifies a
|
|
48
|
+
# primary key constraint, which will implicitly create an index for the field.
|
|
49
|
+
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
50
|
+
created_at = Column(
|
|
51
|
+
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
52
|
+
)
|
|
53
|
+
updated_at = Column(
|
|
54
|
+
DateTime(timezone=True),
|
|
55
|
+
server_default=func.now(),
|
|
56
|
+
onupdate=func.now(),
|
|
57
|
+
nullable=False,
|
|
58
|
+
)
|
|
59
|
+
|
|
43
60
|
user_id = Column(
|
|
44
61
|
String,
|
|
45
62
|
ForeignKey("fidesuser.id", ondelete="CASCADE"),
|
|
@@ -59,6 +76,14 @@ class FidesUserRespondentEmailVerification(Base, IdentityVerificationMixin):
|
|
|
59
76
|
foreign_keys=[user_id],
|
|
60
77
|
)
|
|
61
78
|
|
|
79
|
+
__table_args__ = (
|
|
80
|
+
Index(
|
|
81
|
+
"ix_fides_user_respondent_email_verification_id",
|
|
82
|
+
"id",
|
|
83
|
+
unique=True,
|
|
84
|
+
),
|
|
85
|
+
)
|
|
86
|
+
|
|
62
87
|
@classmethod
|
|
63
88
|
def create(
|
|
64
89
|
cls, db: Session, *, data: dict[str, Any], check_name: bool = False
|