ethyca-fides 2.73.2b0__py2.py3-none-any.whl → 2.76.0rc2__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.
- {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/METADATA +2 -1
- {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/RECORD +349 -336
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/303287c70600_migrate_resource_type_from_enum_to_.py +99 -0
- fides/api/alembic/migrations/versions/795f46f656c0_migrate_field_type_from_enum_to_string.py +61 -0
- fides/api/alembic/migrations/versions/xx_2025_10_29_1659_80d28dea3b6b_added_duplicate_group_table.py +79 -0
- fides/api/alembic/migrations/versions/xx_2025_11_05_0200_f1a2b3c4d5e6_create_staged_resource_error_table.py +82 -0
- fides/api/alembic/migrations/versions/xx_2025_11_07_1709_56fe6fad2d89_add_notice_display_order.py +47 -0
- fides/api/alembic/migrations/versions/xx_2025_11_10_1200_a1b2c3d4e5f6_add_test_datastore_to_connectiontype.py +53 -0
- fides/api/alembic/migrations/versions/xx_2025_11_11_1317_7d82c8fc4c34_store_saas_template_datasets.py +68 -0
- fides/api/alembic/migrations/versions/xx_2025_11_12_1430_b2c3d4e5f6a7_add_default_identity_definitions.py +81 -0
- fides/api/alembic/migrations/versions/xx_2025_11_25_1854_3ff6449c099e_add_index_on_providedidentity_privacy_.py +50 -0
- fides/api/api/v1/api.py +2 -0
- fides/api/api/v1/endpoints/admin.py +39 -0
- fides/api/api/v1/endpoints/connector_template_endpoints.py +167 -0
- fides/api/api/v1/endpoints/generic_overrides.py +6 -6
- fides/api/api/v1/endpoints/pre_approval_webhook_endpoints.py +5 -5
- fides/api/api/v1/endpoints/privacy_request_endpoints.py +101 -21
- fides/api/api/v1/endpoints/saas_config_endpoints.py +3 -44
- fides/api/api/v1/endpoints/storage_endpoints.py +5 -1
- fides/api/api/v1/endpoints/system.py +2 -2
- fides/api/api/v1/endpoints/user_endpoints.py +10 -4
- fides/api/db/base.py +1 -0
- fides/api/db/database.py +228 -1
- fides/api/db/seed.py +1 -1
- fides/api/email_templates/templates/external_user_welcome.html +9 -5
- fides/api/migrations/post_upgrade_index_creation.py +10 -0
- fides/api/models/connectionconfig.py +4 -1
- fides/api/models/detection_discovery/__init__.py +2 -0
- fides/api/models/detection_discovery/core.py +10 -0
- fides/api/models/detection_discovery/staged_resource_error.py +25 -0
- fides/api/models/experience_notices.py +6 -1
- fides/api/models/identity_definition.py +2 -1
- fides/api/models/location_regulation_selections.py +22 -0
- fides/api/models/manual_webhook.py +17 -6
- fides/api/models/messaging_template.py +7 -0
- fides/api/models/policy.py +3 -0
- fides/api/models/privacy_experience.py +20 -0
- fides/api/models/privacy_notice.py +45 -1
- fides/api/models/privacy_preference.py +1 -0
- fides/api/models/privacy_request/duplicate_group.py +84 -0
- fides/api/models/privacy_request/privacy_request.py +84 -9
- fides/api/models/privacy_request/provided_identity.py +22 -1
- fides/api/models/saas_template_dataset.py +63 -0
- fides/api/models/sql_models.py +150 -7
- fides/api/models/taxonomy.py +61 -1
- fides/api/oauth/roles.py +2 -0
- fides/api/schemas/connection_configuration/connection_secrets_mssql.py +5 -0
- fides/api/schemas/messaging/messaging.py +1 -0
- fides/api/schemas/oauth.py +2 -1
- fides/api/schemas/privacy_request.py +38 -6
- fides/api/schemas/saas/connector_template.py +14 -0
- fides/api/service/async_dsr/strategies/async_dsr_strategy_polling.py +19 -7
- fides/api/service/connectors/base_erasure_email_connector.py +7 -0
- fides/api/service/connectors/microsoft_sql_server_connector.py +6 -1
- fides/api/service/connectors/saas/connector_registry_service.py +45 -1
- fides/api/service/messaging/message_dispatch_service.py +44 -4
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +3 -3
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +41 -30
- fides/api/service/privacy_request/dsr_package/templates/clickme.html +68 -0
- fides/api/service/privacy_request/dsr_package/templates/dataset_index.html +30 -27
- fides/api/service/privacy_request/duplication_detection.py +439 -0
- fides/api/service/privacy_request/email_batch_service.py +2 -1
- fides/api/service/privacy_request/request_runner_service.py +31 -5
- fides/api/service/privacy_request/request_service.py +4 -2
- fides/api/service/saas_request/saas_request_override_factory.py +7 -2
- fides/api/task/conditional_dependencies/privacy_request/__init__.py +0 -0
- fides/api/task/conditional_dependencies/privacy_request/convenience_fields.py +155 -0
- fides/api/task/conditional_dependencies/privacy_request/privacy_request_data.py +140 -0
- fides/api/task/conditional_dependencies/privacy_request/schemas.py +212 -0
- fides/api/task/conditional_dependencies/util.py +111 -0
- fides/api/task/execute_request_tasks.py +17 -4
- fides/api/task/manual/manual_task_conditional_evaluation.py +32 -27
- fides/api/task/manual/manual_task_graph_task.py +4 -1
- fides/api/task/manual/manual_task_utils.py +63 -20
- fides/api/tasks/__init__.py +14 -0
- fides/api/util/cache.py +4 -0
- fides/api/util/connection_util.py +2 -3
- fides/api/util/fuzzy_search_utils.py +7 -1
- fides/api/util/lock.py +13 -3
- fides/api/util/logger.py +58 -4
- fides/api/util/logger_context_utils.py +3 -1
- fides/api/util/memory_watchdog.py +118 -0
- fides/api/util/saas_config_updater.py +12 -2
- fides/api/worker/__init__.py +4 -0
- fides/common/api/scope_registry.py +6 -0
- fides/common/api/v1/urn_registry.py +11 -2
- fides/config/__init__.py +8 -2
- fides/config/celery_settings.py +42 -0
- fides/service/messaging/messaging_service.py +75 -74
- fides/service/privacy_request/privacy_request_service.py +151 -19
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-688fa865621531cc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1115-26393b586775ea29.js → 1115-7fd171dac1eb0e51.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1276.deb10ae2643f8463.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1438-8a33b3834d6e43f3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6148-59a59d5c5925344f.js → 1533-84e250d1f26e6d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/1821-c1daa160f492aacf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1840-359ee056e4cf6629.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{1975.afe8cad52f904fcf.js → 1975.bef017bc80e2012c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{2040-7eed8491ca7276ed.js → 2040-70972e15960d9afe.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2121.321b0fd3932164d4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{2397-083fc511acb6105d.js → 2397-3434603a97f3f5d6.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-49ed0ed897832958.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3150-da5406b80d25fe6d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3214-90ce0a366b0f461a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3377-02bf9780fd383d94.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3615-5e2d062d684b8fa1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3655-5e1ba5dd68b5ec48.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3729-31ff8ba51491bf21.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-cff30ca0844fe2b1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3931-8bedde156fe83564.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{401-7c345d019bb9bcbd.js → 401-582d9970d89deefe.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4093-7e47408c28de5375.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4259.d1507e0db19cbed7.js → 4259.05038c9b78467244.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/4322-f6aeff6880726c83.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4339-04a715ab07122744.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4496-ccbce2459174e0d6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/454-d5c2c84f1a14e4f1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4589-c1d83c6a8dab4d30.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4809-a8f4a108a42f53ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4903-19c0bc07a956dfa8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4910-d990773601f794c1.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5185-e7f8b81dd3dfbe0b.js → 5185-96423702fba70ced.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-4e308cca01d59367.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5487-5c3501754bf027ba.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/549-1bdc3e6f3264c020.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5505-43b9c39491b88e08.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5783-21775c232dce7af7.js → 5783-016dfcee8e49bf61.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/5826-4db99ea4e5077911.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/590-be447cacf12419dd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6084-91badbc6569a0efb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6344-026cb323c1d49926.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6362-ba0e12f2fc4cad94.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{6853-de9905d28e5b19b3.js → 6853-882889659769d7b4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/6882-bb1b469d7d7f5335.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-0dcf22a9aabe39c5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7170-46db82bb5b55e856.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7218-2ace8c82e3e7eb74.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7245-c9bc628d078c2170.js → 7245-1cdafb35f289861b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-7f75ab7b8df42eb3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7654-2e9a8be02e41769a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{8212-393420e5a9751791.js → 8212-348ddd2b6933db70.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9014-eeae6f581158e645.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{5596-29a7c8322530b7cf.js → 9195-da717d324917b049.js} +3 -3
- fides/ui-build/static/admin/_next/static/chunks/9450-b7b7bb1d755ecf57.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9676.7d029a5383595b69.js → 9676.1f395eeb9cc34968.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/{9826-a737a9956c1d0905.js → 9826-1078e46f3ac0b688.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9911-ece086f2230e34f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{404-eb019192ce498f32.js → 404-800be6996aaa999c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-ee588a308812715d.js → _app-de4b578c904df772.js} +70 -70
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-7081e0e49f67716c.js → manual-f12020b82dd4bd1a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-a188f84239f4b2a8.js → multiple-a911b7990371704d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-ee9df33ebd471099.js → add-systems-ad585b79953c2753.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-4f9cf087fcee87e6.js → add-vendors-bb263d394ca1c8fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-6907c368d8611c44.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1b02a4991201b7e4.js → [id]-c32f381af358149b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-a5e738a234dadc7e.js → new-6efb3c069d8b47dd.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-b08abefec298ccf1.js → privacy-experience-1975c529905eea9b.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-8c164c4b8310214e.js → [id]-b05331178928ab52.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-db789002d84c8829.js → new-516834e930bb0d0d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-985717f2565f9d9d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-5cba30eba1e97e56.js → properties-2be773e08498e40c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-850afb74f4192e87.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{consent-614af0a2c2ba966c.js → consent-b63d1e395d879b86.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-5b28f0f674ea87bd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-676177e2f3c9c2a2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-794906929efb8e1d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-3ccbf7c0d06507b9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources-81d1b50585468fb0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-1ea0b24d306b1e67.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-d4861a4a218bb65a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure/[monitorId]-66bd265044daf97d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/infrastructure-c9c79fa8576a4f77.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-60cacc3232c2eead.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-437bd64a3016de36.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-8349248c2da970a6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-6919a1d6cadaa46b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/detection/{[resourceUrn]-b072cf25aefc98f6.js → [resourceUrn]-1a50d421897d3da1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{detection-fd3e8817d8e6dee4.js → detection-49509414a15e8393.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/discovery/{[resourceUrn]-146624cf59792bf7.js → [resourceUrn]-1a1bb80b586d0c0f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{discovery-9695cc9c85592ec5.js → discovery-49de61df1e8e7fba.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-c2719f5cff20c0f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-5f88280db168083e.js → [...subfieldNames]-415015aebab60436.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-bfbcf19c28c794ae.js → [collectionName]-5accb09715b5122d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-aebecca1d8ec5f98.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-9551a82ddec9f909.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-72f8fe47beef0f09.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-3a8aa3f633528e88.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-87512616f35ec6da.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-2f1bf4eac7aa55fd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{fides-js-docs-1f4335dca5c09860.js → fides-js-docs-5235760b3e508d7d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{index-1343fa525a206571.js → index-8d67cd2872cb682a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-7a631df29cd0e31a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-ea3bc43cdaf273de.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-5d8632bba1b81cd4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{[id]-63b3be660fb12c0f.js → [id]-92e01822ecde8fb8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests/{new-d3b577962dd33266.js → new-1256cf6d3f6794e0.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-0daac00911d27617.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{[key]-720cde29f81db47f.js → [key]-2d976fe5e8ba0a3a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers/{new-3668866076b53016.js → new-7766ba497b863740.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-f2880d2ed4734270.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{[id]-8063dceb32310c85.js → [id]-669f585c3458faff.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates/{add-template-4931c70bee62232f.js → add-template-c79e7724e4bc3899.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-891654e8dc13965c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{notifications-93af719dab3bd053.js → notifications-40c8148244c5d347.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-1e86f3e28bd23ed6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-9b7bd8c38f02c091.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-b18a53a940cf9e19.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-6d028d7450e77578.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-8399083ee2cd8cc2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-0a910125cdb2b3b8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-acc90b6f7fe915cb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-bbc42026f2685438.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-fa82cffba448ccd8.js → configure-c08ca6ad21c99799.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-77c2db582f8823bc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-bc1c289647e52c48.js → [id]-74ccea4868408e3d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-cbfaa23d96f5ed0b.js → add-property-7d9f09bfe9d44dfc.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/{properties-a15a3fd0ed88f39c.js → properties-cd77bc30672bb1fa.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-cc3bd9540132d5ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-7ce7d720107ab4b5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-19de0024418a4924.js → [purpose_id]-ae789892343c24f5.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-13ee1b331ced0846.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-ee4e43692336a330.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-ca51d794abfcbf25.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-ecd1dc5db8e81409.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-3b87002753b23ca5.js → domain-records-df06f7e2f668c540.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-aacd9d0ad47082d4.js → domains-da0c77bd510c6c51.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-3cdd0b39901190ba.js → email-templates-950b0c115bf673d8.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-61076eedbfd137b9.js → locations-7e36cb4756973a9d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-b07b11d6002f8c8c.js → organization-a0e5ed486d24ccf3.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-3cdebafb6870d3ad.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-b7c0d3b1b754e70f.js → regulations-159aad34f1021320.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-dbd1a64090ad0946.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-59c89489fa32a4cb.js → [id]-7d042497a57a3788.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-21f1172e73dfc9f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-e553161e6338ee48.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/{new-7dce2916cc589c54.js → new-efc4af017723e57a.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-5d5a68e555d18693.js → [id]-b152319d67372ee4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-dba8692491f7935e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/webpack-09ca52bc7beb0b43.js +1 -0
- fides/ui-build/static/admin/_next/static/css/3d66bb57ddcb0978.css +1 -0
- fides/ui-build/static/admin/_next/static/css/a1e4be9466578ef1.css +1 -0
- fides/ui-build/static/admin/_next/static/l2vgGUHB04Fi4oEVlVMrc/_buildManifest.js +1 -0
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/datastore.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/infrastructure/[monitorId].html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/infrastructure.html +1 -0
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/website.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/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/new-privacy-requests.html +1 -1
- fides/ui-build/static/admin/notifications/digests/[id].html +1 -1
- fides/ui-build/static/admin/notifications/digests/new.html +1 -1
- fides/ui-build/static/admin/notifications/digests.html +1 -1
- fides/ui-build/static/admin/notifications/providers/[key].html +1 -1
- fides/ui-build/static/admin/notifications/providers/new.html +1 -1
- fides/ui-build/static/admin/notifications/providers.html +1 -1
- fides/ui-build/static/admin/notifications/templates/[id].html +1 -1
- fides/ui-build/static/admin/notifications/templates/add-template.html +1 -1
- fides/ui-build/static/admin/notifications/templates.html +1 -1
- fides/ui-build/static/admin/notifications.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/sandbox/privacy-notices.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/new.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +0 -66
- fides/ui-build/static/admin/_next/static/chunks/1099-31f9d973bc287df8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1316-2606e19807c08aa5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1437-8b1f6c8797c68bfd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1467-8808ec8836e033f9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/155-f6302d32cba4cab6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-2d5cf537a2992c79.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2121.1de2fa060eae34aa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-34a43f2f8f5e5e69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2962-342ad1b4ab402ded.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3377-988ac2f3a2e8d5d4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3446-f40c352c43ac950c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/346-aa3b88efb85f2e28.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3696-6f90e41a53d22920.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3700-f695f2f6b8251971.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3772-9f1713f9d5f97a10.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3873-d18e47b327445db5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3923-f0a85dc5c3684fa0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4496-4ff19366c597ec16.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4817-1f3e6ea38625d8d5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5163-e682273cd76a7d07.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-62d6bc19add60aa6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5279-bd6cccabdd6ca447.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/549-28537a6de666944b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5619-9b50cec521203989.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5643-3459282d296a3c59.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-3759894435cb8569.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6315-e2fb5ea77179a871.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6344-ca66a6e10d128179.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6419-11d67f7fd4e2f247.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-84789a4e4fb04eb9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/699-8ca44b0de9fa20f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7059-2bb7c38578549703.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7202.3febe9e89640c712.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7476-a02d970ea4d3f7d0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7488-cf92601852e3c509.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7630-a11610c2b31ab2ca.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7773-9ae233109bc64ec2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-e36d610066135f8c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8011-75af8b480fa114e6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8373-22b4d20e8cc06b3a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8765-f622a35b40a7ec63.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9037-453224ba3ee65b13.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9046-d9c6498368b993d1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9187-7438242f0d380bb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9278-08cc704317fe535e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9330-f753636a31c4ea04.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9682-d1a3afa1394f8304.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9729-fcf6ff4e3534e4a8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9899-d6437facac926264.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9965-25621dd507e0cfd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-9af75caefc74eaca.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-6528eb24165aceb6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-11f1683aa15e1a62.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-32bd7a7c990e5bf6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-d60761c20382b259.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-07e7d38ce34e1e6c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-b07a0707f8c2ec0d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/resources-aed94957009eb3fd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-127c114dd8f102ed.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/datastore/[monitorId]-5aa7a9fa96160de8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]/[systemId]-899bf30dde8b3292.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/website/[monitorId]-73085f50abb775c0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-823d0dd77e66585b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-24a82e07a0008516.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-3b100c44ea9e3988.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-6fbe2b584a509226.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-3d1e48f4b95d7f6b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-d3c6ecf7f29bea6e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-0a4aa42be2da0255.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-14313e441a13192c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-f139d1ce26404f30.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-b2d3d28b10a758e6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-a733e5d7c3ce9bb8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/new-privacy-requests-df0c95e408c54c7e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/digests-aed9afd988a48acf.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/providers-36a0ac36062abd02.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/notifications/templates-a14c876b49422597.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-9cfb469de7b4aeab.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-e715cc654fb6a5cd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-72ae299bcb6adae6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-2337f8c81a766eb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-0af454f55494f6fa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-d1b90ffa996fbd89.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-19724b9e0581b96d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-cdd3754289a28317.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-cc41ae605f2b55ae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-6e4c535b6d614596.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-632b3ee563d070f2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/sandbox/privacy-notices-afe921f6e2a526fb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-5b6807dced8d03c5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/[id]-8634aae3259def37.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields/new-2d9dcca17965dc57.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-7dce52bfc1b2652c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/privacy-requests-084a2b4431d35322.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-b72d36243a0a545c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-cfaa37a0df83674b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-56a5434969cbe9ba.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-e6a211d8a0401086.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/webpack-c2c11809187b9f84.js +0 -1
- fides/ui-build/static/admin/_next/static/css/d41a048a166d50e4.css +0 -1
- fides/ui-build/static/admin/_next/static/css/d78390d6134d8328.css +0 -1
- fides/ui-build/static/admin/_next/static/wCNFtmYQhEDMaMPeBB4BM/_buildManifest.js +0 -1
- fides/ui-build/static/admin/poc/table-migration.html +0 -1
- {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.73.2b0.dist-info → ethyca_fides-2.76.0rc2.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{wCNFtmYQhEDMaMPeBB4BM → l2vgGUHB04Fi4oEVlVMrc}/_ssgManifest.js +0 -0
|
@@ -609,6 +609,7 @@ def get_users(
|
|
|
609
609
|
params: Params = Depends(),
|
|
610
610
|
username: Optional[str] = None,
|
|
611
611
|
include_external: bool = True,
|
|
612
|
+
exclude_approvers: bool = False,
|
|
612
613
|
client: ClientDetail = Security(verify_user_read_scopes),
|
|
613
614
|
authorization: str = Security(oauth2_scheme),
|
|
614
615
|
) -> AbstractPage[FidesUser]:
|
|
@@ -628,10 +629,15 @@ def get_users(
|
|
|
628
629
|
query = query.filter(FidesUser.username.ilike(f"%{escape_like(username)}%"))
|
|
629
630
|
|
|
630
631
|
# Filter out external respondents if include_external is False
|
|
631
|
-
if
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
632
|
+
# Filter out approvers if exclude_approvers is True
|
|
633
|
+
if not include_external or exclude_approvers:
|
|
634
|
+
query = query.join(FidesUserPermissions)
|
|
635
|
+
if not include_external:
|
|
636
|
+
query = query.filter(
|
|
637
|
+
~FidesUserPermissions.roles.op("@>")([EXTERNAL_RESPONDENT])
|
|
638
|
+
)
|
|
639
|
+
if exclude_approvers:
|
|
640
|
+
query = query.filter(~FidesUserPermissions.roles.op("@>")([APPROVER]))
|
|
635
641
|
else:
|
|
636
642
|
# User has USER_READ_OWN scope, only show their own data
|
|
637
643
|
query = query.filter(FidesUser.id == client.user_id)
|
fides/api/db/base.py
CHANGED
|
@@ -80,6 +80,7 @@ from fides.api.models.property import (
|
|
|
80
80
|
Property,
|
|
81
81
|
)
|
|
82
82
|
from fides.api.models.registration import UserRegistration
|
|
83
|
+
from fides.api.models.saas_template_dataset import SaasTemplateDataset
|
|
83
84
|
from fides.api.models.storage import StorageConfig
|
|
84
85
|
from fides.api.models.system_compass_sync import SystemCompassSync
|
|
85
86
|
from fides.api.models.system_group import SystemGroup, SystemGroupMember
|
fides/api/db/database.py
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
Contains all of the logic related to the database including connections, setup, teardown, etc.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import os
|
|
6
|
+
import subprocess
|
|
5
7
|
from os import path
|
|
8
|
+
from pathlib import Path
|
|
6
9
|
from typing import Literal, Optional, Tuple
|
|
7
10
|
|
|
8
11
|
from alembic import command, script
|
|
@@ -190,4 +193,228 @@ def check_missing_migrations(database_url: str) -> None:
|
|
|
190
193
|
for item in result:
|
|
191
194
|
log.error(f" - {item}")
|
|
192
195
|
raise SystemExit("Migration needs to be generated!")
|
|
193
|
-
|
|
196
|
+
log.info("No migrations need to be generated.")
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def _get_base_branch_for_comparison() -> str:
|
|
200
|
+
"""
|
|
201
|
+
Determine the base branch to compare against for detecting new migrations.
|
|
202
|
+
|
|
203
|
+
In GitHub Actions PRs, uses GITHUB_BASE_REF (the PR target branch).
|
|
204
|
+
Otherwise, falls back to origin/main for local development.
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
The base branch reference (e.g., 'origin/main', 'origin/develop')
|
|
208
|
+
"""
|
|
209
|
+
base_ref = os.environ.get("GITHUB_BASE_REF")
|
|
210
|
+
if base_ref:
|
|
211
|
+
base_branch = f"origin/{base_ref}"
|
|
212
|
+
log.info(f"Comparing against PR target branch: {base_branch}")
|
|
213
|
+
else:
|
|
214
|
+
base_branch = "origin/main"
|
|
215
|
+
log.info(f"No GITHUB_BASE_REF found, comparing against: {base_branch}")
|
|
216
|
+
return base_branch
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def _get_new_migration_files(repo_root: str, base_branch: str) -> list[str]:
|
|
220
|
+
"""
|
|
221
|
+
Get list of new migration files added in the current branch.
|
|
222
|
+
|
|
223
|
+
Files are sorted by the timestamp in their filename to ensure chronological order.
|
|
224
|
+
Migration files follow the pattern: xx_YYYY_MM_DD_HHMM_revision_description.py
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
repo_root: Absolute path to the git repository root
|
|
228
|
+
base_branch: The base branch to compare against
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
List of relative file paths to new migration files, sorted chronologically
|
|
232
|
+
|
|
233
|
+
Raises:
|
|
234
|
+
SystemExit: If the migrations directory does not exist
|
|
235
|
+
"""
|
|
236
|
+
# Validate that the migrations directory exists
|
|
237
|
+
migrations_dir = (
|
|
238
|
+
Path(repo_root)
|
|
239
|
+
/ "src"
|
|
240
|
+
/ "fides"
|
|
241
|
+
/ "api"
|
|
242
|
+
/ "alembic"
|
|
243
|
+
/ "migrations"
|
|
244
|
+
/ "versions"
|
|
245
|
+
)
|
|
246
|
+
if not migrations_dir.exists():
|
|
247
|
+
log.error(f"Migrations directory not found: {migrations_dir}")
|
|
248
|
+
raise SystemExit(
|
|
249
|
+
f"Migration directory not found at expected path: {migrations_dir}\n"
|
|
250
|
+
"If the migrations directory has been moved, update the path in "
|
|
251
|
+
"fides.api.db.database._get_new_migration_files()"
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
migration_pattern = "src/fides/api/alembic/migrations/versions/*.py"
|
|
255
|
+
diff_output = subprocess.check_output(
|
|
256
|
+
[
|
|
257
|
+
"git",
|
|
258
|
+
"diff",
|
|
259
|
+
"--name-only",
|
|
260
|
+
"--diff-filter=A", # Only added files
|
|
261
|
+
f"{base_branch}...HEAD",
|
|
262
|
+
"--",
|
|
263
|
+
migration_pattern,
|
|
264
|
+
],
|
|
265
|
+
stderr=subprocess.STDOUT,
|
|
266
|
+
text=True,
|
|
267
|
+
cwd=repo_root,
|
|
268
|
+
).strip()
|
|
269
|
+
|
|
270
|
+
if not diff_output:
|
|
271
|
+
return []
|
|
272
|
+
|
|
273
|
+
migration_files = [f for f in diff_output.split("\n") if f]
|
|
274
|
+
|
|
275
|
+
# Sort by filename to ensure chronological order
|
|
276
|
+
# Files are named: xx_YYYY_MM_DD_HHMM_revision_description.py
|
|
277
|
+
# Sorting alphabetically will sort them chronologically due to the date format
|
|
278
|
+
migration_files.sort()
|
|
279
|
+
|
|
280
|
+
return migration_files
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def _parse_migration_revisions(migration_path: Path) -> tuple[str, Optional[str]]:
|
|
284
|
+
"""
|
|
285
|
+
Extract revision and down_revision IDs from a migration file.
|
|
286
|
+
|
|
287
|
+
Args:
|
|
288
|
+
migration_path: Path to the migration file
|
|
289
|
+
|
|
290
|
+
Returns:
|
|
291
|
+
Tuple of (revision, down_revision). down_revision may be None.
|
|
292
|
+
|
|
293
|
+
Raises:
|
|
294
|
+
SystemExit: If revision ID cannot be found in the file
|
|
295
|
+
"""
|
|
296
|
+
revision = None
|
|
297
|
+
down_revision = None
|
|
298
|
+
|
|
299
|
+
with open(migration_path, "r", encoding="utf-8") as f:
|
|
300
|
+
for line in f:
|
|
301
|
+
if line.strip().startswith("revision ="):
|
|
302
|
+
revision = line.split("=")[1].strip().strip("\"'")
|
|
303
|
+
elif line.strip().startswith("down_revision ="):
|
|
304
|
+
down_rev_value = line.split("=")[1].strip().strip("\"'")
|
|
305
|
+
if down_rev_value.lower() != "none":
|
|
306
|
+
down_revision = down_rev_value
|
|
307
|
+
|
|
308
|
+
if not revision:
|
|
309
|
+
log.error(f"Could not find revision ID in {migration_path}")
|
|
310
|
+
raise SystemExit(f"Invalid migration file: {migration_path}")
|
|
311
|
+
|
|
312
|
+
return revision, down_revision
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def _test_migrations_upgrade_downgrade_sequence(
|
|
316
|
+
alembic_config: Config,
|
|
317
|
+
migrations: list[tuple[str, str, Optional[str]]],
|
|
318
|
+
) -> None:
|
|
319
|
+
"""
|
|
320
|
+
Test multiple migrations can be upgraded and downgraded successfully in sequence.
|
|
321
|
+
|
|
322
|
+
Tests all new migrations together by:
|
|
323
|
+
1. Downgrading incrementally through all migrations (newest to oldest)
|
|
324
|
+
2. Upgrading incrementally back through all migrations (oldest to newest)
|
|
325
|
+
|
|
326
|
+
After Phase 2, the database is at the newest migration revision, which should
|
|
327
|
+
match HEAD for the new migrations being tested.
|
|
328
|
+
|
|
329
|
+
This approach tests migrations in a realistic sequence and can catch
|
|
330
|
+
interaction issues between migrations.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
alembic_config: Alembic configuration
|
|
334
|
+
migrations: List of (migration_name, revision, down_revision) tuples
|
|
335
|
+
|
|
336
|
+
Raises:
|
|
337
|
+
SystemExit: If any migration upgrade/downgrade test fails
|
|
338
|
+
"""
|
|
339
|
+
if not migrations:
|
|
340
|
+
return
|
|
341
|
+
|
|
342
|
+
log.info(f"Testing {len(migrations)} migration(s) in sequence")
|
|
343
|
+
|
|
344
|
+
try:
|
|
345
|
+
# Phase 1: Downgrade through all migrations (newest to oldest)
|
|
346
|
+
log.info("Phase 1: Downgrading through all new migrations...")
|
|
347
|
+
for migration_name, revision, down_revision in reversed(migrations):
|
|
348
|
+
if down_revision:
|
|
349
|
+
log.info(f" Downgrading {migration_name} to {down_revision}...")
|
|
350
|
+
downgrade_db(alembic_config, down_revision)
|
|
351
|
+
else:
|
|
352
|
+
log.info(f" Skipping {migration_name} (no down_revision)")
|
|
353
|
+
|
|
354
|
+
# Phase 2: Upgrade back through all migrations (oldest to newest)
|
|
355
|
+
log.info("Phase 2: Upgrading back through all new migrations...")
|
|
356
|
+
for migration_name, revision, down_revision in migrations:
|
|
357
|
+
log.info(f" Upgrading {migration_name} to {revision}...")
|
|
358
|
+
upgrade_db(alembic_config, revision)
|
|
359
|
+
|
|
360
|
+
log.info(f"✓ All {len(migrations)} migration(s) passed upgrade/downgrade test")
|
|
361
|
+
|
|
362
|
+
except Exception as error:
|
|
363
|
+
log.error("Migration upgrade/downgrade sequence test failed!")
|
|
364
|
+
log.error(str(error))
|
|
365
|
+
raise SystemExit("Migration upgrade/downgrade test failed")
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def check_new_migrations_upgrade_downgrade(database_url: str) -> None:
|
|
369
|
+
"""
|
|
370
|
+
Detects new migrations added in the current branch and tests that they
|
|
371
|
+
can be successfully upgraded and downgraded.
|
|
372
|
+
|
|
373
|
+
Uses git to compare against the target/base branch to find new migration files.
|
|
374
|
+
In CI, uses GITHUB_BASE_REF if available, otherwise falls back to origin/main.
|
|
375
|
+
"""
|
|
376
|
+
try:
|
|
377
|
+
# Get the repo root directory
|
|
378
|
+
repo_root = subprocess.check_output(
|
|
379
|
+
["git", "rev-parse", "--show-toplevel"],
|
|
380
|
+
stderr=subprocess.STDOUT,
|
|
381
|
+
text=True,
|
|
382
|
+
).strip()
|
|
383
|
+
|
|
384
|
+
# Determine base branch and get new migration files
|
|
385
|
+
base_branch = _get_base_branch_for_comparison()
|
|
386
|
+
migration_files = _get_new_migration_files(repo_root, base_branch)
|
|
387
|
+
|
|
388
|
+
if not migration_files:
|
|
389
|
+
log.info("No new migration files detected in current branch")
|
|
390
|
+
log.info("No new migrations to test.")
|
|
391
|
+
return
|
|
392
|
+
|
|
393
|
+
log.info(f"Detected {len(migration_files)} new migration(s) to test")
|
|
394
|
+
|
|
395
|
+
# Log the migrations in order
|
|
396
|
+
for i, file_path in enumerate(migration_files, 1):
|
|
397
|
+
log.info(f" {i}. {Path(file_path).name}")
|
|
398
|
+
|
|
399
|
+
alembic_config = get_alembic_config(database_url)
|
|
400
|
+
|
|
401
|
+
# Parse all migrations first
|
|
402
|
+
migrations = []
|
|
403
|
+
for file_path in migration_files:
|
|
404
|
+
abs_path = Path(repo_root) / file_path
|
|
405
|
+
revision, down_revision = _parse_migration_revisions(abs_path)
|
|
406
|
+
migrations.append((abs_path.name, revision, down_revision))
|
|
407
|
+
|
|
408
|
+
# Test all migrations in sequence
|
|
409
|
+
_test_migrations_upgrade_downgrade_sequence(alembic_config, migrations)
|
|
410
|
+
|
|
411
|
+
log.info(
|
|
412
|
+
f"All {len(migration_files)} new migration(s) passed upgrade/downgrade tests."
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
except subprocess.CalledProcessError as error:
|
|
416
|
+
# Git command failed - might not be in a git repo or no origin/main
|
|
417
|
+
log.warning(f"Could not detect new migrations via git: {error}")
|
|
418
|
+
log.warning(
|
|
419
|
+
"Skipping migration upgrade/downgrade check (git detection failed)."
|
|
420
|
+
)
|
fides/api/db/seed.py
CHANGED
|
@@ -388,7 +388,7 @@ async def load_samples(async_session: AsyncSession) -> None:
|
|
|
388
388
|
) # not supported by this API!
|
|
389
389
|
instantiate_connection_from_template(
|
|
390
390
|
db=db_session,
|
|
391
|
-
|
|
391
|
+
connector_template_type=connection.saas_connector_type,
|
|
392
392
|
template_values=SaasConnectionTemplateValues.model_validate(
|
|
393
393
|
saas_template_data
|
|
394
394
|
),
|
|
@@ -8,16 +8,20 @@
|
|
|
8
8
|
<main>
|
|
9
9
|
<p>Hello {{ display_name }},</p>
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
{% if custom_intro %}
|
|
12
|
+
<div>{{ custom_intro | safe }}</div>
|
|
13
|
+
{% else %}
|
|
14
|
+
<p>An account has been created for you by the privacy team at {{ org_name }} so that you can assist them in responding to data subject requests, as required by the GDPR and many US state laws, for users that have data in your systems.</p>
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
<p>A portal is available to view and take action on these requests at: <a href="{{ portal_link }}">{{ portal_link }}</a>. Through this portal you can upload or provide user data for users who have requested a copy of their information and attest that users have been removed from your system in the case of an erasure request.</p>
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
<p>The provided link is valid for 30 days and you will be asked to verify your email address each time you access the portal.</p>
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
<p>If you have any questions, please reach out first to your contacts at: {{ org_name }}</p>
|
|
21
|
+
{% endif %}
|
|
18
22
|
|
|
19
23
|
<p>Regards,<br/>
|
|
20
24
|
{{ org_name }} Privacy Team</p>
|
|
21
25
|
</main>
|
|
22
26
|
</body>
|
|
23
|
-
</html>
|
|
27
|
+
</html>
|
|
@@ -33,6 +33,9 @@ This means that after the constraint is created, the index will have the same na
|
|
|
33
33
|
"""
|
|
34
34
|
|
|
35
35
|
POST_UPGRADE_INDEX_CREATION = "post_upgrade_index_creation"
|
|
36
|
+
# This is the threshold for the number of rows in a table to create the index during application startup
|
|
37
|
+
# The value follows the pattern established in migrations for the tables in the TABLE_OBJECT_MAP
|
|
38
|
+
INDEX_ROW_COUNT_THRESHOLD = 1000000
|
|
36
39
|
|
|
37
40
|
TABLE_OBJECT_MAP: Dict[str, List[Dict[str, str]]] = {
|
|
38
41
|
"currentprivacypreferencev2": [
|
|
@@ -93,6 +96,13 @@ TABLE_OBJECT_MAP: Dict[str, List[Dict[str, str]]] = {
|
|
|
93
96
|
"type": "index",
|
|
94
97
|
},
|
|
95
98
|
],
|
|
99
|
+
"providedidentity": [
|
|
100
|
+
{
|
|
101
|
+
"name": "ix_providedidentity_privacy_request_id",
|
|
102
|
+
"statement": "CREATE INDEX CONCURRENTLY ix_providedidentity_privacy_request_id ON providedidentity (privacy_request_id)",
|
|
103
|
+
"type": "index",
|
|
104
|
+
},
|
|
105
|
+
],
|
|
96
106
|
"servednoticehistory": [
|
|
97
107
|
{
|
|
98
108
|
"name": "ix_servednoticehistory_hashed_external_id",
|
|
@@ -71,7 +71,8 @@ class ConnectionType(enum.Enum):
|
|
|
71
71
|
timescale = "timescale"
|
|
72
72
|
website = "website"
|
|
73
73
|
# Test connection types, used for testing purposes only
|
|
74
|
-
|
|
74
|
+
test_datastore = "test_datastore" # used for ConfigurableTestMonitor
|
|
75
|
+
test_website = "test_website" # used for ConfigurableTestWebsiteMonitor
|
|
75
76
|
|
|
76
77
|
@property
|
|
77
78
|
def human_readable(self) -> str:
|
|
@@ -109,6 +110,7 @@ class ConnectionType(enum.Enum):
|
|
|
109
110
|
ConnectionType.sovrn.value: "Sovrn",
|
|
110
111
|
ConnectionType.timescale.value: "TimescaleDB",
|
|
111
112
|
ConnectionType.website.value: "Website",
|
|
113
|
+
ConnectionType.test_datastore.value: "Test Datastore Connector -- not for production use",
|
|
112
114
|
ConnectionType.test_website.value: "Test Website Connector -- not for production use",
|
|
113
115
|
}
|
|
114
116
|
try:
|
|
@@ -155,6 +157,7 @@ class ConnectionType(enum.Enum):
|
|
|
155
157
|
ConnectionType.sovrn.value: SystemType.email,
|
|
156
158
|
ConnectionType.timescale.value: SystemType.database,
|
|
157
159
|
ConnectionType.website.value: SystemType.website,
|
|
160
|
+
ConnectionType.test_datastore.value: SystemType.database,
|
|
158
161
|
ConnectionType.test_website.value: SystemType.website,
|
|
159
162
|
}
|
|
160
163
|
|
|
@@ -17,6 +17,7 @@ from .monitor_task import (
|
|
|
17
17
|
create_monitor_task_with_execution_log,
|
|
18
18
|
update_monitor_task_with_execution_log,
|
|
19
19
|
)
|
|
20
|
+
from .staged_resource_error import StagedResourceError
|
|
20
21
|
|
|
21
22
|
__all__ = [
|
|
22
23
|
"ClassificationBenchmark",
|
|
@@ -27,6 +28,7 @@ __all__ = [
|
|
|
27
28
|
"SharedMonitorConfig",
|
|
28
29
|
"StagedResource",
|
|
29
30
|
"StagedResourceAncestor",
|
|
31
|
+
"StagedResourceError",
|
|
30
32
|
"fetch_staged_resources_by_type_query",
|
|
31
33
|
"MonitorTask",
|
|
32
34
|
"MonitorTaskExecutionLog",
|
|
@@ -29,6 +29,9 @@ from sqlalchemy.orm.query import Query
|
|
|
29
29
|
|
|
30
30
|
from fides.api.db.base_class import Base, FidesBase
|
|
31
31
|
from fides.api.models.connectionconfig import ConnectionConfig
|
|
32
|
+
from fides.api.models.detection_discovery.staged_resource_error import (
|
|
33
|
+
StagedResourceError,
|
|
34
|
+
)
|
|
32
35
|
from fides.api.models.sql_models import System # type: ignore[attr-defined]
|
|
33
36
|
|
|
34
37
|
|
|
@@ -573,6 +576,13 @@ class StagedResource(Base):
|
|
|
573
576
|
# diff-related fields
|
|
574
577
|
diff_status = Column(String, nullable=True, index=True)
|
|
575
578
|
|
|
579
|
+
errors: RelationshipProperty[List[StagedResourceError]] = relationship(
|
|
580
|
+
"StagedResourceError",
|
|
581
|
+
foreign_keys=[StagedResourceError.staged_resource_urn],
|
|
582
|
+
primaryjoin="StagedResource.urn == StagedResourceError.staged_resource_urn",
|
|
583
|
+
cascade="all, delete-orphan",
|
|
584
|
+
)
|
|
585
|
+
|
|
576
586
|
ancestor_links: RelationshipProperty[List[StagedResourceAncestor]] = relationship(
|
|
577
587
|
"StagedResourceAncestor",
|
|
578
588
|
back_populates="descendant_staged_resource",
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Module for staged resource error tracking."""
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import Column, DateTime, ForeignKey, String
|
|
4
|
+
|
|
5
|
+
from fides.api.db.base_class import Base, FidesBase
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class StagedResourceError(Base):
|
|
9
|
+
"""
|
|
10
|
+
DB model for tracking errors associated with staged resources.
|
|
11
|
+
Linked to StagedResource via FK with cascade delete.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
|
|
15
|
+
staged_resource_urn = Column(
|
|
16
|
+
String,
|
|
17
|
+
ForeignKey("stagedresource.urn", ondelete="CASCADE"),
|
|
18
|
+
nullable=False,
|
|
19
|
+
index=True,
|
|
20
|
+
)
|
|
21
|
+
message = Column(String, nullable=False)
|
|
22
|
+
timestamp = Column(DateTime(timezone=True), nullable=False)
|
|
23
|
+
error_type = Column(String, nullable=False)
|
|
24
|
+
diff_status = Column(String, nullable=False) # Phase where error occurred
|
|
25
|
+
task_id = Column(String, nullable=True, index=True)
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from uuid import uuid4
|
|
4
4
|
|
|
5
|
-
from sqlalchemy import Column, ForeignKey, String
|
|
5
|
+
from sqlalchemy import Column, ForeignKey, Integer, String
|
|
6
6
|
|
|
7
7
|
from fides.api.db.base_class import Base
|
|
8
8
|
|
|
@@ -42,3 +42,8 @@ class ExperienceNotices(Base):
|
|
|
42
42
|
nullable=False,
|
|
43
43
|
primary_key=True,
|
|
44
44
|
)
|
|
45
|
+
display_order = Column(
|
|
46
|
+
Integer,
|
|
47
|
+
nullable=True,
|
|
48
|
+
doc="Optional ordering for notices within an experience. Lower values appear first.",
|
|
49
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
2
|
|
|
3
|
-
from sqlalchemy import Column, String, Text
|
|
3
|
+
from sqlalchemy import Boolean, Column, String, Text
|
|
4
4
|
from sqlalchemy.ext.declarative import declared_attr
|
|
5
5
|
|
|
6
6
|
from fides.api.db.base_class import Base, FidesBase
|
|
@@ -63,3 +63,4 @@ class IdentityDefinition(Base):
|
|
|
63
63
|
nullable=False,
|
|
64
64
|
)
|
|
65
65
|
created_by = Column(String(255), nullable=True)
|
|
66
|
+
is_default = Column(Boolean, nullable=False, server_default="false")
|
|
@@ -408,6 +408,28 @@ privacy_notice_regions_by_id: Dict[str, Union[Location, LocationGroup]] = (
|
|
|
408
408
|
) # should only be accessed for read-only access
|
|
409
409
|
|
|
410
410
|
|
|
411
|
+
def get_location_by_id(location: str) -> Optional[Location]:
|
|
412
|
+
"""
|
|
413
|
+
Get a Location object by ID, with automatic format normalization.
|
|
414
|
+
|
|
415
|
+
Handles various location formats (e.g., "US-CA", "us-ca", "us_ca") by
|
|
416
|
+
normalizing to the internal format (lowercase with underscores) used in locations.yml.
|
|
417
|
+
|
|
418
|
+
Args:
|
|
419
|
+
location: Location string in any format
|
|
420
|
+
|
|
421
|
+
Returns:
|
|
422
|
+
Location object if found, None otherwise
|
|
423
|
+
|
|
424
|
+
Examples:
|
|
425
|
+
>>> get_location_by_id("US-CA") # ISO 3166 format
|
|
426
|
+
>>> get_location_by_id("us_ca") # Internal format
|
|
427
|
+
>>> get_location_by_id("us-ca") # Mixed format
|
|
428
|
+
"""
|
|
429
|
+
normalized = location.lower().replace("-", "_")
|
|
430
|
+
return locations_by_id.get(normalized)
|
|
431
|
+
|
|
432
|
+
|
|
411
433
|
# dynamically create an enum based on definitions loaded from YAML
|
|
412
434
|
# This is a combination of "locations" and "location groups" for use on Privacy Experiences
|
|
413
435
|
PrivacyNoticeRegion = Enum( # type: ignore[misc]
|
|
@@ -5,7 +5,7 @@ from pydantic import ConfigDict, create_model
|
|
|
5
5
|
from sqlalchemy import Column, ForeignKey, String, or_, text
|
|
6
6
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
7
7
|
from sqlalchemy.ext.mutable import MutableList
|
|
8
|
-
from sqlalchemy.orm import Session, relationship
|
|
8
|
+
from sqlalchemy.orm import Session, relationship, selectinload
|
|
9
9
|
|
|
10
10
|
from fides.api.db.base_class import Base
|
|
11
11
|
from fides.api.models.attachment import Attachment, AttachmentReference
|
|
@@ -137,11 +137,22 @@ class AccessManualWebhook(Base):
|
|
|
137
137
|
) -> list["AccessManualWebhook"]:
|
|
138
138
|
"""Get all enabled access manual webhooks with fields"""
|
|
139
139
|
|
|
140
|
-
query =
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
140
|
+
query = (
|
|
141
|
+
db.query(cls)
|
|
142
|
+
.join(
|
|
143
|
+
ConnectionConfig,
|
|
144
|
+
AccessManualWebhook.connection_config_id == ConnectionConfig.id,
|
|
145
|
+
)
|
|
146
|
+
.options(
|
|
147
|
+
selectinload(AccessManualWebhook.connection_config).selectinload(
|
|
148
|
+
ConnectionConfig.system
|
|
149
|
+
), # type: ignore[attr-defined]
|
|
150
|
+
)
|
|
151
|
+
.filter(
|
|
152
|
+
ConnectionConfig.disabled.is_(False),
|
|
153
|
+
AccessManualWebhook.fields != text("'null'"),
|
|
154
|
+
AccessManualWebhook.fields != "[]",
|
|
155
|
+
)
|
|
145
156
|
)
|
|
146
157
|
|
|
147
158
|
# Add action_type filter only if action_type is provided
|
|
@@ -65,6 +65,13 @@ DEFAULT_MESSAGING_TEMPLATES: Dict[str, Any] = {
|
|
|
65
65
|
"body": "This is your weekly summary of open data subject requests tasks from __ORGANIZATION_NAME__ that require your attention. Please review the tasks in our Privacy Center to ensure timely completion.",
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
|
+
MessagingActionType.EXTERNAL_USER_WELCOME.value: {
|
|
69
|
+
"label": "External user welcome",
|
|
70
|
+
"content": {
|
|
71
|
+
"subject": "Welcome to our Privacy Center",
|
|
72
|
+
"body": "An account has been created for you by the privacy team at __ORG_NAME__ so that you can assist them in responding to data subject requests, as required by the GDPR and many US state laws, for users that have data in your systems. A portal is available to view and take action on these requests at: __PORTAL_LINK__. Through this portal you can upload or provide user data for users who have requested a copy of their information and attest that users have been removed from your system in the case of an erasure request. The provided link is valid for 30 days and you will be asked to verify your email address each time you access the portal. If you have any questions, please reach out first to your contacts at: __ORG_NAME__",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
68
75
|
}
|
|
69
76
|
|
|
70
77
|
|
fides/api/models/policy.py
CHANGED
|
@@ -142,6 +142,9 @@ class Policy(Base):
|
|
|
142
142
|
except IndexError:
|
|
143
143
|
return None
|
|
144
144
|
|
|
145
|
+
def get_all_action_types(self) -> Set[ActionType]:
|
|
146
|
+
return set(rule.action_type for rule in self.rules) # type: ignore[attr-defined]
|
|
147
|
+
|
|
145
148
|
def generate_masking_secrets(self) -> Optional[List[MaskingSecretCache]]:
|
|
146
149
|
"""
|
|
147
150
|
Returns a list of masking secrets for the masking strategies in the policy.
|
|
@@ -17,6 +17,7 @@ from fides.api.models import (
|
|
|
17
17
|
dry_update_data,
|
|
18
18
|
update_if_modified,
|
|
19
19
|
)
|
|
20
|
+
from fides.api.models.experience_notices import ExperienceNotices
|
|
20
21
|
from fides.api.models.location_regulation_selections import PrivacyNoticeRegion
|
|
21
22
|
from fides.api.models.privacy_notice import PrivacyNotice
|
|
22
23
|
from fides.api.models.property import Property
|
|
@@ -48,6 +49,7 @@ class Layer1ButtonOption(Enum):
|
|
|
48
49
|
ACKNOWLEDGE = "acknowledge"
|
|
49
50
|
OPT_IN_OPT_OUT = "opt_in_opt_out"
|
|
50
51
|
OPT_IN_ONLY = "opt_in_only"
|
|
52
|
+
GPC_CONDITIONAL = "gpc_conditional"
|
|
51
53
|
|
|
52
54
|
|
|
53
55
|
class RejectAllMechanism(Enum):
|
|
@@ -271,6 +273,7 @@ class PrivacyExperienceConfig(PrivacyExperienceConfigBase, Base):
|
|
|
271
273
|
secondary="experiencenotices",
|
|
272
274
|
backref="experience_configs",
|
|
273
275
|
lazy="selectin",
|
|
276
|
+
order_by="ExperienceNotices.display_order.asc().nullslast()",
|
|
274
277
|
)
|
|
275
278
|
|
|
276
279
|
translations: RelationshipProperty[List[ExperienceTranslation]] = relationship(
|
|
@@ -748,15 +751,19 @@ def link_notices_to_experience_config(
|
|
|
748
751
|
) -> List[PrivacyNotice]:
|
|
749
752
|
"""
|
|
750
753
|
Link supplied Notices to ExperienceConfig and unlink any notices not supplied.
|
|
754
|
+
|
|
755
|
+
Preserves the order of notices by setting display_order on the junction table records.
|
|
751
756
|
"""
|
|
752
757
|
new_notices: Query = db.query(PrivacyNotice).filter(
|
|
753
758
|
PrivacyNotice.id.in_(notice_ids)
|
|
754
759
|
)
|
|
755
760
|
|
|
761
|
+
# Add new notices
|
|
756
762
|
for notice in new_notices:
|
|
757
763
|
if notice not in experience_config.privacy_notices:
|
|
758
764
|
experience_config.privacy_notices.append(notice)
|
|
759
765
|
|
|
766
|
+
# Remove notices that are no longer in the list
|
|
760
767
|
to_remove: Set[PrivacyNotice] = set(
|
|
761
768
|
notice for notice in experience_config.privacy_notices
|
|
762
769
|
) - set(notice for notice in new_notices)
|
|
@@ -765,6 +772,19 @@ def link_notices_to_experience_config(
|
|
|
765
772
|
experience_config.privacy_notices.remove(privacy_notice)
|
|
766
773
|
|
|
767
774
|
experience_config.save(db)
|
|
775
|
+
|
|
776
|
+
# Update display_order on the junction table records based on the order in notice_ids
|
|
777
|
+
for index, notice_id in enumerate(notice_ids):
|
|
778
|
+
db.query(ExperienceNotices).filter(
|
|
779
|
+
ExperienceNotices.notice_id == notice_id,
|
|
780
|
+
ExperienceNotices.experience_config_id == experience_config.id,
|
|
781
|
+
).update({"display_order": index})
|
|
782
|
+
|
|
783
|
+
db.commit()
|
|
784
|
+
|
|
785
|
+
# Expire the relationship to force reload with correct ordering
|
|
786
|
+
db.expire(experience_config, ["privacy_notices"])
|
|
787
|
+
|
|
768
788
|
return experience_config.privacy_notices
|
|
769
789
|
|
|
770
790
|
|