Skip to content

Commit 6dca279

Browse files
authored
Add class property connection to SQLAlchemyObjectType (#263)
Currently to get the default connection of a `SQLAlchemyObjectType`, you have to go through `_meta`. For example, `PetType._meta.connection`. This adds a public way to get it.
1 parent 631513f commit 6dca279

File tree

5 files changed

+20
-8
lines changed

5 files changed

+20
-8
lines changed

graphene_sqlalchemy/converter.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def dynamic_type():
4242
**field_kwargs
4343
)
4444
elif direction in (interfaces.ONETOMANY, interfaces.MANYTOMANY):
45-
if _type._meta.connection:
45+
if _type.connection:
4646
# TODO Add a way to override connection_field_factory
4747
return connection_field_factory(relationship_prop, registry, **field_kwargs)
4848
return Field(

graphene_sqlalchemy/fields.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ def type(self):
2424
assert issubclass(_type, SQLAlchemyObjectType), (
2525
"SQLALchemyConnectionField only accepts SQLAlchemyObjectType types, not {}"
2626
).format(_type.__name__)
27-
assert _type._meta.connection, "The type {} doesn't have a connection".format(
27+
assert _type.connection, "The type {} doesn't have a connection".format(
2828
_type.__name__
2929
)
30-
return _type._meta.connection
30+
return _type.connection
3131

3232
@property
3333
def model(self):
@@ -115,7 +115,7 @@ def get_resolver(self, parent_resolver):
115115
def from_relationship(cls, relationship, registry, **field_kwargs):
116116
model = relationship.mapper.entity
117117
model_type = registry.get_type_for_model(model)
118-
return cls(model_type._meta.connection, resolver=get_batch_resolver(relationship), **field_kwargs)
118+
return cls(model_type.connection, resolver=get_batch_resolver(relationship), **field_kwargs)
119119

120120

121121
def default_connection_field_factory(relationship, registry, **field_kwargs):

graphene_sqlalchemy/tests/test_fields.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def resolver(_obj, _info):
3131
return Promise.resolve([])
3232

3333
result = UnsortedSQLAlchemyConnectionField.connection_resolver(
34-
resolver, Pet._meta.connection, Pet, None, None
34+
resolver, Pet.connection, Pet, None, None
3535
)
3636
assert isinstance(result, Promise)
3737

@@ -51,18 +51,18 @@ def test_type_assert_object_has_connection():
5151

5252

5353
def test_sort_added_by_default():
54-
field = SQLAlchemyConnectionField(Pet._meta.connection)
54+
field = SQLAlchemyConnectionField(Pet.connection)
5555
assert "sort" in field.args
5656
assert field.args["sort"] == Pet.sort_argument()
5757

5858

5959
def test_sort_can_be_removed():
60-
field = SQLAlchemyConnectionField(Pet._meta.connection, sort=None)
60+
field = SQLAlchemyConnectionField(Pet.connection, sort=None)
6161
assert "sort" not in field.args
6262

6363

6464
def test_custom_sort():
65-
field = SQLAlchemyConnectionField(Pet._meta.connection, sort=Editor.sort_argument())
65+
field = SQLAlchemyConnectionField(Pet.connection, sort=Editor.sort_argument())
6666
assert field.args["sort"] == Editor.sort_argument()
6767

6868

graphene_sqlalchemy/tests/test_types.py

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from graphene import (Dynamic, Field, GlobalID, Int, List, Node, NonNull,
66
ObjectType, Schema, String)
7+
from graphene.relay import Connection
78

89
from ..converter import convert_sqlalchemy_composite
910
from ..fields import (SQLAlchemyConnectionField,
@@ -46,6 +47,15 @@ class Meta:
4647
assert reporter == reporter_node
4748

4849

50+
def test_connection():
51+
class ReporterType(SQLAlchemyObjectType):
52+
class Meta:
53+
model = Reporter
54+
interfaces = (Node,)
55+
56+
assert issubclass(ReporterType.connection, Connection)
57+
58+
4959
def test_sqlalchemy_default_fields():
5060
@convert_sqlalchemy_composite.register(CompositeFullName)
5161
def convert_composite_class(composite, registry):

graphene_sqlalchemy/types.py

+2
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,8 @@ def __init_subclass_with_meta__(
325325
_meta.connection = connection
326326
_meta.id = id or "id"
327327

328+
cls.connection = connection # Public way to get the connection
329+
328330
super(SQLAlchemyObjectType, cls).__init_subclass_with_meta__(
329331
_meta=_meta, interfaces=interfaces, **options
330332
)

0 commit comments

Comments
 (0)