mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-06-23 08:34:28 +08:00
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
"""pytest 全局引导:隔离 CONFIG_DIR、补 sites 垫片、建表、装载网络守卫。
|
||
|
||
引导与网络守卫均复用 ``app/testing`` 的共享 harness(与插件仓 conftest 同源),
|
||
引导逻辑只在 ``app/testing`` 维护一处。
|
||
"""
|
||
import sys
|
||
|
||
# 必须早于首个 import app.db(其在 import 期即按 CONFIG_PATH 连库):prepare_backend 内部
|
||
# 先隔离 CONFIG_DIR、补 app.helper.sites 垫片,再建表。app/testing 仅依赖标准库、import 不连库,
|
||
# 故此处先 import 再调用是安全的。
|
||
from app.testing.bootstrap import prepare_backend
|
||
|
||
prepare_backend()
|
||
|
||
# 复用共享 autouse 网络守卫;同一实现亦供各插件仓 conftest import 复用,避免逐仓维护
|
||
from app.testing.network_guard import block_real_network # noqa: E402,F401
|
||
|
||
|
||
def _report_session_cleanup_error(name: str, err: Exception) -> None:
|
||
"""测试收尾清理失败只记录诊断,不覆盖原始 pytest 退出状态。"""
|
||
sys.stderr.write(f"\npytest session cleanup failed: {name}: {err!r}\n")
|
||
|
||
|
||
def pytest_sessionfinish(session, exitstatus):
|
||
"""释放测试过程中按需创建的全局后台资源,避免解释器退出时等待非 daemon worker。"""
|
||
try:
|
||
from app.agent.tools.base import shutdown_blocking_executors
|
||
|
||
shutdown_blocking_executors(cancel_futures=True)
|
||
except Exception as err:
|
||
_report_session_cleanup_error("agent blocking executors", err)
|
||
|
||
try:
|
||
from app.helper.thread import ThreadHelper
|
||
from app.utils.singleton import Singleton
|
||
|
||
helper = Singleton._instances.get((ThreadHelper, (), frozenset()))
|
||
if helper:
|
||
helper.shutdown()
|
||
except Exception as err:
|
||
_report_session_cleanup_error("thread helper", err)
|
||
|
||
try:
|
||
from app.log import LoggerManager
|
||
|
||
LoggerManager.shutdown()
|
||
except Exception as err:
|
||
_report_session_cleanup_error("logger manager", err)
|