Fixed type hints.

Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
2025-08-26 16:02:37 -04:00
parent 3476a0c71d
commit 9f0c77dc31
10 changed files with 49 additions and 52 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
"""Dependency definitions for FastAPI routes."""
from collections.abc import AsyncGenerator
from typing import Annotated
from fastapi import Depends
@@ -13,7 +14,7 @@ from backend import db
async_maker = async_sessionmaker(db.engine)
async def get_session():
async def get_session() -> AsyncGenerator[AsyncSession, None]:
"""Inject a new database session.
Yields:
+6
View File
@@ -130,3 +130,9 @@ async def create_db_and_tables() -> None: # pragma: no cover
"""
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
type UserList = list[User]
type RoomList = list[Room]
type BookingList = list[Booking]
type InviteeList = list[Invitee]
+6 -5
View File
@@ -11,6 +11,7 @@ from sqlalchemy.exc import SQLAlchemyError
from backend.dependencies.db import DBSession
from backend.models import Booking
from backend.models import BookingList
from backend.schemas.bookings import BookingCreate
from backend.schemas.bookings import BookingResponse
from backend.schemas.bookings import BookingUpdate
@@ -27,7 +28,7 @@ router = APIRouter(prefix="/bookings", tags=["bookings"])
@router.get("/room/{room_id}", response_model=List[BookingResponse])
async def read_bookings_for_room(room_id: int, session: DBSession):
async def read_bookings_for_room(room_id: int, session: DBSession) -> BookingList:
"""Retrieve all bookings for a specific room.
Args:
@@ -66,7 +67,7 @@ async def read_bookings_for_room(room_id: int, session: DBSession):
@router.get("/{booking_id}", response_model=BookingResponse)
async def read_booking(booking_id: int, session: DBSession):
async def read_booking(booking_id: int, session: DBSession) -> Booking:
"""Retrieve a booking by ID.
Args:
@@ -110,7 +111,7 @@ async def read_booking(booking_id: int, session: DBSession):
@router.post("/", response_model=BookingResponse, status_code=status.HTTP_201_CREATED)
async def create_booking(booking: BookingCreate, session: DBSession):
async def create_booking(booking: BookingCreate, session: DBSession) -> Booking:
"""Create a new booking.
Args:
@@ -146,7 +147,7 @@ async def create_booking(booking: BookingCreate, session: DBSession):
@router.put("/{booking_id}", response_model=BookingResponse)
async def update_existing_booking(
booking_id: int, booking_update: BookingUpdate, session: DBSession
):
) -> Booking:
"""Update an existing booking.
Args:
@@ -192,7 +193,7 @@ async def update_existing_booking(
@router.delete("/{booking_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_existing_booking(booking_id: int, session: DBSession):
async def delete_existing_booking(booking_id: int, session: DBSession) -> None:
"""Delete a booking.
Args:
+9 -3
View File
@@ -10,6 +10,8 @@ from pydantic import EmailStr
from sqlalchemy.exc import SQLAlchemyError
from backend.dependencies.db import DBSession
from backend.models import User
from backend.models import UserList
from backend.schemas.invitees import InviteeCreate
from backend.schemas.invitees import InviteeResponse
from backend.schemas.users import UserResponse
@@ -24,7 +26,7 @@ router = APIRouter(prefix="/invitees", tags=["invitees"])
@router.get("/booking/{booking_id}", response_model=List[UserResponse])
async def read_invitees_for_booking(booking_id: int, session: DBSession):
async def read_invitees_for_booking(booking_id: int, session: DBSession) -> UserList:
"""Retrieve all invitees for a specific booking.
Args:
@@ -67,7 +69,9 @@ async def read_invitees_for_booking(booking_id: int, session: DBSession):
response_model=InviteeResponse,
status_code=status.HTTP_201_CREATED,
)
async def add_invitee(booking_id: int, invitee: InviteeCreate, session: DBSession):
async def add_invitee(
booking_id: int, invitee: InviteeCreate, session: DBSession
) -> User:
"""Add an invitee to a booking.
Args:
@@ -112,7 +116,9 @@ async def add_invitee(booking_id: int, invitee: InviteeCreate, session: DBSessio
@router.delete(
"/booking/{booking_id}/user/{user_email}", status_code=status.HTTP_204_NO_CONTENT
)
async def remove_invitee(booking_id: int, user_email: EmailStr, session: DBSession):
async def remove_invitee(
booking_id: int, user_email: EmailStr, session: DBSession
) -> None:
"""Remove an invitee from a booking.
Args:
+6 -5
View File
@@ -11,6 +11,7 @@ from sqlalchemy.exc import SQLAlchemyError
from backend.dependencies.db import DBSession
from backend.models import Room
from backend.models import RoomList
from backend.schemas.rooms import RoomCreate
from backend.schemas.rooms import RoomResponse
from backend.schemas.rooms import RoomUpdate
@@ -27,7 +28,7 @@ router = APIRouter(prefix="/rooms", tags=["rooms"])
@router.get("/", response_model=List[RoomResponse])
async def read_rooms(session: DBSession):
async def read_rooms(session: DBSession) -> RoomList:
"""Retrieve all rooms.
Args:
@@ -59,7 +60,7 @@ async def read_rooms(session: DBSession):
@router.get("/{room_id}", response_model=RoomResponse)
async def read_room(room_id: int, session: DBSession):
async def read_room(room_id: int, session: DBSession) -> Room:
"""Retrieve a room by ID.
Args:
@@ -101,7 +102,7 @@ async def read_room(room_id: int, session: DBSession):
@router.post("/", response_model=RoomResponse, status_code=status.HTTP_201_CREATED)
async def create_room(room: RoomCreate, session: DBSession):
async def create_room(room: RoomCreate, session: DBSession) -> Room:
"""Create a new room.
Args:
@@ -136,7 +137,7 @@ async def create_room(room: RoomCreate, session: DBSession):
@router.put("/{room_id}", response_model=RoomResponse)
async def update_existing_room(
room_id: int, room_update: RoomUpdate, session: DBSession
):
) -> Room:
"""Update an existing room.
Args:
@@ -179,7 +180,7 @@ async def update_existing_room(
@router.delete("/{room_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_existing_room(room_id: int, session: DBSession):
async def delete_existing_room(room_id: int, session: DBSession) -> None:
"""Delete a room.
Args:
+4 -2
View File
@@ -9,6 +9,8 @@ from sqlalchemy.exc import NoResultFound
from sqlalchemy.exc import SQLAlchemyError
from backend.dependencies.db import DBSession
from backend.models import User
from backend.models import UserList
from backend.schemas.users import UserResponse
from backend.services.users import get_user
from backend.services.users import get_users
@@ -20,7 +22,7 @@ router = APIRouter(prefix="/users", tags=["users"])
@router.get("/", response_model=list[UserResponse])
async def read_users(session: DBSession):
async def read_users(session: DBSession) -> UserList:
"""Retrieve all users.
Args:
@@ -48,7 +50,7 @@ async def read_users(session: DBSession):
@router.get("/{email}", response_model=UserResponse)
async def read_user(email: EmailStr, session: DBSession):
async def read_user(email: EmailStr, session: DBSession) -> User:
"""Retrieve a user by email.
Args:
+6 -11
View File
@@ -16,16 +16,11 @@ from sqlalchemy.exc import NoResultFound
from sqlalchemy.ext.asyncio import AsyncSession
from backend.models import Booking
from backend.models import Room
from backend.models import User
from backend.models import BookingList
logger = logging.getLogger(__name__)
type UserList = list[User]
type RoomList = list[Room]
type BookingList = list[Booking]
class BookingParams(TypedDict):
"""Parameters for updating a booking.
@@ -35,7 +30,7 @@ class BookingParams(TypedDict):
"""
async def get_bookings_for_room(session: AsyncSession, room_id: int):
async def get_bookings_for_room(session: AsyncSession, room_id: int) -> BookingList:
"""Retrieve all bookings for a specific room.
Args:
@@ -64,7 +59,7 @@ async def get_bookings_for_room(session: AsyncSession, room_id: int):
logger.debug("Exiting get_bookings_for_room")
async def get_booking(session: AsyncSession, booking_id: int):
async def get_booking(session: AsyncSession, booking_id: int) -> Booking:
"""Retrieve a booking by its ID.
Args:
@@ -92,7 +87,7 @@ async def get_booking(session: AsyncSession, booking_id: int):
logger.debug("Exiting get_booking")
async def new_booking(session: AsyncSession, booking: Booking):
async def new_booking(session: AsyncSession, booking: Booking) -> Booking:
"""Create a new booking in the database.
Args:
@@ -123,7 +118,7 @@ async def update_booking(
session: AsyncSession,
booking_id: int,
**kwargs: Unpack[BookingParams],
):
) -> Booking:
"""Update an existing booking.
Args:
@@ -158,7 +153,7 @@ async def update_booking(
logger.debug("Exiting update_booking")
async def delete_booking(session: AsyncSession, booking_id: int):
async def delete_booking(session: AsyncSession, booking_id: int) -> None:
"""Delete a booking from the database.
Args:
+3 -8
View File
@@ -11,18 +11,13 @@ from sqlalchemy import delete
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from backend.models import Booking
from backend.models import Invitee
from backend.models import Room
from backend.models import User
from backend.models import UserList
logger = logging.getLogger(__name__)
type UserList = list[User]
type RoomList = list[Room]
type BookingList = list[Booking]
async def get_invitees_for_booking(session: AsyncSession, booking_id: int) -> UserList:
"""Retrieve all invitees for a specific booking.
@@ -57,7 +52,7 @@ async def get_invitees_for_booking(session: AsyncSession, booking_id: int) -> Us
async def add_invitee_to_booking(
session: AsyncSession, booking_id: int, user_email: str
) -> Invitee:
) -> User:
"""Add an invitee to a booking.
Args:
@@ -81,7 +76,7 @@ async def add_invitee_to_booking(
logger.info(
f"Successfully added invitee with email {user_email} to booking_id: {booking_id}"
)
return invitee
return invitee.user
except Exception as e:
logger.error(
f"Failed to add invitee with email {user_email} to"
+6 -11
View File
@@ -15,17 +15,12 @@ from sqlalchemy import update
from sqlalchemy.exc import NoResultFound
from sqlalchemy.ext.asyncio import AsyncSession
from backend.models import Booking
from backend.models import Room
from backend.models import User
from backend.models import RoomList
logger = logging.getLogger(__name__)
type UserList = list[User]
type RoomList = list[Room]
type BookingList = list[Booking]
class RoomParams(TypedDict):
"""Parameters for updating a room.
@@ -35,7 +30,7 @@ class RoomParams(TypedDict):
"""
async def get_rooms(session: AsyncSession):
async def get_rooms(session: AsyncSession) -> RoomList:
"""Retrieve all rooms from the database.
Args:
@@ -61,7 +56,7 @@ async def get_rooms(session: AsyncSession):
logger.debug("Exiting get_rooms")
async def get_room(session: AsyncSession, room_id: int):
async def get_room(session: AsyncSession, room_id: int) -> Room:
"""Retrieve a room by its ID.
Args:
@@ -89,7 +84,7 @@ async def get_room(session: AsyncSession, room_id: int):
logger.debug("Exiting get_room")
async def new_room(session: AsyncSession, room: Room):
async def new_room(session: AsyncSession, room: Room) -> Room:
"""Create a new room in the database.
Args:
@@ -118,7 +113,7 @@ async def new_room(session: AsyncSession, room: Room):
async def update_room(
session: AsyncSession, room_id: int, **kwargs: Unpack[RoomParams]
):
) -> Room:
"""Update an existing room.
Args:
@@ -151,7 +146,7 @@ async def update_room(
logger.debug("Exiting update_room")
async def delete_room(session: AsyncSession, room_id: int):
async def delete_room(session: AsyncSession, room_id: int) -> None:
"""Delete a room from the database.
Args:
+1 -6
View File
@@ -11,17 +11,12 @@ from sqlalchemy import select
from sqlalchemy.exc import NoResultFound
from sqlalchemy.ext.asyncio import AsyncSession
from backend.models import Booking
from backend.models import Room
from backend.models import User
from backend.models import UserList
logger = logging.getLogger(__name__)
type UserList = list[User]
type RoomList = list[Room]
type BookingList = list[Booking]
async def get_users(session: AsyncSession) -> UserList:
"""Retrieve all users from the database.