From: Michael Tremer Date: Mon, 16 Jun 2025 15:21:10 +0000 (+0000) Subject: sessions: Migrate to SQLModel X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e21ad02875f2dc6b4bab6a318c286a8a2a2ec5a9;p=pbs.git sessions: Migrate to SQLModel Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/sessions.py b/src/buildservice/sessions.py index 66a91c98..a05df4af 100644 --- a/src/buildservice/sessions.py +++ b/src/buildservice/sessions.py @@ -1,11 +1,10 @@ #!/usr/bin/python import datetime +import ipaddress import logging import sqlalchemy - -from sqlalchemy import Column, DateTime, ForeignKey, Integer, Text -from sqlalchemy.dialects.postgresql import INET +import sqlmodel from . import base from . import database @@ -14,8 +13,6 @@ from . import misc # Setup logging log = logging.getLogger("pbs.sessions") -SESSION_LIFETIME = datetime.timedelta(days=14) - class Sessions(base.Object): async def create(self, user, address, user_agent=None): """ @@ -41,7 +38,7 @@ class Sessions(base.Object): async def get_by_session_id(self, session_id): stmt = ( - sqlalchemy + sqlmodel .select(Session) .where( Session.session_id == session_id, @@ -59,7 +56,7 @@ class Sessions(base.Object): Deletes all sessions that are not valid any more """ stmt = ( - sqlalchemy + sqlmodel .delete( Session, ) @@ -73,7 +70,7 @@ class Sessions(base.Object): await self.db.execute(stmt) -class Session(database.Base): +class Session(sqlmodel.SQLModel): __tablename__ = "sessions" def __lt__(self, other): @@ -84,36 +81,39 @@ class Session(database.Base): # ID - id = Column(Integer, primary_key=True) + id : int = sqlmodel.Field(primary_key=True) # Session ID - session_id = Column(Text, unique=True, nullable=False) + session_id : str = sqlmodel.Field(unique=True) - # User + # User ID - user_id = Column(Integer, ForeignKey("users.id"), nullable=False) + user_id : int = sqlmodel.Field(foreign_key="users.id") + + # User - user = sqlalchemy.orm.relationship("User", back_populates="sessions", - lazy="joined", innerjoin=True) + user : "User" = sqlmodel.Relationship() # Created At - created_at = Column(DateTime(timezone=False), nullable=False, - server_default=sqlalchemy.func.current_timestamp()) + created_at : datetime.datetime = sqlmodel.Field( + sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")} + ) # Expires At - expires_at = Column(DateTime(timezone=False), nullable=False, - default=sqlalchemy.func.current_timestamp() + SESSION_LIFETIME) + expires_at : datetime.datetime = sqlmodel.Field( + sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP + INTERVAL '14 days'")} + ) # Address - address = Column(INET(), nullable=False) + address : ipaddress.IPv6Address | ipaddress.IPv4Address # User Agent - user_agent = Column(Text) + user_agent : str | None # Logout!