diff options
author | 0dminnimda <0dminnimda@gmail.com> | 2023-01-11 00:25:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-10 22:25:15 +0100 |
commit | 17fa2640293ac264788a404efc9441afff5129d7 (patch) | |
tree | 0c8fd06cd651fd9467ad7af4fd95117ddbee75ee | |
parent | 069794816423948a3dd7cc3365cf969d44fc9326 (diff) | |
download | cython-17fa2640293ac264788a404efc9441afff5129d7.tar.gz |
Clean up `build_hex_version` (GH-5209)
-rw-r--r-- | Cython/Utils.py | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/Cython/Utils.py b/Cython/Utils.py index 0f4a636f1..e7d26f5bf 100644 --- a/Cython/Utils.py +++ b/Cython/Utils.py @@ -611,19 +611,23 @@ def raise_error_if_module_name_forbidden(full_module_name): def build_hex_version(version_string): """ - Parse and translate '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX). + Parse and translate public version identifier like '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX). + + SEE: https://peps.python.org/pep-0440/#public-version-identifiers """ - # First, parse '4.12a1' into [4, 12, 0, 0xA01]. + # Parse '4.12a1' into [4, 12, 0, 0xA01] + # And ignore .dev, .pre and .post segments digits = [] release_status = 0xF0 - for digit in re.split('(\D+)', version_string): - if digit in ('a', 'b', 'rc'): - release_status = {'a': 0xA0, 'b': 0xB0, 'rc': 0xC0}[digit] + for segment in re.split(r'(\D+)', version_string): + if segment in ('a', 'b', 'rc'): + release_status = {'a': 0xA0, 'b': 0xB0, 'rc': 0xC0}[segment] digits = (digits + [0, 0])[:3] # 1.2a1 -> 1.2.0a1 - elif digit in ('.dev', '.pre', '.post'): - break # ignore '.dev0' / '.post0' in hex version - elif digit != '.': - digits.append(int(digit)) + elif segment in ('.dev', '.pre', '.post'): + break # break since those are the last segments + elif segment != '.': + digits.append(int(segment)) + digits = (digits + [0] * 3)[:4] digits[3] += release_status |