# retoor import re from pathlib import Path INTRO_SEED_FILE = Path(__file__).resolve().parent / "seed" / "intro.md" SITE_INTRO_SEED = re.sub(r"\A\n", "", INTRO_SEED_FILE.read_text(encoding="utf-8"), count=1, flags=re.S) ROLE_ADMIN = "Admin" ROLE_MEMBER = "Member" ROLES = (ROLE_ADMIN, ROLE_MEMBER) TOPICS = { "roll": "Roll", "standard": "Standard", } LEGACY_TOPICS = { "rol": "roll", "standaard": "standard", } POST_STATUSES = ("draft", "published") MEDIA_KINDS = { "flyer": "Flyers", "meme": "Memes", } JOIN_STATUSES = ("open", "contacted", "accepted", "declined") SOFT_DELETE_TABLES = ( "users", "sessions", "posts", "join_requests", "notifications", "media_items", ) UNREPORTABLE_TABLES = { "users": "Only the operator holds accounts; no public user content.", "sessions": "Private credential rows.", "posts": "Authored by administrators only; moderation module not selected.", "join_requests": "Owner-private ledger visible to administrators only.", "notifications": "Owner-private inbox rows.", "media_items": "Operator-curated gallery assets.", } REPORTABLE_TARGETS: frozenset[str] = frozenset() NOTIFICATION_TYPES = { "join.request": "New request via Join", "post.published": "Post published", "backup.finished": "Backup finished", "backup.failed": "Backup failed", "auth.apikey": "API key renewed", "system.maintenance": "Maintenance mode changed", } CRAWLER_PRIVATE_PREFIXES = ("/notifications", "/admin", "/profile") CRAWLER_MARKERS = ( "bot", "crawler", "spider", "slurp", "crawl", "facebookexternalhit", "bingpreview", ) TERMS_EXEMPT_PREFIXES = ( "/static", "/avatar", "/auth", "/docs", "/terms", "/privacy", ) MAINTENANCE_ALLOWED_PREFIXES = ("/static", "/avatar", "/auth", "/admin") RATE_LIMIT_EXEMPT_PREFIXES: tuple[str, ...] = () GZIP_SKIP_PREFIXES: tuple[str, ...] = () SETTINGS_DEFAULTS = { "site_title": "Molodetz", "site_tagline": "The circle, not the commercial.", "site_intro": SITE_INTRO_SEED, "maintenance_mode": "0", "maintenance_message": "Molodetz is closed for maintenance. Back shortly.", "rate_limit_per_minute": "60", "rate_limit_window_seconds": "60", "session_max_age_days": "7", "session_remember_days": "30", "terms_version": "1", "friendly_404": "1", "audit_retention_days": "365", "outbound_proxy_url": "", } CLIENT_RENDER_TEMPLATES = frozenset({"admin/post_form.html"}) HTTP_CLIENT_ALLOWLIST = frozenset({"molodetz/stealth.py"})