From c1abaa7f6b34917163c57748c8868569433c45b8 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sat, 31 Jan 2026 17:12:01 +0000 Subject: [PATCH] Add generators module --- src/docgen/generators/markdown.py | 50 +++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/docgen/generators/markdown.py diff --git a/src/docgen/generators/markdown.py b/src/docgen/generators/markdown.py new file mode 100644 index 0000000..6cb2adb --- /dev/null +++ b/src/docgen/generators/markdown.py @@ -0,0 +1,50 @@ +"""Markdown documentation generator.""" + +from pathlib import Path +from jinja2 import Environment, FileSystemLoader +from docgen.models import DocConfig, Endpoint +from docgen.generators import BaseGenerator + + +class MarkdownGenerator(BaseGenerator): + """Generator for Markdown documentation.""" + + def __init__(self, config: DocConfig = None): + super().__init__(config) + template_dir = Path(__file__).parent.parent / "templates" + self.env = Environment(loader=FileSystemLoader(template_dir)) + + def generate(self, endpoints: list[Endpoint], output_dir: Path) -> Path: + """Generate Markdown documentation.""" + output_dir = self._ensure_output_dir(output_dir) + + template = self.env.get_template("markdown.md.jinja2") + grouped = self._group_endpoints(endpoints) + + rendered = template.render( + title=self.config.title, + description=self.config.description, + version=self.config.version, + endpoints=endpoints, + grouped_endpoints=grouped, + ) + + readme_path = output_dir / "README.md" + readme_path.write_text(rendered) + + return readme_path + + def _group_endpoints(self, endpoints: list[Endpoint]) -> dict[str, list[Endpoint]]: + """Group endpoints by tags or path prefixes.""" + grouped = {} + for endpoint in endpoints: + if endpoint.tags: + tag = endpoint.tags[0] if endpoint.tags else "Other" + else: + parts = endpoint.path.strip("/").split("/") + tag = parts[0] if parts else "Other" + + if tag not in grouped: + grouped[tag] = [] + grouped[tag].append(endpoint) + return dict(sorted(grouped.items()))