Sanket-Setu / backend /tests /conftest.py
devrajsinh2012's picture
Initial commit: SanketSetu - Sign Language Recognition System
cf93910
"""
conftest.py — shared pytest fixtures for SanketSetu backend tests.
All model fixtures use session scope so the (slow) models are loaded only once
per pytest run. Tests that need models are automatically skipped when the
pickle files are not found (CI without model artifacts).
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
import pytest
# Make sure `app.*` imports resolve correctly when tests run from backend/
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
# Set env vars before any TF/Keras import
os.environ.setdefault("KERAS_BACKEND", "tensorflow")
os.environ.setdefault("TF_CPP_MIN_LOG_LEVEL", "3")
os.environ.setdefault("CUDA_VISIBLE_DEVICES", "")
os.environ.setdefault("TF_ENABLE_ONEDNN_OPTS","0")
from app import config # noqa: E402
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
def _skip_if_missing(path: str, name: str):
if not Path(path).exists():
pytest.skip(f"Model file not found: {path} ({name} skipped)")
# ---------------------------------------------------------------------------
# Fixtures
# ---------------------------------------------------------------------------
@pytest.fixture(scope="session")
def xgb_model():
_skip_if_missing(config.PIPELINE_A_MODEL, "xgb")
import pickle
with open(config.PIPELINE_A_MODEL, "rb") as f:
return pickle.load(f)
@pytest.fixture(scope="session")
def encoder_model():
_skip_if_missing(config.PIPELINE_B_AE, "autoencoder")
from app.models.loader import _build_encoder # access internal helper
return _build_encoder(config.PIPELINE_B_AE)
@pytest.fixture(scope="session")
def lgbm_model():
_skip_if_missing(config.PIPELINE_B_LGBM, "lgbm")
import pickle
with open(config.PIPELINE_B_LGBM, "rb") as f:
return pickle.load(f)
@pytest.fixture(scope="session")
def cnn_model():
_skip_if_missing(config.PIPELINE_C_CNN, "cnn")
from app.models.loader import _build_cnn_feature_extractor
return _build_cnn_feature_extractor(config.PIPELINE_C_CNN)
@pytest.fixture(scope="session")
def svm_model():
_skip_if_missing(config.PIPELINE_C_SVM, "svm")
import pickle
with open(config.PIPELINE_C_SVM, "rb") as f:
return pickle.load(f)