Skip to content

Commit 9ed04d4

Browse files
authored
Merge pull request #47 from labsolutionlu/ConnectionFactory
Create SQLAlchemyConnectionField through a factory method
2 parents cf2ba9c + 073dc55 commit 9ed04d4

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
@@ -8,7 +8,7 @@
88
from graphene.relay import is_node
99
from graphene.types.json import JSONString
1010

11-
from .fields import SQLAlchemyConnectionField
11+
from .fields import createConnectionField
1212

1313
try:
1414
from sqlalchemy_utils import ChoiceType, JSONType, ScalarListType, TSVectorType
@@ -44,7 +44,7 @@ def dynamic_type():
4444
elif (direction == interfaces.ONETOMANY or
4545
direction == interfaces.MANYTOMANY):
4646
if is_node(_type):
47-
return SQLAlchemyConnectionField(_type)
47+
return createConnectionField(_type)
4848
return Field(List(_type))
4949

5050
return Dynamic(dynamic_type)

graphene_sqlalchemy/fields.py

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

4545
def get_resolver(self, parent_resolver):
4646
return partial(self.connection_resolver, parent_resolver, self.type, self.model)
47+
48+
49+
__connectionFactory = SQLAlchemyConnectionField
50+
51+
52+
def createConnectionField(_type):
53+
return __connectionFactory(_type)
54+
55+
56+
def registerConnectionFieldFactory(factoryMethod):
57+
global __connectionFactory
58+
__connectionFactory = factoryMethod
59+
60+
61+
def unregisterConnectionFieldFactory():
62+
global __connectionFactory
63+
__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)