HKUDS/DeepTutor · error · ValueError

Password must be at least 8 characters

Error message

Password must be at least 8 characters

What it means

Pydantic ValidationError raised by DeviceCredentialCreateRequest.password_valid in deeptutor/api/routers/auth.py:119 when the submitted password string is shorter than 8 characters. The @field_validator('password') guard rejects the request payload before any account is created; the client must resend a password of at least 8 characters.

Solutions

  1. Enforce an 8-character minimum in the signup form UI
  2. Return the message as inline validation feedback on the password field
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at deeptutor/api/routers/auth.py:119 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of HKUDS/DeepTutor@3e82f13042 (2026-08-27). Data as JSON: /api/errors/cb5ced1c15e0f6be. Report an issue: GitHub.

Appendix: source

Thrown at deeptutor/api/routers/auth.py:119

    def username_valid(cls, v: str) -> str:
        import re

        v = v.strip()
        if not v:
            raise ValueError("Email cannot be empty")
        # Accept standard email addresses (used by PocketBase mode) or plain
        # usernames (used by the built-in SQLite/JSON auth mode).
        email_re = re.compile(r"^[^@\s]+@[^@\s]+\.[^@\s]+$")
        plain_re = re.compile(r"^[A-Za-z0-9_\-.]{3,64}$")
        if not email_re.match(v) and not plain_re.match(v):
            raise ValueError("Enter a valid email address")
        return v

    @field_validator("password")
    @classmethod
    def password_valid(cls, v: str) -> str:
        if len(v) < 8:
            raise ValueError("Password must be at least 8 characters")
        return v


class SetRoleRequest(BaseModel):
    """Payload for the PUT /users/{username}/role endpoint."""

    role: str

    @field_validator("role")
    @classmethod
    def role_valid(cls, v: str) -> str:
        if v not in ("admin", "user"):
            raise ValueError("Role must be 'admin' or 'user'")
        return v


class AuthStatusResponse(BaseModel):
    """Response body for the GET /status endpoint."""

View on GitHub (pinned to 3e82f13042)