-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
73 lines (65 loc) · 2.03 KB
/
Copy pathpyproject.toml
File metadata and controls
73 lines (65 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[project]
name = "hnf1b-mcp"
version = "0.1.1"
description = "Read-only MCP server exposing HNF1B-db public data to LLMs"
requires-python = ">=3.11"
dependencies = [
"fastmcp>=2.3.0",
"httpx>=0.27",
"pydantic>=2.7",
"pydantic-settings>=2.14.2",
"redis>=5.0",
]
[project.scripts]
hnf1b-mcp = "hnf1b_mcp.server:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/hnf1b_mcp"]
[dependency-groups]
dev = [
"ruff==0.15.12",
"mypy==2.0.0",
"pytest==9.0.3",
"pytest-asyncio>=1.2.0",
"pytest-cov==7.1.0",
"pytest-xdist>=3.6.0", # Parallel test execution (mcp tests are isolated)
"respx>=0.21",
"mcp>=1.2",
]
[tool.ruff]
target-version = "py311"
line-length = 88
[tool.ruff.lint]
select = ["E", "W", "F", "I", "D"]
[tool.ruff.lint.pydocstyle]
convention = "google"
[tool.ruff.lint.per-file-ignores]
"tests/*.py" = ["D100", "D101", "D102", "D103", "D104", "E501"]
# Generated contract artifacts: do not hand-edit; regenerate via `make contract`.
# datamodel-codegen / the path-const emitter produce long lines and a style that
# fights the doc/line-length rules — ignore them rather than touch generated files.
"src/hnf1b_mcp/contract/_generated_*.py" = ["E501", "D", "W", "F", "I", "N", "UP"]
[tool.mypy]
python_version = "3.11"
strict = true
[[tool.mypy.overrides]]
module = ["fastmcp.*", "mcp.*", "respx.*"]
ignore_missing_imports = true
# Generated pydantic models from datamodel-codegen: relax strict-mode noise that
# the generated style triggers (do not hand-edit the generated files).
[[tool.mypy.overrides]]
module = ["hnf1b_mcp.contract._generated_models"]
disallow_any_explicit = false
disable_error_code = ["explicit-any"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
addopts = "-m 'not live'"
markers = [
"smoke: end-to-end smoke tests (excluded from default CI with -m 'not smoke')",
"live: tests that hit the live API at http://localhost:8000 (skipped in CI)",
]
[tool.coverage.report]
fail_under = 80