[project] name = "new-chatbot" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.13" dependencies = [ "aio-pika>=9.5.0", "alembic>=1.19.1", "fastapi[standard]==0.141.1", "langgraph>=1.2.10", "pydantic-settings>=2.15.0", "sqlalchemy>=2.0.51", ] [dependency-groups] dev = [ "asgi-lifespan>=2.1.0", "httpx>=0.28.1", "pytest>=8.3.5", "pytest-asyncio>=0.25.3", "pytest-cov>=6.0.0", "pytest-timeout>=2.3.1", "ruff>=0.16.2", "testcontainers>=4.9.2", "ty>=0.0.69", ] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "strict" timeout = 10 markers = [ "unit: fast tests with no external services", "integration: tests against a real disposable service", "e2e: end-to-end vertical-slice tests", "postgres: integration test using Postgres", "minio: integration test using MinIO", "rabbitmq: integration test using RabbitMQ", "qdrant: integration test using Qdrant", "slow: test exceeds normal integration feedback time", "live_provider: opt-in test that calls an external provider", ] [tool.ruff] line-length = 100 target-version = "py313" [tool.ruff.lint] select = [ # pycodestyle "E", # pyflakes "F", # isort "I", # pyupgrade "UP", # flake8-bugbear "B", # flake8-comprehensions "C4", # flake8-simplify "SIM", # Ruff-specific rules "RUF", ] [tool.ruff.format] quote-style = "double" indent-style = "space" [tool.ty.environment] python-version = "3.13" [tool.ty.rules] # High-value, currently ignore/warn by possibly-unresolved-reference = "error" missing-type-argument = "warn" possibly-missing-attribute = "warn" # Nice-to-have discipline: unused-ignore-comment = "warn" missing-override-decorator = "warn" # Turn OFF or downgrade if noisy on your codebase: possibly-missing-import = "ignore" division-by-zero = "ignore"