File size: 908 Bytes
270c1c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""
API dependencies.
"""
from typing import Generator, Optional

from fastapi import Cookie, Header
from sqlalchemy.orm import Session

from app.core.database import get_db_for_session, get_default_session


def get_session_id(
    x_session_id: Optional[str] = Header(None),
    numidium_session: Optional[str] = Cookie(None)
) -> Optional[str]:
    """Return the session id from header or cookie."""
    return x_session_id or numidium_session


def get_scoped_db(
    x_session_id: Optional[str] = Header(None),
    numidium_session: Optional[str] = Cookie(None)
) -> Generator[Session, None, None]:
    """
    Provide a session-scoped DB if available, otherwise the default DB.
    """
    session_id = x_session_id or numidium_session
    if session_id:
        db = get_db_for_session(session_id)
    else:
        db = get_default_session()
    try:
        yield db
    finally:
        db.close()