Files
cmhub/apps/moderation/policy.py
T

60 lines
1.5 KiB
Python
Raw Normal View History

from __future__ import annotations
from django.conf import settings
from .providers import ModerationConfigError, ModerationProvider, Verdict
def moderation_enabled() -> bool:
return bool(getattr(settings, "MODERATION_ENABLED", False))
def fail_closed() -> bool:
return bool(getattr(settings, "MODERATION_FAIL_CLOSED", True))
def block_on_review() -> bool:
return bool(getattr(settings, "MODERATION_BLOCK_ON_REVIEW", False))
def verdict_is_blocking(verdict: Verdict) -> bool:
if verdict == Verdict.BLOCK:
return True
if verdict == Verdict.REVIEW:
return block_on_review()
return False
def selected_provider_name() -> str:
return str(getattr(settings, "MODERATION_PROVIDER", "") or "").strip().lower()
def _build_keyword() -> ModerationProvider:
from .providers.keyword import KeywordModerationProvider
return KeywordModerationProvider()
_PROVIDER_BUILDERS = {
"keyword": _build_keyword,
}
def biz_type(stage: str) -> str:
return stage
def _build_provider() -> ModerationProvider:
"""按 MODERATION_PROVIDER 选具体厂商。未选 / 未知 → ModerationConfigError(上层按 fail-closed 处理)。"""
name = selected_provider_name()
if not name:
raise ModerationConfigError("MODERATION_PROVIDER 未设置(内容安全厂商未选定)")
builder = _PROVIDER_BUILDERS.get(name)
if builder is None:
raise ModerationConfigError(f"未知内容安全厂商: {name}")
return builder()
def get_text_provider() -> ModerationProvider:
return _build_provider()