Untitled
unknown
plain_text
a year ago
2.0 kB
6
Indexable
from typing import Annotated
from fastapi import BackgroundTasks, Depends
from sqlalchemy import select
from sqlalchemy.orm import Session
from strawberry.dataloader import DataLoader
from strawberry.fastapi import BaseContext
from app.dependencies import current_user, get_db
from app.helpers.custom_logger import get_backend_logger
from app.models import User
from .loaders import StatusLoader, UserByLoginLoader, UserLoader, ValidationLoader
class Context(BaseContext):
"""
Represents the context for GraphQL resolvers.
Args:
current_user (str | None): The current user.
session (Session): The database session.
Attributes:
current_user (int | None): The ID of the current user.
session (Session): The database session.
"""
def __init__(
self,
current_user: str | None,
session: Session,
background_tasks: BackgroundTasks,
):
self.current_user = None
self.session = session
self.background_tasks = background_tasks
self.backend_logger = get_backend_logger()
if current_user is not None:
self.current_user = session.scalar(
select(User).filter(User.email.ilike(current_user))
)
# Create all the data loaders for this context
self.load_user = DataLoader(load_fn=UserLoader(session))
self.load_user_by_login = DataLoader(load_fn=UserByLoginLoader(session))
self.load_status = DataLoader(load_fn=StatusLoader(session))
self.load_validation = DataLoader(load_fn=ValidationLoader(session))
def context_dependency(
current_user: Annotated[current_user, Depends()],
session: Annotated[get_db, Depends()],
background_tasks: BackgroundTasks,
) -> Context:
return Context(current_user, session, background_tasks)
def get_context(context: Annotated[context_dependency, Depends()]):
return context
Editor is loading...
Leave a Comment