"""Database session store that fills the username and created_at columns.""" from __future__ import annotations from datetime import UTC, datetime from django.contrib.sessions.backends.db import SessionStore as DBSessionStore from django.utils import timezone from .models import UserSession USER_KEY = "session_user_key" USER_SAM = "session_user_sam" CREATED_AT = "session_created_at" # epoch seconds, UTC class SessionStore(DBSessionStore): @classmethod def get_model_class(cls): return UserSession def create_model_instance(self, data): obj = super().create_model_instance(data) obj.username = str(data.get(USER_KEY, "")).lower() created = data.get(CREATED_AT) obj.created_at = ( datetime.fromtimestamp(created, tz=UTC) if created is not None else timezone.now() ) return obj