Skip to content

Commit 6723799

Browse files
authored
Fix NameError on parse_version with eventlet (#2532)
1 parent 861a33d commit 6723799

File tree

1 file changed

+52
-52
lines changed

1 file changed

+52
-52
lines changed

sentry_sdk/utils.py

+52-52
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,58 @@ def strip_string(value, max_length=None):
11271127
return value
11281128

11291129

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+
11301182
def _is_contextvars_broken():
11311183
# type: () -> bool
11321184
"""
@@ -1521,58 +1573,6 @@ def is_sentry_url(hub, url):
15211573
)
15221574

15231575

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-
15761576
def _generate_installed_modules():
15771577
# type: () -> Iterator[Tuple[str, str]]
15781578
try:

0 commit comments

Comments
 (0)