Skip to content

Commit 719fcba

Browse files
authored
Make parse_version work in utils.py itself. (#2474)
1 parent 7aa1331 commit 719fcba

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
@@ -1126,6 +1126,58 @@ def strip_string(value, max_length=None):
11261126
return value
11271127

11281128

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+
11291181
def _is_contextvars_broken():
11301182
# type: () -> bool
11311183
"""
@@ -1520,58 +1572,6 @@ def is_sentry_url(hub, url):
15201572
)
15211573

15221574

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-
15751575
if PY37:
15761576

15771577
def nanosecond_time():

0 commit comments

Comments
 (0)