Add multilingual audit CI pipeline + extract mandelblog_content_guard
This commit is contained in:
79
mandelblog_content_guard/settings.py
Normal file
79
mandelblog_content_guard/settings.py
Normal file
@@ -0,0 +1,79 @@
|
||||
from __future__ import annotations
|
||||
|
||||
"""
|
||||
Reusable configuration helpers for mandelblog_content_guard.
|
||||
|
||||
Supported Django settings:
|
||||
- CONTENT_GUARD_STRICT: bool
|
||||
- CONTENT_GUARD_BLOCK_MEDIUM: bool
|
||||
- CONTENT_GUARD_LOCALES: list[str]
|
||||
- CONTENT_GUARD_REWRITE_ENABLED: bool
|
||||
- CONTENT_GUARD_REWRITE_BACKEND: dotted path | None
|
||||
"""
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
DEFAULT_LOCALES = ["nl", "en", "de", "fr", "es", "it", "pt", "ru"]
|
||||
|
||||
SEVERITY = {
|
||||
"CRITICAL": "block",
|
||||
"HIGH": "block",
|
||||
"MEDIUM": "warn",
|
||||
"LOW": "log",
|
||||
}
|
||||
|
||||
ISSUE_LEVELS = {
|
||||
"known_bad_pattern": "CRITICAL",
|
||||
"wrong_language_fragment": "CRITICAL",
|
||||
"rendered_bad_pattern": "CRITICAL",
|
||||
"rendered_wrong_language": "CRITICAL",
|
||||
"render_status": "CRITICAL",
|
||||
"language_heuristic": "CRITICAL",
|
||||
"cta_language_mismatch": "HIGH",
|
||||
"form_language_mismatch": "HIGH",
|
||||
"empty_form_copy": "HIGH",
|
||||
"placeholder_value": "HIGH",
|
||||
"rewrite_candidate": "MEDIUM",
|
||||
"weak_marketing_copy": "MEDIUM",
|
||||
"foreign_ui_label": "MEDIUM",
|
||||
"generic_badge_label": "MEDIUM",
|
||||
"mixed_locale_heading": "MEDIUM",
|
||||
"cta_tone_check": "MEDIUM",
|
||||
}
|
||||
|
||||
|
||||
def strict_mode_enabled() -> bool:
|
||||
return getattr(settings, "CONTENT_GUARD_STRICT", True)
|
||||
|
||||
|
||||
def block_medium_enabled() -> bool:
|
||||
return getattr(settings, "CONTENT_GUARD_BLOCK_MEDIUM", False)
|
||||
|
||||
|
||||
def audit_default_locales() -> list[str]:
|
||||
return list(getattr(settings, "CONTENT_GUARD_LOCALES", DEFAULT_LOCALES))
|
||||
|
||||
|
||||
def rewrite_enabled() -> bool:
|
||||
return getattr(settings, "CONTENT_GUARD_REWRITE_ENABLED", True)
|
||||
|
||||
|
||||
def get_rewrite_backend() -> str | None:
|
||||
return getattr(settings, "CONTENT_GUARD_REWRITE_BACKEND", None)
|
||||
|
||||
|
||||
def classify_issue(issue_type: str) -> str:
|
||||
return ISSUE_LEVELS.get(issue_type, "LOW")
|
||||
|
||||
|
||||
def severity_for_issue(issue_type: str) -> str:
|
||||
return SEVERITY[classify_issue(issue_type)]
|
||||
|
||||
|
||||
def should_block_issue(issue_type: str) -> bool:
|
||||
level = classify_issue(issue_type)
|
||||
if level in {"CRITICAL", "HIGH"}:
|
||||
return True
|
||||
if level == "MEDIUM":
|
||||
return block_medium_enabled() and strict_mode_enabled()
|
||||
return False
|
||||
Reference in New Issue
Block a user