|
1 | 1 | from __future__ import absolute_import
|
2 | 2 |
|
3 |
| -from functools import partial |
| 3 | +from collections import OrderedDict |
| 4 | +from functools import partial, reduce |
4 | 5 |
|
5 | 6 | from graphene import Field
|
6 | 7 | from graphene.relay import ConnectionField
|
7 | 8 | from graphene.relay.connection import PageInfo
|
8 | 9 | from graphql_relay.connection.arrayconnection import connection_from_list_slice
|
| 10 | +from graphene.types.argument import to_arguments |
9 | 11 |
|
10 | 12 | from .utils import maybe_queryset
|
11 | 13 |
|
@@ -52,8 +54,36 @@ def node_type(self):
|
52 | 54 | def model(self):
|
53 | 55 | return self.node_type._meta.model
|
54 | 56 |
|
| 57 | + @property |
| 58 | + def args(self): |
| 59 | + return to_arguments( |
| 60 | + self._base_args or OrderedDict(), self.default_filter_args |
| 61 | + ) |
| 62 | + |
| 63 | + @args.setter |
| 64 | + def args(self, args): |
| 65 | + self._base_args = args |
| 66 | + |
| 67 | + @property |
| 68 | + def default_filter_args(self): |
| 69 | + return reduce( |
| 70 | + lambda r, kv: r.update({kv[0]: kv[1]._type._of_type()}) or r if hasattr(kv[1], '_type') else r, |
| 71 | + self.fields.items(), |
| 72 | + {} |
| 73 | + ) |
| 74 | + |
| 75 | + @property |
| 76 | + def filter_fields(self): |
| 77 | + return self._type._meta.filter_fields |
| 78 | + |
| 79 | + @property |
| 80 | + def fields(self): |
| 81 | + return self._type._meta.fields |
| 82 | + |
55 | 83 | @classmethod
|
56 | 84 | def get_query(cls, model, info, **args):
|
| 85 | + if args: |
| 86 | + return model.objects().filter(**args) |
57 | 87 | return model.objects()
|
58 | 88 |
|
59 | 89 | @classmethod
|
@@ -84,6 +114,5 @@ def connection_resolver(cls, resolver, connection, model, root, info, **args):
|
84 | 114 | return connection
|
85 | 115 |
|
86 | 116 | def get_resolver(self, parent_resolver):
|
87 |
| - ('??') |
88 | 117 | return partial(self.connection_resolver, parent_resolver, self.type, self.model)
|
89 | 118 |
|
0 commit comments