ethyca-fides 2.58.1b5__py2.py3-none-any.whl → 2.58.2b0__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.58.1b5.dist-info → ethyca_fides-2.58.2b0.dist-info}/METADATA +1 -1
- {ethyca_fides-2.58.1b5.dist-info → ethyca_fides-2.58.2b0.dist-info}/RECORD +88 -86
- fides/_version.py +3 -3
- fides/api/alembic/migrations/versions/6e565c16dae1_add_tcf_publisher_restrictions.py +107 -0
- fides/api/db/base.py +4 -0
- fides/api/models/tcf_publisher_restrictions.py +186 -0
- fides/ui-build/static/admin/404.html +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/ant-poc.html +1 -1
- fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
- fides/ui-build/static/admin/consent/configure.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
- fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
- fides/ui-build/static/admin/consent/properties.html +1 -1
- fides/ui-build/static/admin/consent/reporting.html +1 -1
- fides/ui-build/static/admin/consent.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
- fides/ui-build/static/admin/data-catalog.html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
- fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
- fides/ui-build/static/admin/data-discovery/activity.html +1 -1
- fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/detection.html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
- fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
- fides/ui-build/static/admin/datamap.html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
- fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
- fides/ui-build/static/admin/dataset/new.html +1 -1
- fides/ui-build/static/admin/dataset.html +1 -1
- fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
- fides/ui-build/static/admin/datastore-connection/new.html +1 -1
- fides/ui-build/static/admin/datastore-connection.html +1 -1
- fides/ui-build/static/admin/index.html +1 -1
- fides/ui-build/static/admin/integrations/[id].html +1 -1
- fides/ui-build/static/admin/integrations.html +1 -1
- fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
- fides/ui-build/static/admin/lib/fides-headless.js +1 -1
- fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
- 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/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.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
- {ethyca_fides-2.58.1b5.dist-info → ethyca_fides-2.58.2b0.dist-info}/LICENSE +0 -0
- {ethyca_fides-2.58.1b5.dist-info → ethyca_fides-2.58.2b0.dist-info}/WHEEL +0 -0
- {ethyca_fides-2.58.1b5.dist-info → ethyca_fides-2.58.2b0.dist-info}/entry_points.txt +0 -0
- {ethyca_fides-2.58.1b5.dist-info → ethyca_fides-2.58.2b0.dist-info}/top_level.txt +0 -0
- /fides/ui-build/static/admin/_next/static/{ImUuWMsloiAWNWbICVyCj → u9w7grMtLxEveFsXqNFab}/_buildManifest.js +0 -0
- /fides/ui-build/static/admin/_next/static/{ImUuWMsloiAWNWbICVyCj → u9w7grMtLxEveFsXqNFab}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
fides/__init__.py,sha256=tE3qqipY9eynYXYpQeksYGHP5NfeXyq-L9mBtpFIxl8,139
|
2
|
-
fides/_version.py,sha256=
|
2
|
+
fides/_version.py,sha256=bHnzdDJjXl0z_95X1Oif7pCl5rseCq-UgOqE7klttwA,500
|
3
3
|
fides/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
fides/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
fides/api/analytics.py,sha256=vgwja9DB7gPsQSE3KQi0F3r6yWmnW66wBRC9FpawfRI,1910
|
@@ -135,6 +135,7 @@ fides/api/alembic/migrations/versions/6b9885e68cbb_add_plus_system_scans_table.p
|
|
135
135
|
fides/api/alembic/migrations/versions/6bd93cb0603d_add_egress_and_ingress_to_systems.py,sha256=SF8abkI1Tb67Y89ldq8OZlSWVJAinFgUKnXFsmA703c,573
|
136
136
|
fides/api/alembic/migrations/versions/6cfd59e7920a_new_tables_for_pre_approval_webhooks.py,sha256=3DktNUFAgluZq7eeN5_uo5H79cHlbmSbGGhpK02vkCY,2736
|
137
137
|
fides/api/alembic/migrations/versions/6d6b0b7cbb36_add_privacynotice_tables.py,sha256=wX8VHvZ6aauFZUmH9ufLUiMPeVvQMEXn8b5If6uDTVA,4688
|
138
|
+
fides/api/alembic/migrations/versions/6e565c16dae1_add_tcf_publisher_restrictions.py,sha256=SHqwQ_HqkAECG9tRdUTksmMVbK3h8rG8j6M_yVON2dY,3050
|
138
139
|
fides/api/alembic/migrations/versions/6ea2171c544f_change_attachment_storage_key_to_.py,sha256=4RIAQi5LGessli8NCO_WWWL7W8s2Pm5NBeksYE361dQ,1928
|
139
140
|
fides/api/alembic/migrations/versions/6f98e1bd7e4f_another_upstream_merge.py,sha256=wGjn7bFEZNRzyMwGGuk9ThssERJcxqEoL9NhJhU_vx8,392
|
140
141
|
fides/api/alembic/migrations/versions/708a780b01ba_add_version_fields_to_default_types.py,sha256=_4baR3IOmb0byWN77OxLeHXZwXEA2eUEx1sNJYrUy4E,2936
|
@@ -318,7 +319,7 @@ fides/api/cryptography/identity_salt.py,sha256=CYupQaaN2P81sXUYIbZfNLf8kMpboUJJK
|
|
318
319
|
fides/api/cryptography/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
319
320
|
fides/api/cryptography/schemas/jwt.py,sha256=2UgOJ99GLOBbxMdv2Etyo4J0fu1gPMKfD0zlKpgR7WU,188
|
320
321
|
fides/api/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
321
|
-
fides/api/db/base.py,sha256=
|
322
|
+
fides/api/db/base.py,sha256=w6L0NXF6ZwjmD_ueDoHi-oVUljsBP19QPDbqy-_x47c,3023
|
322
323
|
fides/api/db/base_class.py,sha256=XrzpwZ3rUKSVt_7j8PCTv6BjGhQzXnOJpcshPZfA4pg,12571
|
323
324
|
fides/api/db/crud.py,sha256=1h9AXOyTPlZFrrpy7mQLN2FDGr48NkuJtnAKxMzVGhg,14013
|
324
325
|
fides/api/db/ctl_session.py,sha256=Q6x737gm-WCiShhCyHyAFSd6Z2GAtAWw6hR-Y_gO_Jw,1710
|
@@ -394,6 +395,7 @@ fides/api/models/storage.py,sha256=jIqibe_APYdY7iJMdtyg8TQ7rXgPrzJ3khyfSUpN24w,6
|
|
394
395
|
fides/api/models/system_compass_sync.py,sha256=Xf1GIiKQTM66DPTW7OiBY1tPCwSsht1Y9l-5Hpxc5u0,1159
|
395
396
|
fides/api/models/system_history.py,sha256=qfiK1Ei5i_B0j8_rOG5WE3eMXPvFJ29QRAiBsELHDzU,1479
|
396
397
|
fides/api/models/system_manager.py,sha256=U7ZxIFjMA_H3eY4kyT7jfOa59Lz8hLePGURDcv5ihfA,512
|
398
|
+
fides/api/models/tcf_publisher_restrictions.py,sha256=JJpDPDy-lo5ICOmBPrn64GDz9p4_0HbsnVO5dnB_Y30,6850
|
397
399
|
fides/api/models/tcf_purpose_overrides.py,sha256=_7RcctuoPnKT8o70S2_4AArVGXz_xx97GqLS87AJomk,716
|
398
400
|
fides/api/models/privacy_request/__init__.py,sha256=AavNswo44z-vHKqYy98sjSozH_XH9vpBFMOv1qt4Ty4,1237
|
399
401
|
fides/api/models/privacy_request/consent.py,sha256=JTt9rQ5xxv31b62wqItHRy5Nl3iSzk1ZnIdn1P1lpis,5220
|
@@ -770,29 +772,27 @@ fides/service/messaging/aws_ses_service.py,sha256=7yZe4wuhWzdZl6soddHrUhExJvIXeq
|
|
770
772
|
fides/service/messaging/messaging_service.py,sha256=_3iObiVslfJzuzCukCDw2gbQXrOPpMZs3LqG1Dbmirw,11710
|
771
773
|
fides/service/privacy_request/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
772
774
|
fides/service/privacy_request/privacy_request_service.py,sha256=n751XgEPW4PN7HnodgZCzV6cQ9Jt_5h5Who6TFr7BSo,26854
|
773
|
-
fides/ui-build/static/admin/404.html,sha256=
|
774
|
-
fides/ui-build/static/admin/add-systems.html,sha256=
|
775
|
-
fides/ui-build/static/admin/ant-poc.html,sha256=
|
776
|
-
fides/ui-build/static/admin/consent.html,sha256=
|
777
|
-
fides/ui-build/static/admin/data-catalog.html,sha256=
|
778
|
-
fides/ui-build/static/admin/datamap.html,sha256=
|
779
|
-
fides/ui-build/static/admin/dataset.html,sha256=
|
780
|
-
fides/ui-build/static/admin/datastore-connection.html,sha256=
|
775
|
+
fides/ui-build/static/admin/404.html,sha256=raCqGWFe4FHpL_UncCwgjcegFEdO0KebuXBKV2wvpos,1466
|
776
|
+
fides/ui-build/static/admin/add-systems.html,sha256=uh4tMMLrxCTtY9Oe9QMt_RCLvoDMGKmXtsucPZuaTU0,1642
|
777
|
+
fides/ui-build/static/admin/ant-poc.html,sha256=UO0FpuvM6m-rvnUXiw2mK98Ksq2HB16D4TD7U1gfo2A,1474
|
778
|
+
fides/ui-build/static/admin/consent.html,sha256=mN_z_vFGbjUsZT9Qjqt3NV6Fb6SggQOpWGItMjUruGA,1474
|
779
|
+
fides/ui-build/static/admin/data-catalog.html,sha256=HVUpFCtl_E3lm_Jby6LxYVPhgxx1zC388kgwbiRCyFk,2116
|
780
|
+
fides/ui-build/static/admin/datamap.html,sha256=7k_-BNKudzSi1dUlops4ouvyGPazt-uS_Jg2-vr9LKI,2023
|
781
|
+
fides/ui-build/static/admin/dataset.html,sha256=6LYYIGHFDCk1sl63Caq8xvWMdieSi4n_M2B1thW1oZQ,1868
|
782
|
+
fides/ui-build/static/admin/datastore-connection.html,sha256=exESTeLzr7xVAVjv8S2fCGPq4j15aehSt19v3BOiNTU,1660
|
781
783
|
fides/ui-build/static/admin/favicon.ico,sha256=xxtarycoqCOznVZCG0z5Wej6EfYvMYwyz6EUwaVwhEw,4286
|
782
|
-
fides/ui-build/static/admin/index.html,sha256=
|
783
|
-
fides/ui-build/static/admin/integrations.html,sha256=
|
784
|
-
fides/ui-build/static/admin/login.html,sha256=
|
784
|
+
fides/ui-build/static/admin/index.html,sha256=f_4b1gMWUuQLhLgYVQYoY74YH58pgx3UZv_bmFYhwpk,1625
|
785
|
+
fides/ui-build/static/admin/integrations.html,sha256=t8UrgIexB0SUaoCYe62SkdGUEeGY5VoOz3iumjCz7pk,1874
|
786
|
+
fides/ui-build/static/admin/login.html,sha256=F-Qr23Vvdytk4nFgJ--7-7wpV9gedBWLTFF_pefkowQ,1470
|
785
787
|
fides/ui-build/static/admin/logo-icon.svg,sha256=LTpApcJnb73kye_gPF3KG8qNe6S3HJJKeebdl6aJ8fI,147
|
786
788
|
fides/ui-build/static/admin/logo-white.svg,sha256=u12SVA-WPW0GAhJ1wXM4oi2aqKXKmteo6yEvGDgz5jM,2101
|
787
789
|
fides/ui-build/static/admin/logo.svg,sha256=bCostWyEaAVHBbKwGhzAAGJ0ZNgxBGgzhwKsAXS47bg,2100
|
788
|
-
fides/ui-build/static/admin/messaging.html,sha256=
|
789
|
-
fides/ui-build/static/admin/privacy-requests.html,sha256=
|
790
|
-
fides/ui-build/static/admin/properties.html,sha256=
|
791
|
-
fides/ui-build/static/admin/systems.html,sha256=
|
792
|
-
fides/ui-build/static/admin/taxonomy.html,sha256=
|
793
|
-
fides/ui-build/static/admin/user-management.html,sha256=
|
794
|
-
fides/ui-build/static/admin/_next/static/ImUuWMsloiAWNWbICVyCj/_buildManifest.js,sha256=OFMS_rRgPGiPKKCKVlvzhhW-4zo1ElBwOyjGccqoWxk,12159
|
795
|
-
fides/ui-build/static/admin/_next/static/ImUuWMsloiAWNWbICVyCj/_ssgManifest.js,sha256=-D2RVaEwulH2ck-9Y_5QwX6x5lnaSkDOhosw4jeAt-M,101
|
790
|
+
fides/ui-build/static/admin/messaging.html,sha256=rJ6KLk5hKBdrkuDcHVBBTE1pTk-RKg9ePndYEGHp9Co,1950
|
791
|
+
fides/ui-build/static/admin/privacy-requests.html,sha256=z-27ryCFaYSQ7IHQG7yYF5pUushecftZRPZEfx3H7S4,1808
|
792
|
+
fides/ui-build/static/admin/properties.html,sha256=Op-Pb3rKNf3N2P06OCaQDyTJt-MNhZoTGsYWxH8ZUR8,1794
|
793
|
+
fides/ui-build/static/admin/systems.html,sha256=TRK3sWIPj1o0YBgikwDZVyAAW-3SkmWrVzCGjzoAhT4,1712
|
794
|
+
fides/ui-build/static/admin/taxonomy.html,sha256=x4jDu-lgs3LdgRGt2DskAA4-PaO_zsGjCJkqVI5LKbw,2185
|
795
|
+
fides/ui-build/static/admin/user-management.html,sha256=p4t9V-qzk1LpS2w7Vo8t0dEMzf25ER3P7NvMyTsJ6vE,1568
|
796
796
|
fides/ui-build/static/admin/_next/static/chunks/1100-053fc6b76c65a00f.js,sha256=tifn0uKU6UnB0II0u8ouqRspoUDmDqQhdkvXHyiiIOg,11046
|
797
797
|
fides/ui-build/static/admin/_next/static/chunks/1150-2642cd9cdc8a52f6.js,sha256=B4r2k3bpwczdKR_AzTC1OGiyg1cyLTL4e-Ldpggjad0,17592
|
798
798
|
fides/ui-build/static/admin/_next/static/chunks/1376-98cbf3789b9145c3.js,sha256=I2jmL5rEPJn-GrQpGu6c7wQz7ddarQrqbOaZ54nzRr4,30773
|
@@ -975,37 +975,39 @@ fides/ui-build/static/admin/_next/static/media/inter-vietnamese-500-normal.7b524
|
|
975
975
|
fides/ui-build/static/admin/_next/static/media/inter-vietnamese-600-normal.eb82de1d.woff2,sha256=ZKjcMjaLlHAKJJyTcujqJwFDooKWcq8qQSuKZVfXZRA,3876
|
976
976
|
fides/ui-build/static/admin/_next/static/media/inter-vietnamese-700-normal.00e401a9.woff2,sha256=92gZYPHyPg3OZ_u0f78u6ZZNdc53OvVkqhoTelycCqw,3888
|
977
977
|
fides/ui-build/static/admin/_next/static/media/logo-white.c9bf4196.svg,sha256=u12SVA-WPW0GAhJ1wXM4oi2aqKXKmteo6yEvGDgz5jM,2101
|
978
|
-
fides/ui-build/static/admin/
|
979
|
-
fides/ui-build/static/admin/
|
980
|
-
fides/ui-build/static/admin/
|
981
|
-
fides/ui-build/static/admin/
|
982
|
-
fides/ui-build/static/admin/consent/
|
983
|
-
fides/ui-build/static/admin/consent/
|
984
|
-
fides/ui-build/static/admin/consent/
|
985
|
-
fides/ui-build/static/admin/consent/
|
986
|
-
fides/ui-build/static/admin/consent/
|
987
|
-
fides/ui-build/static/admin/consent/
|
988
|
-
fides/ui-build/static/admin/consent/privacy-
|
989
|
-
fides/ui-build/static/admin/consent/privacy-
|
990
|
-
fides/ui-build/static/admin/
|
991
|
-
fides/ui-build/static/admin/
|
992
|
-
fides/ui-build/static/admin/data-catalog/[systemId]/projects
|
993
|
-
fides/ui-build/static/admin/data-catalog/[systemId]/
|
994
|
-
fides/ui-build/static/admin/data-catalog/[systemId]/
|
995
|
-
fides/ui-build/static/admin/data-
|
996
|
-
fides/ui-build/static/admin/data-
|
997
|
-
fides/ui-build/static/admin/data-discovery/
|
998
|
-
fides/ui-build/static/admin/data-discovery/
|
999
|
-
fides/ui-build/static/admin/data-discovery/
|
1000
|
-
fides/ui-build/static/admin/data-discovery/
|
1001
|
-
fides/ui-build/static/admin/data-discovery/
|
1002
|
-
fides/ui-build/static/admin/data-discovery/
|
1003
|
-
fides/ui-build/static/admin/
|
1004
|
-
fides/ui-build/static/admin/
|
1005
|
-
fides/ui-build/static/admin/dataset/[datasetId]
|
1006
|
-
fides/ui-build/static/admin/dataset/
|
1007
|
-
fides/ui-build/static/admin/
|
1008
|
-
fides/ui-build/static/admin/
|
978
|
+
fides/ui-build/static/admin/_next/static/u9w7grMtLxEveFsXqNFab/_buildManifest.js,sha256=OFMS_rRgPGiPKKCKVlvzhhW-4zo1ElBwOyjGccqoWxk,12159
|
979
|
+
fides/ui-build/static/admin/_next/static/u9w7grMtLxEveFsXqNFab/_ssgManifest.js,sha256=-D2RVaEwulH2ck-9Y_5QwX6x5lnaSkDOhosw4jeAt-M,101
|
980
|
+
fides/ui-build/static/admin/add-systems/manual.html,sha256=KmtlIbaxqk40FY6phpWbl9vDbwXa8yNxdGJ3urHV6PA,2595
|
981
|
+
fides/ui-build/static/admin/add-systems/multiple.html,sha256=5lKL_pqas61W51cDVx0hY8qMhf7-Mpb-pMm5k906_0k,1971
|
982
|
+
fides/ui-build/static/admin/consent/configure.html,sha256=j6DeP3xfkPuZPhyR10CMyO-Agz5Wzz7fTWRsDs577iA,1887
|
983
|
+
fides/ui-build/static/admin/consent/privacy-experience.html,sha256=kxOlwpTBVsjnJqXYtWbmpf7qOQtaFilQ3X1RGYaat_Y,1906
|
984
|
+
fides/ui-build/static/admin/consent/privacy-notices.html,sha256=-vbFso9KRFxTzk51mg822iwwLz7zs7Pqznvql-nSzro,1822
|
985
|
+
fides/ui-build/static/admin/consent/properties.html,sha256=LgIzybaPPUEANs6KfR8b7B1zQIvchZk6mHWAAsWOmbw,1810
|
986
|
+
fides/ui-build/static/admin/consent/reporting.html,sha256=EJoosFpgHiFNCmY4WokN4v-M12LA10iLY3Mv4AVRjJo,1810
|
987
|
+
fides/ui-build/static/admin/consent/configure/add-vendors.html,sha256=O1n9P3Ao267nNgZ_uUNflL9qd2v7jyk_fVRRUE3-mxk,1989
|
988
|
+
fides/ui-build/static/admin/consent/privacy-experience/[id].html,sha256=9717q3zFDm9uNyLIVB0s7_Zg0hSwZBsIetQFj8iflBY,2072
|
989
|
+
fides/ui-build/static/admin/consent/privacy-experience/new.html,sha256=NY21gi-Z4zDetM3wrvD0YeGo7U3OGsa4I2dA6AQ0iL4,2066
|
990
|
+
fides/ui-build/static/admin/consent/privacy-notices/[id].html,sha256=BuPVpJUwlnSluB4jlJgnx9i-O_5QF8okdeVXqe_AGN0,2066
|
991
|
+
fides/ui-build/static/admin/consent/privacy-notices/new.html,sha256=8HEk-7WuY4hwCRLii4b1T3MFGRAE-QoMYMB50GZaitA,2060
|
992
|
+
fides/ui-build/static/admin/data-catalog/[systemId]/projects.html,sha256=uZduBEVqjyqwy8z_ubbuvIEOUdBbd9Y0-3CpR_BFeEg,2316
|
993
|
+
fides/ui-build/static/admin/data-catalog/[systemId]/resources.html,sha256=zjK8NLCCOrnkcu6x_8bSUR34_nRB4a8lp4KRxft38EI,1846
|
994
|
+
fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html,sha256=sOmGXuBSYrA9_wxyrrBZvj6YdMQ3_1Tr8XJoydkg0Zk,1874
|
995
|
+
fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html,sha256=bbpB5cMK9x67Z9xVmG0g0G7xOhIpHMCxDiPSZFBrckE,2456
|
996
|
+
fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html,sha256=lZJbcwFnvNjzTPFwUYnvcuNT_u7Of6GHuntmhHCOhRc,2428
|
997
|
+
fides/ui-build/static/admin/data-discovery/action-center.html,sha256=mmEHGL2j4WtSIBieKs4XbBW9fyifjkFSpYR_J9UfsMs,1754
|
998
|
+
fides/ui-build/static/admin/data-discovery/activity.html,sha256=VXm7Q3MnFicXeJVgt5-aqokUtPa9uo5NibRb1vFDv6o,1900
|
999
|
+
fides/ui-build/static/admin/data-discovery/detection.html,sha256=S1FT7wj9-a4Yub8TUYxUYg8deq1O6AvR3Pj6ZARC5GM,1980
|
1000
|
+
fides/ui-build/static/admin/data-discovery/discovery.html,sha256=1hpZtifP6lkklLkKPlM86e7dSGI9Emn7nk9ixv9Ao5A,2374
|
1001
|
+
fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html,sha256=TZwgwDbWZHGVQL6iUcNtZH70GFHE8dD5JznOUUQQSyw,2094
|
1002
|
+
fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html,sha256=lHWGSkCQTb8NkADH-o638ZEJFGtb8oXzb9MgUu5LjE8,2280
|
1003
|
+
fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html,sha256=dfE8VlLtXIDfIjvUQJexKyXv2-BQs-pP553tP6KfU_w,2012
|
1004
|
+
fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html,sha256=6vGIfFwdf6C7lHUBbY99my2m0nScrbHcspGJhgwvK9s,2406
|
1005
|
+
fides/ui-build/static/admin/dataset/[datasetId].html,sha256=FlsR8bnU-ep7rJnefE17LbSD-BgcRhKEj9tjHdMC97I,1896
|
1006
|
+
fides/ui-build/static/admin/dataset/new.html,sha256=p04wyP444GVQVFCK7enBlH3nBMWt1a4qMRN8Gu60T_Q,1638
|
1007
|
+
fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html,sha256=iXK3pDH63mu66-Y0lkTaqM04ccdSTHGqyw5rMus3YLQ,2328
|
1008
|
+
fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html,sha256=khqgKjYBjBewzjti6C8qxbSQBsmXdQgDl2eSj0WzMPI,2370
|
1009
|
+
fides/ui-build/static/admin/datastore-connection/[id].html,sha256=mt3oDQEAD7vyuTbLLQeXf031rSp0LjXJ2_VRqAVMcsA,1748
|
1010
|
+
fides/ui-build/static/admin/datastore-connection/new.html,sha256=oKjR9w2cjl-gS6eSAn5UxUJYBsP8-gC4zIwH7t4wXns,1820
|
1009
1011
|
fides/ui-build/static/admin/images/DatabaseIcon.svg,sha256=gwl8_3APg_6J4ZwWgovOjxgk5AEPyvq3-qGjkF7R4og,8198
|
1010
1012
|
fides/ui-build/static/admin/images/SelectedDatabaseIcon.svg,sha256=L6YBuL-LiKzBXyt9gHZhtqpo2QopXdC7-oEvEWbvSNE,8198
|
1011
1013
|
fides/ui-build/static/admin/images/config_splash.svg,sha256=IH56T1jrG1y4FIKQZXMaePYESYZGot_4jkTaFvmwHl0,176040
|
@@ -1033,37 +1035,37 @@ fides/ui-build/static/admin/images/oauth-login/custom.svg,sha256=SW1i3Mez8XVMVGR
|
|
1033
1035
|
fides/ui-build/static/admin/images/oauth-login/github.svg,sha256=eg3RHjc4MKUaVl3p_tSphXB8Z8zTkPmuSUahUjA-pnY,963
|
1034
1036
|
fides/ui-build/static/admin/images/oauth-login/google.svg,sha256=oRdvveXEbNFZ4_xD6u-DxqNIPJh12o3XU2tITX6ghQU,988
|
1035
1037
|
fides/ui-build/static/admin/images/oauth-login/okta.svg,sha256=ymR7Rqk7syL52284jlure_i06-nVKwZbJwB6JXfdNwo,8076
|
1036
|
-
fides/ui-build/static/admin/integrations/[id].html,sha256=
|
1037
|
-
fides/ui-build/static/admin/lib/fides-ext-gpp.js,sha256=
|
1038
|
-
fides/ui-build/static/admin/lib/fides-headless.js,sha256=
|
1039
|
-
fides/ui-build/static/admin/lib/fides-tcf.js,sha256=
|
1040
|
-
fides/ui-build/static/admin/lib/fides.js,sha256=
|
1041
|
-
fides/ui-build/static/admin/login/[provider].html,sha256=
|
1042
|
-
fides/ui-build/static/admin/messaging/[id].html,sha256=
|
1043
|
-
fides/ui-build/static/admin/messaging/add-template.html,sha256=
|
1044
|
-
fides/ui-build/static/admin/privacy-requests/[id].html,sha256=
|
1045
|
-
fides/ui-build/static/admin/privacy-requests/configure.html,sha256=
|
1046
|
-
fides/ui-build/static/admin/privacy-requests/configure/messaging.html,sha256=
|
1047
|
-
fides/ui-build/static/admin/privacy-requests/configure/storage.html,sha256=
|
1048
|
-
fides/ui-build/static/admin/properties/[id].html,sha256=
|
1049
|
-
fides/ui-build/static/admin/properties/add-property.html,sha256=
|
1050
|
-
fides/ui-build/static/admin/reporting/datamap.html,sha256=
|
1051
|
-
fides/ui-build/static/admin/settings/about.html,sha256=
|
1052
|
-
fides/ui-build/static/admin/settings/consent.html,sha256=
|
1053
|
-
fides/ui-build/static/admin/settings/custom-fields.html,sha256
|
1054
|
-
fides/ui-build/static/admin/settings/domain-records.html,sha256=
|
1055
|
-
fides/ui-build/static/admin/settings/domains.html,sha256=
|
1056
|
-
fides/ui-build/static/admin/settings/email-templates.html,sha256=
|
1057
|
-
fides/ui-build/static/admin/settings/locations.html,sha256=
|
1058
|
-
fides/ui-build/static/admin/settings/organization.html,sha256=
|
1059
|
-
fides/ui-build/static/admin/settings/regulations.html,sha256=
|
1060
|
-
fides/ui-build/static/admin/systems/configure/[id].html,sha256=
|
1061
|
-
fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html,sha256=
|
1062
|
-
fides/ui-build/static/admin/user-management/new.html,sha256=
|
1063
|
-
fides/ui-build/static/admin/user-management/profile/[id].html,sha256=
|
1064
|
-
ethyca_fides-2.58.
|
1065
|
-
ethyca_fides-2.58.
|
1066
|
-
ethyca_fides-2.58.
|
1067
|
-
ethyca_fides-2.58.
|
1068
|
-
ethyca_fides-2.58.
|
1069
|
-
ethyca_fides-2.58.
|
1038
|
+
fides/ui-build/static/admin/integrations/[id].html,sha256=hH3G6ABMDS-ew8oxPPqIRZzhJxQZjSIHB7OAAimNjKo,2126
|
1039
|
+
fides/ui-build/static/admin/lib/fides-ext-gpp.js,sha256=cZlYtIP4xMkkNLunntjZIUhB7h_m_7mn7sZ6wgY28Ns,201174
|
1040
|
+
fides/ui-build/static/admin/lib/fides-headless.js,sha256=u9iM0d6XXhLEW2Oi4XhHwIp9RPVzyANSBcheYjToVS8,69996
|
1041
|
+
fides/ui-build/static/admin/lib/fides-tcf.js,sha256=tAAt1Vd68e8Br6x_bURx4RHwx-KElkHHs4gcH75Wa2M,361254
|
1042
|
+
fides/ui-build/static/admin/lib/fides.js,sha256=vo3O6PcCtQtjjHViNNQf60hruIdHXUlH1Nq_pBtBg-c,146166
|
1043
|
+
fides/ui-build/static/admin/login/[provider].html,sha256=augJPa4q8JvTdxjrSCMKLSTqhznOM9FH3xqTUP-n7F8,1496
|
1044
|
+
fides/ui-build/static/admin/messaging/[id].html,sha256=kHrD3DUAdDrc1nw3zCv6p6JkAxWeqRKfP0Y0xBpAI9M,1648
|
1045
|
+
fides/ui-build/static/admin/messaging/add-template.html,sha256=gwL5igzI8_zOZBarrFjzVH9DdJzHTwXcSqZ0BbFvCRI,1660
|
1046
|
+
fides/ui-build/static/admin/privacy-requests/[id].html,sha256=t8eJfQLQHYjdaI9T7oWdy3JOaujdlZ_baiq1eg-ef4U,1744
|
1047
|
+
fides/ui-build/static/admin/privacy-requests/configure.html,sha256=BCWcsGQ3BqbYNnZRtVd99r7_cA0jsXEcXXbzJPP_fTw,1512
|
1048
|
+
fides/ui-build/static/admin/privacy-requests/configure/messaging.html,sha256=lbYVYUQraXrcYqCaC5EOihGgill1MZhT487q0Qz66qE,1532
|
1049
|
+
fides/ui-build/static/admin/privacy-requests/configure/storage.html,sha256=ddpbdAV_SE6QQa_0fhgfY4qTrgl7SrvQmgVLGvp1nr0,1528
|
1050
|
+
fides/ui-build/static/admin/properties/[id].html,sha256=aLH2jw-LcUN-u5ZLTJHUj23CTtysN0CRVCH27TxLswI,1650
|
1051
|
+
fides/ui-build/static/admin/properties/add-property.html,sha256=5KsL-MD9SXkX5A7sD_1mpeOf-ZYg3EsASgGyu2wKgaI,1662
|
1052
|
+
fides/ui-build/static/admin/reporting/datamap.html,sha256=7SIDi-64DpQdtOyVA7bhWo-Z6RkQ9uCAOScCuvW9zV8,2278
|
1053
|
+
fides/ui-build/static/admin/settings/about.html,sha256=cuFagk1bq16rY_vmzSLc0YgJnxQg9y697eyIFlb5WTo,1488
|
1054
|
+
fides/ui-build/static/admin/settings/consent.html,sha256=aA7IJy-IUiSNRMVJnEhWYeWW2mqEPRu1KJiaBYFMtNU,1492
|
1055
|
+
fides/ui-build/static/admin/settings/custom-fields.html,sha256=PO9llOiySTIFbFESrVGwEldZ_jFjvH3lmiwkx0jTSRE,1820
|
1056
|
+
fides/ui-build/static/admin/settings/domain-records.html,sha256=xPvkVESk-u43aOgo0DPahz61Xf18Jc3KdA7S3Of3qBI,1744
|
1057
|
+
fides/ui-build/static/admin/settings/domains.html,sha256=wsXHK2K3ZUCW7ABZctEfMzz7pLcm4EJWeHpwAGRBRwk,1492
|
1058
|
+
fides/ui-build/static/admin/settings/email-templates.html,sha256=SEcg2qU-arB-wxx2P8ckXu-6pgIG-1W-BbFR0WIYeKc,1508
|
1059
|
+
fides/ui-build/static/admin/settings/locations.html,sha256=PftZHBZtpkBfAtmy9Im7icL4__XnRzLfvlB-M_-73mE,1656
|
1060
|
+
fides/ui-build/static/admin/settings/organization.html,sha256=9s9g09Rvyi7bnvX9hN47JqDFqu5bLafuiWAQ4-x33eg,1502
|
1061
|
+
fides/ui-build/static/admin/settings/regulations.html,sha256=NtnRCpeKPeEBJ1xNA1FPMGfDnhb3WM12vCAEsic-fJk,1660
|
1062
|
+
fides/ui-build/static/admin/systems/configure/[id].html,sha256=NSj16LAKaKXifj9gdLCLJz8GfBkd7S2YY3h56lqNobI,2607
|
1063
|
+
fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html,sha256=JCzTaN-Mwlk34dnOeWYYwGJgIrORv5ZiPznlOSFvF0g,1692
|
1064
|
+
fides/ui-build/static/admin/user-management/new.html,sha256=7AI-yhqERVDbeF34n8fNwhQsZSjgnJYXbXJNTiZSlgM,1654
|
1065
|
+
fides/ui-build/static/admin/user-management/profile/[id].html,sha256=j1r3bb-ye5DUrcJneKDIEiq87vIiAE-x6uJOqEgESjs,1676
|
1066
|
+
ethyca_fides-2.58.2b0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
1067
|
+
ethyca_fides-2.58.2b0.dist-info/METADATA,sha256=b5crPSuLyMArOr_YX6lQMscn3BmYeyUpZYG0Hp0iyFg,11361
|
1068
|
+
ethyca_fides-2.58.2b0.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
|
1069
|
+
ethyca_fides-2.58.2b0.dist-info/entry_points.txt,sha256=5WeLH-MlYWywYIbMGVrZkPpjTkdHDDf1p-LXFiF9ATo,41
|
1070
|
+
ethyca_fides-2.58.2b0.dist-info/top_level.txt,sha256=vHQkcSYYOh4ECEGL1JSGUAxFWpwO05QGPV0M2aPxqNQ,6
|
1071
|
+
ethyca_fides-2.58.2b0.dist-info/RECORD,,
|
fides/_version.py
CHANGED
@@ -8,11 +8,11 @@ import json
|
|
8
8
|
|
9
9
|
version_json = '''
|
10
10
|
{
|
11
|
-
"date": "2025-04-
|
11
|
+
"date": "2025-04-02T16:21:34-0300",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "2.58.
|
14
|
+
"full-revisionid": "fe5691256243517ec2cac351e75000e269a4fa50",
|
15
|
+
"version": "2.58.2b0"
|
16
16
|
}
|
17
17
|
''' # END VERSION_JSON
|
18
18
|
|
@@ -0,0 +1,107 @@
|
|
1
|
+
"""Add TCF Publisher Restrictions
|
2
|
+
|
3
|
+
Revision ID: 6e565c16dae1
|
4
|
+
Revises: 67d01c4e124e
|
5
|
+
Create Date: 2025-04-02 12:35:34.105607
|
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 = "6e565c16dae1"
|
15
|
+
down_revision = "67d01c4e124e"
|
16
|
+
branch_labels = None
|
17
|
+
depends_on = None
|
18
|
+
|
19
|
+
|
20
|
+
def upgrade():
|
21
|
+
# Create tcf_configuration table
|
22
|
+
op.create_table(
|
23
|
+
"tcf_configuration",
|
24
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
25
|
+
sa.Column(
|
26
|
+
"created_at",
|
27
|
+
sa.DateTime(timezone=True),
|
28
|
+
server_default=sa.text("now()"),
|
29
|
+
nullable=True,
|
30
|
+
),
|
31
|
+
sa.Column(
|
32
|
+
"updated_at",
|
33
|
+
sa.DateTime(timezone=True),
|
34
|
+
server_default=sa.text("now()"),
|
35
|
+
nullable=True,
|
36
|
+
),
|
37
|
+
sa.Column("name", sa.String(), nullable=False),
|
38
|
+
sa.PrimaryKeyConstraint("id"),
|
39
|
+
sa.UniqueConstraint("name"),
|
40
|
+
)
|
41
|
+
# Create tcf_publisher_restriction table
|
42
|
+
op.create_table(
|
43
|
+
"tcf_publisher_restriction",
|
44
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
45
|
+
sa.Column(
|
46
|
+
"created_at",
|
47
|
+
sa.DateTime(timezone=True),
|
48
|
+
server_default=sa.text("now()"),
|
49
|
+
nullable=True,
|
50
|
+
),
|
51
|
+
sa.Column(
|
52
|
+
"updated_at",
|
53
|
+
sa.DateTime(timezone=True),
|
54
|
+
server_default=sa.text("now()"),
|
55
|
+
nullable=True,
|
56
|
+
),
|
57
|
+
sa.Column("tcf_configuration_id", sa.String(255), nullable=False),
|
58
|
+
sa.Column("purpose_id", sa.Integer(), nullable=False),
|
59
|
+
sa.Column(
|
60
|
+
"restriction_type",
|
61
|
+
sa.Enum(
|
62
|
+
"purpose_restriction",
|
63
|
+
"require_consent",
|
64
|
+
"require_legitimate_interest",
|
65
|
+
name="tcfrestrictiontype",
|
66
|
+
),
|
67
|
+
nullable=False,
|
68
|
+
),
|
69
|
+
sa.Column(
|
70
|
+
"vendor_restriction",
|
71
|
+
sa.Enum(
|
72
|
+
"restrict_all_vendors",
|
73
|
+
"allow_specific_vendors",
|
74
|
+
"restrict_specific_vendors",
|
75
|
+
name="tcfvendorrestriction",
|
76
|
+
),
|
77
|
+
nullable=False,
|
78
|
+
),
|
79
|
+
sa.Column(
|
80
|
+
"range_entries",
|
81
|
+
postgresql.ARRAY(postgresql.JSONB(astext_type=sa.Text())),
|
82
|
+
server_default="{}",
|
83
|
+
nullable=False,
|
84
|
+
),
|
85
|
+
sa.ForeignKeyConstraint(
|
86
|
+
["tcf_configuration_id"],
|
87
|
+
["tcf_configuration.id"],
|
88
|
+
ondelete="CASCADE",
|
89
|
+
),
|
90
|
+
sa.PrimaryKeyConstraint("id"),
|
91
|
+
)
|
92
|
+
op.create_index(
|
93
|
+
op.f("ix_tcf_publisher_restriction_config_purpose"),
|
94
|
+
"tcf_publisher_restriction",
|
95
|
+
["tcf_configuration_id", "purpose_id"],
|
96
|
+
unique=False,
|
97
|
+
)
|
98
|
+
|
99
|
+
|
100
|
+
def downgrade():
|
101
|
+
# Drop tables
|
102
|
+
op.drop_table("tcf_publisher_restriction")
|
103
|
+
op.drop_table("tcf_configuration")
|
104
|
+
|
105
|
+
# Drop enums
|
106
|
+
op.execute("DROP TYPE tcfrestrictiontype")
|
107
|
+
op.execute("DROP TYPE tcfvendorrestriction")
|
fides/api/db/base.py
CHANGED
@@ -59,4 +59,8 @@ from fides.api.models.storage import StorageConfig
|
|
59
59
|
from fides.api.models.system_compass_sync import SystemCompassSync
|
60
60
|
from fides.api.models.system_history import SystemHistory
|
61
61
|
from fides.api.models.system_manager import SystemManager
|
62
|
+
from fides.api.models.tcf_publisher_restrictions import (
|
63
|
+
TCFConfiguration,
|
64
|
+
TCFPublisherRestriction,
|
65
|
+
)
|
62
66
|
from fides.api.models.tcf_purpose_overrides import TCFPurposeOverride
|
@@ -0,0 +1,186 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
from typing import Any, Dict, List, Optional
|
3
|
+
|
4
|
+
from pydantic import BaseModel, Field, ValidationError, model_validator
|
5
|
+
from sqlalchemy import Column
|
6
|
+
from sqlalchemy import Enum as EnumColumn
|
7
|
+
from sqlalchemy import ForeignKey, Index, Integer, String
|
8
|
+
from sqlalchemy.dialects.postgresql import ARRAY, JSONB
|
9
|
+
from sqlalchemy.ext.declarative import declared_attr
|
10
|
+
from sqlalchemy.orm import Session
|
11
|
+
|
12
|
+
from fides.api.db.base_class import Base
|
13
|
+
|
14
|
+
|
15
|
+
class TCFRestrictionType(str, Enum):
|
16
|
+
"""Enum for TCF restriction types"""
|
17
|
+
|
18
|
+
purpose_restriction = "purpose_restriction"
|
19
|
+
require_consent = "require_consent"
|
20
|
+
require_legitimate_interest = "require_legitimate_interest"
|
21
|
+
|
22
|
+
|
23
|
+
class TCFVendorRestriction(str, Enum):
|
24
|
+
"""Enum for TCF vendor restriction types"""
|
25
|
+
|
26
|
+
restrict_all_vendors = "restrict_all_vendors"
|
27
|
+
allow_specific_vendors = "allow_specific_vendors"
|
28
|
+
restrict_specific_vendors = "restrict_specific_vendors"
|
29
|
+
|
30
|
+
|
31
|
+
# This is Pydantic model used for validation, not a database model!
|
32
|
+
class RangeEntry(BaseModel):
|
33
|
+
"""
|
34
|
+
Pydantic model that represents a vendor range entry as per the TCF spec,
|
35
|
+
used for Publisher Restrictions.
|
36
|
+
A range entry must have a start_vendor_id and optionally an end_vendor_id.
|
37
|
+
If end_vendor_id is present, it must be greater than start_vendor_id.
|
38
|
+
"""
|
39
|
+
|
40
|
+
start_vendor_id: int = Field(description="The starting vendor ID in the range")
|
41
|
+
end_vendor_id: Optional[int] = Field(
|
42
|
+
default=None, description="The ending vendor ID in the range (inclusive)"
|
43
|
+
)
|
44
|
+
|
45
|
+
@model_validator(mode="after")
|
46
|
+
def validate_vendor_range(self) -> "RangeEntry":
|
47
|
+
"""Validates that end_vendor_id is greater than start_vendor_id if present."""
|
48
|
+
if (
|
49
|
+
self.end_vendor_id is not None
|
50
|
+
and self.end_vendor_id <= self.start_vendor_id
|
51
|
+
):
|
52
|
+
raise ValueError("end_vendor_id must be greater than start_vendor_id")
|
53
|
+
return self
|
54
|
+
|
55
|
+
def get_end(self) -> int:
|
56
|
+
"""Get the effective end of the range."""
|
57
|
+
return self.end_vendor_id or self.start_vendor_id
|
58
|
+
|
59
|
+
def overlaps_with(self, other: "RangeEntry") -> bool:
|
60
|
+
"""
|
61
|
+
Check if this range overlaps with another range.
|
62
|
+
Two ranges overlap if the end of the range that starts first is greater than
|
63
|
+
or equal to the start of the range that starts second.
|
64
|
+
"""
|
65
|
+
# Sort ranges by start_vendor_id
|
66
|
+
first = self if self.start_vendor_id <= other.start_vendor_id else other
|
67
|
+
second = other if self.start_vendor_id <= other.start_vendor_id else self
|
68
|
+
|
69
|
+
# If first range's end is >= second range's start, they overlap
|
70
|
+
return first.get_end() >= second.start_vendor_id
|
71
|
+
|
72
|
+
|
73
|
+
class TCFConfiguration(Base):
|
74
|
+
"""
|
75
|
+
Stores TCF Configuration settings.
|
76
|
+
"""
|
77
|
+
|
78
|
+
@declared_attr
|
79
|
+
def __tablename__(self) -> str:
|
80
|
+
return "tcf_configuration"
|
81
|
+
|
82
|
+
name = Column(String, nullable=False, index=True, unique=True)
|
83
|
+
|
84
|
+
|
85
|
+
class TCFPublisherRestriction(Base):
|
86
|
+
"""
|
87
|
+
Stores TCF Publisher Restrictions. TCF Publisher Restrictions belong to a TCF Configuration,
|
88
|
+
and specify the restriction type and vendor restriction for a given purpose.
|
89
|
+
"""
|
90
|
+
|
91
|
+
@declared_attr
|
92
|
+
def __tablename__(self) -> str:
|
93
|
+
return "tcf_publisher_restriction"
|
94
|
+
|
95
|
+
tcf_configuration_id = Column(
|
96
|
+
String(255),
|
97
|
+
ForeignKey("tcf_configuration.id", ondelete="CASCADE"),
|
98
|
+
nullable=False,
|
99
|
+
index=True,
|
100
|
+
)
|
101
|
+
purpose_id = Column(Integer, nullable=False)
|
102
|
+
restriction_type = Column(EnumColumn(TCFRestrictionType), nullable=False)
|
103
|
+
vendor_restriction = Column(EnumColumn(TCFVendorRestriction), nullable=False)
|
104
|
+
|
105
|
+
# range_entries represents a list of RangeEntry objects as per the TCF spec.
|
106
|
+
# A RangeEntry object will have a start_vendor_id and an end_vendor_id (the
|
107
|
+
# end vendor id is included in the range).
|
108
|
+
# If the range represents a single vendor, then the end_vendor_id can be omitted.
|
109
|
+
# TCF spec also includes an IsARange boolean, which we are omitting because it
|
110
|
+
# can be inferred from the presence of the end_vendor_id.
|
111
|
+
range_entries = Column(
|
112
|
+
ARRAY(JSONB),
|
113
|
+
nullable=True,
|
114
|
+
server_default="{}",
|
115
|
+
default=list,
|
116
|
+
)
|
117
|
+
|
118
|
+
__table_args__ = (
|
119
|
+
Index(
|
120
|
+
"ix_tcf_publisher_restriction_config_purpose",
|
121
|
+
"tcf_configuration_id",
|
122
|
+
"purpose_id",
|
123
|
+
),
|
124
|
+
)
|
125
|
+
|
126
|
+
@staticmethod
|
127
|
+
def validate_entires_for_vendor_restriction(
|
128
|
+
entries: List[RangeEntry], vendor_restriction: TCFVendorRestriction
|
129
|
+
) -> None:
|
130
|
+
"""
|
131
|
+
Validates that if vendor_restriction is restrict_all_vendors, then the entries list is empty.
|
132
|
+
"""
|
133
|
+
if vendor_restriction == TCFVendorRestriction.restrict_all_vendors and entries:
|
134
|
+
raise ValueError("restrict_all_vendors cannot have any range entries")
|
135
|
+
|
136
|
+
@staticmethod
|
137
|
+
def check_for_overlaps(entries: List[RangeEntry]) -> None:
|
138
|
+
"""
|
139
|
+
Check for overlapping ranges in a list of RangeEntry objects,
|
140
|
+
raises a ValueError if any pair of RangeEntry overlaps with each other.
|
141
|
+
Sorts the ranges by start_vendor_id and compares adjacent ranges.
|
142
|
+
"""
|
143
|
+
# Sort ranges by start_vendor_id
|
144
|
+
sorted_entries = sorted(entries, key=lambda x: x.start_vendor_id)
|
145
|
+
|
146
|
+
# Compare each range with the next one
|
147
|
+
for i in range(len(sorted_entries) - 1):
|
148
|
+
current = sorted_entries[i]
|
149
|
+
next_entry = sorted_entries[i + 1]
|
150
|
+
if current.overlaps_with(next_entry):
|
151
|
+
raise ValueError(
|
152
|
+
f"Overlapping ranges found: {current.model_dump()} overlaps with {next_entry.model_dump()}"
|
153
|
+
)
|
154
|
+
|
155
|
+
@classmethod
|
156
|
+
def create(
|
157
|
+
cls,
|
158
|
+
db: Session,
|
159
|
+
*,
|
160
|
+
data: Dict[str, Any],
|
161
|
+
check_name: bool = True,
|
162
|
+
) -> "TCFPublisherRestriction":
|
163
|
+
"""
|
164
|
+
Create a new TCFPublisherRestriction with validated range_entries.
|
165
|
+
Validates each range entry using the RangeEntry Pydantic model.
|
166
|
+
"""
|
167
|
+
raw_range_entries = data.get("range_entries", [])
|
168
|
+
|
169
|
+
try:
|
170
|
+
# Validate each range entry using the Pydantic model
|
171
|
+
validated_entries = [
|
172
|
+
RangeEntry.model_validate(entry) for entry in raw_range_entries
|
173
|
+
]
|
174
|
+
except ValidationError as e:
|
175
|
+
raise ValueError(f"Invalid range entry: {str(e)}")
|
176
|
+
|
177
|
+
# Validate the entries for the vendor restriction
|
178
|
+
cls.validate_entires_for_vendor_restriction(
|
179
|
+
validated_entries, data["vendor_restriction"]
|
180
|
+
)
|
181
|
+
# Check for overlapping ranges
|
182
|
+
cls.check_for_overlaps(validated_entries)
|
183
|
+
|
184
|
+
data["range_entries"] = [entry.model_dump() for entry in validated_entries]
|
185
|
+
|
186
|
+
return super().create(db=db, data=data, check_name=check_name)
|
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/113d823fe71f6af0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/113d823fe71f6af0.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-2c7ccac5843c4d8e.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d4f59c13cb550ff4.js" defer=""></script><script src="/_next/static/chunks/pages/404-b202c0d8f6fc75c3.js" defer=""></script><script src="/_next/static/
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/113d823fe71f6af0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/113d823fe71f6af0.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-2c7ccac5843c4d8e.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d4f59c13cb550ff4.js" defer=""></script><script src="/_next/static/chunks/pages/404-b202c0d8f6fc75c3.js" defer=""></script><script src="/_next/static/u9w7grMtLxEveFsXqNFab/_buildManifest.js" defer=""></script><script src="/_next/static/u9w7grMtLxEveFsXqNFab/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"u9w7grMtLxEveFsXqNFab","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/113d823fe71f6af0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/113d823fe71f6af0.css" data-n-g=""/><link rel="preload" href="/_next/static/css/d2d4e9a6923e6730.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d2d4e9a6923e6730.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-2c7ccac5843c4d8e.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d4f59c13cb550ff4.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/2858-0b44609b6be7850b.js" defer=""></script><script src="/_next/static/chunks/2866-a73888c17a195cbe.js" defer=""></script><script src="/_next/static/chunks/9278-9b1b5970f0702668.js" defer=""></script><script src="/_next/static/chunks/5277-e8a036319456127f.js" defer=""></script><script src="/_next/static/chunks/4481-aab99ff80f707473.js" defer=""></script><script src="/_next/static/chunks/7980-72f745bff9fabcc9.js" defer=""></script><script src="/_next/static/chunks/355-8a77c9a1cd027f2e.js" defer=""></script><script src="/_next/static/chunks/8499-43606100edf42fdf.js" defer=""></script><script src="/_next/static/chunks/7453-ef1887105c062d37.js" defer=""></script><script src="/_next/static/chunks/4450-f5e6eb9270f03bf0.js" defer=""></script><script src="/_next/static/chunks/pages/add-systems/manual-9acaab973dfe86e2.js" defer=""></script><script src="/_next/static/
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/113d823fe71f6af0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/113d823fe71f6af0.css" data-n-g=""/><link rel="preload" href="/_next/static/css/d2d4e9a6923e6730.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d2d4e9a6923e6730.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-2c7ccac5843c4d8e.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d4f59c13cb550ff4.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/2858-0b44609b6be7850b.js" defer=""></script><script src="/_next/static/chunks/2866-a73888c17a195cbe.js" defer=""></script><script src="/_next/static/chunks/9278-9b1b5970f0702668.js" defer=""></script><script src="/_next/static/chunks/5277-e8a036319456127f.js" defer=""></script><script src="/_next/static/chunks/4481-aab99ff80f707473.js" defer=""></script><script src="/_next/static/chunks/7980-72f745bff9fabcc9.js" defer=""></script><script src="/_next/static/chunks/355-8a77c9a1cd027f2e.js" defer=""></script><script src="/_next/static/chunks/8499-43606100edf42fdf.js" defer=""></script><script src="/_next/static/chunks/7453-ef1887105c062d37.js" defer=""></script><script src="/_next/static/chunks/4450-f5e6eb9270f03bf0.js" defer=""></script><script src="/_next/static/chunks/pages/add-systems/manual-9acaab973dfe86e2.js" defer=""></script><script src="/_next/static/u9w7grMtLxEveFsXqNFab/_buildManifest.js" defer=""></script><script src="/_next/static/u9w7grMtLxEveFsXqNFab/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/add-systems/manual","query":{},"buildId":"u9w7grMtLxEveFsXqNFab","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/113d823fe71f6af0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/113d823fe71f6af0.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-2c7ccac5843c4d8e.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d4f59c13cb550ff4.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/4481-aab99ff80f707473.js" defer=""></script><script src="/_next/static/chunks/355-8a77c9a1cd027f2e.js" defer=""></script><script src="/_next/static/chunks/4723-1dd1d16f404d56a2.js" defer=""></script><script src="/_next/static/chunks/5826-ef0aa43ffad83acc.js" defer=""></script><script src="/_next/static/chunks/pages/add-systems/multiple-ba975134a85588f8.js" defer=""></script><script src="/_next/static/
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/113d823fe71f6af0.css" as="style"/><link rel="stylesheet" href="/_next/static/css/113d823fe71f6af0.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-2c7ccac5843c4d8e.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d4f59c13cb550ff4.js" defer=""></script><script src="/_next/static/chunks/c78d26b1-88a3e1bacb2a03c2.js" defer=""></script><script src="/_next/static/chunks/6060-cb1ab5be7067bf7b.js" defer=""></script><script src="/_next/static/chunks/4481-aab99ff80f707473.js" defer=""></script><script src="/_next/static/chunks/355-8a77c9a1cd027f2e.js" defer=""></script><script src="/_next/static/chunks/4723-1dd1d16f404d56a2.js" defer=""></script><script src="/_next/static/chunks/5826-ef0aa43ffad83acc.js" defer=""></script><script src="/_next/static/chunks/pages/add-systems/multiple-ba975134a85588f8.js" defer=""></script><script src="/_next/static/u9w7grMtLxEveFsXqNFab/_buildManifest.js" defer=""></script><script src="/_next/static/u9w7grMtLxEveFsXqNFab/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/add-systems/multiple","query":{},"buildId":"u9w7grMtLxEveFsXqNFab","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|