Skip to content

Commit d77ebcb

Browse files
committed
Add version module with "version" string and parsed "version_info"
Replicates graphql/graphql-js@e2fe67e
1 parent 078fa72 commit d77ebcb

File tree

6 files changed

+109
-6
lines changed

6 files changed

+109
-6
lines changed

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ current_version = 1.0.5
33
commit = False
44
tag = False
55

6-
[bumpversion:file:graphql/__init__.py]
6+
[bumpversion:file:graphql/version.py]
77
search = __version__ = "{current_version}"
88
replace = __version__ = "{new_version}"
99

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ a query language for APIs created by Facebook.
1313
[![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
1414

1515
The current version 1.0.5 of GraphQL-core-next is up-to-date with GraphQL.js version
16-
14.3.1. All parts of the API are covered by an extensive test suite of currently 1779
16+
14.3.1. All parts of the API are covered by an extensive test suite of currently 1787
1717
unit tests.
1818

1919

graphql/__init__.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@
3737
- :mod:`graphql.subscription`: Subscribe to data updates.
3838
"""
3939

40-
__version__ = "1.0.5"
41-
__version_js__ = "14.3.1"
40+
# The GraphQL-core-next and GraphQL.js version info.
41+
42+
from .version import version, version_info, version_js, version_info_js
4243

4344
# The primary entry point into fulfilling a GraphQL request.
4445

@@ -384,7 +385,20 @@
384385
find_dangerous_changes,
385386
)
386387

388+
# The GraphQL-core-next version info.
389+
__version__ = version
390+
__version_info__ = version_info
391+
392+
# The GraphQL.js version info.
393+
__version_js__ = version_js
394+
__version_info_js__ = version_info_js
395+
396+
387397
__all__ = [
398+
"version",
399+
"version_info",
400+
"version_js",
401+
"version_info_js",
388402
"graphql",
389403
"graphql_sync",
390404
"GraphQLSchema",

graphql/version.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from typing import NamedTuple
2+
3+
__all__ = ["version", "version_info", "version_js", "version_info_js"]
4+
5+
6+
class VersionInfo(NamedTuple):
7+
major: int
8+
minor: int
9+
micro: int
10+
releaselevel: str
11+
serial: int
12+
13+
def __str__(self):
14+
v = f"{self.major}.{self.minor}.{self.micro}"
15+
level = self.releaselevel
16+
if level and level != "final":
17+
{"alpha": "a", "beta": "b", "candidate": "c"}.get(level, level)
18+
v += level
19+
serial = self.serial
20+
if serial:
21+
v = f"{v}{serial}"
22+
return v
23+
24+
25+
version = "1.0.5"
26+
27+
version_info = VersionInfo(1, 0, 5, "final", 0)
28+
29+
version_js = "14.3.1"
30+
31+
version_info_js = VersionInfo(14, 3, 1, "final", 0)

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from re import search
22
from setuptools import setup, find_packages
33

4-
with open("graphql/__init__.py") as init_file:
5-
version = search('__version__ = "(.*)"', init_file.read()).group(1)
4+
with open("graphql/version.py") as version_file:
5+
version = search('version = "(.*)"', version_file.read()).group(1)
66

77
with open("README.md") as readme_file:
88
readme = readme_file.read()

tests/test_version.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import re
2+
3+
import graphql
4+
from graphql import version, version_info, version_js, version_info_js
5+
6+
_re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(?:(a|b|c)(\d+))?$")
7+
8+
9+
def describe_version():
10+
def test_module_version():
11+
assert graphql.__version__ == version
12+
assert graphql.version == version
13+
14+
def test_module_version_info():
15+
assert graphql.__version_info__ == version_info
16+
assert graphql.version_info == version
17+
18+
def test_module_version_js():
19+
assert graphql.__version_js__ == version_js
20+
assert graphql.version_js == version_js
21+
22+
def test_module_version_info_js():
23+
assert graphql.__version_info_js__ == version_info_js
24+
assert graphql.version_info_js == version_info_js
25+
26+
def test_version():
27+
assert isinstance(version, str)
28+
assert _re_version.match(version)
29+
30+
def test_version_info():
31+
assert isinstance(version_info, tuple)
32+
assert str(version_info) == version
33+
groups = _re_version.match(version).groups()
34+
assert version_info.major == int(groups[0])
35+
assert version_info.minor == int(groups[1])
36+
assert version_info.micro == int(groups[2])
37+
if groups[3] is None:
38+
assert groups[4] is None
39+
else:
40+
assert version_info.releaselevel == groups[3]
41+
assert version_info.serial == int(groups[4])
42+
43+
def test_version_js():
44+
assert isinstance(version_js, str)
45+
assert _re_version.match(version_js)
46+
47+
def test_version_info_js():
48+
assert isinstance(version_info_js, tuple)
49+
assert str(version_info_js) == version_js
50+
groups = _re_version.match(version_js).groups()
51+
assert version_info_js.major == int(groups[0])
52+
assert version_info_js.minor == int(groups[1])
53+
assert version_info_js.micro == int(groups[2])
54+
if groups[3] is None:
55+
assert groups[4] is None
56+
else:
57+
assert version_info_js.releaselevel == groups[3]
58+
assert version_info_js.serial == int(groups[4])

0 commit comments

Comments
 (0)