Source code for harp_apps.sqlalchemy_storage.models.users
from typing import TYPE_CHECKING, List
from sqlalchemy import Integer, String, select
from sqlalchemy.exc import NoResultFound
from sqlalchemy.orm import Mapped, mapped_column, relationship
from . import Base
from .base import Repository
if TYPE_CHECKING:
from .flags import UserFlag
[docs]
class User(Base):
__tablename__ = "users"
id = mapped_column(Integer(), primary_key=True, unique=True, autoincrement=True)
username = mapped_column(String(32), unique=True)
flags: Mapped[List["UserFlag"]] = relationship(
back_populates="user",
cascade="all, delete",
passive_deletes=True,
)
[docs]
class UsersRepository(Repository):
Type = User
[docs]
async def find_one_by_username(self, username: str) -> User:
async with self.session_factory() as session:
try:
return (await session.execute(select(self.Type).where(User.username == username))).unique().scalar_one()
except NoResultFound:
return (
(await session.execute(select(self.Type).where(User.username == "anonymous"))).unique().scalar_one()
)