"""
Google Consent Mode v2 Configuration Generator
Generates consent mode configuration snippets for different CMP platforms
and jurisdictions.
Requirements:
No external dependencies (uses standard library only)
"""
import json
import os
from datetime import datetime, timezone
# EEA country codes (27 EU + 3 EEA)
EEA_COUNTRIES = [
"AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR",
"DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL",
"PL", "PT", "RO", "SK", "SI", "ES", "SE", "IS", "LI", "NO",
]
# US states with privacy laws requiring consent/opt-out
US_PRIVACY_STATES = {
"US-CA": {"law": "CCPA/CPRA", "model": "opt-out", "gpc_required": True},
"US-CO": {"law": "CPA", "model": "opt-out", "gpc_required": True},
"US-CT": {"law": "CTDPA", "model": "opt-out", "gpc_required": True},
"US-VA": {"law": "VCDPA", "model": "opt-out", "gpc_required": False},
"US-MT": {"law": "MCDPA", "model": "opt-out", "gpc_required": True},
"US-TX": {"law": "TDPSA", "model": "opt-out", "gpc_required": True},
"US-OR": {"law": "OCPA", "model": "opt-out", "gpc_required": True},
}
# Consent parameter definitions
CONSENT_PARAMETERS = {
"ad_storage": {
"description": "Controls advertising cookies (e.g., _gcl_*, IDE)",
"default_eea": "denied",
"default_us": "granted",
"default_other": "granted",
},
"ad_user_data": {
"description": "Controls sending user data to Google for advertising",
"default_eea": "denied",
"default_us": "granted",
"default_other": "granted",
},
"ad_personalization": {
"description": "Controls ad personalization and remarketing",
"default_eea": "denied",
"default_us": "granted",
"default_other": "granted",
},
"analytics_storage": {
"description": "Controls analytics cookies (e.g., _ga, _gid)",
"default_eea": "denied",
"default_us": "granted",
"default_other": "granted",
},
"functionality_storage": {
"description": "Controls functionality cookies (e.g., language)",
"default_eea": "granted",
"default_us": "granted",
"default_other": "granted",
},
"personalization_storage": {
"description": "Controls personalization cookies",
"default_eea": "denied",
"default_us": "granted",
"default_other": "granted",
},
"security_storage": {
"description": "Controls security cookies (e.g., authentication)",
"default_eea": "granted",
"default_us": "granted",
"default_other": "granted",
},
}
def generate_gtag_config(
ga4_measurement_id: str,
google_ads_id: str = "",
strict_mode: bool = True,
) -> str:
"""Generate gtag.js consent mode configuration."""
config = f"""
"""
return config
def generate_gtm_datalayer_config() -> str:
"""Generate GTM dataLayer consent configuration."""
return """
"""
def generate_consent_parameter_docs() -> str:
"""Generate documentation for consent parameters."""
docs = "# Consent Mode v2 Parameter Reference\n\n"
docs += "| Parameter | Description | EEA Default | US Default |\n"
docs += "|-----------|-------------|-------------|------------|\n"
for param, info in CONSENT_PARAMETERS.items():
docs += f"| `{param}` | {info['description']} | {info['default_eea']} | {info['default_us']} |\n"
return docs
def main():
"""Generate Consent Mode v2 configurations for Pinnacle E-Commerce Ltd."""
output_dir = os.path.join(os.path.dirname(__file__), "..", "assets")
os.makedirs(output_dir, exist_ok=True)
# Generate gtag.js configuration
gtag_config = generate_gtag_config(
ga4_measurement_id="G-PINNACLE123",
google_ads_id="AW-PINNACLE456",
)
with open(os.path.join(output_dir, "consent_mode_gtag.html"), "w") as f:
f.write(gtag_config)
# Generate GTM dataLayer configuration
gtm_config = generate_gtm_datalayer_config()
with open(os.path.join(output_dir, "consent_mode_gtm.html"), "w") as f:
f.write(gtm_config)
# Generate parameter documentation
param_docs = generate_consent_parameter_docs()
with open(os.path.join(output_dir, "consent_parameters.md"), "w") as f:
f.write(param_docs)
print("=== Google Consent Mode v2 Configuration Generated ===")
print(f"Output directory: {output_dir}")
print("Files generated:")
print(" - consent_mode_gtag.html (gtag.js implementation)")
print(" - consent_mode_gtm.html (GTM dataLayer implementation)")
print(" - consent_parameters.md (parameter reference)")
print(f"\nEEA countries configured: {len(EEA_COUNTRIES)}")
print(f"US privacy states tracked: {len(US_PRIVACY_STATES)}")
if __name__ == "__main__":
main()