Skip to main content

LocalUser

SQL-backed user for Indie mode (Mode A).

Stores credentials and profile information locally.
Default implementation for rapid development.

Attributes:
email: Unique email address (login identifier)
password_hash: Argon2 hash of password (excluded from serialization)
full_name: Optional display name
is_active: Whether user can log in (default True)

Security:
- password_hash is excluded from model_dump() and model_dump_json()
- Never store plaintext passwords
- Use argon2 for hashing (see LocalIdentityAdapter)

Example:
user = LocalUser(
email="john@example.com",
password_hash="$argon2id$v=19$...",
full_name="John Doe",
)

Source: user.py

Fields

FieldTypeRequiredDescriptionValidators
emailstrUnique email address-
password_hashstrArgon2 password hash-
full_namestrNoneUser's display name
is_activeboolWhether user can log in-
localestrNoneUser's preferred locale (e.g., 'en', 'hi', 'ta')

Configuration

SettingValue
SubmittableFalse
Track ChangesTrue

Controller

Controller hooks are implemented in *_controller.py files. Available lifecycle hooks:

  • validate() - Called before save, raise exceptions for validation errors
  • before_insert() - Called before inserting a new document
  • after_insert() - Called after successfully inserting
  • before_save() - Called before saving (insert or update)
  • after_save() - Called after saving
  • before_delete() - Called before deleting
  • after_delete() - Called after deleting