mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 12:44:15 +03:00
Added support for sqlalchemy choice
This commit is contained in:
parent
7aa7c5a7bf
commit
b3693e3702
|
@ -23,7 +23,7 @@ before_install:
|
||||||
install:
|
install:
|
||||||
- |
|
- |
|
||||||
if [ "$TEST_TYPE" = build ]; then
|
if [ "$TEST_TYPE" = build ]; then
|
||||||
pip install --download-cache $HOME/.cache/pip/ pytest pytest-cov coveralls six pytest-django django-filter
|
pip install --download-cache $HOME/.cache/pip/ pytest pytest-cov coveralls six pytest-django django-filter sqlalchemy_utils
|
||||||
pip install --download-cache $HOME/.cache/pip/ -e .[django]
|
pip install --download-cache $HOME/.cache/pip/ -e .[django]
|
||||||
pip install --download-cache $HOME/.cache/pip/ -e .[sqlalchemy]
|
pip install --download-cache $HOME/.cache/pip/ -e .[sqlalchemy]
|
||||||
pip install django==$DJANGO_VERSION
|
pip install django==$DJANGO_VERSION
|
||||||
|
|
|
@ -2,7 +2,13 @@ from singledispatch import singledispatch
|
||||||
|
|
||||||
from sqlalchemy import types
|
from sqlalchemy import types
|
||||||
from sqlalchemy.orm import interfaces
|
from sqlalchemy.orm import interfaces
|
||||||
|
try:
|
||||||
|
from sqlalchemy_utils.types.choice import ChoiceType
|
||||||
|
except ImportError:
|
||||||
|
class ChoiceType(object):
|
||||||
|
pass
|
||||||
|
|
||||||
|
from ...core.classtypes.enum import Enum
|
||||||
from ...core.types.scalars import ID, Boolean, Float, Int, String
|
from ...core.types.scalars import ID, Boolean, Float, Int, String
|
||||||
from .fields import ConnectionOrListField, SQLAlchemyModelField
|
from .fields import ConnectionOrListField, SQLAlchemyModelField
|
||||||
|
|
||||||
|
@ -59,3 +65,9 @@ def convert_column_to_boolean(type, column):
|
||||||
@convert_sqlalchemy_type.register(types.Numeric)
|
@convert_sqlalchemy_type.register(types.Numeric)
|
||||||
def convert_column_to_float(type, column):
|
def convert_column_to_float(type, column):
|
||||||
return Float(description=column.doc)
|
return Float(description=column.doc)
|
||||||
|
|
||||||
|
|
||||||
|
@convert_sqlalchemy_type.register(ChoiceType)
|
||||||
|
def convert_column_to_enum(type, column):
|
||||||
|
name = '{}_{}'.format(column.table.name, column.name).upper()
|
||||||
|
return Enum(name, type.choices, description=column.doc)
|
||||||
|
|
|
@ -5,7 +5,9 @@ from graphene.contrib.sqlalchemy.converter import (convert_sqlalchemy_column,
|
||||||
convert_sqlalchemy_relationship)
|
convert_sqlalchemy_relationship)
|
||||||
from graphene.contrib.sqlalchemy.fields import (ConnectionOrListField,
|
from graphene.contrib.sqlalchemy.fields import (ConnectionOrListField,
|
||||||
SQLAlchemyModelField)
|
SQLAlchemyModelField)
|
||||||
from sqlalchemy import Column, types
|
from sqlalchemy import Table, Column, types
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy_utils.types.choice import ChoiceType
|
||||||
|
|
||||||
from .models import Article, Pet, Reporter
|
from .models import Article, Pet, Reporter
|
||||||
|
|
||||||
|
@ -85,6 +87,23 @@ def test_should_numeric_convert_float():
|
||||||
assert_column_conversion(types.Numeric(), graphene.Float)
|
assert_column_conversion(types.Numeric(), graphene.Float)
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_choice_convert_enum():
|
||||||
|
TYPES = [
|
||||||
|
(u'es', u'Spanish'),
|
||||||
|
(u'en', u'English')
|
||||||
|
]
|
||||||
|
column = Column(ChoiceType(TYPES), doc='Language', name='language')
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
Table('translatedmodel', Base.metadata, column)
|
||||||
|
graphene_type = convert_sqlalchemy_column(column)
|
||||||
|
assert issubclass(graphene_type, graphene.Enum)
|
||||||
|
assert graphene_type._meta.type_name == 'TRANSLATEDMODEL_LANGUAGE'
|
||||||
|
assert graphene_type._meta.description == 'Language'
|
||||||
|
assert graphene_type.__enum__.__members__['es'].value == 'Spanish'
|
||||||
|
assert graphene_type.__enum__.__members__['en'].value == 'English'
|
||||||
|
|
||||||
|
|
||||||
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