pyproject.toml•3.61 kB
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "autodoc-mcp"
version = "0.5.1"
description = "MCP server for automatic Python package documentation context"
authors = [{name = "AutoDocs Team", email = "team@autodocs.dev"}]
license = {text = "MIT"}
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"fastmcp>=2.0.0",
"httpx>=0.25.0",
"tomlkit>=0.12.0",
"pydantic>=2.0.0",
"structlog>=23.2.0",
"packaging>=23.0", # For version constraint parsing
"click>=8.0.0",
"pillow>=11.3.0",
]
[project.optional-dependencies]
dev = [
"pytest>=7.4.0",
"pytest-asyncio>=0.21.0",
"pytest-mock>=3.11.0",
"pytest-cov>=4.1.0",
"pytest-xdist>=3.3.0", # Parallel test execution
"pytest-timeout>=2.1.0", # Test timeout handling
"pytest-httpx>=0.30.0", # HTTP request mocking for httpx
"pytest-randomly>=3.12.0", # Randomize test order
"pytest-html>=4.1.0", # HTML test reports
"pytest-json-report>=1.5.0", # JSON test reports
"ruff>=0.1.0",
"mypy>=1.6.0",
"pre-commit>=3.5.0",
]
docs-testing = [
"beautifulsoup4>=4.12.0", # HTML parsing for content validation
"playwright>=1.40.0", # Cross-platform browser testing
"httpx>=0.25.0", # HTTP client for link validation
"pyyaml>=6.0", # YAML validation for code blocks
]
[project.scripts]
autodoc-mcp = "autodoc_mcp.main:main"
[project.urls]
Homepage = "https://github.com/bradleyfay/autodoc-mcp"
Repository = "https://github.com/bradleyfay/autodoc-mcp.git"
Issues = "https://github.com/bradleyfay/autodoc-mcp/issues"
[tool.hatch.envs.default]
dependencies = [
"pytest",
"pytest-asyncio",
"pytest-mock",
"pytest-cov",
]
[tool.hatch.envs.default.scripts]
test = "pytest {args:tests}"
test-cov = "pytest --cov=src/autodoc_mcp {args:tests}"
lint = "ruff check {args:src tests}"
format = "ruff format {args:src tests}"
typecheck = "mypy {args:src}"
dev = "python src/autodoc_mcp/main.py"
[tool.hatch.build.targets.wheel]
packages = ["src/autodoc_mcp"]
[tool.hatch.build.targets.sdist]
include = [
"/src",
"/tests",
"/README.md",
"/LICENSE",
"/CHANGELOG.md"
]
[tool.ruff]
target-version = "py311"
line-length = 88
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP", "B", "C4", "SIM", "TCH"]
ignore = ["E501", "N805"]
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["S101"]
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
exclude = ["tests/"]
[tool.pytest.ini_options]
minversion = "7.0"
addopts = "-ra -q --strict-markers"
testpaths = ["tests"]
asyncio_mode = "auto"
markers = [
"asyncio: marks tests as async (deselect with '-m \"not asyncio\"')",
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"external: marks tests that require external network access",
"browser: marks tests that require browser automation",
]
# Create separate test paths for different test types
filterwarnings = [
"ignore::DeprecationWarning",
"ignore::PendingDeprecationWarning",
]
[tool.coverage.run]
source = ["src/autodoc_mcp"]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"def __repr__",
"if TYPE_CHECKING:",
"raise AssertionError",
"raise NotImplementedError",
]
[dependency-groups]
dev = [
"mkdocs>=1.6.1",
"mkdocs-blog-plugin>=0.25",
"mkdocs-git-committers-plugin>=0.2.3",
"mkdocs-git-revision-date-localized-plugin>=1.4.7",
"mkdocs-material>=9.6.16",
"mkdocs-minify-plugin>=0.8.0",
"pytest-timeout>=2.4.0",
]