Skip to content

Commit

Permalink
versions: add support for version checks via pyproject.toml
Browse files Browse the repository at this point in the history
* previously, only `Pipfile` was considered, which only supports
  `pipenv` but not `uv`
  • Loading branch information
max-moser committed Mar 1, 2025
1 parent 79de4ce commit 48957ea
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 60 deletions.
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.

73 changes: 73 additions & 0 deletions invenio_cli/helpers/versions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2022 CERN.
#
# 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 tomllib

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 = tomllib.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'")

0 comments on commit 48957ea

Please sign in to comment.