Skip to content

Commit db23e62

Browse files
committed
2 parents cc89b1d + 351ca7a commit db23e62

File tree

5 files changed

+140
-3
lines changed

5 files changed

+140
-3
lines changed

graphql_server/__init__.py

+8
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,16 @@
1818
from graphql.pyutils import AwaitableOrValue
1919

2020
from .error import HttpQueryError
21+
from .version import version, version_info
22+
23+
# The GraphQL-Server 3 version info.
24+
25+
__version__ = version
26+
__version_info__ = version_info
2127

2228
__all__ = [
29+
"version",
30+
"version_info",
2331
"run_http_query",
2432
"encode_execution_results",
2533
"load_json_body",

graphql_server/version.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import re
2+
from typing import NamedTuple
3+
4+
__all__ = ["version", "version_info"]
5+
6+
7+
version = "2.0.0"
8+
9+
_re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(\D*)(\d*)")
10+
11+
12+
class VersionInfo(NamedTuple):
13+
major: int
14+
minor: int
15+
micro: int
16+
releaselevel: str
17+
serial: int
18+
19+
@classmethod
20+
def from_str(cls, v: str) -> "VersionInfo":
21+
groups = _re_version.match(v).groups() # type: ignore
22+
major, minor, micro = map(int, groups[:3])
23+
level = (groups[3] or "")[:1]
24+
if level == "a":
25+
level = "alpha"
26+
elif level == "b":
27+
level = "beta"
28+
elif level in ("c", "r"):
29+
level = "candidate"
30+
else:
31+
level = "final"
32+
serial = groups[4]
33+
serial = int(serial) if serial else 0
34+
return cls(major, minor, micro, level, serial)
35+
36+
def __str__(self) -> str:
37+
v = f"{self.major}.{self.minor}.{self.micro}"
38+
level = self.releaselevel
39+
if level and level != "final":
40+
v = f"{v}{level[:1]}{self.serial}"
41+
return v
42+
43+
44+
version_info = VersionInfo.from_str(version)

setup.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from re import search
12
from setuptools import setup, find_packages
23

34
install_requires = [
@@ -44,11 +45,17 @@
4445
install_webob_requires + \
4546
install_aiohttp_requires
4647

48+
with open("graphql_server/version.py") as version_file:
49+
version = search('version = "(.*)"', version_file.read()).group(1)
50+
51+
with open("README.md", encoding="utf-8") as readme_file:
52+
readme = readme_file.read()
53+
4754
setup(
4855
name="graphql-server-core",
49-
version="2.0.0",
56+
version=version,
5057
description="GraphQL Server tools for powering your server",
51-
long_description=open("README.md", encoding="utf-8").read(),
58+
long_description=readme,
5259
long_description_content_type="text/markdown",
5360
url="https://github.com/graphql-python/graphql-server-core",
5461
download_url="https://github.com/graphql-python/graphql-server-core/releases",

tests/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"""GraphQL-Server-Core Tests"""
1+
"""GraphQL-Server Tests"""

tests/test_version.py

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import re
2+
3+
import graphql_server
4+
from graphql_server.version import VersionInfo, version, version_info
5+
6+
_re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(?:([abc])(\d+))?$")
7+
8+
9+
def test_create_version_info_from_fields():
10+
v = VersionInfo(1, 2, 3, "alpha", 4)
11+
assert v.major == 1
12+
assert v.minor == 2
13+
assert v.micro == 3
14+
assert v.releaselevel == "alpha"
15+
assert v.serial == 4
16+
17+
18+
def test_create_version_info_from_str():
19+
v = VersionInfo.from_str("1.2.3")
20+
assert v.major == 1
21+
assert v.minor == 2
22+
assert v.micro == 3
23+
assert v.releaselevel == "final"
24+
assert v.serial == 0
25+
v = VersionInfo.from_str("1.2.3a4")
26+
assert v.major == 1
27+
assert v.minor == 2
28+
assert v.micro == 3
29+
assert v.releaselevel == "alpha"
30+
assert v.serial == 4
31+
v = VersionInfo.from_str("1.2.3beta4")
32+
assert v.major == 1
33+
assert v.minor == 2
34+
assert v.micro == 3
35+
assert v.releaselevel == "beta"
36+
assert v.serial == 4
37+
v = VersionInfo.from_str("12.34.56rc789")
38+
assert v.major == 12
39+
assert v.minor == 34
40+
assert v.micro == 56
41+
assert v.releaselevel == "candidate"
42+
assert v.serial == 789
43+
44+
45+
def test_serialize_as_str():
46+
v = VersionInfo(1, 2, 3, "final", 0)
47+
assert str(v) == "1.2.3"
48+
v = VersionInfo(1, 2, 3, "alpha", 4)
49+
assert str(v) == "1.2.3a4"
50+
51+
52+
def test_base_package_has_correct_version():
53+
assert graphql_server.__version__ == version
54+
assert graphql_server.version == version
55+
56+
57+
def test_base_package_has_correct_version_info():
58+
assert graphql_server.__version_info__ is version_info
59+
assert graphql_server.version_info is version_info
60+
61+
62+
def test_version_has_correct_format():
63+
assert isinstance(version, str)
64+
assert _re_version.match(version)
65+
66+
67+
def test_version_info_has_correct_fields():
68+
assert isinstance(version_info, tuple)
69+
assert str(version_info) == version
70+
groups = _re_version.match(version).groups() # type: ignore
71+
assert version_info.major == int(groups[0])
72+
assert version_info.minor == int(groups[1])
73+
assert version_info.micro == int(groups[2])
74+
if groups[3] is None: # pragma: no cover
75+
assert groups[4] is None
76+
else: # pragma: no cover
77+
assert version_info.releaselevel[:1] == groups[3]
78+
assert version_info.serial == int(groups[4])

0 commit comments

Comments
 (0)