Source code for babelizer.render

"""Render a new babelized project."""

from __future__ import annotations

import datetime
import os

import git

from babelizer._cookiecutter import cookiecutter
from babelizer._datadir import get_template_dir
from babelizer._files.bmi_py import render as render_bmi
from babelizer._files.gitignore import render as render_gitignore
from babelizer._files.init_py import render as render_init
from babelizer._files.lib_init_py import render as render_lib_init
from babelizer._files.license_rst import render as render_license
from babelizer.config import BabelConfig
from babelizer.errors import OutputDirExistsError


[docs] def render( babel_config: BabelConfig, output: str, template: str | None = None, clobber: bool = False, version: str = "0.1", make_pretty: bool = False, ) -> str: """Generate a babelized library. Parameters ---------- babel_config : BabelConfig The configuration used to babelize the library. output : str Name of the directory that will be the new repository. template : str, optional Path (or URL) to the cookiecutter template to use. clobber : bool, optional If a like-named repository already exists, overwrite it. version : str, optional Version of babelized library. make_pretty : bool, optional If black and isort are available, run them over the generated project. Returns ------- str Path to babelized library Raises ------ OutputDirExistsError Raised if output directory exists and clobber is not set. """ if template is None: template = get_template_dir() context = { "files": { "_bmi.py": render_bmi(babel_config), "__init__.py": render_init(babel_config), "lib/__init__.py": render_lib_init(babel_config), ".gitignore": render_gitignore(babel_config), "LICENSE.rst": render_license(babel_config), }, "now": datetime.datetime.now(), "package_version": version, } | {k: babel_config[k] for k in babel_config} if os.path.exists(output): raise OutputDirExistsError(output) cookiecutter(template, context=context, output_dir=output) path = os.path.realpath(output) with open(os.path.join(path, "babel.toml"), "w") as fp: babel_config.dump(fp, fmt="toml") git.Repo.init(path) return path