Source code for stouputils.continuous_delivery.stubs

""" This module contains utilities for generating stub files using stubgen.

- generate_stubs: Generate stub files for a Python package using stubgen
- stubs_full_routine: Generate stub files for a Python package

"""

# Imports
import os
from collections.abc import Callable

from ..decorators import LogLevels, handle_error


[docs] def generate_stubs( package_name: str, extra_args: str = "--include-docstrings --include-private", ) -> int: """ Generate stub files for a Python package using stubgen. Note: stubgen generates stubs in the 'out' directory by default in the current working directory. Args: package_name (str): Name of the package to generate stubs for. extra_args (str): Extra arguments to pass to stubgen. Defaults to "--include-docstrings --include-private". Returns: int: 0 if successful, non-zero otherwise. """ try: from mypy.stubgen import main as stubgen_main except ImportError as e: raise ImportError("mypy is required for generate_stubs function. Please install it via 'pip install mypy'.") from e try: stubgen_main(["-p", package_name, *extra_args.split()]) return 0 except Exception: return 1
[docs] def clean_stubs_directory(output_directory: str, package_name: str) -> None: """ Clean the stubs directory by deleting all .pyi files. Args: output_directory (str): Directory to clean. package_name (str): Package name subdirectory. Only cleans output_directory/package_name. """ target_dir: str = os.path.join(output_directory, package_name) if os.path.exists(target_dir): for root, _, files in os.walk(target_dir): for file in files: if file.endswith(".pyi"): os.remove(os.path.join(root, file))
[docs] @handle_error(message="Error while doing the stubs full routine", error_log=LogLevels.ERROR_TRACEBACK) def stubs_full_routine( package_name: str, output_directory: str = "typings", extra_args: str = "--include-docstrings --include-private", clean_before: bool = False, generate_stubs_function: Callable[[str, str], int] = generate_stubs, clean_stubs_function: Callable[[str, str], None] = clean_stubs_directory, ) -> None: """ Generate stub files for a Python package using stubgen. Note: stubgen generates stubs in the 'out' directory by default in the current working directory. Args: package_name (str): Name of the package to generate stubs for. output_directory (str): Directory to clean before generating stubs. Defaults to "typings". This parameter is used for cleaning the directory before stub generation. extra_args (str): Extra arguments to pass to stubgen. Defaults to "--include-docstrings --include-private". clean_before (bool): Whether to clean the output directory before generating stubs. Defaults to False. generate_stubs_function (Callable[[str, str], int]): Function to generate stubs. Defaults to :func:`generate_stubs`. clean_stubs_function (Callable[[str], None]): Function to clean the stubs directory. Defaults to :func:`clean_stubs_directory`. Raises: Exception: If stub generation fails. """ if clean_before: clean_stubs_function(output_directory, package_name) extra_args += f" -o {output_directory}" if generate_stubs_function(package_name, extra_args) != 0: raise Exception(f"Error while generating stubs for {package_name}")