Skip to content

Commit f12e4e5

Browse files
authored
fix: properly store advanced version_info data (#1920)
* fix: properly store advanced version_info data * fix: fix deprecated alternative name
1 parent 4b84447 commit f12e4e5

File tree

2 files changed

+52
-15
lines changed

2 files changed

+52
-15
lines changed

discord/__main__.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,9 @@ def show_version() -> None:
4444

4545
version_info = discord.version_info
4646
entries.append(
47-
"- py-cord v{0.major}.{0.minor}.{0.micro}-{0.release_level}".format(
48-
version_info
49-
)
47+
"- py-cord v{0.major}.{0.minor}.{0.micro}-{0.releaselevel}".format(version_info)
5048
)
51-
if version_info.release_level != "final":
49+
if version_info.releaselevel != "final":
5250
pkg = pkg_resources.get_distribution("py-cord")
5351
if pkg:
5452
entries.append(f" - py-cord pkg_resources: v{pkg.version}")

discord/_version.py

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
"""
2525
from __future__ import annotations
2626

27+
import datetime
2728
import re
2829
import warnings
29-
from datetime import date
3030
from importlib.metadata import PackageNotFoundError, version
3131

32+
from ._typed_dict import TypedDict
33+
3234
__all__ = ("__version__", "VersionInfo", "version_info")
3335

3436
from typing import Literal, NamedTuple
@@ -56,20 +58,54 @@
5658
)
5759

5860

61+
class AdvancedVersionInfo(TypedDict):
62+
serial: int
63+
build: int | None
64+
commit: str | None
65+
date: datetime.date | None
66+
67+
5968
class VersionInfo(NamedTuple):
6069
major: int
6170
minor: int
6271
micro: int
63-
release_level: Literal["alpha", "beta", "candidate", "final"]
64-
serial: int
65-
build: int | None = None
66-
commit: str | None = None
67-
date: date | None = None
72+
releaselevel: Literal["alpha", "beta", "candidate", "final"]
73+
74+
# We can't set instance attributes on a NamedTuple, so we have to use a
75+
# global variable to store the advanced version info.
76+
@property
77+
def advanced(self) -> AdvancedVersionInfo:
78+
return _advanced
79+
80+
@advanced.setter
81+
def advanced(self, value: object) -> None:
82+
global _advanced
83+
_advanced = value
84+
85+
@property
86+
@deprecated("releaselevel", "2.4")
87+
def release_level(self) -> Literal["alpha", "beta", "candidate", "final"]:
88+
return self.releaselevel
6889

6990
@property
70-
@deprecated("release_level", "2.3")
71-
def releaselevel(self) -> Literal["alpha", "beta", "candidate", "final"]:
72-
return self.release_level
91+
@deprecated('.advanced["serial"]', "2.4")
92+
def serial(self) -> int:
93+
return self.advanced["serial"]
94+
95+
@property
96+
@deprecated('.advanced["build"]', "2.4")
97+
def build(self) -> int | None:
98+
return self.advanced["build"]
99+
100+
@property
101+
@deprecated('.advanced["commit"]', "2.4")
102+
def commit(self) -> str | None:
103+
return self.advanced["commit"]
104+
105+
@property
106+
@deprecated('.advanced["date"]', "2.4")
107+
def date(self) -> datetime.date | None:
108+
return self.advanced["date"]
73109

74110

75111
version_regex = re.compile(
@@ -97,7 +133,7 @@ def releaselevel(self) -> Literal["alpha", "beta", "candidate", "final"]:
97133
raise RuntimeError("Invalid release level")
98134

99135
if (raw_date := raw_info["date"] or raw_info["date1"]) is not None:
100-
date_info = date(
136+
date_info = datetime.date(
101137
int(raw_date[:4]),
102138
int(raw_date[4:6]),
103139
int(raw_date[6:]),
@@ -109,7 +145,10 @@ def releaselevel(self) -> Literal["alpha", "beta", "candidate", "final"]:
109145
major=int(raw_info["major"] or 0) or None,
110146
minor=int(raw_info["minor"] or 0) or None,
111147
micro=int(raw_info["patch"] or 0) or None,
112-
release_level=level_info,
148+
releaselevel=level_info,
149+
)
150+
151+
_advanced = AdvancedVersionInfo(
113152
serial=raw_info["serial"],
114153
build=int(raw_info["build"] or 0) or None,
115154
commit=raw_info["commit"],

0 commit comments

Comments
 (0)