Files
stealergram/web/models.py
anti 741e6bb0d3 Rename to stealergram, add pyproject.toml, purge em-dashes
- Rename project to stealergram throughout
- Add pyproject.toml (replaces requirements.txt split, folds pytest.ini)
- Replace all em-dashes with hyphens across all source files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 10:06:30 -04:00

65 lines
1.9 KiB
Python

"""
web/models.py - Pydantic request/response schemas.
"""
import re
from typing import Literal
from pydantic import BaseModel, field_validator
# ─── Auth ─────────────────────────────────────────────────────────────────────
class LoginRequest(BaseModel):
username: str
password: str
# ─── Keyword groups ───────────────────────────────────────────────────────────
class PatternEntry(BaseModel):
regex: str
label: str
@field_validator("regex")
@classmethod
def regex_must_compile(cls, v: str) -> str:
try:
re.compile(v, re.IGNORECASE)
except re.error as e:
raise ValueError(f"Invalid regex: {e}") from e
return v
class KeywordGroup(BaseModel):
id: str
name: str
patterns: list[PatternEntry]
class KeywordGroupsPayload(BaseModel):
groups: list[KeywordGroup]
# ─── Channels ─────────────────────────────────────────────────────────────────
class ChannelsPayload(BaseModel):
channels: list[str | int]
# ─── Users ───────────────────────────────────────────────────────────────────
Role = Literal["superadmin", "admin", "reader"]
class CreateUserRequest(BaseModel):
username: str
password: str
role: Role
class UpdateUserRequest(BaseModel):
password: str | None = None
role: Role | None = None
is_active: bool | None = None