@@ -1126,6 +1126,58 @@ def strip_string(value, max_length=None):
1126
1126
return value
1127
1127
1128
1128
1129
+ def parse_version (version ):
1130
+ # type: (str) -> Optional[Tuple[int, ...]]
1131
+ """
1132
+ Parses a version string into a tuple of integers.
1133
+ This uses the parsing loging from PEP 440:
1134
+ https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
1135
+ """
1136
+ VERSION_PATTERN = r""" # noqa: N806
1137
+ v?
1138
+ (?:
1139
+ (?:(?P<epoch>[0-9]+)!)? # epoch
1140
+ (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment
1141
+ (?P<pre> # pre-release
1142
+ [-_\.]?
1143
+ (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
1144
+ [-_\.]?
1145
+ (?P<pre_n>[0-9]+)?
1146
+ )?
1147
+ (?P<post> # post release
1148
+ (?:-(?P<post_n1>[0-9]+))
1149
+ |
1150
+ (?:
1151
+ [-_\.]?
1152
+ (?P<post_l>post|rev|r)
1153
+ [-_\.]?
1154
+ (?P<post_n2>[0-9]+)?
1155
+ )
1156
+ )?
1157
+ (?P<dev> # dev release
1158
+ [-_\.]?
1159
+ (?P<dev_l>dev)
1160
+ [-_\.]?
1161
+ (?P<dev_n>[0-9]+)?
1162
+ )?
1163
+ )
1164
+ (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
1165
+ """
1166
+
1167
+ pattern = re .compile (
1168
+ r"^\s*" + VERSION_PATTERN + r"\s*$" ,
1169
+ re .VERBOSE | re .IGNORECASE ,
1170
+ )
1171
+
1172
+ try :
1173
+ release = pattern .match (version ).groupdict ()["release" ] # type: ignore
1174
+ release_tuple = tuple (map (int , release .split ("." )[:3 ])) # type: Tuple[int, ...]
1175
+ except (TypeError , ValueError , AttributeError ):
1176
+ return None
1177
+
1178
+ return release_tuple
1179
+
1180
+
1129
1181
def _is_contextvars_broken ():
1130
1182
# type: () -> bool
1131
1183
"""
@@ -1520,58 +1572,6 @@ def is_sentry_url(hub, url):
1520
1572
)
1521
1573
1522
1574
1523
- def parse_version (version ):
1524
- # type: (str) -> Optional[Tuple[int, ...]]
1525
- """
1526
- Parses a version string into a tuple of integers.
1527
- This uses the parsing loging from PEP 440:
1528
- https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
1529
- """
1530
- VERSION_PATTERN = r""" # noqa: N806
1531
- v?
1532
- (?:
1533
- (?:(?P<epoch>[0-9]+)!)? # epoch
1534
- (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment
1535
- (?P<pre> # pre-release
1536
- [-_\.]?
1537
- (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
1538
- [-_\.]?
1539
- (?P<pre_n>[0-9]+)?
1540
- )?
1541
- (?P<post> # post release
1542
- (?:-(?P<post_n1>[0-9]+))
1543
- |
1544
- (?:
1545
- [-_\.]?
1546
- (?P<post_l>post|rev|r)
1547
- [-_\.]?
1548
- (?P<post_n2>[0-9]+)?
1549
- )
1550
- )?
1551
- (?P<dev> # dev release
1552
- [-_\.]?
1553
- (?P<dev_l>dev)
1554
- [-_\.]?
1555
- (?P<dev_n>[0-9]+)?
1556
- )?
1557
- )
1558
- (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
1559
- """
1560
-
1561
- pattern = re .compile (
1562
- r"^\s*" + VERSION_PATTERN + r"\s*$" ,
1563
- re .VERBOSE | re .IGNORECASE ,
1564
- )
1565
-
1566
- try :
1567
- release = pattern .match (version ).groupdict ()["release" ] # type: ignore
1568
- release_tuple = tuple (map (int , release .split ("." )[:3 ])) # type: Tuple[int, ...]
1569
- except (TypeError , ValueError , AttributeError ):
1570
- return None
1571
-
1572
- return release_tuple
1573
-
1574
-
1575
1575
if PY37 :
1576
1576
1577
1577
def nanosecond_time ():
0 commit comments