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