Spaces:
Running
Running
| 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) | |