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