sonntagsgesicht/auxilium

View on GitHub
auxilium/methods/create.py

Summary

Maintainability
B
5 hrs
Test Coverage
# -*- coding: utf-8 -*-

# auxilium
# --------
# Python project for an automated test and deploy toolkit.
#
# Author:   sonntagsgesicht
# Version:  0.2.8, copyright Friday, 14 January 2022
# Website:  https://github.com/sonntagsgesicht/auxilium
# License:  Apache License 2.0 (see LICENSE file)


from os import getcwd, chdir, mkdir
from os.path import basename, join, exists, splitext
from sys import path as sys_path

from ..tools.const import GIT_PATH
from ..tools.docmaintain_tools import docmaintain
from ..tools.dulwich_tools import add_and_commit_git, init_git, clone_git
from ..tools.pip_tools import upgrade, install, requirements, uninstall, \
    rollback
from ..tools.setup_tools import create_project, create_finish
from ..tools.system_tools import create_venv, del_tree


def do(name=None, slogan=None, author=None, email=None, url=None,
       commit=None, path=getcwd(), venv=None, update=None, clone=None,
       env=None, cleanup=None, **kwargs):
    env = env if env and exists(env) else None
    project_path = join(path, name) if name else path
    pkg = basename(project_path)

    if cleanup:
        return uninstall(pkg, venv=env) or rollback(path=path, venv=env)

    code = False
    if not update and not clone:
        # creat project
        project_path = \
            create_project(name, slogan, author, email, url, path=path)
        pkg = basename(project_path)
        code = not project_path.endswith(name) if name else False

        chdir(project_path)
        sys_path.append(project_path)
        code = code or docmaintain(pkg, path=project_path)
    elif clone:
        name, _ = splitext(basename(clone))
        project_path = join(path, name) if name else path
        mkdir(project_path)
        code = code or clone_git(clone, path=project_path, venv=env)
        pkg = name

    if venv:
        # clear virtual environment folder
        del_tree(venv)
        # create virtual environment
        env = create_venv(pkg, venv_path=venv, path=project_path, venv=env)
        # run default update command
        code = code or upgrade(path=project_path, venv=env)
        code = code or requirements(
            path=project_path, freeze_file='', venv=env)
        code = code or install(path=project_path, venv=env)
    else:
        # run default update command (without pip upgrade with .freeze)
        code = code or requirements(path=project_path, venv=env)
        code = code or install(path=project_path, venv=env)

    if commit:
        # init git repo with initial commit
        if not exists(join(project_path, GIT_PATH)):
            code = code or init_git(path=project_path, venv=env)
        code = code or add_and_commit_git(commit, path=project_path, venv=env)

    if not update:
        code = code or create_finish(pkg)
    return code