051890c370
Build + Deploy / build-admin-compliance (push) Successful in 2m0s
Build + Deploy / build-backend-compliance (push) Successful in 14s
Build + Deploy / build-ai-sdk (push) Successful in 10s
Build + Deploy / build-developer-portal (push) Successful in 14s
Build + Deploy / build-tts (push) Successful in 11s
Build + Deploy / build-document-crawler (push) Successful in 11s
Build + Deploy / build-dsms-gateway (push) Successful in 10s
Build + Deploy / build-dsms-node (push) Successful in 13s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 18s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m55s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Successful in 45s
CI / test-python-backend (push) Successful in 41s
CI / test-python-document-crawler (push) Successful in 30s
CI / test-python-dsms-gateway (push) Successful in 26s
CI / validate-canonical-controls (push) Successful in 15s
Build + Deploy / trigger-orca (push) Successful in 2m17s
Re-add 13 vendor-agnostic columns to banner models/serializers/service (consent_method, banner_version, device_type, browser, os, etc.) that were lost when another session overwrote the code. Keep vendor_consents dict from the other session. Add list_consents method back to BannerConsentService. Wire CookieBanner, Loeschfristen and UseCases into Document Generator contextBridge (CMP_NAME, analytics tools, retention months, feature flags). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
99 lines
3.2 KiB
Python
99 lines
3.2 KiB
Python
"""
|
|
Internal ORM-to-dict serializers shared by the banner services.
|
|
|
|
Kept as plain module-level functions (not part of either service class) so
|
|
they can be imported by both ``banner_consent_service`` and
|
|
``banner_admin_service`` without cyclic dependencies.
|
|
"""
|
|
|
|
from typing import Any
|
|
|
|
from compliance.db.banner_models import (
|
|
BannerCategoryConfigDB,
|
|
BannerConsentDB,
|
|
BannerSiteConfigDB,
|
|
BannerVendorConfigDB,
|
|
)
|
|
|
|
|
|
def consent_to_dict(c: BannerConsentDB) -> dict[str, Any]:
|
|
return {
|
|
"id": str(c.id),
|
|
"site_id": c.site_id,
|
|
"device_fingerprint": c.device_fingerprint,
|
|
"categories": c.categories or [],
|
|
"vendors": c.vendors or [],
|
|
"vendor_consents": c.vendor_consents or {},
|
|
"ip_hash": c.ip_hash,
|
|
"user_agent": c.user_agent,
|
|
"consent_string": c.consent_string,
|
|
"linked_email": c.linked_email,
|
|
"consent_method": c.consent_method,
|
|
"banner_version": c.banner_version,
|
|
"banner_config_hash": c.banner_config_hash,
|
|
"geo_country": c.geo_country,
|
|
"geo_region": c.geo_region,
|
|
"consent_scope": c.consent_scope,
|
|
"page_url": c.page_url,
|
|
"referrer": c.referrer,
|
|
"device_type": c.device_type,
|
|
"browser": c.browser,
|
|
"os": c.os,
|
|
"screen_resolution": c.screen_resolution,
|
|
"session_id": c.session_id,
|
|
"expires_at": c.expires_at.isoformat() if c.expires_at else None,
|
|
"created_at": c.created_at.isoformat() if c.created_at else None,
|
|
"updated_at": c.updated_at.isoformat() if c.updated_at else None,
|
|
}
|
|
|
|
|
|
def site_config_to_dict(s: BannerSiteConfigDB) -> dict[str, Any]:
|
|
return {
|
|
"id": str(s.id),
|
|
"site_id": s.site_id,
|
|
"site_name": s.site_name,
|
|
"site_url": s.site_url,
|
|
"banner_title": s.banner_title,
|
|
"banner_description": s.banner_description,
|
|
"privacy_url": s.privacy_url,
|
|
"imprint_url": s.imprint_url,
|
|
"dsb_name": s.dsb_name,
|
|
"dsb_email": s.dsb_email,
|
|
"theme": s.theme or {},
|
|
"tcf_enabled": s.tcf_enabled,
|
|
"config_version": s.config_version,
|
|
"is_active": s.is_active,
|
|
"created_at": s.created_at.isoformat() if s.created_at else None,
|
|
"updated_at": s.updated_at.isoformat() if s.updated_at else None,
|
|
}
|
|
|
|
|
|
def category_to_dict(c: BannerCategoryConfigDB) -> dict[str, Any]:
|
|
return {
|
|
"id": str(c.id),
|
|
"site_config_id": str(c.site_config_id),
|
|
"category_key": c.category_key,
|
|
"name_de": c.name_de,
|
|
"name_en": c.name_en,
|
|
"description_de": c.description_de,
|
|
"description_en": c.description_en,
|
|
"is_required": c.is_required,
|
|
"sort_order": c.sort_order,
|
|
"is_active": c.is_active,
|
|
}
|
|
|
|
|
|
def vendor_to_dict(v: BannerVendorConfigDB) -> dict[str, Any]:
|
|
return {
|
|
"id": str(v.id),
|
|
"site_config_id": str(v.site_config_id),
|
|
"vendor_name": v.vendor_name,
|
|
"vendor_url": v.vendor_url,
|
|
"category_key": v.category_key,
|
|
"description_de": v.description_de,
|
|
"description_en": v.description_en,
|
|
"cookie_names": v.cookie_names or [],
|
|
"retention_days": v.retention_days,
|
|
"is_active": v.is_active,
|
|
}
|