Files
doc-forge/docforge/models/project.py

76 lines
2.0 KiB
Python

"""
Documentation model representing a project.
This module defines the ``Project`` class, the top-level container used by
doc-forge to represent a documented codebase. A ``Project`` aggregates multiple
modules and provides access to them through a unified interface.
"""
from typing import Dict, Iterable
from docforge.models.module import Module
class Project:
"""
Representation of a documentation project.
A ``Project`` serves as the root container for all modules discovered during
introspection. Each module is stored by its dotted import path.
Attributes:
name: Name of the project.
modules: Mapping of module paths to ``Module`` instances.
"""
def __init__(self, name: str) -> None:
"""
Initialize a Project instance.
Args:
name: Name used to identify the documentation project.
"""
self.name = name
self.modules: Dict[str, Module] = {}
def add_module(self, module: Module) -> None:
"""
Register a module in the project.
Args:
module: Module instance to add to the project.
"""
self.modules[module.path] = module
def get_module(self, path: str) -> Module:
"""
Retrieve a module by its dotted path.
Args:
path: Fully qualified dotted module path (for example ``pkg.module``).
Returns:
The corresponding ``Module`` instance.
Raises:
KeyError: If the module does not exist in the project.
"""
return self.modules[path]
def get_all_modules(self) -> Iterable[Module]:
"""
Return all modules contained in the project.
Returns:
An iterable of ``Module`` instances.
"""
return self.modules.values()
def get_module_list(self) -> list[str]:
"""
Return the list of module import paths.
Returns:
A list containing the dotted paths of all modules in the project.
"""
return list(self.modules.keys())