From 15b1a8d66003c893fdae2560748e937659f41eb4 Mon Sep 17 00:00:00 2001 From: Greg Svitak Date: Sun, 25 Sep 2016 13:55:43 -0400 Subject: [PATCH 1/4] adding support to convert int label columns similar to PR#2 --- graphene_sqlalchemy/converter.py | 3 ++- graphene_sqlalchemy/tests/test_converter.py | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/graphene_sqlalchemy/converter.py b/graphene_sqlalchemy/converter.py index 05690697..97bf1267 100644 --- a/graphene_sqlalchemy/converter.py +++ b/graphene_sqlalchemy/converter.py @@ -101,7 +101,8 @@ def convert_column_to_int_or_id(type, column, registry=None): if column.primary_key: return ID(description=column.doc, required=not(column.nullable)) else: - return Int(description=column.doc, required=not(column.nullable)) + return Int(description=getattr(column, 'doc', None), + required=not(getattr(column, 'nullable', True))) @convert_sqlalchemy_type.register(types.Boolean) diff --git a/graphene_sqlalchemy/tests/test_converter.py b/graphene_sqlalchemy/tests/test_converter.py index 0157f837..dd671d48 100644 --- a/graphene_sqlalchemy/tests/test_converter.py +++ b/graphene_sqlalchemy/tests/test_converter.py @@ -113,6 +113,11 @@ def test_should_label_convert_string(): assert isinstance(graphene_type, graphene.String) +def test_should_label_convert_int(): + label = Label('int_label_test', case([], else_="foo"), type_=types.Integer()) + graphene_type = convert_sqlalchemy_column(label) + assert isinstance(graphene_type, graphene.Int) + def test_should_choice_convert_enum(): TYPES = [ (u'es', u'Spanish'), From 1b3c6c287c5d31d9361308f23bfaece91c476dd9 Mon Sep 17 00:00:00 2001 From: Greg Svitak Date: Sun, 25 Sep 2016 14:05:36 -0400 Subject: [PATCH 2/4] fix for pep --- graphene_sqlalchemy/converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphene_sqlalchemy/converter.py b/graphene_sqlalchemy/converter.py index 97bf1267..073a6dc6 100644 --- a/graphene_sqlalchemy/converter.py +++ b/graphene_sqlalchemy/converter.py @@ -102,7 +102,7 @@ def convert_column_to_int_or_id(type, column, registry=None): return ID(description=column.doc, required=not(column.nullable)) else: return Int(description=getattr(column, 'doc', None), - required=not(getattr(column, 'nullable', True))) + required=not(getattr(column, 'nullable', True))) @convert_sqlalchemy_type.register(types.Boolean) From 05fac7d7ced8bb60924f327ab7d10543d108a6aa Mon Sep 17 00:00:00 2001 From: Greg Svitak Date: Sun, 25 Sep 2016 14:15:42 -0400 Subject: [PATCH 3/4] fixes for pep --- graphene_sqlalchemy/converter.py | 4 ++-- graphene_sqlalchemy/tests/test_converter.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/graphene_sqlalchemy/converter.py b/graphene_sqlalchemy/converter.py index 073a6dc6..0c8f53ba 100644 --- a/graphene_sqlalchemy/converter.py +++ b/graphene_sqlalchemy/converter.py @@ -99,10 +99,10 @@ def convert_column_to_string(type, column, registry=None): @convert_sqlalchemy_type.register(types.Integer) def convert_column_to_int_or_id(type, column, registry=None): if column.primary_key: - return ID(description=column.doc, required=not(column.nullable)) + return ID(description=column.doc, required=not (column.nullable)) else: return Int(description=getattr(column, 'doc', None), - required=not(getattr(column, 'nullable', True))) + required=not (getattr(column, 'nullable', True))) @convert_sqlalchemy_type.register(types.Boolean) diff --git a/graphene_sqlalchemy/tests/test_converter.py b/graphene_sqlalchemy/tests/test_converter.py index dd671d48..8ec2283c 100644 --- a/graphene_sqlalchemy/tests/test_converter.py +++ b/graphene_sqlalchemy/tests/test_converter.py @@ -114,9 +114,9 @@ def test_should_label_convert_string(): def test_should_label_convert_int(): - label = Label('int_label_test', case([], else_="foo"), type_=types.Integer()) - graphene_type = convert_sqlalchemy_column(label) - assert isinstance(graphene_type, graphene.Int) + label = Label('int_label_test', case([], else_="foo"), type_=types.Integer()) + graphene_type = convert_sqlalchemy_column(label) + assert isinstance(graphene_type, graphene.Int) def test_should_choice_convert_enum(): TYPES = [ From 6ec4a5f04218f4eaebbc9349cf5617cb701c86ac Mon Sep 17 00:00:00 2001 From: Greg Svitak Date: Thu, 13 Oct 2016 16:31:17 -0400 Subject: [PATCH 4/4] attempting to add support for Postgres TSTRANGE --- graphene_sqlalchemy/converter.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/graphene_sqlalchemy/converter.py b/graphene_sqlalchemy/converter.py index 0c8f53ba..890c7ef0 100644 --- a/graphene_sqlalchemy/converter.py +++ b/graphene_sqlalchemy/converter.py @@ -16,9 +16,11 @@ class ChoiceType(object): pass + class ScalarListType(object): pass + class JSONType(object): pass @@ -34,7 +36,7 @@ def dynamic_type(): if (direction == interfaces.MANYTOONE or not relationship.uselist): return Field(_type) elif (direction == interfaces.ONETOMANY or - direction == interfaces.MANYTOMANY): + direction == interfaces.MANYTOMANY): if is_node(_type): return SQLAlchemyConnectionField(_type) return Field(List(_type)) @@ -64,8 +66,10 @@ def _register_composite_class(cls, registry=None): def inner(fn): registry.register_composite_converter(cls, fn) + return inner + convert_sqlalchemy_composite.register = _register_composite_class @@ -91,7 +95,7 @@ def convert_sqlalchemy_type(type, column, registry=None): @convert_sqlalchemy_type.register(postgresql.UUID) def convert_column_to_string(type, column, registry=None): return String(description=getattr(column, 'doc', None), - required=not(getattr(column, 'nullable', True))) + required=not (getattr(column, 'nullable', True))) @convert_sqlalchemy_type.register(types.SmallInteger) @@ -107,13 +111,13 @@ def convert_column_to_int_or_id(type, column, registry=None): @convert_sqlalchemy_type.register(types.Boolean) def convert_column_to_boolean(type, column, registry=None): - return Boolean(description=column.doc, required=not(column.nullable)) + return Boolean(description=column.doc, required=not (column.nullable)) @convert_sqlalchemy_type.register(types.Float) @convert_sqlalchemy_type.register(types.Numeric) def convert_column_to_float(type, column, registry=None): - return Float(description=column.doc, required=not(column.nullable)) + return Float(description=column.doc, required=not (column.nullable)) @convert_sqlalchemy_type.register(ChoiceType) @@ -130,16 +134,23 @@ def convert_scalar_list_to_list(type, column, registry=None): @convert_sqlalchemy_type.register(postgresql.ARRAY) def convert_postgres_array_to_list(type, column, registry=None): graphene_type = convert_sqlalchemy_type(column.type.item_type, column) - return List(graphene_type, description=column.doc, required=not(column.nullable)) + return List(graphene_type, description=column.doc, required=not (column.nullable)) @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, registry=None): - return JSONString(description=column.doc, required=not(column.nullable)) + return JSONString(description=column.doc, required=not (column.nullable)) + + +@convert_sqlalchemy_type.register(postgresql.TSRANGE) +@convert_sqlalchemy_type.register(postgresql.TSTZRANGE) +def convert_posgres_range_to_string(type, column, registry=None): + graphene_type = convert_sqlalchemy_type(column.type.item_type, column) + return List(graphene_type, description=column.doc, required=not (column.nullable)) @convert_sqlalchemy_type.register(JSONType) def convert_json_type_to_string(type, column, registry=None): - return JSONString(description=column.doc, required=not(column.nullable)) + return JSONString(description=column.doc, required=not (column.nullable))