2026-05-07 17:06:19 +00:00
[ tool . poetry ]
name = "fire-planner"
version = "0.1.0"
description = "Risk-adjusted, tax-minimised FIRE retirement planner — Monte Carlo simulator over jurisdictions, withdrawal strategies, and UK-departure years."
authors = [ "Viktor Barzin <viktorbarzin@meta.com>" ]
readme = "README.md"
packages = [ { include = "fire_planner" } ]
[ tool . poetry . dependencies ]
python = ">=3.12,<3.13"
fastapi = "^0.115"
uvicorn = "^0.32"
httpx = "^0.27"
pydantic = "^2.9"
sqlalchemy = { extras = [ "asyncio" ] , version = "^2.0" }
asyncpg = "^0.29"
alembic = "^1.13"
click = "^8.1"
numpy = "^2.1"
pandas = "^2.2"
prometheus-fastapi-instrumentator = "^7.0"
2026-05-28 22:03:27 +00:00
asyncpraw = "^7.7"
2026-05-07 17:06:19 +00:00
[ tool . poetry . group . dev . dependencies ]
pytest = "^8.3"
pytest-asyncio = "^0.23"
hypothesis = "^6.115"
mypy = "^1.11"
ruff = "^0.6"
yapf = "^0.43"
respx = "^0.21"
2026-05-28 22:03:27 +00:00
aiosqlite = "^0.17"
2026-05-07 17:06:19 +00:00
[ build-system ]
requires = [ "poetry-core" ]
build-backend = "poetry.core.masonry.api"
[ tool . pytest . ini_options ]
asyncio_mode = "auto"
testpaths = [ "tests" ]
[ tool . mypy ]
python_version = "3.12"
strict = true
files = [ "fire_planner" , "tests" ]
[ [ tool . mypy . overrides ] ]
module = [ "respx.*" , "pandas.*" ]
ignore_missing_imports = true
[ tool . ruff ]
line-length = 100
target-version = "py312"
[ tool . ruff . lint ]
select = [ "E" , "F" , "W" , "I" , "UP" , "B" , "SIM" , "RUF" ]
# RUF002 / RUF003 flag ambiguous unicode characters (× , —, etc.) in
# docstrings and comments — we use them intentionally for readability.
2026-05-09 21:48:36 +00:00
# B008 trips on `Depends(...)` in argument defaults — that's the
# idiomatic FastAPI pattern, not a bug.
ignore = [ "RUF002" , "RUF003" , "B008" ]
2026-05-07 17:06:19 +00:00
[ tool . yapf ]
based_on_style = "pep8"
column_limit = 100