diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 6fe2314e..85375c85 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,11 +1,11 @@ [bumpversion] -current_version = 1.1.0 +current_version = 1.1.1 commit = False tag = False [bumpversion:file:src/graphql/version.py] -search = __version__ = "{current_version}" -replace = __version__ = "{new_version}" +search = version = "{current_version}" +replace = version = "{new_version}" [bumpversion:file:docs/conf.py] search = version = release = u'{current_version}' diff --git a/README.md b/README.md index 130a6b58..b0f28a7e 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ a query language for APIs created by Facebook. [![Python 3 Status](https://pyup.io/repos/github/graphql-python/graphql-core-next/python-3-shield.svg)](https://pyup.io/repos/github/graphql-python/graphql-core-next/) [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) -The current version 1.1.0 of GraphQL-core-next is up-to-date with GraphQL.js version -14.4.0. All parts of the API are covered by an extensive test suite of currently 1882 +The current version 1.1.1 of GraphQL-core-next is up-to-date with GraphQL.js version +14.4.0. All parts of the API are covered by an extensive test suite of currently 1885 unit tests. Development will be continued with the new distribution name GraphQL-core from now on. diff --git a/docs/conf.py b/docs/conf.py index ac0da833..1fc6cb7e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -61,7 +61,7 @@ # The short X.Y version. # version = u'1.1' # The full version, including alpha/beta/rc tags. -version = release = u'1.1.0' +version = release = u'1.1.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/poetry.lock b/poetry.lock index 45ba36ea..2f1d0388 100644 --- a/poetry.lock +++ b/poetry.lock @@ -563,7 +563,7 @@ description = "Virtual Python Environment builder" name = "virtualenv" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "16.6.1" +version = "16.6.2" [[package]] category = "dev" @@ -643,6 +643,6 @@ typed-ast = ["18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", typing = ["38566c558a0a94d6531012c8e917b1b8518a41e418f7f15f00e129cc80162ad3", "53765ec4f83a2b720214727e319607879fec4acde22c4fbb54fa2604e79e44ce", "84698954b4e6719e912ef9a42a2431407fe3755590831699debda6fba92aac55"] typing-extensions = ["2ed632b30bb54fc3941c382decfd0ee4148f5c591651c9272473fea2c6397d95", "b1edbbf0652660e32ae780ac9433f4231e7339c7f9a8057d0f042fcbcea49b87", "d8179012ec2c620d3791ca6fe2bf7979d979acdbef1fca0bc56b37411db682ed"] urllib3 = ["b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", "dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"] -virtualenv = ["b7335cddd9260a3dd214b73a2521ffc09647bde3e9457fcca31dc3be3999d04a", "d28ca64c0f3f125f59cabf13e0a150e1c68e5eea60983cc4395d88c584495783"] +virtualenv = ["861bbce3a418110346c70f5c7a696fdcf23a261424e1d28aa4f9362fc2ccbc19", "ba8ce6a961d842320681fb90a3d564d0e5134f41dacd0e2bae7f02441dde2d52"] wcwidth = ["3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", "f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"] zipp = ["4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a", "8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec"] diff --git a/pyproject.toml b/pyproject.toml index d561430f..e3edf2bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "graphql-core-next" -version = "1.1.0" +version = "1.1.1" description = """ GraphQL-core-next is a Python port of GraphQL.js, the JavaScript reference implementation for GraphQL.""" diff --git a/src/graphql/version.py b/src/graphql/version.py index f4bbb596..fa211598 100644 --- a/src/graphql/version.py +++ b/src/graphql/version.py @@ -1,9 +1,25 @@ +import re from typing import NamedTuple from warnings import warn __all__ = ["version", "version_info", "version_js", "version_info_js"] +version = "1.1.1" + +version_js = "14.4.0" + + +warn( + "GraphQL-core-next has been discontinued." + " It is now released as GraphQL-core v3 and newer.", + DeprecationWarning, +) + + +_re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(\D*)(\d*)") + + class VersionInfo(NamedTuple): major: int minor: int @@ -11,6 +27,23 @@ class VersionInfo(NamedTuple): releaselevel: str serial: int + @classmethod + def from_str(cls, v: str) -> "VersionInfo": + groups = _re_version.match(v).groups() # type: ignore + major, minor, micro = map(int, groups[:3]) + level = (groups[3] or "")[:1] + if level == "a": + level = "alpha" + elif level == "b": + level = "beta" + elif level in ("c", "r"): + level = "candidate" + else: + level = "final" + serial = groups[4] + serial = int(serial) if serial else 0 + return cls(major, minor, micro, level, serial) + def __str__(self): v = f"{self.major}.{self.minor}.{self.micro}" level = self.releaselevel @@ -19,16 +52,6 @@ def __str__(self): return v -version = "1.1.0" - -version_info = VersionInfo(1, 1, 0, "final", 0) - -version_js = "14.4.0" - -version_info_js = VersionInfo(14, 4, 0, "final", 0) +version_info = VersionInfo.from_str(version) -warn( - "GraphQL-core-next has been discontinued." - " It is now released as GraphQL-core v3 and newer.", - DeprecationWarning, -) +version_info_js = VersionInfo.from_str(version_js) diff --git a/tests/test_version.py b/tests/test_version.py index 7cffbc36..dc345f03 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -1,58 +1,107 @@ import re import graphql -from graphql import version, version_info, version_js, version_info_js +from graphql.version import ( + VersionInfo, + version, + version_info, + version_js, + version_info_js, +) _re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(?:(a|b|c)(\d+))?$") def describe_version(): - def test_module_version(): - assert graphql.__version__ == version - assert graphql.version == version - - def test_module_version_info(): - assert graphql.__version_info__ == version_info - assert graphql.version_info == version_info - - def test_module_version_js(): - assert graphql.__version_js__ == version_js - assert graphql.version_js == version_js - - def test_module_version_info_js(): - assert graphql.__version_info_js__ == version_info_js - assert graphql.version_info_js == version_info_js - - def test_version(): - assert isinstance(version, str) - assert _re_version.match(version) - - def test_version_info(): - assert isinstance(version_info, tuple) - assert str(version_info) == version - groups = _re_version.match(version).groups() - assert version_info.major == int(groups[0]) - assert version_info.minor == int(groups[1]) - assert version_info.micro == int(groups[2]) - if groups[3] is None: - assert groups[4] is None - else: - assert version_info.releaselevel[:1] == groups[3] - assert version_info.serial == int(groups[4]) - - def test_version_js(): - assert isinstance(version_js, str) - assert _re_version.match(version_js) - - def test_version_info_js(): - assert isinstance(version_info_js, tuple) - assert str(version_info_js) == version_js - groups = _re_version.match(version_js).groups() - assert version_info_js.major == int(groups[0]) - assert version_info_js.minor == int(groups[1]) - assert version_info_js.micro == int(groups[2]) - if groups[3] is None: - assert groups[4] is None - else: - assert version_info_js.releaselevel[:1] == groups[3] - assert version_info_js.serial == int(groups[4]) + def describe_version_info_class(): + def create_version_info_from_fields(): + v = VersionInfo(1, 2, 3, "alpha", 4) + assert v.major == 1 + assert v.minor == 2 + assert v.micro == 3 + assert v.releaselevel == "alpha" + assert v.serial == 4 + + def create_version_info_from_str(): + v = VersionInfo.from_str("1.2.3") + assert v.major == 1 + assert v.minor == 2 + assert v.micro == 3 + assert v.releaselevel == "final" + assert v.serial == 0 + v = VersionInfo.from_str("1.2.3a4") + assert v.major == 1 + assert v.minor == 2 + assert v.micro == 3 + assert v.releaselevel == "alpha" + assert v.serial == 4 + v = VersionInfo.from_str("1.2.3beta4") + assert v.major == 1 + assert v.minor == 2 + assert v.micro == 3 + assert v.releaselevel == "beta" + assert v.serial == 4 + v = VersionInfo.from_str("12.34.56rc789") + assert v.major == 12 + assert v.minor == 34 + assert v.micro == 56 + assert v.releaselevel == "candidate" + assert v.serial == 789 + + def serialize_as_str(): + v = VersionInfo(1, 2, 3, "final", 0) + assert str(v) == "1.2.3" + v = VersionInfo(1, 2, 3, "alpha", 4) + assert str(v) == "1.2.3a4" + + def describe_graphql_core_version(): + def base_package_has_correct_version(): + assert graphql.__version__ == version + assert graphql.version == version + + def base_package_has_correct_version_info(): + assert graphql.__version_info__ is version_info + assert graphql.version_info is version_info + + def version_has_correct_format(): + assert isinstance(version, str) + assert _re_version.match(version) + + def version_info_has_correct_fields(): + assert isinstance(version_info, tuple) + assert str(version_info) == version + groups = _re_version.match(version).groups() + assert version_info.major == int(groups[0]) + assert version_info.minor == int(groups[1]) + assert version_info.micro == int(groups[2]) + if groups[3] is None: + assert groups[4] is None + else: + assert version_info.releaselevel[:1] == groups[3] + assert version_info.serial == int(groups[4]) + + def describe_graphql_js_version(): + def base_package_has_correct_version_js(): + assert graphql.__version_js__ == version_js + assert graphql.version_js == version_js + + def base_package_has_correct_version_info_js(): + assert graphql.__version_info_js__ is version_info_js + assert graphql.version_info_js is version_info_js + + def version_js_has_correct_format(): + assert isinstance(version_js, str) + assert _re_version.match(version_js) + + def version_info_js_has_correct_fields(): + assert isinstance(version_info_js, tuple) + assert str(version_info_js) == version_js + groups = _re_version.match(version_js).groups() + assert version_info_js.major == int(groups[0]) + assert version_info_js.minor == int(groups[1]) + assert version_info_js.micro == int(groups[2]) + if groups[3] is None: + assert groups[4] is None + else: + assert version_info_js.releaselevel[:1] == groups[3] + assert version_info_js.serial == int(groups[4])