Skip to content

Commit 82267d3

Browse files
committed
Merge branch 'master' into features/2.0
# Conflicts: # graphene_sqlalchemy/converter.py
2 parents 4a77d88 + 9ed04d4 commit 82267d3

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

graphene_sqlalchemy/converter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
String)
88
from graphene.types.json import JSONString
99

10-
from .fields import SQLAlchemyConnectionField
10+
from .fields import createConnectionField
1111

1212
try:
1313
from sqlalchemy_utils import ChoiceType, JSONType, ScalarListType, TSVectorType
@@ -43,7 +43,7 @@ def dynamic_type():
4343
elif (direction == interfaces.ONETOMANY or
4444
direction == interfaces.MANYTOMANY):
4545
if _type._meta.connection:
46-
return SQLAlchemyConnectionField(_type)
46+
return createConnectionField(_type)
4747
return Field(List(_type))
4848

4949
return Dynamic(dynamic_type)

graphene_sqlalchemy/fields.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,20 @@ def connection_resolver(cls, resolver, connection, model, root, args, context, i
5454

5555
def get_resolver(self, parent_resolver):
5656
return partial(self.connection_resolver, parent_resolver, self.type, self.model)
57+
58+
59+
__connectionFactory = SQLAlchemyConnectionField
60+
61+
62+
def createConnectionField(_type):
63+
return __connectionFactory(_type)
64+
65+
66+
def registerConnectionFieldFactory(factoryMethod):
67+
global __connectionFactory
68+
__connectionFactory = factoryMethod
69+
70+
71+
def unregisterConnectionFieldFactory():
72+
global __connectionFactory
73+
__connectionFactory = SQLAlchemyConnectionField
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from graphene_sqlalchemy.fields import SQLAlchemyConnectionField, registerConnectionFieldFactory, unregisterConnectionFieldFactory
2+
import graphene
3+
4+
def test_register():
5+
class LXConnectionField(SQLAlchemyConnectionField):
6+
@classmethod
7+
def _applyQueryArgs(cls, model, q, args):
8+
return q
9+
10+
@classmethod
11+
def connection_resolver(cls, resolver, connection, model, root, args, context, info):
12+
13+
def LXResolver(root, args, context, info):
14+
iterable = resolver(root, args, context, info)
15+
if iterable is None:
16+
iterable = cls.get_query(model, context, info, args)
17+
18+
# We accept always a query here. All LX-queries can be filtered and sorted
19+
iterable = cls._applyQueryArgs(model, iterable, args)
20+
return iterable
21+
22+
return SQLAlchemyConnectionField.connection_resolver(LXResolver, connection, model, root, args, context, info)
23+
24+
def createLXConnectionField(table):
25+
return LXConnectionField(table, filter=table.filter(), order_by=graphene.List(of_type=table.order_by))
26+
27+
registerConnectionFieldFactory(createLXConnectionField)
28+
unregisterConnectionFieldFactory()

0 commit comments

Comments
 (0)