Skip to content

Commit 6bcd393

Browse files
author
Maxim Avanov
committed
Release 0.2.1
1 parent e444469 commit 6bcd393

File tree

5 files changed

+18
-14
lines changed

5 files changed

+18
-14
lines changed

README.rst

+1-4
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,7 @@ servers with GraphQL API
8888
def call_server(droid_id: ID) -> HeroAndDroid:
8989
response = requests.post(
9090
url='https://<graphql-server-url>/',
91-
json={ "operationName": q.name
92-
, "variables": q.get_input_vars(Input(droid_id=droid_id))
93-
, "query": q.query
94-
},
91+
json=q.request_payload(Input(droid_id=droid_id)),
9592
headers={ 'Content-Type': 'application/json'
9693
, 'Accept': 'application/json'
9794
}

graphql_dsl/dsl.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from collections import defaultdict
22
from enum import Enum
3-
from typing import NamedTuple, Type, Any, Union, Callable, Mapping, Tuple, get_type_hints, Iterable, Optional
3+
from typing import NamedTuple, Type, Any, Union, Callable, Mapping, Tuple, get_type_hints, Iterable, Optional, TypeVar
44

55
import inflection
66
from pyrsistent import pmap, pvector
@@ -104,12 +104,22 @@ class ResolvedBinding(NamedTuple):
104104
is_optional: bool
105105

106106

107+
T = TypeVar('T')
108+
109+
107110
class GraphQLQuery(NamedTuple):
108111
query: str
109112
name: str
110-
get_input_vars: Callable[..., Mapping[str, Any]]
113+
get_input_vars: Callable[[T], Mapping[str, Any]]
111114
get_result: Callable[[Mapping[str, Any]], Any]
112115

116+
def request_payload(self, query_input: Optional[T] = None) -> Mapping[str, Any]:
117+
in_ = self.get_input_vars(query_input) if query_input else {}
118+
return { "operationName": self.name
119+
, "variables": in_
120+
, "query": self.query
121+
}
122+
113123

114124
class GraphQLQueryConstructor(NamedTuple):
115125
query_types: PMap[Type[Any], Any] = pmap()

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
# ----------------------------
2222

2323
setup(name='graphql-dsl',
24-
version='0.2.0',
24+
version='0.2.1',
2525
description='Compose GraphQL queries by composing Python types!',
2626
long_description=README,
2727
classifiers=[

tests/examples/test_github_example.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@ class Input(NamedTuple):
4848

4949
q = GQL( QUERY | ListIssues
5050
| WITH | Input
51-
| PASS | Input.owner * TO * ListIssues.repository
51+
| PASS | Input.owner * TO * ListIssues.repository
5252
& Input.name * TO * ListIssues.repository
5353
& Input.numFirstIssues * TO * Repository.issues * AS * 'first'
5454
)
5555

56-
assert q.query == result.strip()
56+
assert q.query == result.strip()
57+
assert isinstance(q.request_payload(Input('avanov', 'graphql-dsl', 5)), dict)

tests/test_tokenizer.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,7 @@ class CountriesQuery(NamedTuple):
3232
with vcr.use_cassette(str(VCR_FIXTURES_PATH / 'countries.yaml')):
3333
response = requests.post(
3434
url='https://countries.trevorblades.com/',
35-
json={
36-
"operationName": graphql_query.name,
37-
"variables": {},
38-
"query": graphql_query.query,
39-
},
35+
json=graphql_query.request_payload(),
4036
headers={
4137
'Content-Type': 'application/json',
4238
'Accept': 'application/json',

0 commit comments

Comments
 (0)