[build-system] requires = ["setuptools>=68.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "stock-data-backend" version = "0.1.0" description = "Investing-signal platform for NASDAQ stocks" requires-python = ">=3.11" dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.30.0", "sqlalchemy[asyncio]>=2.0.0", "asyncpg>=0.30.0", "alembic>=1.14.0", "pydantic-settings>=2.0.0", "python-jose[cryptography]>=3.3.0", "passlib[bcrypt]>=1.7.4", "bcrypt<=4.0.1", "apscheduler>=3.10.0", "httpx>=0.27.0", "alpaca-py>=0.30.0", "google-genai>=1.0.0", "openai>=1.0.0", "pytz>=2024.1", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "hypothesis>=6.100.0", "httpx>=0.27.0", "aiosqlite>=0.20.0", ] [tool.setuptools.packages.find] include = ["app*"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] target-version = "py312" [tool.ruff.lint] # Pinned explicitly rather than inherited. CI installs ruff unpinned, and the # default rule set is not stable across releases: 0.16 broadened it so far that # `ruff check app/` went from 0 findings to 376 -- 168 of them B008 flagging # FastAPI's `Depends()` in a signature default, which is the framework's # documented idiom and not a defect. An unpinned linter with drifting defaults # fails the deploy pipeline on code nobody touched, so the rule set is the thing # to pin; the ruff version can then float freely. # # E4 imports, E7 statements, E9 syntax/IO errors, F pyflakes. This is the set the # tree was already clean under, now applied repo-wide instead of to app/ alone. # Adding rules is welcome -- do it here, deliberately, with the fixes in the same # commit. select = ["E4", "E7", "E9", "F"]