first try to add postgresql specific fields to sqlachemy converters ref #172

This commit is contained in:
evalette 2016-06-21 11:31:53 +02:00
parent 531083702e
commit e3704577b3

View File

@ -1,9 +1,12 @@
from singledispatch import singledispatch
from sqlalchemy import types
from sqlalchemy.orm import interfaces
from sqlalchemy.dialects import postgresql
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 .fields import ConnectionOrListField, SQLAlchemyModelField
try:
@ -42,6 +45,8 @@ def convert_sqlalchemy_type(type, column):
@convert_sqlalchemy_type.register(types.Unicode)
@convert_sqlalchemy_type.register(types.UnicodeText)
@convert_sqlalchemy_type.register(types.Enum)
@convert_sqlalchemy_type.register(postgresql.ENUM)
@convert_sqlalchemy_type.register(postgresql.UUID)
def convert_column_to_string(type, column):
return String(description=column.doc)
@ -71,3 +76,15 @@ def convert_column_to_float(type, column):
def convert_column_to_enum(type, column):
name = '{}_{}'.format(column.table.name, column.name).upper()
return Enum(name, type.choices, description=column.doc)
@convert_sqlalchemy_type.register(postgresql.ARRAY)
def convert_postgres_array_to_list(type, column):
return List(description=column.doc)
@convert_sqlalchemy_type.register(postgresql.HSTORE)
@convert_sqlalchemy_type.register(postgresql.JSON)
@convert_sqlalchemy_type.register(postgresql.JSONB)
def convert_json_to_string(type, column):
return JSONString(description=column.doc)