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,
)