Repository navigation
versions: add support for version checks via pyproject.toml #386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
This file was deleted.
| 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 | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe we add a direct dependency to
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. leaving this here for now: https://github.com/hukkin/tomli?tab=readme-ov-file#building-a-tomlitomllib-compatibility-layer |
||
| 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'") | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
merged
ils.pyandrdm.pyinto this one