semvercomp
Implementation of a Version
object with comparison capabilities and tag validation following semver conventions.
Installation
pip install semvercomp
Usage
Classes
Version(major=0 : int, minor=0 : int, patch=0 : int, pre_release="" : str, patch="" : str, has_v=False : str)
Class Version
represents a version tag following semver conventions.
A version tag is structured the following way:
X.Y.Z-pre+build
Value | Name | Description |
---|---|---|
X |
Major |
Version when you make incompatible API changes |
Y |
Minor |
Version when you add functionality in a backwards-compatible manner |
Z |
Patch |
Version when you make backwards-compatible bug fixes |
pre |
Pre Release |
Version pre-release tag |
build |
Build |
Version build tag |
Source: Semantic Versioning 2.0.0
- Public Properties
Key | Value | Type |
---|---|---|
has_v |
bool |
Flag for preceding v or V in version tag |
major |
int |
Major member |
minor |
int |
Minor member |
patch |
int |
Patch member |
pre_release |
str |
Pre Release member |
build |
str |
Build member |
- Instance of Version
from semvercomp.Version import Version
ver = Version(1, 0, 0, 'beta', '20191224')
print(str(ver))
# 1.0.0-beta+20191224
- Creating a Version object from a version string:
from semvercomp.Version import Version
str_v = Version()
str_v.parse_version_number('v1.0.0-beta')
# str_v.major == 1
# str_v.minor == 0
# str_v.patch == 0
# str_v.has_v == True
# str_v.pre_release == 'beta'
Comparison of Version Objects
Version
class implements __gt__
, __lt__
and __eq__
built-in methods to implement comparison.
Equal
from semvercomp.Version import Version
a = Version(1, 0, 0)
b = Version(1, 0, 0)
print(a == b) # True
Greater
from semvercomp.Version import Version
a = Version(1, 1, 0)
b = Version(1, 0, 0)
print(a > b) # True
Lower
from semvercomp.Version import Version
a = Version(0, 1, 0)
b = Version(1, 0, 0)
print(a < b) # True
Validation
It is possible to validate and gather the different members of a version tag using validate version
from semvercomp.validators
.
validate_version(version: str): (parts: dict(), is_ok: bool)
Will return a tuple where, the first element is a dictionary with the properties of the given version tag destructured.
The second element in the tuple is a boolean flag that stands as the validation result.
from semvercomp.validators import validate_version
ver_str = 'v1.0.22'
(parts, is_ok) = validate_version(ver_str)
print(parts) # {'has_v': True, 'major': 1, 'minor': 0, 'patch': 22, 'pre_release': None, 'build': None}
print(is_ok) # True
Utils
to_version_list(coll: iterable): Version[]
Create an array of Version objects from an iterable of version tags as strings.
from semvercomp.utils import to_version_list
all = [
'1.0.0-beta',
'0.1.0+1234',
'33.22.3'
]
versions = to_version_list(all)
Development
Requirements
- pyenv
- pipenv
- Visual Studio Code Recommended
Debugging
- Debugging tests
Tests for this package are written with
pytest
. The following json, is an example of the.vscode/settings.json
:
{
"python.pythonPath": /* Your Python Binary Address*/,
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pytestEnabled": true
}
Testing
- Running unit tests
# from repository root directory
pytest
- Running test coverage
# from repository root directory
pytest --cov=semvercomp tests/
# or with html report
pytest --cov-report html --cov=semvercomp tests/