From 44830ffd9d4f0899298686c202b85ef0d8bd99dd Mon Sep 17 00:00:00 2001 From: Henry Ruhs Date: Mon, 1 Dec 2025 17:29:57 +0100 Subject: [PATCH] Feat/session context (#993) * Add simple session context * Add simple session context --- facefusion/apis/session.py | 3 ++- facefusion/session_context.py | 18 ++++++++++++++++++ facefusion/state_manager.py | 5 +++-- 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 facefusion/session_context.py diff --git a/facefusion/apis/session.py b/facefusion/apis/session.py index 30fbcb0b..52636dd0 100644 --- a/facefusion/apis/session.py +++ b/facefusion/apis/session.py @@ -8,7 +8,7 @@ from starlette.responses import JSONResponse from starlette.status import HTTP_200_OK, HTTP_201_CREATED, HTTP_401_UNAUTHORIZED, HTTP_426_UPGRADE_REQUIRED from starlette.types import ASGIApp, Receive, Scope, Send -from facefusion import session_manager, translator +from facefusion import session_context, session_manager, translator from facefusion.types import Token @@ -18,6 +18,7 @@ async def create_session(request : Request) -> JSONResponse: if not body.get('api_key') or body.get('api_key') == os.getenv('FACEFUSION_API_KEY'): session_id = secrets.token_urlsafe(16) session = session_manager.create_session() + session_context.set_session_id(session_id) session_manager.set_session(session_id, session) return JSONResponse( diff --git a/facefusion/session_context.py b/facefusion/session_context.py new file mode 100644 index 00000000..d85584fe --- /dev/null +++ b/facefusion/session_context.py @@ -0,0 +1,18 @@ +from contextvars import ContextVar +from typing import Optional + +from facefusion.types import SessionId + +SESSION_ID : ContextVar[Optional[SessionId]] = ContextVar('SESSION_ID', default = None) + + +def set_session_id(session_id : SessionId) -> None: + SESSION_ID.set(session_id) + + +def get_session_id() -> Optional[SessionId]: + return SESSION_ID.get() + + +def clear_session_id() -> None: + SESSION_ID.set(None) diff --git a/facefusion/state_manager.py b/facefusion/state_manager.py index 5f8ec295..048e2a7b 100644 --- a/facefusion/state_manager.py +++ b/facefusion/state_manager.py @@ -3,6 +3,7 @@ from typing import Any, Union from facefusion.app_context import detect_app_context from facefusion.processors.types import ProcessorState, ProcessorStateKey, ProcessorStateSet +from facefusion.session_context import get_session_id from facefusion.types import Args, State, StateKey, StateSet STATE_SET : Union[StateSet, ProcessorStateSet] =\ @@ -45,7 +46,7 @@ def clear_item(key : Union[StateKey, ProcessorStateKey]) -> None: def get_jobs_path() -> str: jobs_path = get_item('jobs_path') - session_id = get_item('session_id') + session_id = get_session_id() if session_id: return os.path.join(jobs_path, session_id) @@ -54,7 +55,7 @@ def get_jobs_path() -> str: def get_temp_path() -> str: temp_path = get_item('temp_path') - session_id = get_item('session_id') + session_id = get_session_id() if session_id: return os.path.join(temp_path, session_id)