Source code for pyprec.export

"""This module"""
import logging
from pathlib import Path
import subprocess as sp
from .pyexporter import load_fill_and_export
from .utils.utils import boldface, get_template_path
from pyprec import PACKAGE

logger = logging.getLogger(PACKAGE)


[docs]def create_folder_tree(prefix_folder: Path, source_folder: Path): """Creates the source directory tree. Directory tree is: .. code-block:: text root |-- source_folder # ``src/<pkgname>`` | |-- scripts | |-- utils Parameters ---------- prefix_folder: Path The package root folder. source_folder: Path The folder to create the package source files to. Raises ------- FileExistsError If the source directory already exists. """ prefix_folder.joinpath(".github/workflows").mkdir(parents=True) source_folder.parent.mkdir(parents=True) source_folder.mkdir() source_folder.joinpath("scripts").mkdir() source_folder.joinpath("utils").mkdir()
[docs]def create_package_light(setup: dict): """Light wrapper function to copy template in package destination folder. Parameters ---------- setup: dict The key-value pairs to be inserted in the template fields. """ prefix_folder = setup["prefix_folder"] source_folder = prefix_folder / f"src/{setup['pkgname']}" create_folder_tree(prefix_folder, source_folder) # __init__ files source_folder.joinpath("scripts/__init__.py").touch() source_folder.joinpath("utils/__init__.py").touch() load_fill_and_export("initfile.inc", setup, source_folder / "__init__.py") # setup files load_fill_and_export("pyproject.inc", setup, prefix_folder / "pyproject.toml") load_fill_and_export("setup.inc", setup, prefix_folder / "setup.cfg") # configlog file utils_folder = source_folder / "utils" load_fill_and_export("configlog.inc", setup, utils_folder / "configlog.py") # entry point file script_folder = source_folder / "scripts" load_fill_and_export( "main_script.inc", setup, script_folder / f"{setup['pkgname']}.py" ) # workflows files workflow_folder = prefix_folder / ".github/workflows" load_fill_and_export( "pytest.inc", setup, workflow_folder / f"pytest.yaml" ) load_fill_and_export( "pythonpublish.inc", setup, workflow_folder / f"pythonpublish.yaml" ) # CITATION.cff placeholder load_fill_and_export( "CITATION.inc", setup, prefix_folder / f"CITATION.cff" ) # sphinx docs if setup["should_run_sphinx"]: docs_folder = prefix_folder / "docs" docs_folder.mkdir() project_name = setup["pkgname"] author = setup["author"] version = setup["version"] template_folder = get_template_path("sphinx") cmd = ( f"sphinx-quickstart --sep -p {project_name} -a '{author}' -r {version} " "-l en --makefile --ext-autodoc --ext-viewcode " f"--extensions sphinxcontrib.napoleon -t {template_folder} {docs_folder}" ) try: cmd_output = sp.run(cmd, shell=True, capture_output=True, check=True) except sp.CalledProcessError as err: logger.error("".join(["\n[ERROR](pyprec) ", err.stderr.decode("utf-8")])) raise logger.debug("Quickstarting sphinx documentation ... \n") logger.debug(cmd_output.stdout.decode("utf-8")) logger.debug("Run command `make apidoc` in the docs directory to produce automatic function documentation.") # read the docs yaml load_fill_and_export( "readthedocs.inc", setup, prefix_folder / f".readthedocs.yml" ) msg = boldface( f"{setup['pkgname']} package successfully created at {prefix_folder}" ) logger.info(msg)