mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-23 07:00:56 +03:00
add support for sqlalchemy-utils ScalarListType
This commit is contained in:
parent
17ba01570a
commit
bdf57391f7
|
@ -1,20 +1,24 @@
|
||||||
|
from graphql.type import GraphQLString
|
||||||
from singledispatch import singledispatch
|
from singledispatch import singledispatch
|
||||||
from sqlalchemy import types
|
from sqlalchemy import types
|
||||||
from sqlalchemy.orm import interfaces
|
|
||||||
from sqlalchemy.dialects import postgresql
|
from sqlalchemy.dialects import postgresql
|
||||||
|
from sqlalchemy.orm import interfaces
|
||||||
|
|
||||||
from ...core.classtypes.enum import Enum
|
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.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
|
from .fields import ConnectionOrListField, SQLAlchemyModelField
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from sqlalchemy_utils.types.choice import ChoiceType
|
from sqlalchemy_utils import ChoiceType, ScalarListType
|
||||||
except ImportError:
|
except ImportError:
|
||||||
class ChoiceType(object):
|
class ChoiceType(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class ScalarListType(object):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def convert_sqlalchemy_relationship(relationship):
|
def convert_sqlalchemy_relationship(relationship):
|
||||||
direction = relationship.direction
|
direction = relationship.direction
|
||||||
|
@ -78,6 +82,11 @@ def convert_column_to_enum(type, column):
|
||||||
return Enum(name, type.choices, description=column.doc)
|
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)
|
@convert_sqlalchemy_type.register(postgresql.ARRAY)
|
||||||
def convert_postgres_array_to_list(type, column):
|
def convert_postgres_array_to_list(type, column):
|
||||||
graphene_type = convert_sqlalchemy_type(column.type.item_type, column)
|
graphene_type = convert_sqlalchemy_type(column.type.item_type, column)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from py.test import raises
|
from py.test import raises
|
||||||
from sqlalchemy import Column, Table, types
|
from sqlalchemy import Column, Table, types
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
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
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
import graphene
|
import graphene
|
||||||
|
@ -106,6 +106,10 @@ def test_should_choice_convert_enum():
|
||||||
assert graphene_type.__enum__.__members__['en'].value == 'English'
|
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():
|
def test_should_manytomany_convert_connectionorlist():
|
||||||
graphene_type = convert_sqlalchemy_relationship(Reporter.pets.property)
|
graphene_type = convert_sqlalchemy_relationship(Reporter.pets.property)
|
||||||
assert isinstance(graphene_type, ConnectionOrListField)
|
assert isinstance(graphene_type, ConnectionOrListField)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user