Skip to content

Commit 810d712

Browse files
committed
Fixed original_error.extensions overriding extensions argument
Replicates graphql/graphql-js@188122b
1 parent 8065221 commit 810d712

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ a query language for APIs created by Facebook.
1212
[![Python 3 Status](https://pyup.io/repos/github/graphql-python/graphql-core/python-3-shield.svg)](https://pyup.io/repos/github/graphql-python/graphql-core/)
1313
[![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
1414

15-
The current version 3.1.6 of GraphQL-core is up-to-date with GraphQL.js version 15.7.1.
15+
The current version 3.1.6 of GraphQL-core is up-to-date with GraphQL.js version 15.7.2.
1616

1717
An extensive test suite with over 2200 unit tests and 100% coverage comprises a
1818
replication of the complete test suite of GraphQL.js, making sure this port is

src/graphql/error/graphql_error.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,10 @@ def __init__(
120120
self.__cause__ = original_error.__cause__
121121
elif original_error.__context__:
122122
self.__context__ = original_error.__context__
123-
if not extensions:
124-
try:
125-
# noinspection PyUnresolvedReferences
126-
extensions = original_error.extensions # type: ignore
127-
except AttributeError:
128-
pass
123+
if extensions is None:
124+
original_extensions = getattr(original_error, "extensions", None)
125+
if isinstance(original_extensions, dict):
126+
extensions = original_extensions
129127
self.extensions = extensions or {}
130128
if not self.__traceback__:
131129
self.__traceback__ = exc_info()[2]

src/graphql/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
version = "3.1.6"
88

9-
version_js = "15.7.1"
9+
version_js = "15.7.2"
1010

1111

1212
_re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(\D*)(\d*)")

tests/error/test_graphql_error.py

+23
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,29 @@ def converts_source_and_positions_to_locations():
129129
assert e.positions == [6]
130130
assert e.locations == [(2, 5)]
131131

132+
def defaults_to_original_error_extension_only_if_arg_is_not_passed():
133+
original_extensions = {"original": "extensions"}
134+
original_error = GraphQLError("original", extensions=original_extensions)
135+
inherited_error = GraphQLError("InheritedError", original_error=original_error)
136+
assert inherited_error.message == "InheritedError"
137+
assert inherited_error.original_error is original_error
138+
assert inherited_error.extensions is original_extensions
139+
140+
own_extensions = {"own": "extensions"}
141+
own_error = GraphQLError(
142+
"OwnError", original_error=original_error, extensions=own_extensions
143+
)
144+
assert own_error.message == "OwnError"
145+
assert own_error.original_error is original_error
146+
assert own_error.extensions is own_extensions
147+
148+
own_empty_error = GraphQLError(
149+
"OwnEmptyError", original_error=original_error, extensions={}
150+
)
151+
assert own_empty_error.message == "OwnEmptyError"
152+
assert own_empty_error.original_error is original_error
153+
assert own_empty_error.extensions == {}
154+
132155
def serializes_to_include_all_standard_fields():
133156
e_short = GraphQLError("msg")
134157
assert str(e_short) == "msg"

0 commit comments

Comments
 (0)