Source code for mloq.commands.package

"""Mloq package command implementation."""
from pathlib import Path

import click
from omegaconf import DictConfig, MISSING, OmegaConf

from mloq.command import Command
from mloq.config.param_patch import param
from mloq.files import ASSETS_PATH, file, pyproject_toml


PACKAGE_ASSETS_PATH = ASSETS_PATH / "package"
PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"]
DEFAULT_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10"]
setup_py = file(
    "setup.txt",
    PACKAGE_ASSETS_PATH,
    "Python package installation metadata",
    dst="setup.py",
)
PACKAGE_FILES = [pyproject_toml, setup_py]


[docs]class PackageCMD(Command): """Implement the functionality of the package Command.""" cmd_name = "package" files = tuple(PACKAGE_FILES) LICENSE_CLASSIFIERS = { "MIT": "License :: OSI Approved :: MIT License", "Apache-2.0": "License :: OSI Approved :: Apache Software License", "GPL-3.0": "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "proprietary": "License :: Other/Proprietary License", } disable = param.Boolean(default=None, doc="Disable package command?") pyproject_extra = param.String("", doc="Additional pyproject.toml configuration") project_name = param.String("${globals.project_name}", doc="Select project name") license = param.String("MIT", doc="Project license type") license_classifier = param.String(MISSING, doc="License classifier in setup.py") description = param.String("${globals.description}", doc="Short description of the project") default_branch = param.String(doc="Default branch of the project") project_url = param.String("${globals.project_url}", doc="GitHub project url") owner = param.String("${globals.owner}", doc="Github handle of the project owner") author = param.String(doc="Author(s) of the project") email = param.String(doc="Owner contact email") main_python_version = param.String( "${globals.main_python_version}", doc="Python version for CI, Poetry and Docker", ) python_versions = param.ListSelector( default=DEFAULT_PYTHON_VERSIONS, doc="Supported python versions", objects=PYTHON_VERSIONS, ) use_poetry = param.Boolean( "${globals.use_poetry}", doc="Use poetry to manage dependencies", )
[docs] def parse_config(self) -> DictConfig: """Update the configuration DictConfig with the Command parameters.""" conf = super(PackageCMD, self).parse_config() if OmegaConf.is_missing(conf.package, "license_classifier"): conf.package.license_classifier = self.LICENSE_CLASSIFIERS.get( conf.package.get("license", "proprietary"), "", ) return conf
[docs] def interactive_config(self) -> DictConfig: """Generate the configuration of the project interactively.""" click.echo("Provide the values to generate the packaging files.") return self.parse_config()
[docs] def record_files(self) -> None: """Register the files that will be generated by mloq.""" for _file in self.files: self.record.register_file(file=_file, path=Path())