v0.166.0
 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