add support for sqlalchemy-utils ScalarListType

This commit is contained in:
Simon Hewitt 2016-08-19 09:59:51 -07:00
parent 17ba01570a
commit bdf57391f7
2 changed files with 18 additions and 5 deletions

View File

@ -1,20 +1,24 @@
from graphql.type import GraphQLString
from singledispatch import singledispatch
from sqlalchemy import types
from sqlalchemy.orm import interfaces
from sqlalchemy.dialects import postgresql
from sqlalchemy.orm import interfaces
from ...core.classtypes.enum import Enum
from ...core.types.scalars import ID, Boolean, Float, Int, String
from ...core.types.definitions import List
from ...core.types.custom_scalars import JSONString
from ...core.types.definitions import List
from ...core.types.scalars import ID, Boolean, Float, Int, String
from .fields import ConnectionOrListField, SQLAlchemyModelField
try:
from sqlalchemy_utils.types.choice import ChoiceType
from sqlalchemy_utils import ChoiceType, ScalarListType
except ImportError:
class ChoiceType(object):
pass
class ScalarListType(object):
pass
def convert_sqlalchemy_relationship(relationship):
direction = relationship.direction
@ -78,6 +82,11 @@ def convert_column_to_enum(type, column):
return Enum(name, type.choices, description=column.doc)
@convert_sqlalchemy_type.register(ScalarListType)
def convert_scalar_list_to_list(type, column):
return List(GraphQLString, description=column.doc)
@convert_sqlalchemy_type.register(postgresql.ARRAY)
def convert_postgres_array_to_list(type, column):
graphene_type = convert_sqlalchemy_type(column.type.item_type, column)

View File

@ -1,7 +1,7 @@
from py.test import raises
from sqlalchemy import Column, Table, types
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy_utils.types.choice import ChoiceType
from sqlalchemy_utils import ChoiceType, ScalarListType
from sqlalchemy.dialects import postgresql
import graphene
@ -106,6 +106,10 @@ def test_should_choice_convert_enum():
assert graphene_type.__enum__.__members__['en'].value == 'English'
def test_should_scalar_list_convert_list():
assert_column_conversion(ScalarListType(), graphene.List)
def test_should_manytomany_convert_connectionorlist():
graphene_type = convert_sqlalchemy_relationship(Reporter.pets.property)
assert isinstance(graphene_type, ConnectionOrListField)