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