/
gr.ev.vl
/
TestGen
Обзор
Документация
Войти
/
gr.ev.vl
/
TestGen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master2
backend/src/testgen/cli.py
93 строки
3 KB
gr.ev.vl
Initial commit
06 июн 2026, 02:41
06 июн 2026, 02:41
02fb1fb
Код
Авторство
О чём код?
""" CLI-интерфейс приложения. Предоставляет команды для управления приложением из командной строки. """ import argparse import asyncio import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) def main(): """Точка входа CLI.""" parser = argparse.ArgumentParser( description="TestGen CLI — управление системой генерации тестовых заданий", ) subparsers = parser.add_subparsers(dest="command", help="Доступные команды") # Команда: create-superuser create_user_parser = subparsers.add_parser( "create-superuser", help="Создать суперпользователя" ) create_user_parser.add_argument("--email", default="admin@testgen.local") create_user_parser.add_argument("--password", default="Admin123!") create_user_parser.add_argument("--name", default="Администратор") # Команда: seed seed_parser = subparsers.add_parser("seed", help="Наполнить БД тестовыми данными") # Команда: migrate migrate_parser = subparsers.add_parser("migrate", help="Применить миграции") # Команда: run run_parser = subparsers.add_parser("run", help="Запустить сервер") run_parser.add_argument("--host", default="0.0.0.0") run_parser.add_argument("--port", type=int, default=8000) run_parser.add_argument("--reload", action="store_true") args = parser.parse_args() if args.command == "create-superuser": from testgen.core.utils.hashing import hash_password from testgen.domain.repositories.user import UserRepository from testgen.infrastructure.database.session import async_session_factory async def _create(): async with async_session_factory() as session: repo = UserRepository(session) existing = await repo.get_by_email(args.email) if existing: print(f"Пользователь {args.email} уже существует") return await repo.create( email=args.email, password_hash=hash_password(args.password), full_name=args.name, role="admin", is_active=True, ) await session.commit() print(f"Суперпользователь создан: {args.email}") asyncio.run(_create()) elif args.command == "seed": print("Запуск наполнения БД...") # Импорт и запуск seed_data import subprocess subprocess.run([sys.executable, "scripts/seed_data.py"]) elif args.command == "migrate": print("Применение миграций...") import subprocess subprocess.run(["alembic", "upgrade", "head"]) elif args.command == "run": import uvicorn uvicorn.run( "testgen.main:app", host=args.host, port=args.port, reload=args.reload, ) else: parser.print_help() if __name__ == "__main__": main()