fix bug for sessions without assets (#1234)

This commit is contained in:
Henry Ruhs
2026-09-11 11:53:48 +02:00
committed by GitHub
parent 40c554b59d
commit 5bc9c80c55
3 changed files with 43 additions and 17 deletions
+10 -9
View File
@@ -7,7 +7,7 @@ from starlette.status import HTTP_200_OK, HTTP_201_CREATED, HTTP_401_UNAUTHORIZE
from facefusion import session_context, session_manager, state_manager, translator
from facefusion.apis import asset_store
from facefusion.apis.session_helper import extract_access_token, validate_api_key
from facefusion.filesystem import remove_directory
from facefusion.filesystem import is_directory, remove_directory
async def create_session(request : Request) -> JSONResponse:
@@ -71,20 +71,21 @@ async def destroy_session(request : Request) -> JSONResponse:
if session_id:
session_context.set_session_id(session_id)
temp_path = state_manager.get_temp_path()
if remove_directory(state_manager.get_temp_path()):
asset_store.delete_assets(session_id)
session_manager.clear_session(session_id)
if is_directory(temp_path) and not remove_directory(temp_path):
return JSONResponse(
{
'message': translator.get('ok', 'facefusion.apis')
}, status_code = HTTP_200_OK)
'message': translator.get('directory_not_removed', 'facefusion.apis')
}, status_code = HTTP_404_NOT_FOUND)
asset_store.delete_assets(session_id)
session_manager.clear_session(session_id)
return JSONResponse(
{
'message': translator.get('something_went_wrong', 'facefusion.apis')
}, status_code = HTTP_404_NOT_FOUND)
'message': translator.get('ok', 'facefusion.apis')
}, status_code = HTTP_200_OK)
return JSONResponse(
{
+1
View File
@@ -6,6 +6,7 @@ LOCALES : Locales =\
{
'ok': 'ok',
'something_went_wrong': 'something went wrong',
'directory_not_removed': 'directory not removed',
'invalid_access_token': 'invalid access token',
'invalid_refresh_token': 'invalid refresh token',
'source_asset_not_found': 'source asset not found',
+32 -8
View File
@@ -2,6 +2,7 @@ import os
import tempfile
from datetime import timedelta
from typing import Iterator
from unittest.mock import patch
import pytest
from starlette.testclient import TestClient
@@ -183,8 +184,28 @@ def test_destroy_session(test_client : TestClient) -> None:
{
'client_version': metadata.get('version')
})
create_session_body = create_session_response.json()
access_token = create_session_body.get('access_token')
access_token = create_session_response.json().get('access_token')
delete_session_response = test_client.delete('/session', headers =
{
'Authorization': 'Bearer INVALID'
})
assert delete_session_response.status_code == 401
delete_session_response = test_client.delete('/session', headers =
{
'Authorization': 'Bearer ' + access_token
})
assert session_manager.find_session_id(access_token) is None
assert delete_session_response.status_code == 200
create_session_response = test_client.post('/session', json =
{
'client_version': metadata.get('version')
})
access_token = create_session_response.json().get('access_token')
session_id = session_manager.find_session_id(access_token)
source_path = get_test_example_file('source.jpg')
@@ -202,16 +223,19 @@ def test_destroy_session(test_client : TestClient) -> None:
for asset in asset_store.get_assets(session_id).values():
asset_paths.append(asset.get('path'))
delete_session_response = test_client.delete('/session', headers =
{
'Authorization': 'Bearer INVALID'
})
assert delete_session_response.status_code == 401
with patch('facefusion.apis.endpoints.session.remove_directory', return_value = False):
delete_session_response = test_client.delete('/session', headers =
{
'Authorization': 'Bearer ' + access_token
})
for asset_path in asset_paths:
assert os.path.exists(asset_path) is True
assert delete_session_response.json().get('message') == 'directory not removed'
assert session_manager.find_session_id(access_token) == session_id
assert delete_session_response.status_code == 404
delete_session_response = test_client.delete('/session', headers =
{
'Authorization': 'Bearer ' + access_token