[project] name = "api" version = "0.2.0" description = "Backend For Life Echo App" readme = "README.md" requires-python = ">=3.13" dependencies = [ "alembic>=1.18.4", "bcrypt>=5.0.0", "celery[redis]>=5.6.2", "cos-python-sdk-v5>=1.9.41", "fastapi[standard]>=0.135.1", "flower>=2.0.1", "greenlet>=3.3.2", "httpx>=0.28.1", "langchain>=1.2.12", "langchain-openai>=1.1.11", "loguru>=0.7.3", "openai>=2.26.0", "opentelemetry-api>=1.42.0", "opentelemetry-exporter-otlp-proto-grpc>=1.42.0", "opentelemetry-instrumentation-celery>=0.63b0", "opentelemetry-instrumentation-fastapi>=0.63b0", "opentelemetry-instrumentation-httpx>=0.63b0", "opentelemetry-instrumentation-logging>=0.63b0", "opentelemetry-instrumentation-redis>=0.63b0", "opentelemetry-instrumentation-sqlalchemy>=0.63b0", "opentelemetry-sdk>=1.42.0", "pgvector>=0.4.2", "pillow>=12.1.1", "psycopg[binary]>=3.2.0", "pydantic>=2.12.5", "pydantic-settings>=2.13.1", "pyjwt>=2.12.0", "python-alipay-sdk>=3.4.0", "redis>=6.4.0", "reportlab>=4.4.10", "sqlalchemy>=2.0.48", "tencentcloud-sdk-python>=3.1.54", "weasyprint>=68.1", "wechatpayv3>=2.0.2", "zai-sdk>=0.2.2", ] [dependency-groups] dev = [ "aiosqlite>=0.22.1", "pyright>=1.1.408", "pytest>=9.0.2", "pytest-asyncio>=1.3.0", "pytest-cov>=7.0.0", "ruff>=0.15.6", ] [tool.ruff] line-length = 88 target-version = "py313" [tool.ruff.lint] select = ["E", "F", "I", "B"] ignore = ["E501", "B008", "E712"] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] "main.py" = ["E402", "I001"] "internal_main.py" = ["E402", "I001"] "app/tasks/celery_app.py" = ["E402"] "tests/conftest.py" = ["E402", "I001"] [tool.ruff.format] quote-style = "double" indent-style = "space" line-ending = "auto" [tool.fastapi] entrypoint = "app.main:app" [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["."] python_files = ["test_*.py"] markers = [ "integration: marks tests that require external services or real infrastructure", "unit: marks isolated unit tests", "slow: marks slow-running tests", ] addopts = "-ra --strict-markers --strict-config --import-mode=importlib" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" asyncio_default_test_loop_scope = "function" [tool.pyright] include = ["."] exclude = [ "**/__pycache__", ".venv", "build", "dist", ] pythonVersion = "3.13" typeCheckingMode = "standard" reportMissingImports = "error" reportMissingTypeStubs = false