-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy path_versions.py
More file actions
70 lines (52 loc) · 2.44 KB
/
_versions.py
File metadata and controls
70 lines (52 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""
Utility functions for working with and reasoning about software component versions.
"""
import logging
from importlib.metadata import version
from scyjava._jvm import jimport
from scyjava._types import isjava
_logger = logging.getLogger(__name__)
def get_version(java_class_or_python_package) -> str:
"""
Return the version of a Java class or Python package.
For Python packages, invokes importlib.metadata.version on the given
object's base __module__ or __package__ (before the first dot symbol).
For Java classes, requires org.scijava:scijava-common on the classpath.
The version string is extracted from the given class's associated JAR
artifact (if any), either the embedded Maven POM if the project was built
with Maven, or the JAR manifest's Specification-Version value if it exists.
See org.scijava.VersionUtils.getVersion(Class) for further details.
"""
if isjava(java_class_or_python_package):
# Assume we were given a Java class object.
VersionUtils = jimport("org.scijava.util.VersionUtils")
return str(VersionUtils.getVersion(java_class_or_python_package))
# Assume we were given a Python package name or module.
package_name = None
if hasattr(java_class_or_python_package, "__module__"):
package_name = java_class_or_python_package.__module__
elif hasattr(java_class_or_python_package, "__package__"):
package_name = java_class_or_python_package.__package__
else:
package_name = str(java_class_or_python_package)
return version(package_name.split(".")[0])
def is_version_at_least(actual_version: str, minimum_version: str) -> bool:
"""
Return a boolean on a version comparison.
Requires org.scijava:scijava-common on the classpath.
Returns True if the given actual version is greater than or
equal to the specified minimum version, or False otherwise.
See org.scijava.VersionUtils.compare(String, String) for further details.
"""
VersionUtils = jimport("org.scijava.util.VersionUtils")
return bool(VersionUtils.compare(actual_version, minimum_version) >= 0)
def compare_version(version, java_class_version):
"""
This function is deprecated. Use is_version_at_least instead.
"""
_logger.warning(
"The compare_version function is deprecated. Use is_version_at_least instead."
)
return version != java_class_version and is_version_at_least(
java_class_version, version
)