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
@@ -111,10 +111,10 @@ class ConnectionConfigSecretsMixin(BaseModel):
|
|
111
111
|
return self
|
112
112
|
|
113
113
|
|
114
|
-
class
|
114
|
+
class ConnectionConfigurationResponseBase(ConnectionConfigSecretsMixin):
|
115
115
|
"""
|
116
|
-
|
117
|
-
|
116
|
+
Base schema for ConnectionConfiguration responses,
|
117
|
+
excluding fields that might be conditionally omitted.
|
118
118
|
The mixin base class ensures that `secrets` sensitive values are masked.
|
119
119
|
"""
|
120
120
|
|
@@ -129,10 +129,25 @@ class ConnectionConfigurationResponse(ConnectionConfigSecretsMixin):
|
|
129
129
|
last_test_succeeded: Optional[bool] = None
|
130
130
|
authorized: Optional[bool] = False
|
131
131
|
enabled_actions: Optional[List[ActionType]] = None
|
132
|
-
|
133
132
|
model_config = ConfigDict(from_attributes=True)
|
134
133
|
|
135
134
|
|
135
|
+
class ConnectionConfigurationResponseWithSystemKey(ConnectionConfigurationResponseBase):
|
136
|
+
"""
|
137
|
+
Describes the full returned schema for a ConnectionConfiguration.
|
138
|
+
"""
|
139
|
+
|
140
|
+
# Using this response with models returned from an async DB session will error
|
141
|
+
# because the system_key is lazy loaded. Just a quirk of SQLAlchemy 1.4.
|
142
|
+
system_key: Optional[str] = None
|
143
|
+
|
144
|
+
|
145
|
+
class ConnectionConfigurationResponse(ConnectionConfigurationResponseBase):
|
146
|
+
"""
|
147
|
+
Describes the returned schema for a ConnectionConfiguration.
|
148
|
+
"""
|
149
|
+
|
150
|
+
|
136
151
|
class BulkPutConnectionConfiguration(BulkResponse):
|
137
152
|
"""Schema with mixed success/failure responses for Bulk Create/Update of ConnectionConfiguration responses."""
|
138
153
|
|
File without changes
|
@@ -0,0 +1,79 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
from enum import Enum
|
3
|
+
from typing import Annotated, Any, Optional
|
4
|
+
|
5
|
+
from pydantic import ConfigDict, Field
|
6
|
+
|
7
|
+
from fides.api.schemas.base_class import FidesSchema
|
8
|
+
|
9
|
+
|
10
|
+
class ManualTaskType(str, Enum):
|
11
|
+
"""Enum for manual task types."""
|
12
|
+
|
13
|
+
privacy_request = "privacy_request"
|
14
|
+
# Add more task types as needed
|
15
|
+
|
16
|
+
|
17
|
+
class ManualTaskParentEntityType(str, Enum):
|
18
|
+
"""Enum for manual task parent entity types."""
|
19
|
+
|
20
|
+
connection_config = (
|
21
|
+
"connection_config" # used for access and erasure privacy requests
|
22
|
+
)
|
23
|
+
# Add more parent entity types as needed
|
24
|
+
|
25
|
+
|
26
|
+
class ManualTaskReferenceType(str, Enum):
|
27
|
+
"""Enum for manual task reference types."""
|
28
|
+
|
29
|
+
privacy_request = "privacy_request"
|
30
|
+
connection_config = "connection_config"
|
31
|
+
manual_task_config = "manual_task_config"
|
32
|
+
assigned_user = "assigned_user" # Reference to the user assigned to the task
|
33
|
+
# Add more reference types as needed
|
34
|
+
|
35
|
+
|
36
|
+
class ManualTaskLogStatus(str, Enum):
|
37
|
+
"""Enum for manual task log status."""
|
38
|
+
|
39
|
+
created = "created"
|
40
|
+
updated = "updated"
|
41
|
+
in_processing = "in_processing"
|
42
|
+
complete = "complete"
|
43
|
+
error = "error"
|
44
|
+
retrying = "retrying"
|
45
|
+
paused = "paused"
|
46
|
+
awaiting_input = "awaiting_input"
|
47
|
+
|
48
|
+
|
49
|
+
class ManualTaskLogCreate(FidesSchema):
|
50
|
+
"""Schema for creating a manual task log entry."""
|
51
|
+
|
52
|
+
model_config = ConfigDict(extra="forbid")
|
53
|
+
|
54
|
+
task_id: Annotated[str, Field(..., description="ID of the task")]
|
55
|
+
status: Annotated[ManualTaskLogStatus, Field(..., description="Log status")]
|
56
|
+
message: Annotated[Optional[str], Field(None, description="Log message")]
|
57
|
+
details: Annotated[
|
58
|
+
Optional[dict[str, Any]], Field(None, description="Additional details")
|
59
|
+
]
|
60
|
+
config_id: Annotated[Optional[str], Field(None, description="Configuration ID")]
|
61
|
+
instance_id: Annotated[Optional[str], Field(None, description="Instance ID")]
|
62
|
+
|
63
|
+
|
64
|
+
class ManualTaskLogResponse(FidesSchema):
|
65
|
+
"""Schema for manual task log response."""
|
66
|
+
|
67
|
+
model_config = ConfigDict(extra="forbid")
|
68
|
+
|
69
|
+
id: Annotated[str, Field(..., description="Log ID")]
|
70
|
+
task_id: Annotated[str, Field(..., description="Task ID")]
|
71
|
+
status: Annotated[ManualTaskLogStatus, Field(..., description="Log status")]
|
72
|
+
message: Annotated[Optional[str], Field(None, description="Log message")]
|
73
|
+
details: Annotated[
|
74
|
+
Optional[dict[str, Any]], Field(None, description="Additional details")
|
75
|
+
]
|
76
|
+
config_id: Annotated[Optional[str], Field(None, description="Configuration ID")]
|
77
|
+
instance_id: Annotated[Optional[str], Field(None, description="Instance ID")]
|
78
|
+
created_at: Annotated[datetime, Field(..., description="Creation timestamp")]
|
79
|
+
updated_at: Annotated[datetime, Field(..., description="Last update timestamp")]
|
@@ -0,0 +1,151 @@
|
|
1
|
+
from datetime import datetime, timezone
|
2
|
+
from enum import Enum as EnumType
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from sqlalchemy.orm import Session
|
6
|
+
|
7
|
+
|
8
|
+
class StatusTransitionNotAllowed(Exception):
|
9
|
+
"""Exception raised when a status transition is not allowed."""
|
10
|
+
|
11
|
+
def __init__(self, message: str):
|
12
|
+
self.message = message
|
13
|
+
super().__init__(self.message)
|
14
|
+
|
15
|
+
|
16
|
+
class StatusType(str, EnumType):
|
17
|
+
"""Enum for manual task status."""
|
18
|
+
|
19
|
+
pending = "pending"
|
20
|
+
in_progress = "in_progress"
|
21
|
+
completed = "completed"
|
22
|
+
failed = "failed"
|
23
|
+
|
24
|
+
@classmethod
|
25
|
+
def get_valid_transitions(cls, current_status: "StatusType") -> list["StatusType"]:
|
26
|
+
"""Get valid transitions from the current status.
|
27
|
+
|
28
|
+
Args:
|
29
|
+
current_status: The current status
|
30
|
+
|
31
|
+
Returns:
|
32
|
+
list[StatusType]: List of valid transitions
|
33
|
+
"""
|
34
|
+
if current_status == cls.pending:
|
35
|
+
return [cls.in_progress, cls.failed]
|
36
|
+
if current_status == cls.in_progress:
|
37
|
+
return [cls.completed, cls.failed]
|
38
|
+
if current_status == cls.completed:
|
39
|
+
return []
|
40
|
+
if current_status == cls.failed:
|
41
|
+
return [cls.pending, cls.in_progress]
|
42
|
+
return []
|
43
|
+
|
44
|
+
|
45
|
+
class StatusTransitionMixin:
|
46
|
+
"""Mixin for handling status transitions.
|
47
|
+
|
48
|
+
This mixin provides methods for managing status transitions and completion tracking.
|
49
|
+
It can be used by any model that needs status management.
|
50
|
+
"""
|
51
|
+
|
52
|
+
# These should be overridden by the implementing class
|
53
|
+
status: StatusType
|
54
|
+
completed_at: Optional[datetime]
|
55
|
+
completed_by_id: Optional[str]
|
56
|
+
|
57
|
+
def _get_valid_transitions(self) -> list[StatusType]:
|
58
|
+
"""Get valid transitions from the current status.
|
59
|
+
|
60
|
+
Returns:
|
61
|
+
list[StatusType]: List of valid transitions
|
62
|
+
"""
|
63
|
+
return StatusType.get_valid_transitions(self.status)
|
64
|
+
|
65
|
+
def _validate_status_transition(self, new_status: StatusType) -> None:
|
66
|
+
"""Validate that a status transition is allowed.
|
67
|
+
|
68
|
+
Args:
|
69
|
+
new_status: The new status to transition to
|
70
|
+
|
71
|
+
Raises:
|
72
|
+
StatusTransitionNotAllowed: If the transition is not allowed
|
73
|
+
"""
|
74
|
+
# Don't allow transitions to the same status
|
75
|
+
if new_status == self.status:
|
76
|
+
raise StatusTransitionNotAllowed(
|
77
|
+
f"Invalid status transition: already in status {new_status}"
|
78
|
+
)
|
79
|
+
|
80
|
+
# Get valid transitions for current status
|
81
|
+
valid_transitions = self._get_valid_transitions()
|
82
|
+
if new_status not in valid_transitions:
|
83
|
+
raise StatusTransitionNotAllowed(
|
84
|
+
f"Invalid status transition from {self.status} to {new_status}. "
|
85
|
+
f"Valid transitions are: {valid_transitions}"
|
86
|
+
)
|
87
|
+
|
88
|
+
def update_status(
|
89
|
+
self, db: Session, new_status: StatusType, user_id: Optional[str] = None
|
90
|
+
) -> None:
|
91
|
+
"""Update the status with validation and completion handling.
|
92
|
+
|
93
|
+
Args:
|
94
|
+
db: Database session
|
95
|
+
new_status: New status to set
|
96
|
+
user_id: Optional user ID who is making the change
|
97
|
+
"""
|
98
|
+
self._validate_status_transition(new_status)
|
99
|
+
|
100
|
+
if new_status == StatusType.completed:
|
101
|
+
self.completed_at = datetime.now(timezone.utc)
|
102
|
+
self.completed_by_id = user_id
|
103
|
+
elif new_status == StatusType.pending:
|
104
|
+
# Reset completion fields if going back to pending
|
105
|
+
self.completed_at = None
|
106
|
+
self.completed_by_id = None
|
107
|
+
|
108
|
+
self.status = new_status
|
109
|
+
db.add(self)
|
110
|
+
db.commit()
|
111
|
+
|
112
|
+
def mark_completed(self, db: Session, user_id: str) -> None:
|
113
|
+
"""Mark as completed.
|
114
|
+
|
115
|
+
Args:
|
116
|
+
db: Database session
|
117
|
+
user_id: user ID who completed the task
|
118
|
+
"""
|
119
|
+
self.update_status(db, StatusType.completed, user_id)
|
120
|
+
|
121
|
+
def mark_failed(self, db: Session) -> None:
|
122
|
+
"""Mark as failed."""
|
123
|
+
self.update_status(db, StatusType.failed)
|
124
|
+
|
125
|
+
def start_progress(self, db: Session) -> None:
|
126
|
+
"""Mark as in progress."""
|
127
|
+
self.update_status(db, StatusType.in_progress)
|
128
|
+
|
129
|
+
def reset_to_pending(self, db: Session) -> None:
|
130
|
+
"""Reset to pending status."""
|
131
|
+
self.update_status(db, StatusType.pending)
|
132
|
+
|
133
|
+
@property
|
134
|
+
def is_completed(self) -> bool:
|
135
|
+
"""Check if completed."""
|
136
|
+
return self.status == StatusType.completed
|
137
|
+
|
138
|
+
@property
|
139
|
+
def is_failed(self) -> bool:
|
140
|
+
"""Check if failed."""
|
141
|
+
return self.status == StatusType.failed
|
142
|
+
|
143
|
+
@property
|
144
|
+
def is_in_progress(self) -> bool:
|
145
|
+
"""Check if in progress."""
|
146
|
+
return self.status == StatusType.in_progress
|
147
|
+
|
148
|
+
@property
|
149
|
+
def is_pending(self) -> bool:
|
150
|
+
"""Check if pending."""
|
151
|
+
return self.status == StatusType.pending
|
@@ -43,6 +43,7 @@ from fides.api.util.saas_util import (
|
|
43
43
|
ALL_OBJECT_FIELDS,
|
44
44
|
CUSTOM_PRIVACY_REQUEST_FIELDS,
|
45
45
|
FIDESOPS_GROUPED_INPUTS,
|
46
|
+
FIELD_LIST,
|
46
47
|
ISO_8601_DATETIME,
|
47
48
|
MASKED_OBJECT_FIELDS,
|
48
49
|
PRIVACY_REQUEST_ID,
|
@@ -353,6 +354,13 @@ class SaaSQueryConfig(QueryConfig[SaaSRequestParams]):
|
|
353
354
|
|
354
355
|
param_values[UUID] = str(uuid4())
|
355
356
|
param_values[ISO_8601_DATETIME] = datetime.now().date().isoformat()
|
357
|
+
param_values[FIELD_LIST] = ",".join(
|
358
|
+
[
|
359
|
+
field.name
|
360
|
+
for field in self.top_level_field_map().values()
|
361
|
+
if field.data_type() != "None"
|
362
|
+
]
|
363
|
+
)
|
356
364
|
if self.request_task and self.request_task.id:
|
357
365
|
param_values[REPLY_TO_TOKEN] = generate_request_task_callback_jwe(
|
358
366
|
self.request_task
|
@@ -458,6 +466,13 @@ class SaaSQueryConfig(QueryConfig[SaaSRequestParams]):
|
|
458
466
|
param_values[CUSTOM_PRIVACY_REQUEST_FIELDS] = custom_privacy_request_fields
|
459
467
|
param_values[UUID] = str(uuid4())
|
460
468
|
param_values[ISO_8601_DATETIME] = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
|
469
|
+
param_values[FIELD_LIST] = ",".join(
|
470
|
+
[
|
471
|
+
field.name
|
472
|
+
for field in self.top_level_field_map().values()
|
473
|
+
if field.data_type() != "None"
|
474
|
+
]
|
475
|
+
)
|
461
476
|
if self.request_task and self.request_task.id:
|
462
477
|
param_values[REPLY_TO_TOKEN] = generate_request_task_callback_jwe(
|
463
478
|
self.request_task
|
@@ -0,0 +1,132 @@
|
|
1
|
+
import time as time_module
|
2
|
+
from dataclasses import dataclass
|
3
|
+
from typing import Any, Dict, Iterator, List, Optional, Tuple
|
4
|
+
|
5
|
+
from loguru import logger
|
6
|
+
|
7
|
+
from fides.api.models.attachment import Attachment, AttachmentType
|
8
|
+
from fides.api.schemas.storage.storage import StorageDetails
|
9
|
+
|
10
|
+
|
11
|
+
@dataclass
|
12
|
+
class AttachmentData:
|
13
|
+
"""Data structure for attachment metadata and content.
|
14
|
+
Using a dataclass rather than a Pydantic model here for the following reasons:
|
15
|
+
- The data structure is simple and doesn't need complex validation.
|
16
|
+
- The fields being used have already been validated and are properly typed.
|
17
|
+
- The class is used internally for data transfer, not for API serialization.
|
18
|
+
- Performance is important since this is used in a data processing pipeline.
|
19
|
+
"""
|
20
|
+
|
21
|
+
file_name: str
|
22
|
+
file_size: Optional[int]
|
23
|
+
download_url: Optional[str]
|
24
|
+
content_type: str
|
25
|
+
bucket_name: str
|
26
|
+
file_key: str
|
27
|
+
storage_key: str
|
28
|
+
|
29
|
+
def to_upload_dict(self) -> Dict[str, Any]:
|
30
|
+
"""Convert to dictionary for upload, including presigned URL."""
|
31
|
+
return {
|
32
|
+
"file_name": self.file_name,
|
33
|
+
"file_size": self.file_size,
|
34
|
+
"download_url": self.download_url,
|
35
|
+
"content_type": self.content_type,
|
36
|
+
}
|
37
|
+
|
38
|
+
def to_storage_dict(self) -> Dict[str, Any]:
|
39
|
+
"""Convert to dictionary for storage, including the elements needed to recreated the presigned URL."""
|
40
|
+
return {
|
41
|
+
"file_name": self.file_name,
|
42
|
+
"file_size": self.file_size,
|
43
|
+
"content_type": self.content_type,
|
44
|
+
"bucket_name": self.bucket_name,
|
45
|
+
"file_key": self.file_key,
|
46
|
+
"storage_key": self.storage_key,
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
def get_attachments_content(
|
51
|
+
loaded_attachments: List[Attachment],
|
52
|
+
) -> Iterator[AttachmentData]:
|
53
|
+
"""
|
54
|
+
Retrieves all attachments associated with a privacy request that are marked to be included with the access package.
|
55
|
+
Yields AttachmentData objects containing attachment metadata and download urls.
|
56
|
+
Uses generators to minimize memory usage.
|
57
|
+
|
58
|
+
Args:
|
59
|
+
loaded_attachments: List of Attachment objects to process
|
60
|
+
|
61
|
+
Yields:
|
62
|
+
AttachmentData object containing attachment metadata and url
|
63
|
+
"""
|
64
|
+
start_time = time_module.time()
|
65
|
+
processed_count = 0
|
66
|
+
skipped_count = 0
|
67
|
+
error_count = 0
|
68
|
+
total_size = 0
|
69
|
+
|
70
|
+
for attachment in loaded_attachments:
|
71
|
+
if attachment.attachment_type != AttachmentType.include_with_access_package:
|
72
|
+
skipped_count += 1
|
73
|
+
continue
|
74
|
+
|
75
|
+
try:
|
76
|
+
# Get size and download URL using retrieve_attachment
|
77
|
+
size, url = attachment.retrieve_attachment()
|
78
|
+
total_size += size if size else 0
|
79
|
+
if url is None:
|
80
|
+
logger.warning(
|
81
|
+
"No download URL retrieved for attachment {}", attachment.file_name
|
82
|
+
)
|
83
|
+
skipped_count += 1
|
84
|
+
continue
|
85
|
+
|
86
|
+
processed_count += 1
|
87
|
+
yield AttachmentData(
|
88
|
+
file_name=attachment.file_name,
|
89
|
+
file_size=size,
|
90
|
+
download_url=str(url) if url else None,
|
91
|
+
content_type=attachment.content_type,
|
92
|
+
bucket_name=attachment.config.details[StorageDetails.BUCKET.value],
|
93
|
+
file_key=attachment.file_key,
|
94
|
+
storage_key=attachment.storage_key,
|
95
|
+
)
|
96
|
+
|
97
|
+
except Exception as e:
|
98
|
+
error_count += 1
|
99
|
+
logger.error(
|
100
|
+
"Error processing attachment {}: {}", attachment.file_name, str(e)
|
101
|
+
)
|
102
|
+
continue
|
103
|
+
|
104
|
+
# Log final metrics
|
105
|
+
time_taken = time_module.time() - start_time
|
106
|
+
logger.bind(
|
107
|
+
time_to_process=time_taken,
|
108
|
+
total_attachments=len(loaded_attachments),
|
109
|
+
processed_attachments=processed_count,
|
110
|
+
skipped_attachments=skipped_count,
|
111
|
+
error_attachments=error_count,
|
112
|
+
total_size_bytes=total_size,
|
113
|
+
).info("Attachment processing complete")
|
114
|
+
|
115
|
+
|
116
|
+
def process_attachments_for_upload(
|
117
|
+
attachments: Iterator[AttachmentData],
|
118
|
+
) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]:
|
119
|
+
"""
|
120
|
+
Process attachments into separate upload and storage formats.
|
121
|
+
Returns both formats:
|
122
|
+
- upload_attachments: Used for uploading to access packages
|
123
|
+
- storage_attachments: Used for saving filtered access results
|
124
|
+
"""
|
125
|
+
upload_attachments = []
|
126
|
+
storage_attachments = []
|
127
|
+
|
128
|
+
for attachment in attachments:
|
129
|
+
storage_attachments.append(attachment.to_storage_dict())
|
130
|
+
upload_attachments.append(attachment.to_upload_dict())
|
131
|
+
|
132
|
+
return upload_attachments, storage_attachments
|