Untitled
unknown
plain_text
a year ago
1.7 kB
9
Indexable
from pprint import pp
from typing import Annotated
from fastapi import BackgroundTasks, Depends, Header
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 UserLoader
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.id).filter(User.email.ilike(current_user))
)
# Create all the data loaders for this context
self.load_user = DataLoader(load_fn=UserLoader(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