diff --git a/CHANGELOG b/CHANGELOG index 6164bf2..2603dd4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,19 @@ All notable changes to this code base will be documented in this file, in every released version. +Version NEXT +============ + +:Released: FUTURE +:Maintainer: UNKNOWN <unknown> + +Additions +--------- + +* Add ‘parse_version_info’ to parse a version string to a version info + tuple. + + Version 2.6.0 ============= diff --git a/README.rst b/README.rst index 1073910..ecc95e1 100644 --- a/README.rst +++ b/README.rst @@ -43,6 +43,20 @@ This module provides just couple of functions, main of which are: False >>> semver.format_version(3, 4, 5, 'pre.2', 'build.4') '3.4.5-pre.2+build.4' + >>> version_parts = semver.parse("3.4.5-pre.2+build.4") + >>> version_parts == { + ... 'major': 3, 'minor': 4, 'patch': 5, + ... 'prerelease': 'pre.2', 'build': 'build.4'} + True + >>> version_info = semver.parse_version_info("3.4.5-pre.2+build.4") + >>> version_info + VersionInfo(major=3, minor=4, patch=5, prerelease='pre.2', build='build.4') + >>> version_info.major + 3 + >>> version_info > (1, 0) + True + >>> version_info < (3, 5) + True >>> semver.bump_major("3.4.5") '4.0.0' >>> semver.bump_minor("3.4.5") diff --git a/semver.py b/semver.py index ead1628..d9d9950 100644 --- a/semver.py +++ b/semver.py @@ -1,8 +1,11 @@ """ Python helper for Semantic Versioning (http://semver.org/) """ + +import collections import re + __version__ = '2.6.0' __author__ = 'Konstantine Rybnikov' __author_email__ = 'k-bx@k-bx.com' @@ -28,13 +31,28 @@ def parse(version): if match is None: raise ValueError('%s is not valid SemVer string' % version) - verinfo = match.groupdict() + version_parts = match.groupdict() - verinfo['major'] = int(verinfo['major']) - verinfo['minor'] = int(verinfo['minor']) - verinfo['patch'] = int(verinfo['patch']) + version_parts['major'] = int(version_parts['major']) + version_parts['minor'] = int(version_parts['minor']) + version_parts['patch'] = int(version_parts['patch']) - return verinfo + return version_parts + + +VersionInfo = collections.namedtuple( + 'VersionInfo', 'major minor patch prerelease build') + +def parse_version_info(version): + """ + Parse version string to a VersionInfo instance. + """ + parts = parse(version) + version_info = VersionInfo( + parts['major'], parts['minor'], parts['patch'], + parts['prerelease'], parts['build']) + + return version_info def compare(ver1, ver2):