Skip to content

Commit c50b265

Browse files
committed
better support for assoc proxy lists (rather than one-to-one)
1 parent b369eb6 commit c50b265

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

graphene_sqlalchemy/converter.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,23 @@ def dynamic_type():
4949
if isinstance(attr, AssociationProxy):
5050
return convert_sqlalchemy_association_proxy(
5151
attr,
52+
obj_type,
5253
registry,
5354
connection_field_factory,
5455
batching,
5556
resolver,
5657
**field_kwargs
5758
)
5859
elif isinstance(attr, ColumnProperty):
59-
return convert_sqlalchemy_column(
60-
attr,
61-
registry,
62-
resolver,
60+
# similar to convert_sqlalchemy_column, but supports lists
61+
column = attr.columns[0]
62+
type_ = field_kwargs.pop('type', convert_sqlalchemy_type(getattr(column, "type", None), column, registry))
63+
field_kwargs.setdefault('required', not is_column_nullable(column))
64+
field_kwargs.setdefault('description', get_column_doc(column))
65+
66+
return Field(
67+
type_ if association_prop.scalar else List(type_),
68+
resolver=resolver,
6369
**field_kwargs
6470
)
6571
elif isinstance(attr, CompositeProperty):

graphene_sqlalchemy/tests/test_converter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,8 @@ class Meta:
302302
assert isinstance(dynamic_field, graphene.Dynamic)
303303
graphene_type = dynamic_field.get_type()
304304
assert isinstance(graphene_type, graphene.Field)
305-
assert graphene_type.type == graphene.String
305+
assert isinstance(graphene_type.type, graphene.List)
306+
assert graphene_type.type.of_type == graphene.String
306307

307308
dynamic_field = convert_sqlalchemy_association_proxy(
308309
Article.reporter_pets,
@@ -312,7 +313,6 @@ class Meta:
312313
True,
313314
mock_resolver,
314315
)
315-
assert isinstance(dynamic_field.get_type().type, graphene.List)
316316
assert dynamic_field.get_type().type.of_type == P
317317

318318

0 commit comments

Comments
 (0)