csemver is the object orientied optimized Version of semver. It is much more consistent because you only need one object for all operations.
pip install csemver
- Arithmetic comprehensions with
<,<=,==,!=,>=,>
- Arithmetic additions with
+,+=
- Access to specific parts (major, minor, patch, prerelease, build) through index operator
To increase the different versions csemver provides five methods
incMajor(incBy=1)
incMinor(incBy=1)
incPatch(incBy=1)
incPrerelease(incBy=1)
incBuild(incBy=1)
If needed, you can chain the first three method calls: a.incMajor(x).incMinor(y).incPatch(y)
. Attention: The order matters because an increment of major resets minor and an minor increment resets the patch version.
from csemver import csemver as Version
a = Version();
print(a)
a.incMajor();
print(a)
a.incMinor();
print(a)
a.incPatch();
print(a)
foo@bar:~$ python test.py
0.1.0
1.0.0
1.1.0
1.1.1
from csemver import csemver as Version
a = Version("2.1.5");
b = Version("1.1.1");
print(a+b);
b += Version("0.1.1");
print(b);
3.1.1
1.2.1
Note: The addition respects semver rules. Therefore the resulting versions are 3.1.1 and 1.2.1 rather than 3.2.6 and 1.2.2
To overwrite the current Version just set a new Semver-String for csemver.number
from csemver import csemver as Version
a = Version();
print(a)
a.number ="1.0.0-pre+build.1";
# Python 2.7: a.setNumber("1.0.0-pre+build.1")
print(a)
foo@bar:~$ python test.py
0.1.0
1.0.0-pre+build.1
from csemver import csemver as Version
a = Version(); # defaults to 0.1.0
a['major'] = 2
print(a)
a['minor'] = 2
print(a)
a['patch'] = 1
print(a)
a['prerelease'] = "dev"
print(a)
a['build'] = "build0"
print(a)
a['build'] = None
print(a)
2.1.0
2.2.0
2.2.1
2.2.1-dev
2.2.1-dev+build0
2.2.1-dev
Delete the number
property to reset the Version to 0.1.0
from csemver import csemver as Version
a = Version("1.0.0");
print(a)
del a.number
# Python 2.7: a.delNumber()
print(a)
foo@bar:~$ python test.py
1.0.0
0.1.0
You can compare csemver instances with >, >=, ==, !=, <=, <
from csemver import csemver as Version
a = Version("1.1.1")
b = Version("1.1.1")
repr(a)
repr(b)
print(a<b)
b.incPatch()
print(b)
print(a<b)
print(a<"1.1.2")
foo@bar:~$ python test.py
Version<1.1.1> instance at 0x00000159D2061BA8
Version<1.1.1> instance at 0x00000159D2061DD8
False
1.1.2
True
True
If you wish you can retrieve a view on the different version parts with keys()
and values()
:
from csemver import csemver as Version
a = Version("1.1.1")
vals = a.values()
print(vals)
a['major'] = 3
print(vals)
odict_values([1, 1, 1, None, None])
odict_values([3, 1, 1, None, None])
Note: All code examples import csemver like this from csemver import csemver as Version
before using Version(...)
.
Plain version:
a = Version("1.0.0")
for i in zip(a.keys(),a): # Use only 'for i in a' if you don't need the keys
print(i)
With prerelease:
a = Version("1.0.0-pre")
for i in zip(a.keys(),a):
print(i)
With build-tag:
Attention: Iteration stops at first NONE-ENTRY
a = Version("1.0.0+build")
for i in zip(a.keys(),a):
print(i)
Complete string:
a = Version("1.0.0-rc0+build0")
for i in zip(a.keys(),a):
print(i)
Output: (additional print calls were ommitted in source)
Plain version:
('major', 1)
('minor', 0)
('patch', 0)
With prerelease:
('major', 1)
('minor', 0)
('patch', 0)
('prerelease', 'pre')
ATTENTION: Iteration stops at first NONE-ENTRY
('major', 1)
('minor', 0)
('patch', 0)
Complete string:
('major', 1)
('minor', 0)
('patch', 0)
('prerelease', 'rc0')
('build', 'build0')