class GDPRCompliantClient:
"""Kling client with GDPR data handling."""
def __init__(self, base_client, audit_logger):
self.client = base_client
self.audit = audit_logger
def text_to_video(self, prompt: str, data_subject_id: str = None, **kwargs):
self.audit.log("processing_activity", "system", {
"purpose": "video_generation",
"data_subject": data_subject_id,
"legal_basis": "legitimate_interest",
"data_categories": ["text_prompt"],
"recipients": ["klingai_api"],
})
return self.client.text_to_video(prompt, **kwargs)
def handle_deletion_request(self, data_subject_id: str):
"""Handle GDPR right to erasure (Art. 17)."""
self.audit.log("deletion_request", "system", {
"data_subject": data_subject_id,
"action": "processed",
})
def run_compliance_check(config: dict) -> dict:
"""Run automated compliance checks against configuration."""
checks = []
if config.get("key_source") == "environment":
checks.append(("WARN", "credentials", "Using env vars; prefer secrets manager"))
elif config.get("key_source") == "secrets_manager":
checks.append(("PASS", "credentials", "Using secrets manager"))
if config.get("base_url", "").startswith("https://"):
checks.append(("PASS", "tls", "HTTPS enforced"))
else:
checks.append(("FAIL", "tls", "Not using HTTPS"))
if config.get("content_filter_enabled"):
checks.append(("PASS", "content_filter", "Pre-submission filtering active"))
else:
checks.append(("WARN", "content_filter", "No pre-submission content filtering"))
if config.get("audit_logging"):
checks.append(("PASS", "audit", "Audit logging enabled"))
else:
checks.append(("FAIL", "audit", "No audit logging"))
for status, area, message in checks:
icon = {"PASS": "OK", "WARN": "!!", "FAIL": "XX"}[status]
print(f" [{icon}] {area}: {message}")
return {
"passed": sum(1 for s, _, _ in checks if s == "PASS"),
"warnings": sum(1 for s, _, _ in checks if s == "WARN"),
"failed": sum(1 for s, _, _ in checks if s == "FAIL"),
}