Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
..
Copyright (C) 2019-2024 CERN.
Copyright (C) 2019-2021 Northwestern University.
Copyright (C) 2025 TU Wien.

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.

Changes
=======

Version <next>

- versions: consider `pyproject.toml` when checking `App-{RDM,ILS}` dependency versions

Version 1.6.0 (released 2025-02-28)

- packages: allow use of either `pipenv` or `uv` as python package manager
Expand Down
2 changes: 1 addition & 1 deletion invenio_cli/commands/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"""Invenio module to ease the creation and management of applications."""

from ..helpers.docker_helper import DockerHelper
from ..helpers.rdm import rdm_version
from ..helpers.versions import rdm_version
from .packages import PackagesCommands
from .services import ServicesCommands
from .steps import FunctionStep
Expand Down
2 changes: 1 addition & 1 deletion invenio_cli/commands/requirements.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from ..helpers.docker_helper import DockerHelper
from ..helpers.process import ProcessResponse, run_cmd
from ..helpers.rdm import rdm_version
from ..helpers.versions import rdm_version
from .steps import FunctionStep


Expand Down
3 changes: 1 addition & 2 deletions invenio_cli/commands/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@
from invenio_cli.helpers.env import env

from ..helpers.docker_helper import DockerHelper
from ..helpers.ils import ils_version
from ..helpers.process import ProcessResponse
from ..helpers.rdm import rdm_version
from ..helpers.versions import ils_version, rdm_version
from .commands import Commands
from .services_health import HEALTHCHECKS, ServicesHealthCommands
from .steps import CommandStep, FunctionStep
Expand Down
28 changes: 0 additions & 28 deletions invenio_cli/helpers/ils.py

This file was deleted.

28 changes: 0 additions & 28 deletions invenio_cli/helpers/rdm.py

This file was deleted.

74 changes: 74 additions & 0 deletions invenio_cli/helpers/versions.py

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merged ils.py and rdm.py into this one

Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2022 CERN.
# Copyright (C) 2025 TU Wien.
#
# Invenio 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 CLI dependencies helper."""

import os
import re

import tomli

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tomllib is part of the standard lib starting with python 3.11, but until then we can use tomli which is a dependency from somewhere (pipfile?)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we add a direct dependency to tomllib with a Python version specifier? On my machine I get just a toml dependency when e.g. running on Python 3.9:

toml v0.10.2
└── pipfile v0.0.2 [requires: toml *]
    └── invenio-cli v1.6.0 [requires: pipfile >=0.0.2]

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right, i actually forgot that you can add dependencies for specific python versions only

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from packaging.requirements import Requirement
from pipfile import Pipfile

_version_pattern = re.compile(r"[0-9]*\.[0-9]*\.[0-9]*")


def _parse_version(version):
"""Parse a version identifier into a list of numbers."""
groups = _version_pattern.search(version)
if groups:
return [int(v) for v in groups.group(0).split(".")]
else:
return None


def _from_pipfile(dep_name):
"""Parse the stated dependency from the ``Pipfile``."""
parsed = Pipfile.load(filename="./Pipfile")
version = (parsed.data["default"].get(dep_name, {}).get("version", ""),)
return _parse_version(version)


def _from_pyproject_toml(dep_name):
"""Parse the stated dependency from ``pyproject.toml``."""
with open("./pyproject.toml", "rb") as toml_file:
parsed = tomli.load(toml_file)

dependencies = [Requirement(d) for d in parsed["project"]["dependencies"]]
app_rdms = [d for d in dependencies if d.name == "invenio-app-rdm"]
if not app_rdms:
return None

# Get the first concrete positive version specifier
v, *_ = [s for s in app_rdms[0].specifier if not s.operator.startswith("!")]
return _parse_version(v.version)


def rdm_version():
"""Return the latest RDM version."""
if os.path.isfile("./Pipfile"):
return _from_pipfile("invenio-app-rdm")

elif os.path.isfile("./pyproject.toml"):
return _from_pyproject_toml("invenio-app-rdm")

else:
raise FileNotFoundError("Found neither 'Pipfile' nor 'pyproject.toml'")


def ils_version():
"""Return the latest ILS version."""
if os.path.isfile("./Pipfile"):
return _from_pipfile("invenio-app-ils")

elif os.path.isfile("./pyproject.toml"):
return _from_pyproject_toml("invenio-app-ils")

else:
raise FileNotFoundError("Found neither 'Pipfile' nor 'pyproject.toml'")