/
gr.ev.vl
/
TestGen
Обзор
Документация
Войти
/
gr.ev.vl
/
TestGen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master2
pyproject.toml
209 строк
6 KB
gr.ev.vl
Initial commit
06 июн 2026, 02:41
06 июн 2026, 02:41
02fb1fb
Код
Авторство
О чём код?
# pyproject.toml # Конфигурация проекта TestGen Backend с использованием uv [project] name = "testgen" version = "0.1.0" description = "Система интеллектуальной генерации тестовых заданий — Backend" readme = "README.md" requires-python = ">=3.12" license = {text = "MIT"} authors = [ {name = "TestGen Team"} ] keywords = ["education", "llm", "test-generation", "edtech", "fastapi"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Education", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Framework :: FastAPI", "Topic :: Education :: Computer Aided Instruction", ] dependencies = [ # Веб-фреймворк "fastapi>=0.115.0,<0.116.0", "uvicorn[standard]>=0.32.0,<0.33.0", "starlette>=0.41.0,<0.42.0", # База данных "sqlalchemy[asyncio]>=2.0.36,<2.1.0", "asyncpg>=0.30.0,<0.31.0", "alembic>=1.14.0,<1.15.0", "pgvector>=0.3.0,<0.4.0", # Redis и очереди "redis>=5.2.0,<5.3.0", "celery>=5.4.0,<5.5.0", # Валидация и сериализация "pydantic>=2.10.0,<2.11.0", "pydantic-settings>=2.7.0,<2.8.0", # LLM-клиенты "openai>=1.58.0,<1.59.0", "anthropic>=0.42.0,<0.43.0", "google-generativeai>=0.8.0,<0.9.0", # Безопасность "python-jose[cryptography]>=3.3.0,<3.4.0", "passlib[bcrypt]>=1.7.4,<1.8.0", "bcrypt>=4.2.0,<4.3.0", # HTTP и сеть "httpx>=0.28.0,<0.29.0", "python-multipart>=0.0.18,<0.1.0", # Логирование "structlog>=24.4.0,<25.0.0", # Утилиты "python-dotenv>=1.0.1,<1.1.0", "pyyaml>=6.0.2,<6.1.0", ] [project.optional-dependencies] dev = [ "pytest>=8.3.0,<8.4.0", "pytest-asyncio>=0.24.0,<0.25.0", "pytest-cov>=6.0.0,<6.1.0", "pytest-mock>=3.14.0,<3.15.0", "pytest-xdist>=3.6.0,<3.7.0", "factory-boy>=3.3.0,<3.4.0", "httpx>=0.28.0,<0.29.0", "ruff>=0.8.0,<0.9.0", "mypy>=1.13.0,<1.14.0", "types-pyyaml>=6.0.0", "types-python-jose>=3.3.0", "types-passlib>=1.7.0", "types-redis>=4.6.0", "pre-commit>=4.0.0,<4.1.0", "ipython>=8.30.0,<8.31.0", "watchfiles>=1.0.0,<1.1.0", ] [project.scripts] testgen = "testgen.cli:main" [build-system] requires = ["hatchling>=1.26.0,<1.27.0"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/testgen"] # ============================================================================= # Настройки uv # ============================================================================= [tool.uv] resolution = "highest" prerelease = "allow" dev-dependencies = [ "pytest>=8.3.0,<8.4.0", "pytest-asyncio>=0.24.0,<0.25.0", "pytest-cov>=6.0.0,<6.1.0", "pytest-mock>=3.14.0,<3.15.0", "pytest-xdist>=3.6.0,<3.7.0", "factory-boy>=3.3.0,<3.4.0", "httpx>=0.28.0,<0.29.0", "ruff>=0.8.0,<0.9.0", "mypy>=1.13.0,<1.14.0", "types-pyyaml>=6.0.0", "types-python-jose>=3.3.0", "types-passlib>=1.7.0", "types-redis>=4.6.0", "pre-commit>=4.0.0,<4.1.0", "ipython>=8.30.0,<8.31.0", "watchfiles>=1.0.0,<1.1.0", ] # ============================================================================= # Настройки Ruff (линтер + форматтер) # ============================================================================= [tool.ruff] target-version = "py312" src = ["src"] extend-exclude = [ ".git", ".venv", ".uv_cache", "__pycache__", "alembic/versions", "htmlcov", "dist", "build", ] [tool.ruff.lint] select = [ "E", "W", "F", "I", "B", "C4", "UP", "RUF", "SIM", "TCH", "PT", "ASYNC", "PERF", ] ignore = ["E501", "B008", "B904"] [tool.ruff.lint.isort] known-first-party = ["testgen"] force-sort-within-sections = true [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" docstring-code-format = true # ============================================================================= # Настройки mypy # ============================================================================= [tool.mypy] python_version = "3.12" strict = true strict_optional = true warn_return_any = true warn_unused_ignores = true disallow_untyped_defs = true disallow_any_generics = true disallow_untyped_calls = true check_untyped_defs = true show_error_codes = true pretty = true [[tool.mypy.overrides]] module = [ "alembic.*", "passlib.*", "jose.*", "google.generativeai.*", "anthropic.*", "pgvector.*", ] ignore_missing_imports = true # ============================================================================= # Настройки pytest # ============================================================================= [tool.pytest.ini_options] minversion = "8.0" testpaths = ["tests"] asyncio_mode = "auto" addopts = ["-v", "--strict-markers", "--strict-config", "--tb=short", "--color=yes"] markers = [ "unit: Модульные тесты", "integration: Интеграционные тесты", "e2e: Сквозные тесты", "slow: Медленные тесты", ] [tool.coverage.run] source = ["src/testgen"] omit = ["*/tests/*", "*/alembic/*", "*/migrations/*"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "if self.debug:", "if settings.DEBUG", "raise AssertionError", "raise NotImplementedError", "if TYPE_CHECKING:", "class .*\\bProtocol\\):", "@(abc\\.)?abstractmethod", ]