Skip to content

Commit 6eb0bfd

Browse files
committed
[v0.1a1] Update version & readme.
1 parent 22be073 commit 6eb0bfd

File tree

2 files changed

+93
-2
lines changed

2 files changed

+93
-2
lines changed

README.md

+92-1
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,100 @@ class RealHumanBean(models.Model):
164164
R.Human.CanBe(Human)
165165
```
166166

167+
## Relay Support (WIP)
168+
- [x] Node
169+
- [x] Connection & Edges
170+
- [ ] Mutations
171+
172+
At this point, Epoxy has rudimentary `relay` support. Enable support for `Relay` by mixing in the `RelayMixin` using
173+
`TypeResolver.Mixin`.
174+
175+
```python
176+
from epoxy.contrib.relay import RelayMixin
177+
from epoxy.contrib.relay.data_source.memory import InMemoryDataSource
178+
179+
# Epoxy provides an "in memory" data source, that implements `epoxy.contrib.relay.data_source.BaseDataSource`,
180+
# which can be used to easily create a mock data source. In practice, you'd implement your own data source.
181+
data_source = InMemoryDataSource()
182+
183+
R = TypeRegistry()
184+
Relay = R.Mixin(RelayMixin, data_source)
185+
```
186+
187+
### Node Definition
188+
Once `RelayMixin` has been mixed into the Registry, things can subclass `Node` automatically!
189+
190+
```python
191+
192+
class Pet(R.Implements[Relay.Node]):
193+
name = R.String
194+
195+
```
196+
197+
### Connection Definition & `NodeField`
198+
Connections can be defined upon any object type. Here we'll make a `Query` root node that provides a connection
199+
to a list of pets & a node field to resolve an indivudal node.
200+
201+
```python
202+
203+
class Query(R.ObjectType):
204+
pets = Relay.Connection('Pet', R.Pet) # The duplicate 'Pet' definition is just temporary and will be removed.
205+
node = Relay.NodeField
206+
207+
```
208+
209+
### Adding some data!
210+
Let's add some pets to the `data_source` and query them!
211+
212+
```python
213+
214+
# Schema has to be defined so that all thunks are resolved before we can use `Pet` as a container.
215+
Schema = R.Schema(R.Query)
216+
217+
pet_names = ["Max", "Buddy", "Charlie", "Jack", "Cooper", "Rocky"]
218+
219+
for i, pet_name in enumerate(pet_names, 1):
220+
data_source.add(Pet(id=i, name=pet_name))
221+
222+
```
223+
224+
225+
### Running Relay Connection Query:
226+
227+
```python
228+
229+
result = graphql(Schema, '''
230+
{
231+
pets(first: 5) {
232+
edges {
233+
node {
234+
id
235+
name
236+
}
237+
cursor
238+
}
239+
pageInfo {
240+
hasPreviousPage
241+
hasNextPage
242+
startCursor
243+
endCursor
244+
}
245+
}
246+
node(id: "UGV0OjU=") {
247+
id
248+
... on Pet {
249+
name
250+
}
251+
}
252+
}
253+
''')
254+
```
255+
256+
167257
## Mutations (Coming Soon)
168258

169-
Epoxy also supports defining mutations:
259+
Epoxy also supports defining mutations. Making a Mutation a Relay mutation is as simple as changing `R.Mutation` to
260+
`Relay.Mutation`.
170261

171262

172263
```python

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
setup(
1313
name='graphql-epoxy',
14-
version='0.1a0',
14+
version='0.1a1',
1515
description='GraphQL implementation for Python',
1616
url='https://github.com/graphql-python/graphql-core',
1717
download_url='https://github.com/graphql-python/graphql-core/releases',

0 commit comments

Comments
 (0)