1from datetime import datetime
2
3from plain.postgres import Field, types
4
5from plain import postgres
6
7__all__ = ["Session"]
8
9
10@postgres.register_model
11class Session(postgres.Model):
12 session_key: Field[str] = types.TextField(max_length=40)
13 session_data: Field[dict] = types.JSONField(default={}, required=False)
14 created_at: Field[datetime] = types.DateTimeField(create_now=True)
15 expires_at: Field[datetime | None] = types.DateTimeField(
16 allow_null=True, default=None
17 )
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