From 98e83c4361211bd745eae4a17905d562f86eaed7 Mon Sep 17 00:00:00 2001 From: Ben Finney <ben+python@benfinney.id.au> Date: Tue, 18 Oct 2016 23:59:54 +1100 Subject: [PATCH 1/4] =?UTF-8?q?Add=20documentation=20examples=20for=20?= =?UTF-8?q?=E2=80=98semver.parse=E2=80=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.rst b/README.rst index 1073910..a9c9eab 100644 --- a/README.rst +++ b/README.rst @@ -43,6 +43,11 @@ 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 >>> semver.bump_major("3.4.5") '4.0.0' >>> semver.bump_minor("3.4.5") From 94b478badf70b01ef02411b435278f9cf86e010e Mon Sep 17 00:00:00 2001 From: Ben Finney <ben+python@benfinney.id.au> Date: Wed, 19 Oct 2016 00:00:21 +1100 Subject: [PATCH 2/4] Rename version parts binding for clarity. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The “version info” meaning already conventionally means the tuple of version components, like ‘sys.version_info’. Rename the mapping to avoid this meaning. --- semver.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/semver.py b/semver.py index ead1628..7baf57a 100644 --- a/semver.py +++ b/semver.py @@ -28,13 +28,13 @@ 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 def compare(ver1, ver2): From 6f95ca74d5dfac4b9c6586c674789c4268028720 Mon Sep 17 00:00:00 2001 From: Ben Finney <ben+python@benfinney.id.au> Date: Wed, 19 Oct 2016 00:03:01 +1100 Subject: [PATCH 3/4] Add a function to parse a version string to a version info tuple. --- README.rst | 9 +++++++++ semver.py | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/README.rst b/README.rst index a9c9eab..ecc95e1 100644 --- a/README.rst +++ b/README.rst @@ -48,6 +48,15 @@ This module provides just couple of functions, main of which are: ... '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 7baf57a..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' @@ -37,6 +40,21 @@ def parse(version): 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): def nat_cmp(a, b): def convert(text): From fbeef3845f23eb036e6fa5df4a7a30159e6ff5d4 Mon Sep 17 00:00:00 2001 From: Ben Finney <ben+python@benfinney.id.au> Date: Wed, 19 Oct 2016 00:04:55 +1100 Subject: [PATCH 4/4] Document the new feature in the change log. --- CHANGELOG | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 =============