from __future__ import annotations import sys, types from pathlib import Path from unittest.mock import MagicMock MODULES = { 'fastapi': 'FastAPI, HTTPException, Request, RequestValidationError, responses', 'fastapi.exceptions': 'RequestValidationError', 'fastapi.responses': 'JSONResponse, ORJSONResponse', 'starlette': 'middleware, routing, responses', 'starlette.middleware': 'base, cors', 'starlette.middleware.base': 'RequestResponseEndpoint, BaseHTTPMiddleware', 'starlette.middleware.cors': 'CORSMiddleware', 'starlette.routing': 'Mount, Router', 'starlette.responses': 'Response, JSONResponse', 'pydantic': 'BaseModel, Field, ValidationError, field_validator, model_validator', 'pydantic_settings': 'BaseSettings, SettingsConfigDict', 'pydantic_core': None, 'sqlalchemy': 'create_engine, text, select, insert, update, delete, inspect, event', 'sqlalchemy.orm': 'DeclarativeBase, Mapped, mapped_column, relationship, Session, sessionmaker, selectinload', 'sqlalchemy.pool': 'NullPool, QueuePool', 'aiosqlite': None, 'asyncpg': None, 'cryptography': None, 'yt_dlp': None, 'faster_whisper': None, 'mcp': None, 'mcp.server': 'fastmcp', 'mcp.server.fastmcp': 'FastMCP', 'aiofiles': None, 'httpx': None, 'orjson': None, 'psutil': None, 'yaml': None, 'PIL': None, 'PIL.Image': None, } for name, attrs in MODULES.items(): mod = types.ModuleType(name) mod.__package__ = name.rpartition('.')[0] if attrs: for attr in attrs.split(','): attr = attr.strip() setattr(mod, attr, MagicMock(name=f'{name}.{attr}')) sys.modules[name] = mod sys.path.insert(0, str(Path('.').resolve())) from app.core.config import Settings from main import create_app settings = Settings(_env_file=None, temp_dir=Path('/tmp/media-api/temp'), output_dir=Path('/tmp/media-api/out'), max_upload_size=1024, cleanup_minutes=1, cleanup_interval_seconds=3600, whisper_model='tiny', max_workers=1, allow_private_urls=True, auth_enabled=False, database_url='sqlite+aiosqlite:////tmp/media-api/security.db', security_database_role='security') app = create_app(settings) print('APP_OK', app.title, app.version)