Source code for invenio_cli.commands.packages

# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2021 CERN.
# Copyright (C) 2022 Graz University of Technology.
#
# Invenio-Cli is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.

"""Invenio module to ease the creation and management of applications."""

from os import listdir

from ..helpers.process import ProcessResponse
from .steps import CommandStep


[docs]class PackagesCommands(object): """Local installation commands."""
[docs] @staticmethod def install_packages(packages, log_file=None): """Steps to install Python packages. It is a class method since it does not require any configuration. """ prefix = ["pipenv", "run"] cmd = prefix + ["pip", "install"] for package in packages: cmd.extend(["-e", package]) steps = [ CommandStep( cmd=cmd, env={"PIPENV_VERBOSITY": "-1"}, message="Installing python dependencies...", log_file=log_file, ) ] return steps
[docs] @staticmethod def outdated_packages(): """Steps to show outdated packages. It is a class method since it does not require any configuration. """ cmd = ["pipenv", "update", "--outdated"] steps = [ CommandStep( cmd=cmd, env={"PIPENV_VERBOSITY": "-1"}, message="Checking outdated packages...", ) ] return steps
[docs] @staticmethod def update_packages(): """Steps to update all Python packages. It is a class method since it does not require any configuration. """ cmd = ["pipenv", "update"] steps = [ CommandStep( cmd=cmd, env={"PIPENV_VERBOSITY": "-1"}, message="Updating package(s)...", ) ] return steps
[docs] @staticmethod def update_package_new_version(package, version): """Update invenio-app-rdm version. It is a class method since it does not require any configuration. """ prefix = ["pipenv"] app = prefix + ["install", package + version] steps = [ CommandStep( cmd=app, env={"PIPENV_VERBOSITY": "-1"}, message=f"Updating {package} to version {version}...", ) ] return steps
[docs] @staticmethod def install_locked_dependencies(pre, dev): """Install dependencies from Pipfile.lock using sync.""" # NOTE: sync has no interactive process feedback cmd = ["pipenv", "sync"] if pre: cmd += ["--pre"] if dev: cmd += ["--dev"] steps = [ CommandStep( cmd=cmd, env={"PIPENV_VERBOSITY": "-1"}, message="Installing python dependencies... Please be " + "patient, this operation might take some time...", ) ] return steps
[docs] @staticmethod def lock(pre, dev): """Steps to lock Python dependencies.""" cmd = ["pipenv", "lock"] if pre: cmd += ["--pre"] if dev: cmd += ["--dev"] steps = [ CommandStep( cmd=cmd, env={"PIPENV_VERBOSITY": "-1"}, message="Locking python dependencies...", ) ] return steps
[docs] @staticmethod def is_locked(): """Checks if the dependencies have been locked.""" locked = "Pipfile.lock" in listdir(".") if not locked: return ProcessResponse( error="Dependencies were not locked. " + "Please run `invenio-cli packages lock`.", status_code=1, ) return ProcessResponse( output="Dependencies are locked", status_code=0, )