Compare commits
2 Commits
0.0.1
...
b1544c9610
| Author | SHA1 | Date | |
|---|---|---|---|
| b1544c9610 | |||
| 4a876abc62 |
@@ -56,7 +56,7 @@ doc-forge server mypackage
|
|||||||
### Python API
|
### Python API
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from docforge.loader import GriffeLoader
|
from docforge.loaders import GriffeLoader
|
||||||
from docforge.renderers import MkDocsRenderer
|
from docforge.renderers import MkDocsRenderer
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@@ -70,6 +70,7 @@ renderer.generate_sources(project, Path("docs"))
|
|||||||
|
|
||||||
# Build final documentation
|
# Build final documentation
|
||||||
from docforge.renderers.base import RendererConfig
|
from docforge.renderers.base import RendererConfig
|
||||||
|
|
||||||
config = RendererConfig(Path("docs"), project)
|
config = RendererConfig(Path("docs"), project)
|
||||||
renderer.build(config)
|
renderer.build(config)
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
home: docforge/index.md
|
home: docforge/index.md
|
||||||
groups:
|
groups:
|
||||||
Loader:
|
Loaders:
|
||||||
- docforge/loader/index.md
|
- docforge/loaders/index.md
|
||||||
- docforge/loader/griffe_loader.md
|
- docforge/loaders/griffe_loader.md
|
||||||
Model:
|
Models:
|
||||||
- docforge/model/index.md
|
- docforge/models/index.md
|
||||||
- docforge/model/module.md
|
- docforge/models/module.md
|
||||||
- docforge/model/object.md
|
- docforge/models/object.md
|
||||||
- docforge/model/project.md
|
- docforge/models/project.md
|
||||||
Navigation:
|
Navigation:
|
||||||
- docforge/nav/index.md
|
- docforge/nav/index.md
|
||||||
- docforge/nav/spec.md
|
- docforge/nav/spec.md
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
`doc-forge` is a renderer-agnostic Python documentation compiler designed for
|
`doc-forge` is a renderer-agnostic Python documentation compiler designed for
|
||||||
speed, flexibility, and beautiful output. It decouples the introspection of
|
speed, flexibility, and beautiful output. It decouples the introspection of
|
||||||
your code from the rendering process, allowing you to generate documentation
|
your code from the rendering process, allowing you to generate documentation
|
||||||
for various platforms (starting with MkDocs) from a single internal model.
|
for various platforms (starting with MkDocs) from a single internal models.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -45,16 +45,16 @@ pip install doc-forge
|
|||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
- `docforge.loader`: Introspects source code using static analysis (`griffe`).
|
- `docforge.loaders`: Introspects source code using static analysis (`griffe`).
|
||||||
- `docforge.model`: The internal representation of your project, modules, and objects.
|
- `docforge.models`: The internal representation of your project, modules, and objects.
|
||||||
- `docforge.renderers`: Converters that turn the model into physical files.
|
- `docforge.renderers`: Converters that turn the models into physical files.
|
||||||
- `docforge.nav`: Managers for logical-to-physical path mapping and navigation.
|
- `docforge.nav`: Managers for logical-to-physical path mapping and navigation.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from .loader import GriffeLoader, discover_module_paths
|
from .loaders import GriffeLoader, discover_module_paths
|
||||||
from .renderers import MkDocsRenderer
|
from .renderers import MkDocsRenderer
|
||||||
from .cli import main
|
from .cli import main
|
||||||
from . import model
|
from . import models
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"GriffeLoader",
|
"GriffeLoader",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from .loader import GriffeLoader, discover_module_paths
|
from .loaders import GriffeLoader, discover_module_paths
|
||||||
from .renderers import MkDocsRenderer
|
from .renderers import MkDocsRenderer
|
||||||
from .cli import main
|
from .cli import main
|
||||||
from . import model
|
from . import models
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"GriffeLoader",
|
"GriffeLoader",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from typing import Sequence, Optional
|
|||||||
|
|
||||||
import click
|
import click
|
||||||
|
|
||||||
from docforge.loader import GriffeLoader, discover_module_paths
|
from docforge.loaders import GriffeLoader, discover_module_paths
|
||||||
from docforge.renderers.mkdocs import MkDocsRenderer
|
from docforge.renderers.mkdocs import MkDocsRenderer
|
||||||
from docforge.cli.mkdocs import mkdocs_cmd
|
from docforge.cli.mkdocs import mkdocs_cmd
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
# Loader Layer
|
# Loader Layer
|
||||||
|
|
||||||
The `docforge.loader` package is responsible for discovering Python source files
|
The `docforge.loaders` package is responsible for discovering Python source files
|
||||||
and extracting their documentation using static analysis.
|
and extracting their documentation using static analysis.
|
||||||
|
|
||||||
## Core Features
|
## Core Features
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
"""
|
"""
|
||||||
This module provides the GriffeLoader, which uses the 'griffe' library to
|
This module provides the GriffeLoader, which uses the 'griffe' library to
|
||||||
introspect Python source code and populate the doc-forge Project model.
|
introspect Python source code and populate the doc-forge Project models.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
@@ -15,7 +15,7 @@ from griffe import (
|
|||||||
AliasResolutionError,
|
AliasResolutionError,
|
||||||
)
|
)
|
||||||
|
|
||||||
from docforge.model import Module, Project, DocObject
|
from docforge.models import Module, Project, DocObject
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ class GriffeLoader:
|
|||||||
skip_import_errors: bool = None,
|
skip_import_errors: bool = None,
|
||||||
) -> Project:
|
) -> Project:
|
||||||
"""
|
"""
|
||||||
Load multiple modules and combine them into a single Project model.
|
Load multiple modules and combine them into a single Project models.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
module_paths: A list of dotted paths to the modules to load.
|
module_paths: A list of dotted paths to the modules to load.
|
||||||
@@ -116,7 +116,7 @@ class GriffeLoader:
|
|||||||
|
|
||||||
def load_module(self, path: str) -> Module:
|
def load_module(self, path: str) -> Module:
|
||||||
"""
|
"""
|
||||||
Load a single module and convert its introspection data into the docforge model.
|
Load a single module and convert its introspection data into the docforge models.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
path: The dotted path of the module to load.
|
path: The dotted path of the module to load.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from docforge.model import Module, Project
|
from docforge.models import Module, Project
|
||||||
|
|
||||||
|
|
||||||
def discover_module_paths(
|
def discover_module_paths(
|
||||||
@@ -12,7 +12,7 @@ def discover_module_paths(
|
|||||||
|
|
||||||
|
|
||||||
class GriffeLoader:
|
class GriffeLoader:
|
||||||
"""Griffe-based introspection loader.
|
"""Griffe-based introspection loaders.
|
||||||
|
|
||||||
This is the only supported introspection backend in doc-forge.
|
This is the only supported introspection backend in doc-forge.
|
||||||
"""
|
"""
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
# Model Layer
|
# Model Layer
|
||||||
|
|
||||||
The `docforge.model` package provides the core data structures used to represent
|
The `docforge.models` package provides the core data structures used to represent
|
||||||
Python source code in a documentation-focused hierarchy.
|
Python source code in a documentation-focused hierarchy.
|
||||||
|
|
||||||
## Key Components
|
## Key Components
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
"""
|
"""
|
||||||
This module defines the Module class, which represents a Python module or package
|
This module defines the Module class, which represents a Python module or package
|
||||||
in the doc-forge documentation model. It acts as a container for top-level
|
in the doc-forge documentation models. It acts as a container for top-level
|
||||||
documented objects.
|
documented objects.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Dict, Iterable, Optional
|
from typing import Dict, Iterable, Optional
|
||||||
|
|
||||||
from docforge.model.object import DocObject
|
from docforge.models.object import DocObject
|
||||||
|
|
||||||
|
|
||||||
class Module:
|
class Module:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Dict, Iterable, Optional
|
from typing import Dict, Iterable, Optional
|
||||||
|
|
||||||
from docforge.model.object import DocObject
|
from docforge.models.object import DocObject
|
||||||
|
|
||||||
|
|
||||||
class Module:
|
class Module:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
"""
|
"""
|
||||||
This module defines the DocObject class, the fundamental recursive unit of the
|
This module defines the DocObject class, the fundamental recursive unit of the
|
||||||
doc-forge documentation model. A DocObject represents a single Python entity
|
doc-forge documentation models. A DocObject represents a single Python entity
|
||||||
(class, function, method, or attribute) and its nested members.
|
(class, function, method, or attribute) and its nested members.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ project. It aggregates multiple Module instances into a single named entity.
|
|||||||
|
|
||||||
from typing import Dict, Iterable
|
from typing import Dict, Iterable
|
||||||
|
|
||||||
from docforge.model.module import Module
|
from docforge.models.module import Module
|
||||||
|
|
||||||
|
|
||||||
class Project:
|
class Project:
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Dict, Iterable
|
from typing import Dict, Iterable
|
||||||
|
|
||||||
from docforge.model.module import Module
|
from docforge.models.module import Module
|
||||||
|
|
||||||
|
|
||||||
class Project:
|
class Project:
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
# Renderers Layer
|
# Renderers Layer
|
||||||
|
|
||||||
The `docforge.renderers` package handles the transformation of the internal
|
The `docforge.renderers` package handles the transformation of the internal
|
||||||
documentation model into physical files formatted for specific documentation
|
documentation models into physical files formatted for specific documentation
|
||||||
engines.
|
engines.
|
||||||
|
|
||||||
## Current Implementations
|
## Current Implementations
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ DocRenderer protocol.
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Protocol
|
from typing import Protocol
|
||||||
|
|
||||||
from docforge.model import Project
|
from docforge.models import Project
|
||||||
|
|
||||||
|
|
||||||
class RendererConfig:
|
class RendererConfig:
|
||||||
@@ -16,7 +16,7 @@ class RendererConfig:
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
out_dir: The directory where documentation files should be written.
|
out_dir: The directory where documentation files should be written.
|
||||||
project: The introspected project model to be rendered.
|
project: The introspected project models to be rendered.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, out_dir: Path, project: Project) -> None:
|
def __init__(self, out_dir: Path, project: Project) -> None:
|
||||||
@@ -40,7 +40,7 @@ class DocRenderer(Protocol):
|
|||||||
Generate renderer-specific source files for the given project.
|
Generate renderer-specific source files for the given project.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
project: The project model containing modules and objects.
|
project: The project models containing modules and objects.
|
||||||
out_dir: Target directory for the generated files.
|
out_dir: Target directory for the generated files.
|
||||||
"""
|
"""
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Protocol
|
from typing import Protocol
|
||||||
|
|
||||||
from docforge.model import Project
|
from docforge.models import Project
|
||||||
|
|
||||||
|
|
||||||
class RendererConfig:
|
class RendererConfig:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ compatible with the MkDocs 'material' theme and 'mkdocstrings' extension.
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from docforge.model import Project
|
from docforge.models import Project
|
||||||
|
|
||||||
|
|
||||||
class MkDocsRenderer:
|
class MkDocsRenderer:
|
||||||
@@ -19,10 +19,10 @@ class MkDocsRenderer:
|
|||||||
def generate_sources(self, project: Project, out_dir: Path) -> None:
|
def generate_sources(self, project: Project, out_dir: Path) -> None:
|
||||||
"""
|
"""
|
||||||
Produce a set of Markdown files in the output directory based on the
|
Produce a set of Markdown files in the output directory based on the
|
||||||
provided Project model.
|
provided Project models.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
project: The project model to render.
|
project: The project models to render.
|
||||||
out_dir: Target directory for documentation files.
|
out_dir: Target directory for documentation files.
|
||||||
"""
|
"""
|
||||||
modules = list(project.get_all_modules())
|
modules = list(project.get_all_modules())
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Set
|
from typing import Set
|
||||||
|
|
||||||
from docforge.model import Project, Module
|
from docforge.models import Project, Module
|
||||||
|
|
||||||
|
|
||||||
class MkDocsRenderer:
|
class MkDocsRenderer:
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# Griffe Loader
|
|
||||||
|
|
||||||
::: docforge.loader.griffe_loader
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Loader
|
|
||||||
|
|
||||||
::: docforge.loader
|
|
||||||
3
docs/docforge/loaders/griffe_loader.md
Normal file
3
docs/docforge/loaders/griffe_loader.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Griffe Loader
|
||||||
|
|
||||||
|
::: docforge.loaders.griffe_loader
|
||||||
3
docs/docforge/loaders/index.md
Normal file
3
docs/docforge/loaders/index.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Loaders
|
||||||
|
|
||||||
|
::: docforge.loaders
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Model
|
|
||||||
|
|
||||||
::: docforge.model
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Module
|
|
||||||
|
|
||||||
::: docforge.model.module
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Object
|
|
||||||
|
|
||||||
::: docforge.model.object
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Project
|
|
||||||
|
|
||||||
::: docforge.model.project
|
|
||||||
3
docs/docforge/models/index.md
Normal file
3
docs/docforge/models/index.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Models
|
||||||
|
|
||||||
|
::: docforge.models
|
||||||
3
docs/docforge/models/module.md
Normal file
3
docs/docforge/models/module.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Module
|
||||||
|
|
||||||
|
::: docforge.models.module
|
||||||
3
docs/docforge/models/object.md
Normal file
3
docs/docforge/models/object.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Object
|
||||||
|
|
||||||
|
::: docforge.models.object
|
||||||
3
docs/docforge/models/project.md
Normal file
3
docs/docforge/models/project.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Project
|
||||||
|
|
||||||
|
::: docforge.models.project
|
||||||
16
mkdocs.yml
16
mkdocs.yml
@@ -36,14 +36,14 @@ plugins:
|
|||||||
|
|
||||||
nav:
|
nav:
|
||||||
- Home: docforge/index.md
|
- Home: docforge/index.md
|
||||||
- Loader:
|
- Loaders:
|
||||||
- docforge/loader/index.md
|
- docforge/loaders/index.md
|
||||||
- docforge/loader/griffe_loader.md
|
- docforge/loaders/griffe_loader.md
|
||||||
- Model:
|
- Models:
|
||||||
- docforge/model/index.md
|
- docforge/models/index.md
|
||||||
- docforge/model/module.md
|
- docforge/models/module.md
|
||||||
- docforge/model/object.md
|
- docforge/models/object.md
|
||||||
- docforge/model/project.md
|
- docforge/models/project.md
|
||||||
- Navigation:
|
- Navigation:
|
||||||
- docforge/nav/index.md
|
- docforge/nav/index.md
|
||||||
- docforge/nav/spec.md
|
- docforge/nav/spec.md
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "doc-forge"
|
name = "doc-forge"
|
||||||
version = "0.0.1"
|
version = "0.0.2"
|
||||||
description = "A renderer-agnostic Python documentation compiler"
|
description = "A renderer-agnostic Python documentation compiler"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from docforge import MkDocsRenderer
|
from docforge import MkDocsRenderer
|
||||||
from docforge.model import Project, Module
|
from docforge.models import Project, Module
|
||||||
|
|
||||||
|
|
||||||
def test_mkdocs_file_content(tmp_path: Path):
|
def test_mkdocs_file_content(tmp_path: Path):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from docforge import MkDocsRenderer
|
from docforge import MkDocsRenderer
|
||||||
from docforge.model import Project, Module
|
from docforge.models import Project, Module
|
||||||
|
|
||||||
|
|
||||||
def test_mkdocs_idempotent(tmp_path: Path):
|
def test_mkdocs_idempotent(tmp_path: Path):
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from docforge.loader import GriffeLoader, discover_module_paths
|
from docforge.loaders import GriffeLoader, discover_module_paths
|
||||||
from docforge.renderers.mkdocs import MkDocsRenderer
|
from docforge.renderers.mkdocs import MkDocsRenderer
|
||||||
|
|
||||||
|
|
||||||
@@ -41,21 +41,21 @@ def test_mkdocs_emits_all_modules(tmp_path: Path) -> None:
|
|||||||
# expected = {
|
# expected = {
|
||||||
# 'docforge/cli/main.md',
|
# 'docforge/cli/main.md',
|
||||||
# 'docforge/renderers/index.md',
|
# 'docforge/renderers/index.md',
|
||||||
# 'docforge/loader/index.md',
|
# 'docforge/loaders/index.md',
|
||||||
# 'docforge/model/index.md',
|
# 'docforge/models/index.md',
|
||||||
# 'docforge/nav/index.md',
|
# 'docforge/nav/index.md',
|
||||||
# 'docforge/renderers/mkdocs.md',
|
# 'docforge/renderers/mkdocs.md',
|
||||||
# 'docforge/index.md',
|
# 'docforge/index.md',
|
||||||
# 'docforge/loader/griffe_loader.md',
|
# 'docforge/loaders/griffe_loader.md',
|
||||||
# 'docforge/model/object.md',
|
# 'docforge/models/object.md',
|
||||||
# 'docforge/cli/index.md',
|
# 'docforge/cli/index.md',
|
||||||
# 'docforge/nav/resolver.md',
|
# 'docforge/nav/resolver.md',
|
||||||
# 'docforge/renderers/base.md',
|
# 'docforge/renderers/base.md',
|
||||||
# 'docforge/nav/mkdocs.md',
|
# 'docforge/nav/mkdocs.md',
|
||||||
# 'docforge/nav/spec.md',
|
# 'docforge/nav/spec.md',
|
||||||
# 'docforge/model/module.md',
|
# 'docforge/models/module.md',
|
||||||
# 'docforge/cli/mkdocs.md',
|
# 'docforge/cli/mkdocs.md',
|
||||||
# 'docforge/model/project.md'
|
# 'docforge/models/project.md'
|
||||||
# }
|
# }
|
||||||
missing = expected - emitted
|
missing = expected - emitted
|
||||||
assert not missing, f"Missing markdown files for modules: {missing}"
|
assert not missing, f"Missing markdown files for modules: {missing}"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from docforge import MkDocsRenderer
|
from docforge import MkDocsRenderer
|
||||||
from docforge.model import Project, Module
|
from docforge.models import Project, Module
|
||||||
|
|
||||||
|
|
||||||
def test_mkdocs_directory_structure(tmp_path: Path):
|
def test_mkdocs_directory_structure(tmp_path: Path):
|
||||||
|
|||||||
Reference in New Issue
Block a user