1from __future__ import annotations
2
3from plain import postgres
4from plain.postgres import types
5
6__all__ = ["Session"]
7
8
9@postgres.register_model
10class Session(postgres.Model):
11 session_key = types.TextField(max_length=40)
12 session_data: dict = types.JSONField(default={}, required=False)
13 created_at = types.DateTimeField(create_now=True)
14 expires_at = types.DateTimeField(allow_null=True)
15
16 query: postgres.QuerySet[Session] = postgres.QuerySet()
17
18 model_options = postgres.Options(
19 indexes=[
20 postgres.Index(
21 name="plainsessions_session_expires_at_idx", fields=["expires_at"]
22 ),
23 ],
24 constraints=[
25 postgres.UniqueConstraint(fields=["session_key"], name="unique_session_key")
26 ],
27 )
28
29 def __str__(self) -> str:
30 return self.session_key