Session aware stores (#1235)

* session aware process manager via store creator

* remove unused clear_session_id

* restore original scopes

* stateless test helpers

* more updates

* more updates

* more updates

* more updates

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Henry Ruhs
2026-09-11 16:48:23 +02:00
committed by GitHub
co-authored by Claude Fable 5.1
parent 5bc9c80c55
commit c358ba7cf6
14 changed files with 211 additions and 25 deletions
+4 -1
View File
@@ -2,6 +2,7 @@ import os
import tempfile
from facefusion.filesystem import are_images, create_directory, is_directory, is_file, remove_directory, resolve_file_paths
from facefusion.session_context import resolve_local_id
from facefusion.types import JobStatus
@@ -10,7 +11,9 @@ def is_test_job_file(file_path : str, job_status : JobStatus) -> bool:
def get_test_job_file(file_path : str, job_status : JobStatus) -> str:
return os.path.join(get_test_jobs_directory(), job_status, file_path)
jobs_path = os.path.join(get_test_jobs_directory(), resolve_local_id())
return os.path.join(jobs_path, job_status, file_path)
def get_test_jobs_directory() -> str:
+5 -1
View File
@@ -1,3 +1,4 @@
import os
import subprocess
import sys
@@ -6,6 +7,7 @@ import pytest
from facefusion import ffmpeg, ffmpeg_builder, process_manager
from facefusion.download import conditional_download
from facefusion.jobs.job_manager import clear_jobs, count_step_total, init_jobs
from facefusion.session_context import resolve_local_id
from .assert_helper import get_test_example_file, get_test_examples_directory, get_test_jobs_directory, get_test_output_path, is_test_job_file
@@ -32,8 +34,10 @@ def before_all() -> None:
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
jobs_path = os.path.join(get_test_jobs_directory(), resolve_local_id())
clear_jobs(get_test_jobs_directory())
init_jobs(get_test_jobs_directory())
init_jobs(jobs_path)
def test_job_list() -> None:
+6 -1
View File
@@ -1,3 +1,4 @@
import os
import subprocess
import sys
@@ -6,6 +7,7 @@ import pytest
from facefusion import ffmpeg, ffmpeg_builder, process_manager
from facefusion.download import conditional_download
from facefusion.jobs.job_manager import clear_jobs, init_jobs, move_job_file, set_steps_status
from facefusion.session_context import resolve_local_id
from .assert_helper import get_test_example_file, get_test_examples_directory, get_test_jobs_directory, get_test_output_path, is_test_output_file, prepare_test_output_directory
@@ -32,8 +34,11 @@ def before_all() -> None:
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
jobs_path = os.path.join(get_test_jobs_directory(), resolve_local_id())
clear_jobs(get_test_jobs_directory())
init_jobs(get_test_jobs_directory())
init_jobs(jobs_path)
prepare_test_output_directory()
+40 -1
View File
@@ -1,4 +1,43 @@
from facefusion.process_manager import end, is_pending, is_processing, is_stopping, set_process_state, start, stop
import pytest
from facefusion.process_manager import clear_process_state, end, get_process_state, init_process_state, is_pending, is_processing, is_stopping, set_process_state, start, stop
from facefusion.session_context import set_session_id
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
set_session_id('session-a')
clear_process_state()
set_session_id('session-b')
clear_process_state()
set_session_id('session-a')
def test_init_process_state() -> None:
assert get_process_state() is None
init_process_state()
assert get_process_state() == 'pending'
def test_get_process_state() -> None:
set_process_state('processing')
set_session_id('session-b')
set_process_state('stopping')
assert get_process_state() == 'stopping'
set_session_id('session-a')
assert get_process_state() == 'processing'
def test_clear_process_state() -> None:
set_process_state('processing')
clear_process_state()
assert get_process_state() is None
def test_start() -> None:
+20
View File
@@ -0,0 +1,20 @@
import pytest
from facefusion.session_context import get_session_id, resolve_local_id, set_session_id
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
set_session_id(resolve_local_id())
def test_get_session_id() -> None:
assert get_session_id() == resolve_local_id()
set_session_id('session-a')
assert get_session_id() == 'session-a'
def test_resolve_local_id() -> None:
assert resolve_local_id() == resolve_local_id()
+64
View File
@@ -0,0 +1,64 @@
from facefusion.store_creator import create_store, delete_content, get_content, has_content, init_content, set_content
def test_create_store() -> None:
store = create_store({ 'total': 0 })
assert store.get('__init__') == { 'total': 0 }
assert store.get('content_set') == {}
def test_init_content() -> None:
store = create_store({ 'total': 0 })
init_content(store, 'session-a')
assert store.get('content_set').get('session-a') == { 'total': 0 }
def test_has_content() -> None:
store = create_store({ 'total': 0 })
assert has_content(store, 'session-a') is False
init_content(store, 'session-a')
assert has_content(store, 'session-a') is True
assert has_content(store, 'session-b') is False
def test_get_content() -> None:
store = create_store({ 'total': 0 })
init_content(store, 'session-a')
assert get_content(store, 'session-a') == { 'total': 0 }
assert get_content(store, 'session-b') is None
get_content(store, 'session-a')['total'] += 1
assert get_content(store, 'session-a') == { 'total': 1 }
def test_set_content() -> None:
store = create_store({ 'total': 0 })
set_content(store, 'session-a', { 'total': 3 })
assert get_content(store, 'session-a') == { 'total': 3 }
assert has_content(store, 'session-b') is False
def test_delete_content() -> None:
store = create_store({ 'total': 0 })
init_content(store, 'session-a')
init_content(store, 'session-b')
delete_content(store, 'session-a')
assert list(store.get('content_set').keys()) == [ 'session-b' ]
delete_content(store, 'session-a')
assert list(store.get('content_set').keys()) == [ 'session-b' ]