ethyca-fides 2.71.0rc4__py2.py3-none-any.whl → 2.71.1b1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ethyca-fides might be problematic. Click here for more details.
- {ethyca_fides-2.71.0rc4.dist-info → ethyca_fides-2.71.1b1.dist-info}/METADATA +2 -2
- {ethyca_fides-2.71.0rc4.dist-info → ethyca_fides-2.71.1b1.dist-info}/RECORD +158 -154
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/3efe14d4469a_adds_new_experience_configs_for_vendor_.py +79 -0
- fides/api/alembic/migrations/versions/918aefc950c9_create_digest_conditional_dependencies.py +125 -0
- fides/api/alembic/migrations/versions/9caf76161e55_make_user_assigned_data_uses_nullable_.py +64 -0
- fides/api/alembic/migrations/versions/f108fa05c579_adds_optional_duration_field_to_assets.py +28 -0
- fides/api/api/v1/endpoints/generic_overrides.py +9 -3
- fides/api/db/base.py +1 -1
- fides/api/models/asset.py +14 -1
- fides/api/models/conditional_dependency/conditional_dependency_base.py +253 -24
- fides/api/models/detection_discovery/core.py +57 -3
- fides/api/models/digest/__init__.py +5 -1
- fides/api/models/digest/conditional_dependencies.py +267 -1
- fides/api/models/digest/digest_config.py +34 -9
- fides/api/models/fides_user.py +9 -0
- fides/api/models/manual_task/conditional_dependency.py +16 -18
- fides/api/models/privacy_experience.py +10 -0
- fides/api/models/privacy_notice.py +139 -20
- fides/api/task/manual/manual_task_conditional_evaluation.py +1 -1
- fides/service/dataset/dataset_service.py +39 -0
- fides/service/privacy_request/privacy_request_service.py +103 -48
- fides/ui-build/static/admin/404.html +1 -1
- fides/ui-build/static/admin/_next/static/_IxwgneyQjdSaZFEF3Tqu/_buildManifest.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/155-b4337d0826d5addc.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/1817-1ad037b7d6d2f6d2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{3585-efd5d41f08e180c4.js → 3585-f728d32fda6f1ac1.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-ed226b8a8050bd40.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/409-5c3d31163028339f.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4558-8305aee48def1dcd.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/4608-0c6ef78e30a51f84.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{4718-6585c97c26647e65.js → 4718-3a412bdb90add82f.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/502-0d9f4ac29ef34a1c.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/5279-12c9cbdc67ad7b14.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/6277-182efc294d413f64.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/{7045-f15044a4d4525946.js → 7045-14e955890f1147e4.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/7079-50571e9f3269d74d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/{_app-a77584f9ad3334af.js → _app-c1c2f757b1f3da12.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-75e99306393938e8.js → manual-4ec03eed67572861.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-19214babd1f219e3.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-fd41ffaff543e05a.js → [id]-e1e2fd704ac2d71d.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-e74cb5ea87f15b40.js → new-a5e738a234dadc7e.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-9c23fbe813c997d0.js → [id]-5fc78b78a51c239c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-0e5e38bbcfe59fd2.js → new-b79bcb93b5f4c734.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-c1a3caf3c286bf5d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-5b57f9132426fe52.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-a28cc0e23bbe4fc8.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-7d22222608ec3aac.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-d514cd4ec62e3b03.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-153eb88ab4e7dc6d.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-331544e9b85c4ac2.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-479890582973deaf.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-4d658222ec800511.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-2fcd95c41e578d57.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/{privacy-requests-8cbdfd08e0fa88fb.js → privacy-requests-97221067330c0c27.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-547c6ef0ad52b85d.js → [id]-4d470bbf199a2f9c.js} +1 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-6c91bdea40875227.js +1 -0
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-3059aba38adefa56.js +1 -0
- fides/ui-build/static/admin/_next/static/css/{64fac6fb884435c2.css → 295d729ea1b11885.css} +1 -1
- fides/ui-build/static/admin/add-systems/manual.html +1 -1
- fides/ui-build/static/admin/add-systems/multiple.html +1 -1
- fides/ui-build/static/admin/add-systems.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-preview.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- fides/ui-build/static/admin/lib/fides.js +3 -3
- fides/ui-build/static/admin/login/[provider].html +1 -1
- fides/ui-build/static/admin/login.html +1 -1
- fides/ui-build/static/admin/messaging/[id].html +1 -1
- fides/ui-build/static/admin/messaging/add-template.html +1 -1
- fides/ui-build/static/admin/messaging.html +1 -1
- fides/ui-build/static/admin/poc/ant-components.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
- fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
- fides/ui-build/static/admin/poc/forms.html +1 -1
- fides/ui-build/static/admin/poc/table-migration.html +1 -1
- fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
- fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
- fides/ui-build/static/admin/privacy-requests.html +1 -1
- fides/ui-build/static/admin/properties/[id].html +1 -1
- fides/ui-build/static/admin/properties/add-property.html +1 -1
- fides/ui-build/static/admin/properties.html +1 -1
- fides/ui-build/static/admin/reporting/datamap.html +1 -1
- fides/ui-build/static/admin/settings/about/alpha.html +1 -1
- fides/ui-build/static/admin/settings/about.html +1 -1
- fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
- fides/ui-build/static/admin/settings/consent.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/[id].html +1 -1
- fides/ui-build/static/admin/settings/custom-fields/new.html +1 -1
- fides/ui-build/static/admin/settings/custom-fields.html +1 -1
- fides/ui-build/static/admin/settings/domain-records.html +1 -1
- fides/ui-build/static/admin/settings/domains.html +1 -1
- fides/ui-build/static/admin/settings/email-templates.html +1 -1
- fides/ui-build/static/admin/settings/locations.html +1 -1
- fides/ui-build/static/admin/settings/messaging-providers/[key].html +1 -1
- fides/ui-build/static/admin/settings/messaging-providers/new.html +1 -1
- fides/ui-build/static/admin/settings/messaging-providers.html +1 -1
- fides/ui-build/static/admin/settings/organization.html +1 -1
- fides/ui-build/static/admin/settings/privacy-requests.html +1 -1
- fides/ui-build/static/admin/settings/regulations.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
- fides/ui-build/static/admin/systems/configure/[id].html +1 -1
- fides/ui-build/static/admin/systems.html +1 -1
- fides/ui-build/static/admin/taxonomy.html +1 -1
- fides/ui-build/static/admin/user-management/new.html +1 -1
- fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
- fides/ui-build/static/admin/user-management.html +1 -1
- fides/ui-build/static/admin/_next/static/chunks/155-047c3806cc41295e.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/1817-ca6473f31a67a804.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3700-08e0703b1ef770da.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/3855-12ee1dfbbe47fd28.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/409-c1256ecda1b15db6.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4558-de5ced790b3380dc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/4608-a9941d0c236ebca1.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/502-d3ecae97b67befbd.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6084-d0943ee628bf4388.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/6416-0ccadfefcdad00cc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/add-systems-58920afe2b67f952.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/consent/reporting-ae4909cad9b67822.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2e1e2b7808d3b21f.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/activity-2635ef588bf06145.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/datamap-15616bea02397ef4.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-ea198c4a7869f402.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-01e025f878ba806c.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/integrations-14120a529d7dac27.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/storage-648d775d0fce49dc.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent-e5d781b28f8e29c8.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/settings/custom-fields-5edfec10a945ca43.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/systems-0f1d833282f09684.js +0 -1
- fides/ui-build/static/admin/_next/static/chunks/pages/taxonomy-a8cfa7de4948b374.js +0 -1
- fides/ui-build/static/admin/_next/static/kdnucJIsIefS6ViqY-8w3/_buildManifest.js +0 -1
- {ethyca_fides-2.71.0rc4.dist-info → ethyca_fides-2.71.1b1.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.71.0rc4.dist-info → ethyca_fides-2.71.1b1.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.71.0rc4.dist-info → ethyca_fides-2.71.1b1.dist-info}/licenses/LICENSE +0 -0
- {ethyca_fides-2.71.0rc4.dist-info → ethyca_fides-2.71.1b1.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{kdnucJIsIefS6ViqY-8w3 → _IxwgneyQjdSaZFEF3Tqu}/_ssgManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{6882-10296485ec326e6b.js → 6882-dbe0a25dcf1a8ee0.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/{9046-2a332fe338535c84.js → 9046-b6616ba7b59d947e.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-56fd0f3e465e52b6.js → data-catalog-b7326c51d88cc2cc.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-d4031e438c363fff.js → [...subfieldNames]-0abd30eada811b5b.js} +0 -0
- /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-9463af37079762d0.js → [collectionName]-007965429368d9a3.js} +0 -0
fides/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-
|
|
11
|
+
"date": "2025-10-01T18:54:14+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "2.71.
|
|
14
|
+
"full-revisionid": "ed0d3226e0f8af1ecab0ac2d2dabff1ee209680d",
|
|
15
|
+
"version": "2.71.1b1"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""adds new experience configs for vendor asset disclosure
|
|
2
|
+
|
|
3
|
+
Revision ID: 3efe14d4469a
|
|
4
|
+
Revises: f108fa05c579
|
|
5
|
+
Create Date: 2025-09-09 11:19:24.060587
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy.dialects import postgresql
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "3efe14d4469a"
|
|
15
|
+
down_revision = "f108fa05c579"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
22
|
+
op.add_column(
|
|
23
|
+
"experienceconfigtemplate",
|
|
24
|
+
sa.Column(
|
|
25
|
+
"asset_disclosure_include_types",
|
|
26
|
+
postgresql.ARRAY(sa.String()),
|
|
27
|
+
nullable=True,
|
|
28
|
+
),
|
|
29
|
+
)
|
|
30
|
+
op.add_column(
|
|
31
|
+
"experienceconfigtemplate",
|
|
32
|
+
sa.Column(
|
|
33
|
+
"allow_vendor_asset_disclosure",
|
|
34
|
+
sa.Boolean(),
|
|
35
|
+
server_default="f",
|
|
36
|
+
nullable=False,
|
|
37
|
+
),
|
|
38
|
+
)
|
|
39
|
+
op.add_column(
|
|
40
|
+
"privacyexperienceconfig",
|
|
41
|
+
sa.Column(
|
|
42
|
+
"asset_disclosure_include_types",
|
|
43
|
+
postgresql.ARRAY(sa.String()),
|
|
44
|
+
nullable=True,
|
|
45
|
+
),
|
|
46
|
+
)
|
|
47
|
+
op.add_column(
|
|
48
|
+
"privacyexperienceconfig",
|
|
49
|
+
sa.Column(
|
|
50
|
+
"allow_vendor_asset_disclosure",
|
|
51
|
+
sa.Boolean(),
|
|
52
|
+
server_default="f",
|
|
53
|
+
nullable=False,
|
|
54
|
+
),
|
|
55
|
+
)
|
|
56
|
+
op.add_column(
|
|
57
|
+
"privacyexperienceconfighistory",
|
|
58
|
+
sa.Column("allow_vendor_asset_disclosure", sa.Boolean(), nullable=True),
|
|
59
|
+
)
|
|
60
|
+
op.add_column(
|
|
61
|
+
"privacyexperienceconfighistory",
|
|
62
|
+
sa.Column(
|
|
63
|
+
"asset_disclosure_include_types",
|
|
64
|
+
postgresql.ARRAY(sa.String()),
|
|
65
|
+
nullable=True,
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
# ### end Alembic commands ###
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def downgrade():
|
|
72
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
73
|
+
op.drop_column("privacyexperienceconfighistory", "asset_disclosure_include_types")
|
|
74
|
+
op.drop_column("privacyexperienceconfighistory", "allow_vendor_asset_disclosure")
|
|
75
|
+
op.drop_column("privacyexperienceconfig", "allow_vendor_asset_disclosure")
|
|
76
|
+
op.drop_column("privacyexperienceconfig", "asset_disclosure_include_types")
|
|
77
|
+
op.drop_column("experienceconfigtemplate", "allow_vendor_asset_disclosure")
|
|
78
|
+
op.drop_column("experienceconfigtemplate", "asset_disclosure_include_types")
|
|
79
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"""create digest conditional dependencies
|
|
2
|
+
|
|
3
|
+
Revision ID: 918aefc950c9
|
|
4
|
+
Revises: e2cda8d6abc3
|
|
5
|
+
Create Date: 2025-09-18 21:04:23.620675
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy.dialects import postgresql
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "918aefc950c9"
|
|
15
|
+
down_revision = "e2cda8d6abc3"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
|
|
22
|
+
op.create_table(
|
|
23
|
+
"digest_condition",
|
|
24
|
+
sa.Column(
|
|
25
|
+
"created_at",
|
|
26
|
+
sa.DateTime(timezone=True),
|
|
27
|
+
server_default=sa.text("now()"),
|
|
28
|
+
nullable=True,
|
|
29
|
+
),
|
|
30
|
+
sa.Column(
|
|
31
|
+
"updated_at",
|
|
32
|
+
sa.DateTime(timezone=True),
|
|
33
|
+
server_default=sa.text("now()"),
|
|
34
|
+
nullable=True,
|
|
35
|
+
),
|
|
36
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
37
|
+
sa.Column("digest_config_id", sa.String(length=255), nullable=False),
|
|
38
|
+
sa.Column("parent_id", sa.String(length=255), nullable=True),
|
|
39
|
+
sa.Column("digest_condition_type", sa.String(), nullable=False),
|
|
40
|
+
sa.Column("condition_type", sa.String(), nullable=False),
|
|
41
|
+
sa.Column("field_address", sa.String(length=255), nullable=True),
|
|
42
|
+
sa.Column("operator", sa.String(), nullable=True),
|
|
43
|
+
sa.Column("value", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
|
44
|
+
sa.Column("logical_operator", sa.String(), nullable=True),
|
|
45
|
+
sa.Column("sort_order", sa.Integer(), nullable=False),
|
|
46
|
+
sa.ForeignKeyConstraint(
|
|
47
|
+
["digest_config_id"], ["digest_config.id"], ondelete="CASCADE"
|
|
48
|
+
),
|
|
49
|
+
sa.ForeignKeyConstraint(
|
|
50
|
+
["parent_id"], ["digest_condition.id"], ondelete="CASCADE"
|
|
51
|
+
),
|
|
52
|
+
sa.PrimaryKeyConstraint("id"),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
op.create_index(
|
|
56
|
+
"ix_digest_condition_condition_type",
|
|
57
|
+
"digest_condition",
|
|
58
|
+
["condition_type"],
|
|
59
|
+
unique=False,
|
|
60
|
+
)
|
|
61
|
+
op.create_index(
|
|
62
|
+
"ix_digest_condition_digest_condition_type",
|
|
63
|
+
"digest_condition",
|
|
64
|
+
["digest_condition_type"],
|
|
65
|
+
unique=False,
|
|
66
|
+
)
|
|
67
|
+
op.create_index(
|
|
68
|
+
"ix_digest_condition_digest_config_id",
|
|
69
|
+
"digest_condition",
|
|
70
|
+
["digest_config_id"],
|
|
71
|
+
unique=False,
|
|
72
|
+
)
|
|
73
|
+
op.create_index(
|
|
74
|
+
"ix_digest_condition_parent_id",
|
|
75
|
+
"digest_condition",
|
|
76
|
+
["parent_id"],
|
|
77
|
+
unique=False,
|
|
78
|
+
)
|
|
79
|
+
op.create_index(
|
|
80
|
+
"ix_digest_condition_sort_order",
|
|
81
|
+
"digest_condition",
|
|
82
|
+
["sort_order"],
|
|
83
|
+
unique=False,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Unique constraint to ensure only one root condition per digest_condition_type per digest_config
|
|
87
|
+
op.create_index(
|
|
88
|
+
"ix_digest_condition_unique_root_per_type",
|
|
89
|
+
"digest_condition",
|
|
90
|
+
["digest_config_id", "digest_condition_type"],
|
|
91
|
+
unique=True,
|
|
92
|
+
postgresql_where=sa.text("parent_id IS NULL"),
|
|
93
|
+
)
|
|
94
|
+
# ### end Alembic commands ###
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def downgrade():
|
|
98
|
+
|
|
99
|
+
op.drop_index(
|
|
100
|
+
"ix_digest_condition_unique_root_per_type",
|
|
101
|
+
table_name="digest_condition",
|
|
102
|
+
)
|
|
103
|
+
op.drop_index(
|
|
104
|
+
"ix_digest_condition_sort_order",
|
|
105
|
+
table_name="digest_condition",
|
|
106
|
+
)
|
|
107
|
+
op.drop_index(
|
|
108
|
+
"ix_digest_condition_parent_id",
|
|
109
|
+
table_name="digest_condition",
|
|
110
|
+
)
|
|
111
|
+
op.drop_index(
|
|
112
|
+
"ix_digest_condition_digest_config_id",
|
|
113
|
+
table_name="digest_condition",
|
|
114
|
+
)
|
|
115
|
+
op.drop_index(
|
|
116
|
+
"ix_digest_condition_digest_condition_type",
|
|
117
|
+
table_name="digest_condition",
|
|
118
|
+
)
|
|
119
|
+
op.drop_index(
|
|
120
|
+
"ix_digest_condition_condition_type",
|
|
121
|
+
table_name="digest_condition",
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
op.drop_table("digest_condition")
|
|
125
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""Update user_assigned_data_uses so it's nullable and defaults to none
|
|
2
|
+
|
|
3
|
+
Revision ID: 9caf76161e55
|
|
4
|
+
Revises: 918aefc950c9
|
|
5
|
+
Create Date: 2025-09-29 14:14:37.837616
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
from sqlalchemy.dialects import postgresql
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "9caf76161e55"
|
|
15
|
+
down_revision = "918aefc950c9"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade():
|
|
21
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
22
|
+
op.alter_column(
|
|
23
|
+
"stagedresource",
|
|
24
|
+
"user_assigned_data_uses",
|
|
25
|
+
existing_type=postgresql.ARRAY(sa.VARCHAR()),
|
|
26
|
+
nullable=True,
|
|
27
|
+
server_default=None,
|
|
28
|
+
default=None,
|
|
29
|
+
existing_server_default=sa.text("'{}'::character varying[]"),
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Update web monitor resources with empty array to null
|
|
33
|
+
op.execute(
|
|
34
|
+
"""
|
|
35
|
+
UPDATE stagedresource
|
|
36
|
+
SET user_assigned_data_uses = NULL
|
|
37
|
+
WHERE
|
|
38
|
+
resource_type IN ('Cookie', 'Browser request', 'Image', 'iFrame', 'Javascript tag')
|
|
39
|
+
AND user_assigned_data_uses = '{}'
|
|
40
|
+
"""
|
|
41
|
+
)
|
|
42
|
+
# ### end Alembic commands ###
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def downgrade():
|
|
46
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
47
|
+
op.execute(
|
|
48
|
+
"""
|
|
49
|
+
UPDATE stagedresource
|
|
50
|
+
SET user_assigned_data_uses = '{}'
|
|
51
|
+
WHERE user_assigned_data_uses IS NULL
|
|
52
|
+
"""
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
op.alter_column(
|
|
56
|
+
"stagedresource",
|
|
57
|
+
"user_assigned_data_uses",
|
|
58
|
+
existing_type=postgresql.ARRAY(sa.VARCHAR()),
|
|
59
|
+
nullable=False,
|
|
60
|
+
server_default=sa.text("'{}'::character varying[]"),
|
|
61
|
+
existing_server_default=None,
|
|
62
|
+
default=dict,
|
|
63
|
+
)
|
|
64
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""adds optional duration field to assets
|
|
2
|
+
|
|
3
|
+
Revision ID: f108fa05c579
|
|
4
|
+
Revises: 9caf76161e55
|
|
5
|
+
Create Date: 2025-08-22 12:47:31.374493
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "f108fa05c579"
|
|
14
|
+
down_revision = "9caf76161e55"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
+
op.add_column("asset", sa.Column("duration", sa.String(), nullable=True))
|
|
22
|
+
# ### end Alembic commands ###
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def downgrade():
|
|
26
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
27
|
+
op.drop_column("asset", "duration")
|
|
28
|
+
# ### end Alembic commands ###
|
|
@@ -54,6 +54,7 @@ from fides.common.api.v1.urn_registry import DATASETS_CLEAN, V1_URL_PREFIX
|
|
|
54
54
|
from fides.service.dataset.dataset_service import (
|
|
55
55
|
DatasetNotFoundException,
|
|
56
56
|
DatasetService,
|
|
57
|
+
LinkedDatasetException,
|
|
57
58
|
)
|
|
58
59
|
from fides.service.taxonomy.taxonomy_service import TaxonomyService
|
|
59
60
|
|
|
@@ -126,7 +127,7 @@ async def update_dataset(
|
|
|
126
127
|
except DatasetNotFoundException as e:
|
|
127
128
|
raise HTTPException(
|
|
128
129
|
status_code=HTTP_404_NOT_FOUND,
|
|
129
|
-
detail=
|
|
130
|
+
detail=str(e),
|
|
130
131
|
)
|
|
131
132
|
|
|
132
133
|
|
|
@@ -248,7 +249,7 @@ async def get_dataset(
|
|
|
248
249
|
except DatasetNotFoundException as e:
|
|
249
250
|
raise HTTPException(
|
|
250
251
|
status_code=HTTP_404_NOT_FOUND,
|
|
251
|
-
detail=
|
|
252
|
+
detail=str(e),
|
|
252
253
|
)
|
|
253
254
|
|
|
254
255
|
|
|
@@ -275,7 +276,12 @@ async def delete_dataset(
|
|
|
275
276
|
except DatasetNotFoundException as e:
|
|
276
277
|
raise HTTPException(
|
|
277
278
|
status_code=HTTP_404_NOT_FOUND,
|
|
278
|
-
detail=
|
|
279
|
+
detail=str(e),
|
|
280
|
+
)
|
|
281
|
+
except LinkedDatasetException as e:
|
|
282
|
+
raise HTTPException(
|
|
283
|
+
status_code=HTTP_400_BAD_REQUEST,
|
|
284
|
+
detail=str(e),
|
|
279
285
|
)
|
|
280
286
|
|
|
281
287
|
|
fides/api/db/base.py
CHANGED
|
@@ -23,7 +23,7 @@ from fides.api.models.detection_discovery.monitor_task import (
|
|
|
23
23
|
MonitorTaskExecutionLog,
|
|
24
24
|
)
|
|
25
25
|
from fides.api.models.detection_discovery.web_monitor import WebMonitorGroupJob
|
|
26
|
-
from fides.api.models.digest import DigestConfig
|
|
26
|
+
from fides.api.models.digest import DigestCondition, DigestConfig
|
|
27
27
|
from fides.api.models.event_audit import EventAudit
|
|
28
28
|
from fides.api.models.experience_notices import ExperienceNotices
|
|
29
29
|
from fides.api.models.fides_cloud import FidesCloud
|
fides/api/models/asset.py
CHANGED
|
@@ -17,7 +17,7 @@ from sqlalchemy import (
|
|
|
17
17
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
18
18
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
19
19
|
from sqlalchemy.ext.mutable import MutableDict
|
|
20
|
-
from sqlalchemy.orm import relationship
|
|
20
|
+
from sqlalchemy.orm import relationship, selectinload
|
|
21
21
|
|
|
22
22
|
from fides.api.db.base_class import Base
|
|
23
23
|
from fides.api.db.util import EnumColumn
|
|
@@ -47,6 +47,7 @@ class Asset(Base):
|
|
|
47
47
|
name = Column(String, index=True, nullable=False)
|
|
48
48
|
asset_type = Column(String, index=True, nullable=False)
|
|
49
49
|
domain = Column(String, index=True)
|
|
50
|
+
duration = Column(String, nullable=True)
|
|
50
51
|
parent = Column(ARRAY(String), server_default="{}", nullable=False)
|
|
51
52
|
parent_domain = Column(String)
|
|
52
53
|
locations = Column(ARRAY(String), server_default="{}", nullable=False)
|
|
@@ -190,5 +191,17 @@ class Asset(Base):
|
|
|
190
191
|
.where(System.fides_key == system_fides_key)
|
|
191
192
|
)
|
|
192
193
|
|
|
194
|
+
# Explicitly eager load the `system` relationship to make this query's
|
|
195
|
+
# performance predictable and prevent N+1 issues.
|
|
196
|
+
query = query.options(selectinload(cls.system)) # type: ignore[attr-defined]
|
|
193
197
|
result = await async_session.execute(query)
|
|
194
198
|
return result.scalars().all()
|
|
199
|
+
|
|
200
|
+
# Expose related System attributes for API serialization convenience
|
|
201
|
+
@property
|
|
202
|
+
def system_name(self) -> Optional[str]:
|
|
203
|
+
return self.system.name if self.system else None
|
|
204
|
+
|
|
205
|
+
@property
|
|
206
|
+
def system_fides_key(self) -> Optional[str]:
|
|
207
|
+
return self.system.fides_key if self.system else None
|