Module demo_api.docs.sphinx.source.generate_modules
Script d'auto-découverte des modules Python pour Sphinx.
Ce script parcourt automatiquement le projet et génère les fichiers .rst pour tous les modules Python trouvés.
Functions
def find_python_modules(root_dir: pathlib.Path, exclude_dirs: set = None) ‑> list-
Expand source code
def find_python_modules(root_dir: Path, exclude_dirs: set = None) -> list: """ Trouve tous les modules Python dans le répertoire donné. Args: root_dir: Répertoire racine à explorer exclude_dirs: Dossiers à exclure (ex: __pycache__, .git, etc.) Returns: Liste des modules Python trouvés """ if exclude_dirs is None: exclude_dirs = { "__pycache__", ".git", ".pytest_cache", "docs", "outputs", "templates", } modules = [] for py_file in root_dir.rglob("*.py"): # Ignorer les fichiers dans les dossiers exclus if any(part in exclude_dirs for part in py_file.parts): continue # Ignorer les fichiers __init__.py vides ou les fichiers de test if py_file.name.startswith("test_") or py_file.name == "__init__.py": continue # Convertir le chemin en nom de module relative_path = py_file.relative_to(root_dir) module_name = str(relative_path.with_suffix("")).replace("/", ".") modules.append( {"name": module_name, "path": py_file, "relative_path": relative_path} ) return sorted(modules, key=lambda x: x["name"])Trouve tous les modules Python dans le répertoire donné.
Args
root_dir- Répertoire racine à explorer
exclude_dirs- Dossiers à exclure (ex: pycache, .git, etc.)
Returns
Liste des modules Python trouvés
def generate_index_rst(modules: list, output_dir: pathlib.Path) ‑> None-
Expand source code
def generate_index_rst(modules: list, output_dir: Path) -> None: """ Génère un fichier index.rst avec tous les modules. Args: modules: Liste des modules trouvés output_dir: Répertoire de sortie """ # Grouper les modules par répertoire modules_by_dir = {} for module in modules: dir_path = module["relative_path"].parent if dir_path not in modules_by_dir: modules_by_dir[dir_path] = [] modules_by_dir[dir_path].append(module) # Générer le contenu content = ["Modules API", "=" * 10, ""] for dir_path in sorted(modules_by_dir.keys()): if dir_path == Path("."): section_title = "Modules principaux" else: section_title = f"Modules {dir_path}" content.extend([section_title, "-" * len(section_title), ""]) for module in modules_by_dir[dir_path]: module_name = module["name"] rst_file = module["relative_path"].with_suffix(".rst") content.append(f".. toctree::") content.append(f" :maxdepth: 4") content.append(f"") content.append(f" {rst_file}") content.append("") # Écrire le fichier index index_path = output_dir / "index.rst" index_path.write_text("\n".join(content), encoding="utf-8") print(f"✓ Généré: {index_path}")Génère un fichier index.rst avec tous les modules.
Args
modules- Liste des modules trouvés
output_dir- Répertoire de sortie
def generate_module_rst(module_info: dict, output_dir: pathlib.Path) ‑> None-
Expand source code
def generate_module_rst(module_info: dict, output_dir: Path) -> None: """ Génère un fichier .rst pour un module donné. Args: module_info: Informations sur le module output_dir: Répertoire de sortie pour les fichiers .rst """ module_name = module_info["name"] relative_path = module_info["relative_path"] # Créer le répertoire de destination rst_path = output_dir / relative_path.with_suffix(".rst") rst_path.parent.mkdir(parents=True, exist_ok=True) # Générer le contenu du fichier .rst content = f"""Module {module_name} {"=" * (len(module_name) + 7)} .. automodule:: {module_name} :members: :undoc-members: :show-inheritance: :special-members: __init__ """ # Écrire le fichier rst_path.write_text(content, encoding="utf-8") print(f"✓ Généré: {rst_path}")Génère un fichier .rst pour un module donné.
Args
module_info- Informations sur le module
output_dir- Répertoire de sortie pour les fichiers .rst
def main()-
Expand source code
def main(): """Fonction principale.""" # Définir les chemins project_root = Path(__file__).parent.parent.parent.parent output_dir = Path(__file__).parent / "api" print(f"🔍 Exploration du projet: {project_root}") print(f"📁 Répertoire de sortie: {output_dir}") # Trouver tous les modules Python modules = find_python_modules(project_root) print(f"📦 {len(modules)} modules trouvés:") for module in modules: print(f" - {module['name']}") # Générer les fichiers .rst pour chaque module print("\n📝 Génération des fichiers .rst...") for module in modules: generate_module_rst(module, output_dir) # Générer le fichier index print("\n📋 Génération du fichier index...") generate_index_rst(modules, output_dir) print(f"\n✅ Documentation générée avec succès!") print(f"📖 {len(modules)} modules documentés dans {output_dir}")Fonction principale.