From 5bf12a49ce1e5044a7a3311ee8c9b25f9b15a510 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Thu, 25 Jul 2019 10:48:23 +0200 Subject: [PATCH] Add {month_short} part fixes #6 --- src/pycalver/patterns.py | 76 +++++++++++++++++++++------------------- src/pycalver/version.py | 63 +++++++++++++++++---------------- test/test_patterns.py | 19 ++++++++++ 3 files changed, 90 insertions(+), 68 deletions(-) diff --git a/src/pycalver/patterns.py b/src/pycalver/patterns.py index f3c6f49..5aca46d 100644 --- a/src/pycalver/patterns.py +++ b/src/pycalver/patterns.py @@ -85,37 +85,38 @@ COMPOSITE_PART_PATTERNS = { PART_PATTERNS = { - 'year' : r"\d{4}", - 'month' : r"(?:0[0-9]|1[0-2])", - 'build_no' : r"\d{4,}", - 'pep440_tag': r"(?:a|b|dev|rc|post)?\d*", - 'tag' : r"(?:alpha|beta|dev|rc|post|final)", - 'yy' : r"\d{2}", - 'yyyy' : r"\d{4}", - 'quarter' : r"[1-4]", - 'iso_week' : r"(?:[0-4]\d|5[0-3])", - 'us_week' : r"(?:[0-4]\d|5[0-3])", - 'dom' : r"(0[1-9]|[1-2][0-9]|3[0-1])", - 'doy' : r"(?:[0-2]\d\d|3[0-5][0-9]|36[0-6])", - 'MAJOR' : r"\d+", - 'MINOR' : r"\d+", - 'MM' : r"\d{2,}", - 'MMM' : r"\d{3,}", - 'MMMM' : r"\d{4,}", - 'MMMMM' : r"\d{5,}", - 'PATCH' : r"\d+", - 'PP' : r"\d{2,}", - 'PPP' : r"\d{3,}", - 'PPPP' : r"\d{4,}", - 'PPPPP' : r"\d{5,}", - 'bid' : r"\d{4,}", - 'BID' : r"[1-9]\d*", - 'BB' : r"[1-9]\d{1,}", - 'BBB' : r"[1-9]\d{2,}", - 'BBBB' : r"[1-9]\d{3,}", - 'BBBBB' : r"[1-9]\d{4,}", - 'BBBBBB' : r"[1-9]\d{5,}", - 'BBBBBBB' : r"[1-9]\d{6,}", + 'year' : r"\d{4}", + 'month' : r"(?:0[0-9]|1[0-2])", + 'month_short': r"(?:1[0-2]|[1-9])", + 'build_no' : r"\d{4,}", + 'pep440_tag' : r"(?:a|b|dev|rc|post)?\d*", + 'tag' : r"(?:alpha|beta|dev|rc|post|final)", + 'yy' : r"\d{2}", + 'yyyy' : r"\d{4}", + 'quarter' : r"[1-4]", + 'iso_week' : r"(?:[0-4]\d|5[0-3])", + 'us_week' : r"(?:[0-4]\d|5[0-3])", + 'dom' : r"(0[1-9]|[1-2][0-9]|3[0-1])", + 'doy' : r"(?:[0-2]\d\d|3[0-5][0-9]|36[0-6])", + 'MAJOR' : r"\d+", + 'MINOR' : r"\d+", + 'MM' : r"\d{2,}", + 'MMM' : r"\d{3,}", + 'MMMM' : r"\d{4,}", + 'MMMMM' : r"\d{5,}", + 'PATCH' : r"\d+", + 'PP' : r"\d{2,}", + 'PPP' : r"\d{3,}", + 'PPPP' : r"\d{4,}", + 'PPPPP' : r"\d{5,}", + 'bid' : r"\d{4,}", + 'BID' : r"[1-9]\d*", + 'BB' : r"[1-9]\d{1,}", + 'BBB' : r"[1-9]\d{2,}", + 'BBBB' : r"[1-9]\d{3,}", + 'BBBBB' : r"[1-9]\d{4,}", + 'BBBBBB' : r"[1-9]\d{5,}", + 'BBBBBBB' : r"[1-9]\d{6,}", } @@ -129,12 +130,13 @@ FULL_PART_FORMATS = { # NOTE (mb 2019-01-04): since release is optional, it # is treates specially in version.format # 'release' : "-{tag}", - 'month' : "{month:02}", - 'build_no': "{bid}", - 'iso_week': "{iso_week:02}", - 'us_week' : "{us_week:02}", - 'dom' : "{dom:02}", - 'doy' : "{doy:03}", + 'month' : "{month:02}", + 'month_short': "{month}", + 'build_no' : "{bid}", + 'iso_week' : "{iso_week:02}", + 'us_week' : "{us_week:02}", + 'dom' : "{dom:02}", + 'doy' : "{doy:03}", # depricated 'pep440_version': "{year}{month:02}.{BID}{pep440_tag}", 'version' : "v{year}{month:02}.{bid}{release}", diff --git a/src/pycalver/version.py b/src/pycalver/version.py index 76c9a3c..5bdad87 100644 --- a/src/pycalver/version.py +++ b/src/pycalver/version.py @@ -21,37 +21,38 @@ TODAY = dt.datetime.utcnow().date() PATTERN_PART_FIELDS = { - 'year' : 'year', - 'month' : 'month', - 'pep440_tag': 'tag', - 'tag' : 'tag', - 'yy' : 'year', - 'yyyy' : 'year', - 'quarter' : 'quarter', - 'iso_week' : 'iso_week', - 'us_week' : 'us_week', - 'dom' : 'dom', - 'doy' : 'doy', - 'MAJOR' : 'major', - 'MINOR' : 'minor', - 'MM' : 'minor', - 'MMM' : 'minor', - 'MMMM' : 'minor', - 'MMMMM' : 'minor', - 'PP' : 'patch', - 'PPP' : 'patch', - 'PPPP' : 'patch', - 'PPPPP' : 'patch', - 'PATCH' : 'patch', - 'build_no' : 'bid', - 'bid' : 'bid', - 'BID' : 'bid', - 'BB' : 'bid', - 'BBB' : 'bid', - 'BBBB' : 'bid', - 'BBBBB' : 'bid', - 'BBBBBB' : 'bid', - 'BBBBBBB' : 'bid', + 'year' : 'year', + 'month' : 'month', + 'month_short': 'month', + 'pep440_tag' : 'tag', + 'tag' : 'tag', + 'yy' : 'year', + 'yyyy' : 'year', + 'quarter' : 'quarter', + 'iso_week' : 'iso_week', + 'us_week' : 'us_week', + 'dom' : 'dom', + 'doy' : 'doy', + 'MAJOR' : 'major', + 'MINOR' : 'minor', + 'MM' : 'minor', + 'MMM' : 'minor', + 'MMMM' : 'minor', + 'MMMMM' : 'minor', + 'PP' : 'patch', + 'PPP' : 'patch', + 'PPPP' : 'patch', + 'PPPPP' : 'patch', + 'PATCH' : 'patch', + 'build_no' : 'bid', + 'bid' : 'bid', + 'BID' : 'bid', + 'BB' : 'bid', + 'BBB' : 'bid', + 'BBBB' : 'bid', + 'BBBBB' : 'bid', + 'BBBBBB' : 'bid', + 'BBBBBBB' : 'bid', } diff --git a/test/test_patterns.py b/test/test_patterns.py index dfb31d4..df51aa3 100644 --- a/test/test_patterns.py +++ b/test/test_patterns.py @@ -53,6 +53,25 @@ def test_re_pattern_parts(part_name, line, expected): assert result_val == expected, (part_name, line) +PATTERN_CASES = [ + (r"v{year}.{month}.{MINOR}" , "v2017.11.1" , "v2017.11.1"), + (r"v{year}.{month}.{MINOR}" , "v2017.07.12", "v2017.07.12"), + (r"v{year}.{month_short}.{MINOR}", "v2017.11.1" , "v2017.11.1"), + (r"v{year}.{month_short}.{MINOR}", "v2017.7.12" , "v2017.7.12"), +] + + +@pytest.mark.parametrize("pattern_str, line, expected", PATTERN_CASES) +def test_patterns(pattern_str, line, expected): + pattern_re = patterns.compile_pattern(pattern_str) + result = pattern_re.search(line) + if result is None: + assert expected is None, (pattern_str, line) + else: + result_val = result.group(0) + assert result_val == expected, (pattern_str, line) + + CLI_MAIN_FIXTURE = """ @click.group() @click.version_option(version="v201812.0123-beta")