ethyca-fides 2.63.1rc0__py2.py3-none-any.whl → 2.63.3b0__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.63.1rc0.dist-info → ethyca_fides-2.63.3b0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.63.1rc0.dist-info → ethyca_fides-2.63.3b0.dist-info}/RECORD +241 -228
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/5efcdf18438e_add_manual_task_tables.py +160 -0
- fides/api/api/v1/endpoints/connection_endpoints.py +16 -3
- fides/api/api/v1/endpoints/oauth_endpoints.py +8 -2
- fides/api/db/base.py +2 -0
- fides/api/main.py +1 -0
- fides/api/models/attachment.py +36 -23
- fides/api/models/detection_discovery/monitor_task.py +1 -0
- fides/api/models/manual_tasks/__init__.py +8 -0
- fides/api/models/manual_tasks/manual_task.py +110 -0
- fides/api/models/manual_tasks/manual_task_log.py +100 -0
- fides/api/schemas/connection_configuration/connection_config.py +19 -4
- fides/api/schemas/manual_tasks/__init__.py +0 -0
- fides/api/schemas/manual_tasks/manual_task_schemas.py +79 -0
- fides/api/schemas/manual_tasks/manual_task_status.py +151 -0
- fides/api/service/connectors/query_configs/saas_query_config.py +15 -0
- fides/api/service/privacy_request/attachment_handling.py +132 -0
- fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +264 -46
- fides/api/service/privacy_request/dsr_package/templates/attachments_index.html +33 -0
- fides/api/service/privacy_request/dsr_package/templates/collection_index.html +34 -9
- fides/api/service/privacy_request/dsr_package/templates/main.css +45 -2
- fides/api/service/privacy_request/dsr_package/templates/welcome.html +12 -8
- fides/api/service/privacy_request/request_runner_service.py +258 -139
- fides/api/service/storage/gcs.py +15 -3
- fides/api/service/storage/s3.py +28 -14
- fides/api/service/storage/util.py +45 -7
- fides/api/tasks/csv_utils.py +170 -0
- fides/api/tasks/encryption_utils.py +42 -0
- fides/api/tasks/storage.py +85 -91
- fides/api/util/cache.py +77 -1
- fides/api/util/saas_util.py +1 -0
- fides/config/redis_settings.py +99 -8
- fides/service/manual_tasks/__init__.py +0 -0
- fides/service/manual_tasks/manual_task_service.py +150 -0
- fides/service/messaging/aws_ses_service.py +5 -1
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/0S8UTwc7FKVdi3Eb4LgFK/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1099-f2199d5b88dd98b4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1100-d617215143d70d3d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/155-8ad794121fef6281.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-ddfdd6ed9529bba6.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1904-e33cb75edb93d3d3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2310-efaa2a52fc487db4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/2921-19664dd93e2bf1ea.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3119-9be74ade1504a7e7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3505-f6d55694ca5c9816.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3513-656df06b45fedba3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3872-09df90521f7db611.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/3923-3d80020d02819c33.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/401-710009c2a7408818.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4060-4e196835f56cc326.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4121-80ac9bcd08f9cd7a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4132-76ca1bcf79bf1d77.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4481-be144b50994f5135.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5258-8a1f7feddee7a960.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5404-a8a82985736363f4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5487-483a111405f678e0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5683-7144f557d701406c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6202-86a62d94744e2c18.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-0b1e3d23e97f5e19.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6853-d9c6c55d8562bc9b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/69-a4d64cabe750b286.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6954-8ed05ffdbf2ec086.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7553-77c9715868d6ad13.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/79-6c977013b6bedc23.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/796-1d77aa88b776ee4e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/7980-3da0fe6938b0b758.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8032-4b8bda7166eff954.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8433-88fd946149dd1f27.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/8499-a65187ae77b7307b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{905-8ab919e7b274ed50.js → 905-5fe5124abfb5c542.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9327-eb3b84680abcc660.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{9392.81edc11e3a175275.js → 9392.25024e070026343d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/9494-04a0483ed0ddad7c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9676.e60a53f1f5890847.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/9767-a3ed98edff04e6ed.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/404-c50dccc133b332a9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-33bc23b79bffe07c.js → _app-0e0fdbcc0ec1c76b.js} +10 -10
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-3065022f370ec055.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-357ef3b269c576bb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-e8ae218a9d124ba7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-488507bb244cce9d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-6f0b46ac2b112bfe.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-5024b4ab40ba024c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-2b62e5facfc51808.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-71791459da78e35d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-26a7d52615b1ebb8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-25836dd5142f37e8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-3a9021850242c78f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-9a5d3cc5cbb4ef27.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-9e21184279f8e126.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-64cea013d41e348a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-b02050eb3b7113d4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-ff211c7a968bda47.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-7f7435f28861ee78.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-ec4b981fd9cff542.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-18c144223277bc2e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-e18f14b8d598e942.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-9af01b6cf4cbe8af.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-1987ef0d3c687aaa.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-979828f48148b37c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-e85c3537d3aade4a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-6d44abbe7d454435.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-42f276660c107e1c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-18ff06fc09c22c33.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-979eff6888e42b6b.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-343a3830b2d4cf22.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/index-737b0c430bf2f7a0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-63361d914d70d647.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-fd73f276dad7a06c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-91e865a65a88d1a4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-529c7e09b073edd2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-6226faba9595da71.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-0f7d4390e01f4ffb.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-a4e470f75a5553f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-d814c1c56b4b04d8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-0f68f2be09df2c76.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-6b63d5c992466891.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-88eb9b98e8e4b426.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-a3da91fd04eec8f5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-b2ea863afce1d7f0.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-0831dfaa65ce0d50.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-709676f00a491bca.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-0eac9951504b46a7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-88e20023c30113df.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-3acc3107e9a21260.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-2bf13ee02d8d5ab9.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/properties-822eac07220f55f8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-f85f92726a61a668.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-88999260f855b448.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-928b0b69e05fd430.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-e090903a572cba68.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-f0c8e4eced9f5cc5.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-f7a271ee53cb4e51.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-611980eee1ce9c8a.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-382cb6df12684bf8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-5d664f2a0f11b626.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-ba569d22e1e3f6df.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-dd903f6e03c4ee4e.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-fae8ecf7878bad2d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-493dc9b4595c9fb4.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-2b540203a2d7b59d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-a278608ba0ddc66c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-6d790458dd21dde7.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-eb30c9230a9ce9cc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-381146aa81e3ffea.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{webpack-8457bad7859c44f0.js → webpack-abfd03ce7f1e55ac.js} +1 -1
- fides/ui-build/static/admin/_next/static/css/c3377f99bf988d68.css +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/images/connector-logos/salesforce.svg +41 -0
- 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/service/privacy_request/dsr_package/templates/item.html +0 -37
- fides/ui-build/static/admin/_next/static/PEElhfUdgE5bJjiyu5QCD/_buildManifest.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1099-667e84655846e78c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1100-0b01f500b1eaf60d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-951f58ddd5d46081.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1904-361e37a5811ed7fc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2310-744354001d01f366.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/2921-49af55ad7c631c93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3119-e36ae5071c8f27a5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3505-113f9c95d34b7aae.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3513-5c2d412a84a78971.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3872-45cc725e241211f0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3923-b4f701ada3ef0ee0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/401-7e800aed05537126.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4060-90a52a9afc655bfc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4121-66b0e00d5e7ae817.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4132-9b1731bfec6ee537.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4481-7f6710c928bb0cb0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5258-2079138c8cc34f6c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5404-2694509cf5fa96da.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5487-2cbd8d2169eb2a65.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/5683-37137111b3e769fb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6202-081545c7822d09af.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6277-459e054b2702c60e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6853-688df0b88fe65fd5.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/69-00cba94689b9e740.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6954-4e313b4599b8763d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7553-08bc3d9f66695111.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/79-fc548561beed136f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/796-d6586308ed44334b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/7980-736f9fd1e749ddd2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8032-74d94f7bd5b81c89.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8433-51870336908fb253.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/8499-1fd392d0be9e8ee4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9033-fdd87182c15b91e2.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9327-6a53461c9764b16f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9494-1ffb888b95289891.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9676.61cf5f6d6a083175.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/9767-afd674014a1d1152.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/404-ec04f826f3dd79ea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/manual-1bec086d567aacff.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/multiple-f68bf100e4e60e88.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-effde5cfe49de55f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/add-vendors-ec95ed8cb0712828.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure-4cc195e15e0c3cc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/[id]-be8972c79fb39705.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience-ccf96207de3b74ea.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/[id]-b9823cc008372cee.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/new-373f5772ab41bc93.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices-b9beeee1bde5ca79.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/properties-6ab3a5baafebd199.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-8562790ae07f17c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent-42d4d2d6e0253671.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-9d1df6d890671b0c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects-7eb08af333baaa8e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog-bb57eed84f59a932.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-47eb34aef3e31ac6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-76cefefc53e84c7f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center-9d8e84a8b4bf568d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-c3eaadd88a2e6caa.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-db45aa864e9dda8a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-d5cfdebc74654337.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]-618b89228f83435e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]-12fc86f15a4c764e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-c23d18a9b56c2e3c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset-e3b2d8e3980ab093.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/[id]-6e27257eccf65f01.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/new-bbac1f624424282d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection-84eb56f5a07bdf4f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/index-773182b5e35d0045.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-eb28c927da5bd653.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-781808bca01f8048.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/[id]-b51bee8680d66b20.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging/add-template-1de479533f733fbd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/messaging-7dc295b3ed3d2224.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/ant-components-f64dac3392f5ded7.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/AntForm-eb020bfac4bee532.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikAntFormItem-0bd62e28b539e114.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikControlled-936877004113c2a6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/FormikField-6416f01524482af9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/forms-3f4e1313d1f2969b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/poc/table-migration-1db7a54437db7db0.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-64236fd0141414fd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/messaging-8cab04871908cfeb.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-150d40428245ee0c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure-b6c876dceb16ad1b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-20cdb2c8a03deae1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/[id]-54bcc875592d1fb9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties/add-property-644dc669b508a79a.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/properties-9a88220d03e7e02f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/reporting/datamap-70dc1081df37ea69.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/alpha-3c71b4dbcb6fd6c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/about-7cb16e0000dd16c9.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-a18d8f12ee8dcf5d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-dc220e116ad5c09e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-55ddc5f25b86f28e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domain-records-5ca7decded228bc8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/domains-a6fafa1be2834c40.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/email-templates-e633750d2b45ddd6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/locations-3948686cbd372969.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/organization-04ece499c22d23f4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/regulations-7752305084280cca.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/test-datasets-9e5f9066be6f218d.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]-86de9e6d72098e45.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-cac52e6c3abf6a15.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-60d5930b6855679b.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/[id]-b0f4c34752d32c73.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/user-management-7dee83dd6d9292aa.js +0 -1
- fides/ui-build/static/admin/_next/static/css/1fdf5c593349dbc6.css +0 -1
- {ethyca_fides-2.63.1rc0.dist-info → ethyca_fides-2.63.3b0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.63.1rc0.dist-info → ethyca_fides-2.63.3b0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.63.1rc0.dist-info → ethyca_fides-2.63.3b0.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.63.1rc0.dist-info → ethyca_fides-2.63.3b0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{PEElhfUdgE5bJjiyu5QCD → 0S8UTwc7FKVdi3Eb4LgFK}/_ssgManifest.js +0 -0
fides/_version.py
CHANGED
@@ -8,11 +8,11 @@ import json
|
|
8
8
|
|
9
9
|
version_json = '''
|
10
10
|
{
|
11
|
-
"date": "2025-06-
|
11
|
+
"date": "2025-06-12T18:57:31-0300",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "2.63.
|
14
|
+
"full-revisionid": "14baaf4b4e688a68ff32098124e78e6bab89dcb5",
|
15
|
+
"version": "2.63.3b0"
|
16
16
|
}
|
17
17
|
''' # END VERSION_JSON
|
18
18
|
|
@@ -0,0 +1,160 @@
|
|
1
|
+
"""add manual task tables
|
2
|
+
|
3
|
+
Revision ID: 5efcdf18438e
|
4
|
+
Revises: c586a56c25e7
|
5
|
+
Create Date: 2025-06-04 17:24:00.300170
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
import sqlalchemy as sa
|
10
|
+
from alembic import op
|
11
|
+
from sqlalchemy.dialects import postgresql
|
12
|
+
from sqlalchemy.sql import func
|
13
|
+
|
14
|
+
# revision identifiers, used by Alembic.
|
15
|
+
revision = "5efcdf18438e"
|
16
|
+
down_revision = "c586a56c25e7"
|
17
|
+
branch_labels = None
|
18
|
+
depends_on = None
|
19
|
+
|
20
|
+
|
21
|
+
def upgrade():
|
22
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
23
|
+
op.create_table(
|
24
|
+
"manual_task",
|
25
|
+
sa.Column("id", sa.String(), nullable=False),
|
26
|
+
sa.Column(
|
27
|
+
"created_at",
|
28
|
+
sa.DateTime(timezone=True),
|
29
|
+
nullable=False,
|
30
|
+
server_default=func.now(),
|
31
|
+
),
|
32
|
+
sa.Column(
|
33
|
+
"updated_at",
|
34
|
+
sa.DateTime(timezone=True),
|
35
|
+
nullable=False,
|
36
|
+
server_default=func.now(),
|
37
|
+
),
|
38
|
+
sa.Column(
|
39
|
+
"task_type", sa.String(), nullable=False, server_default="privacy_request"
|
40
|
+
),
|
41
|
+
sa.Column("parent_entity_id", sa.String(), nullable=False),
|
42
|
+
sa.Column("parent_entity_type", sa.String(), nullable=False),
|
43
|
+
sa.Column("due_date", sa.DateTime(timezone=True), nullable=True),
|
44
|
+
sa.PrimaryKeyConstraint("id"),
|
45
|
+
sa.UniqueConstraint(
|
46
|
+
"parent_entity_id",
|
47
|
+
"parent_entity_type",
|
48
|
+
name="uq_manual_task_parent_entity",
|
49
|
+
),
|
50
|
+
)
|
51
|
+
|
52
|
+
op.create_table(
|
53
|
+
"manual_task_reference",
|
54
|
+
sa.Column("id", sa.String(), nullable=False),
|
55
|
+
sa.Column(
|
56
|
+
"created_at",
|
57
|
+
sa.DateTime(timezone=True),
|
58
|
+
nullable=False,
|
59
|
+
server_default=func.now(),
|
60
|
+
),
|
61
|
+
sa.Column(
|
62
|
+
"updated_at",
|
63
|
+
sa.DateTime(timezone=True),
|
64
|
+
nullable=False,
|
65
|
+
server_default=func.now(),
|
66
|
+
),
|
67
|
+
sa.Column("task_id", sa.String(), nullable=False),
|
68
|
+
sa.Column("reference_id", sa.String(), nullable=False),
|
69
|
+
sa.Column("reference_type", sa.String(), nullable=False),
|
70
|
+
sa.ForeignKeyConstraint(
|
71
|
+
["task_id"],
|
72
|
+
["manual_task.id"],
|
73
|
+
ondelete="CASCADE",
|
74
|
+
),
|
75
|
+
sa.PrimaryKeyConstraint("id"),
|
76
|
+
)
|
77
|
+
|
78
|
+
op.create_table(
|
79
|
+
"manual_task_log",
|
80
|
+
sa.Column("id", sa.String(), nullable=False),
|
81
|
+
sa.Column(
|
82
|
+
"created_at",
|
83
|
+
sa.DateTime(timezone=True),
|
84
|
+
nullable=False,
|
85
|
+
server_default=func.now(),
|
86
|
+
),
|
87
|
+
sa.Column(
|
88
|
+
"updated_at",
|
89
|
+
sa.DateTime(timezone=True),
|
90
|
+
nullable=False,
|
91
|
+
server_default=func.now(),
|
92
|
+
),
|
93
|
+
sa.Column("task_id", sa.String(), nullable=False),
|
94
|
+
sa.Column("config_id", sa.String(), nullable=True),
|
95
|
+
sa.Column("instance_id", sa.String(), nullable=True),
|
96
|
+
sa.Column("status", sa.String(), nullable=False),
|
97
|
+
sa.Column("message", sa.String(), nullable=True),
|
98
|
+
sa.Column("details", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
99
|
+
sa.ForeignKeyConstraint(
|
100
|
+
["task_id"],
|
101
|
+
["manual_task.id"],
|
102
|
+
ondelete="CASCADE",
|
103
|
+
),
|
104
|
+
sa.PrimaryKeyConstraint("id"),
|
105
|
+
)
|
106
|
+
|
107
|
+
# Create indexes for manual_task
|
108
|
+
op.create_index("ix_manual_task_task_type", "manual_task", ["task_type"])
|
109
|
+
op.create_index(
|
110
|
+
"ix_manual_task_parent_entity",
|
111
|
+
"manual_task",
|
112
|
+
["parent_entity_type", "parent_entity_id"],
|
113
|
+
)
|
114
|
+
op.create_index("ix_manual_task_due_date", "manual_task", ["due_date"])
|
115
|
+
|
116
|
+
# Create indexes for manual_task_reference
|
117
|
+
op.create_index(
|
118
|
+
"ix_manual_task_reference_task_id", "manual_task_reference", ["task_id"]
|
119
|
+
)
|
120
|
+
op.create_index(
|
121
|
+
"ix_manual_task_reference_reference",
|
122
|
+
"manual_task_reference",
|
123
|
+
["reference_id", "reference_type"],
|
124
|
+
)
|
125
|
+
|
126
|
+
# Create indexes for manual_task_log
|
127
|
+
op.create_index("ix_manual_task_log_task_id", "manual_task_log", ["task_id"])
|
128
|
+
op.create_index("ix_manual_task_log_config_id", "manual_task_log", ["config_id"])
|
129
|
+
op.create_index(
|
130
|
+
"ix_manual_task_log_instance_id", "manual_task_log", ["instance_id"]
|
131
|
+
)
|
132
|
+
op.create_index("ix_manual_task_log_status", "manual_task_log", ["status"])
|
133
|
+
op.create_index("ix_manual_task_log_created_at", "manual_task_log", ["created_at"])
|
134
|
+
|
135
|
+
# ### end Alembic commands ###
|
136
|
+
|
137
|
+
|
138
|
+
def downgrade():
|
139
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
140
|
+
# Drop indexes first
|
141
|
+
op.drop_index("ix_manual_task_log_created_at", table_name="manual_task_log")
|
142
|
+
op.drop_index("ix_manual_task_log_status", table_name="manual_task_log")
|
143
|
+
op.drop_index("ix_manual_task_log_instance_id", table_name="manual_task_log")
|
144
|
+
op.drop_index("ix_manual_task_log_config_id", table_name="manual_task_log")
|
145
|
+
op.drop_index("ix_manual_task_log_task_id", table_name="manual_task_log")
|
146
|
+
op.drop_index(
|
147
|
+
"ix_manual_task_reference_reference", table_name="manual_task_reference"
|
148
|
+
)
|
149
|
+
op.drop_index(
|
150
|
+
"ix_manual_task_reference_task_id", table_name="manual_task_reference"
|
151
|
+
)
|
152
|
+
op.drop_index("ix_manual_task_due_date", table_name="manual_task")
|
153
|
+
op.drop_index("ix_manual_task_parent_entity", table_name="manual_task")
|
154
|
+
op.drop_index("ix_manual_task_task_type", table_name="manual_task")
|
155
|
+
|
156
|
+
# Then drop tables
|
157
|
+
op.drop_table("manual_task_log")
|
158
|
+
op.drop_table("manual_task_reference")
|
159
|
+
op.drop_table("manual_task")
|
160
|
+
# ### end Alembic commands ###
|
@@ -22,6 +22,7 @@ from fides.api.schemas.connection_configuration import connection_secrets_schema
|
|
22
22
|
from fides.api.schemas.connection_configuration.connection_config import (
|
23
23
|
BulkPutConnectionConfiguration,
|
24
24
|
ConnectionConfigurationResponse,
|
25
|
+
ConnectionConfigurationResponseWithSystemKey,
|
25
26
|
CreateConnectionConfigurationWithSecrets,
|
26
27
|
)
|
27
28
|
from fides.api.schemas.connection_configuration.connection_secrets import (
|
@@ -154,13 +155,25 @@ def get_connections(
|
|
154
155
|
@router.get(
|
155
156
|
CONNECTION_BY_KEY,
|
156
157
|
dependencies=[Security(verify_oauth_client, scopes=[CONNECTION_READ])],
|
157
|
-
response_model=
|
158
|
+
response_model=ConnectionConfigurationResponseWithSystemKey,
|
158
159
|
)
|
159
160
|
def get_connection_detail(
|
160
161
|
connection_key: FidesKey, db: Session = Depends(deps.get_db)
|
161
|
-
) ->
|
162
|
+
) -> ConnectionConfigurationResponseWithSystemKey:
|
162
163
|
"""Returns connection configuration with matching key."""
|
163
|
-
|
164
|
+
connection_config = get_connection_config_or_error(db, connection_key)
|
165
|
+
|
166
|
+
# Convert to Pydantic model with all fields
|
167
|
+
response = ConnectionConfigurationResponseWithSystemKey.model_validate(
|
168
|
+
connection_config
|
169
|
+
)
|
170
|
+
|
171
|
+
# Override just the system_key field to use only the system's fides_key without fallback
|
172
|
+
response.system_key = (
|
173
|
+
connection_config.system.fides_key if connection_config.system else None
|
174
|
+
)
|
175
|
+
|
176
|
+
return response
|
164
177
|
|
165
178
|
|
166
179
|
@router.patch(
|
@@ -274,9 +274,15 @@ def oauth_callback(code: str, state: str, db: Session = Depends(get_db)) -> Resp
|
|
274
274
|
|
275
275
|
parsed_url = urlparse(authentication_request.referer)
|
276
276
|
base_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
|
277
|
-
|
277
|
+
|
278
|
+
if connection_config.system is not None:
|
279
|
+
system_key = connection_config.system.fides_key
|
280
|
+
redirect_path = f"/systems/configure/{system_key}"
|
281
|
+
else:
|
282
|
+
redirect_path = f"/integrations/{connection_config.key}"
|
283
|
+
|
278
284
|
return RedirectResponse(
|
279
|
-
url=f"{base_url}
|
285
|
+
url=f"{base_url}{redirect_path}?status={test_status_value}"
|
280
286
|
)
|
281
287
|
return PlainTextResponse(
|
282
288
|
content=f"Connection test status: {test_status_value}. No referer URL available. Please navigate back to the Fides Admin UI.",
|
fides/api/db/base.py
CHANGED
@@ -31,6 +31,8 @@ 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.manual_tasks.manual_task import ManualTask, ManualTaskReference
|
35
|
+
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
34
36
|
from fides.api.models.manual_webhook import AccessManualWebhook
|
35
37
|
from fides.api.models.messaging import MessagingConfig
|
36
38
|
from fides.api.models.messaging_template import MessagingTemplate
|
fides/api/main.py
CHANGED
@@ -244,6 +244,7 @@ async def log_request(request: Request, call_next: Callable) -> Response:
|
|
244
244
|
status_code=response.status_code,
|
245
245
|
handler_time=f"{total_time}ms",
|
246
246
|
path=request.url.path,
|
247
|
+
fides_client=request.headers.get("Fides-Client", "unknown"),
|
247
248
|
).info("Request received")
|
248
249
|
return response
|
249
250
|
|
fides/api/models/attachment.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
from enum import Enum as EnumType
|
3
|
+
from io import BytesIO
|
3
4
|
from typing import IO, TYPE_CHECKING, Any, Tuple
|
4
5
|
|
5
6
|
from fideslang.validation import AnyHttpUrlString
|
@@ -19,7 +20,6 @@ from fides.api.service.storage.s3 import (
|
|
19
20
|
generic_upload_to_s3,
|
20
21
|
)
|
21
22
|
from fides.api.service.storage.util import AllowedFileType, get_local_filename
|
22
|
-
from fides.config import CONFIG
|
23
23
|
|
24
24
|
if TYPE_CHECKING:
|
25
25
|
from fides.api.models.comment import Comment
|
@@ -28,6 +28,11 @@ if TYPE_CHECKING:
|
|
28
28
|
from fides.api.models.storage import StorageConfig
|
29
29
|
|
30
30
|
|
31
|
+
# This is 7 days in seconds and is currently the max allowed
|
32
|
+
# configurable expiration time for presigned URLs for both s3 and gcs.
|
33
|
+
MAX_TTL_SECONDS = 604800
|
34
|
+
|
35
|
+
|
31
36
|
class AttachmentType(str, EnumType):
|
32
37
|
"""
|
33
38
|
Enum for attachment types. Indicates attachment usage.
|
@@ -122,6 +127,11 @@ class Attachment(Base):
|
|
122
127
|
"""Returns the content type of the attachment."""
|
123
128
|
return AllowedFileType[self.file_name.split(".")[-1]].value
|
124
129
|
|
130
|
+
@property
|
131
|
+
def file_key(self) -> str:
|
132
|
+
"""Returns the file key of the attachment."""
|
133
|
+
return f"{self.id}/{self.file_name}"
|
134
|
+
|
125
135
|
def upload(self, attachment: IO[bytes]) -> None:
|
126
136
|
"""Uploads an attachment to S3, GCS, or local storage."""
|
127
137
|
if self.config.type == StorageType.s3:
|
@@ -130,7 +140,7 @@ class Attachment(Base):
|
|
130
140
|
generic_upload_to_s3(
|
131
141
|
storage_secrets=self.config.secrets,
|
132
142
|
bucket_name=bucket_name,
|
133
|
-
file_key=
|
143
|
+
file_key=self.file_key,
|
134
144
|
document=attachment,
|
135
145
|
auth_method=auth_method,
|
136
146
|
)
|
@@ -142,7 +152,7 @@ class Attachment(Base):
|
|
142
152
|
auth_method = self.config.details[StorageDetails.AUTH_METHOD.value]
|
143
153
|
storage_client = get_gcs_client(auth_method, self.config.secrets)
|
144
154
|
bucket = storage_client.bucket(bucket_name)
|
145
|
-
blob = bucket.blob(
|
155
|
+
blob = bucket.blob(self.file_key)
|
146
156
|
|
147
157
|
# Reset the file pointer to the beginning
|
148
158
|
try:
|
@@ -155,7 +165,7 @@ class Attachment(Base):
|
|
155
165
|
return
|
156
166
|
|
157
167
|
if self.config.type == StorageType.local:
|
158
|
-
filename = get_local_filename(
|
168
|
+
filename = get_local_filename(self.file_key)
|
159
169
|
|
160
170
|
# Validate that attachment is a file-like object
|
161
171
|
if not hasattr(attachment, "read"):
|
@@ -205,9 +215,10 @@ class Attachment(Base):
|
|
205
215
|
size, url = generic_retrieve_from_s3(
|
206
216
|
storage_secrets=self.config.secrets,
|
207
217
|
bucket_name=bucket_name,
|
208
|
-
file_key=
|
218
|
+
file_key=self.file_key,
|
209
219
|
auth_method=auth_method,
|
210
220
|
get_content=False,
|
221
|
+
ttl_seconds=MAX_TTL_SECONDS,
|
211
222
|
)
|
212
223
|
return size, url
|
213
224
|
|
@@ -216,19 +227,20 @@ class Attachment(Base):
|
|
216
227
|
auth_method = self.config.details[StorageDetails.AUTH_METHOD.value]
|
217
228
|
storage_client = get_gcs_client(auth_method, self.config.secrets)
|
218
229
|
bucket = storage_client.bucket(bucket_name)
|
219
|
-
blob = bucket.blob(
|
230
|
+
blob = bucket.blob(self.file_key)
|
220
231
|
|
221
232
|
# Ensure we have the blob metadata
|
222
233
|
blob.reload()
|
234
|
+
# Expiration is set to 7 days
|
223
235
|
url = blob.generate_signed_url(
|
224
236
|
version="v4",
|
225
|
-
expiration=
|
237
|
+
expiration=MAX_TTL_SECONDS,
|
226
238
|
method="GET",
|
227
239
|
)
|
228
240
|
return blob.size, url
|
229
241
|
|
230
242
|
if self.config.type == StorageType.local:
|
231
|
-
filename = get_local_filename(
|
243
|
+
filename = get_local_filename(self.file_key)
|
232
244
|
size = os.path.getsize(filename)
|
233
245
|
return size, filename
|
234
246
|
|
@@ -236,7 +248,7 @@ class Attachment(Base):
|
|
236
248
|
|
237
249
|
def retrieve_attachment_content(
|
238
250
|
self,
|
239
|
-
) -> Tuple[int, bytes]:
|
251
|
+
) -> Tuple[int, IO[bytes]]:
|
240
252
|
"""
|
241
253
|
Retrieves the size of the attachment and its actual content.
|
242
254
|
- For s3:
|
@@ -252,30 +264,33 @@ class Attachment(Base):
|
|
252
264
|
if self.config.type == StorageType.s3:
|
253
265
|
bucket_name = f"{self.config.details[StorageDetails.BUCKET.value]}"
|
254
266
|
auth_method = self.config.details[StorageDetails.AUTH_METHOD.value]
|
255
|
-
size,
|
267
|
+
size, fileobj = generic_retrieve_from_s3(
|
256
268
|
storage_secrets=self.config.secrets,
|
257
269
|
bucket_name=bucket_name,
|
258
|
-
file_key=
|
270
|
+
file_key=self.file_key,
|
259
271
|
auth_method=auth_method,
|
260
272
|
get_content=True,
|
261
273
|
)
|
262
|
-
return size,
|
274
|
+
return size, fileobj
|
263
275
|
|
264
276
|
if self.config.type == StorageType.gcs:
|
265
277
|
bucket_name = f"{self.config.details[StorageDetails.BUCKET.value]}"
|
266
278
|
auth_method = self.config.details[StorageDetails.AUTH_METHOD.value]
|
267
279
|
storage_client = get_gcs_client(auth_method, self.config.secrets)
|
268
280
|
bucket = storage_client.bucket(bucket_name)
|
269
|
-
blob = bucket.blob(
|
281
|
+
blob = bucket.blob(self.file_key)
|
270
282
|
|
271
|
-
|
272
|
-
|
283
|
+
fileobj = BytesIO()
|
284
|
+
blob.download_to_file(fileobj)
|
285
|
+
fileobj.seek(0) # Reset pointer to beginning after download
|
286
|
+
return blob.size, fileobj
|
273
287
|
|
274
288
|
if self.config.type == StorageType.local:
|
275
|
-
filename = get_local_filename(
|
276
|
-
|
277
|
-
|
278
|
-
|
289
|
+
filename = get_local_filename(self.file_key)
|
290
|
+
size = os.path.getsize(filename)
|
291
|
+
with open(filename, "rb") as fileobj:
|
292
|
+
content = BytesIO(fileobj.read())
|
293
|
+
content.seek(0) # Reset pointer to beginning
|
279
294
|
return size, content
|
280
295
|
|
281
296
|
raise ValueError(f"Unsupported storage type: {self.config.type}")
|
@@ -288,7 +303,7 @@ class Attachment(Base):
|
|
288
303
|
generic_delete_from_s3(
|
289
304
|
storage_secrets=self.config.secrets,
|
290
305
|
bucket_name=bucket_name,
|
291
|
-
file_key=
|
306
|
+
file_key=self.file_key,
|
292
307
|
auth_method=auth_method,
|
293
308
|
)
|
294
309
|
return
|
@@ -307,9 +322,7 @@ class Attachment(Base):
|
|
307
322
|
return
|
308
323
|
|
309
324
|
if self.config.type == StorageType.local:
|
310
|
-
folder_path = os.path.dirname(
|
311
|
-
get_local_filename(f"{self.id}/{self.file_name}")
|
312
|
-
)
|
325
|
+
folder_path = os.path.dirname(get_local_filename(self.file_key))
|
313
326
|
if os.path.exists(folder_path):
|
314
327
|
import shutil
|
315
328
|
|
@@ -0,0 +1,110 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from sqlalchemy import Column, DateTime, ForeignKey, String
|
4
|
+
from sqlalchemy.ext.declarative import declared_attr
|
5
|
+
from sqlalchemy.orm import Session, relationship
|
6
|
+
|
7
|
+
from fides.api.db.base_class import Base
|
8
|
+
from fides.api.db.util import EnumColumn
|
9
|
+
from fides.api.models.manual_tasks.manual_task_log import ManualTaskLog
|
10
|
+
from fides.api.schemas.manual_tasks.manual_task_schemas import (
|
11
|
+
ManualTaskLogStatus,
|
12
|
+
ManualTaskParentEntityType,
|
13
|
+
ManualTaskReferenceType,
|
14
|
+
ManualTaskType,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
class ManualTask(Base):
|
19
|
+
"""Model for storing manual tasks.
|
20
|
+
|
21
|
+
This model can be used for both privacy request tasks and general tasks.
|
22
|
+
For privacy requests, it replaces the functionality of manual webhooks.
|
23
|
+
For other use cases, it provides a flexible task management system.
|
24
|
+
|
25
|
+
There can only be one ManualTask per parent entity.
|
26
|
+
You can create multiple Configs for the same ManualTask.
|
27
|
+
"""
|
28
|
+
|
29
|
+
@declared_attr
|
30
|
+
def __tablename__(cls) -> str:
|
31
|
+
"""Overriding base class method to set the table name."""
|
32
|
+
return "manual_task"
|
33
|
+
|
34
|
+
# Database columns
|
35
|
+
task_type = Column(
|
36
|
+
EnumColumn(ManualTaskType),
|
37
|
+
nullable=False,
|
38
|
+
default=ManualTaskType.privacy_request,
|
39
|
+
)
|
40
|
+
parent_entity_id = Column(String, nullable=False)
|
41
|
+
parent_entity_type = Column(
|
42
|
+
EnumColumn(ManualTaskParentEntityType),
|
43
|
+
nullable=False,
|
44
|
+
default=ManualTaskParentEntityType.connection_config,
|
45
|
+
)
|
46
|
+
due_date = Column(DateTime, nullable=True)
|
47
|
+
|
48
|
+
# Relationships
|
49
|
+
references = relationship(
|
50
|
+
"ManualTaskReference",
|
51
|
+
back_populates="task",
|
52
|
+
uselist=True,
|
53
|
+
cascade="all, delete-orphan",
|
54
|
+
)
|
55
|
+
logs = relationship(
|
56
|
+
"ManualTaskLog",
|
57
|
+
back_populates="task",
|
58
|
+
primaryjoin="and_(ManualTask.id == ManualTaskLog.task_id)",
|
59
|
+
viewonly=True,
|
60
|
+
order_by="ManualTaskLog.created_at",
|
61
|
+
)
|
62
|
+
|
63
|
+
# Properties
|
64
|
+
@property
|
65
|
+
def assigned_users(self) -> list[str]:
|
66
|
+
"""Get all users assigned to this task."""
|
67
|
+
if not self.references:
|
68
|
+
return []
|
69
|
+
return [
|
70
|
+
ref.reference_id
|
71
|
+
for ref in self.references
|
72
|
+
if ref.reference_type == ManualTaskReferenceType.assigned_user
|
73
|
+
]
|
74
|
+
|
75
|
+
# CRUD Operations
|
76
|
+
@classmethod
|
77
|
+
def create(
|
78
|
+
cls, db: Session, *, data: dict[str, Any], check_name: bool = True
|
79
|
+
) -> "ManualTask":
|
80
|
+
"""Create a new manual task."""
|
81
|
+
task = super().create(db=db, data=data, check_name=check_name)
|
82
|
+
ManualTaskLog.create_log(
|
83
|
+
db=db,
|
84
|
+
task_id=task.id,
|
85
|
+
status=ManualTaskLogStatus.created,
|
86
|
+
message=f"Created manual task for {data['task_type']}",
|
87
|
+
)
|
88
|
+
return task
|
89
|
+
|
90
|
+
|
91
|
+
class ManualTaskReference(Base):
|
92
|
+
"""Join table to associate manual tasks with multiple references.
|
93
|
+
|
94
|
+
A single task may have many references including privacy requests, configurations, and assigned users.
|
95
|
+
"""
|
96
|
+
|
97
|
+
@declared_attr
|
98
|
+
def __tablename__(cls) -> str:
|
99
|
+
"""Overriding base class method to set the table name."""
|
100
|
+
return "manual_task_reference"
|
101
|
+
|
102
|
+
# Database columns
|
103
|
+
task_id = Column(
|
104
|
+
String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
|
105
|
+
)
|
106
|
+
reference_id = Column(String, nullable=False)
|
107
|
+
reference_type = Column(EnumColumn(ManualTaskReferenceType), nullable=False)
|
108
|
+
|
109
|
+
# Relationships
|
110
|
+
task = relationship("ManualTask", back_populates="references")
|
@@ -0,0 +1,100 @@
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Optional
|
2
|
+
|
3
|
+
from sqlalchemy import Column, ForeignKey, String
|
4
|
+
from sqlalchemy.dialects.postgresql import JSONB
|
5
|
+
from sqlalchemy.ext.declarative import declared_attr
|
6
|
+
from sqlalchemy.orm import Session, relationship
|
7
|
+
|
8
|
+
from fides.api.db.base_class import Base
|
9
|
+
from fides.api.schemas.manual_tasks.manual_task_schemas import ManualTaskLogStatus
|
10
|
+
|
11
|
+
if TYPE_CHECKING:
|
12
|
+
from fides.api.models.manual_tasks.manual_task import ManualTask
|
13
|
+
|
14
|
+
|
15
|
+
class ManualTaskLog(Base):
|
16
|
+
"""Model for storing manual task execution logs."""
|
17
|
+
|
18
|
+
@declared_attr
|
19
|
+
def __tablename__(cls) -> str:
|
20
|
+
"""Overriding base class method to set the table name."""
|
21
|
+
return "manual_task_log"
|
22
|
+
|
23
|
+
task_id = Column(
|
24
|
+
String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
|
25
|
+
)
|
26
|
+
# TODO: Add foreign key constraints when config and instance are implemented
|
27
|
+
config_id = Column(String, nullable=True)
|
28
|
+
instance_id = Column(String, nullable=True)
|
29
|
+
status = Column(String, nullable=False)
|
30
|
+
message = Column(String, nullable=True)
|
31
|
+
details = Column(JSONB, nullable=True)
|
32
|
+
|
33
|
+
# Relationships - using string references to avoid circular imports
|
34
|
+
task = relationship("ManualTask", back_populates="logs", foreign_keys=[task_id])
|
35
|
+
# TODO: Add config and instance relationships when they are implemented
|
36
|
+
# config = relationship("ManualTaskConfig", back_populates="logs")
|
37
|
+
# instance = relationship("ManualTaskInstance", back_populates="logs")
|
38
|
+
|
39
|
+
@classmethod
|
40
|
+
def create_log(
|
41
|
+
cls,
|
42
|
+
db: Session,
|
43
|
+
status: ManualTaskLogStatus,
|
44
|
+
task_id: str,
|
45
|
+
config_id: Optional[str] = None,
|
46
|
+
instance_id: Optional[str] = None,
|
47
|
+
message: Optional[str] = None,
|
48
|
+
details: Optional[dict[str, Any]] = None,
|
49
|
+
) -> "ManualTaskLog":
|
50
|
+
"""Create a new task log entry.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
db: Database session
|
54
|
+
task_id: ID of the task
|
55
|
+
status: Status of the log entry
|
56
|
+
message: Optional message describing the event
|
57
|
+
details: Optional additional details about the event
|
58
|
+
"""
|
59
|
+
data = {
|
60
|
+
"task_id": task_id,
|
61
|
+
"config_id": config_id,
|
62
|
+
"instance_id": instance_id,
|
63
|
+
"status": status,
|
64
|
+
"message": message,
|
65
|
+
"details": details,
|
66
|
+
}
|
67
|
+
return cls.create(db=db, data=data)
|
68
|
+
|
69
|
+
@classmethod
|
70
|
+
def create_error_log(
|
71
|
+
cls,
|
72
|
+
db: Session,
|
73
|
+
task_id: str,
|
74
|
+
message: str,
|
75
|
+
config_id: Optional[str] = None,
|
76
|
+
instance_id: Optional[str] = None,
|
77
|
+
details: Optional[dict[str, Any]] = None,
|
78
|
+
) -> "ManualTaskLog":
|
79
|
+
"""Create a new error log entry.
|
80
|
+
|
81
|
+
Args:
|
82
|
+
db: Database session
|
83
|
+
task_id: ID of the task
|
84
|
+
message: Error message describing what went wrong
|
85
|
+
config_id: Optional ID of the configuration
|
86
|
+
instance_id: Optional ID of the instance
|
87
|
+
details: Optional additional details about the error
|
88
|
+
|
89
|
+
Returns:
|
90
|
+
The created error log entry
|
91
|
+
"""
|
92
|
+
return cls.create_log(
|
93
|
+
db=db,
|
94
|
+
status=ManualTaskLogStatus.error,
|
95
|
+
task_id=task_id,
|
96
|
+
config_id=config_id,
|
97
|
+
instance_id=instance_id,
|
98
|
+
message=message,
|
99
|
+
details=details,
|
100
|
+
)
|