[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "doc-forge" version = "0.0.6" description = "A renderer-agnostic Python documentation compiler" readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } authors = [ { name = "Aetos Skia", email = "dev@aetoskia.com" } ] maintainers = [ { name = "Aetos Skia", email = "dev@aetoskia.com" } ] keywords = [ "documentation", "docs", "compiler", "mkdocs", "mcp", "griffe", "docstrings", "sphinx", ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Framework :: FastAPI", "Topic :: Software Development :: Libraries", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Documentation", "Typing :: Typed", ] dependencies = [ "griffe>=0.45.0", "click>=8.0.0", "pydantic>=2.0.0", ] [project.scripts] doc-forge = "docforge.cli.main:main" [project.optional-dependencies] mkdocs = [ "mkdocs==1.6.1", "mkdocs-material==9.6.23", "mkdocstrings==0.25.2", "mkdocstrings-python==1.10.8", "mkdocs-autorefs==0.5.0", "pymdown-extensions==10.16.1", "neoteroi-mkdocs==1.1.3", ] sphinx = [ "sphinx>=5.0.0", "sphinx-autodoc-typehints>=1.19.0", ] mcp = [ "mcp>=1.0.0,<2.0.0", ] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.21.0", "pytest-cov>=4.1.0", "black>=23.0.0", "ruff>=0.3.0", "mypy>=1.8.0", "build>=1.0.0", "twine>=4.0.0", "pre-commit>=3.4.0", ] docs = [ "doc-forge[mkdocs]", ] all = [ "doc-forge[dev,docs,mcp]", ] [project.urls] Homepage = "https://git.aetoskia.com/aetos/doc-forge" Documentation = "https://git.aetoskia.com/aetos/doc-forge#readme" Repository = "https://git.aetoskia.com/aetos/doc-forge.git" Issues = "https://git.aetoskia.com/aetos/doc-forge/issues" Versions = "https://git.aetoskia.com/aetos/doc-forge/tags" [tool.setuptools] packages = { find = { include = ["docforge*"] } } [tool.setuptools.package-data] docforge = ["py.typed", "templates/*.yml"] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "--strict-markers", "--strict-config", "--cov=docforge", "--cov-report=term-missing", "--cov-report=html", "--cov-report=xml", ] [tool.black] line-length = 88 target-version = ["py310", "py311", "py312", "py313"] include = '\.pyi?$' extend-exclude = ''' /( \.eggs | \.git | \.hg | \.mypy_cache | \.tox | \.venv | build | dist )/ ''' [tool.ruff] line-length = 88 target-version = "py310" [tool.ruff.lint] select = [ "E", "W", "F", "I", "B", "C4", "UP", ] ignore = [ "E501", "B008", "C901", ] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401", "I001"] "tests/*" = ["B008"] [tool.mypy] python_version = "3.10" strict = true exclude = [ "tests/", ] files = ["docforge"] [[tool.mypy.overrides]] module = [ "griffe.*", "mcp.*", "click", "pydantic", ] ignore_missing_imports = true [tool.coverage.run] source = ["docforge"] omit = [ "*/tests/*", "*/test_*.py", ] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "if __name__ == .__main__.:", "raise AssertionError", "raise NotImplementedError", "if TYPE_CHECKING:", "@abstractmethod", ]