Skip to content

Commit 8e84f39

Browse files
authored
Merge pull request #50 from yamat124/master
Added sqlalchemy utils type TSVectory
2 parents 3aa06b6 + f9ad081 commit 8e84f39

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

graphene_sqlalchemy/converter.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from .fields import SQLAlchemyConnectionField
1212

1313
try:
14-
from sqlalchemy_utils import ChoiceType, JSONType, ScalarListType
14+
from sqlalchemy_utils import ChoiceType, JSONType, ScalarListType, TSVectorType
1515
except ImportError:
1616
class ChoiceType(object):
1717
pass
@@ -48,7 +48,10 @@ def dynamic_type():
4848
return Field(List(_type))
4949

5050
return Dynamic(dynamic_type)
51-
51+
52+
def convert_sqlalchemy_hybrid_method(hybrid_item):
53+
return String(description=getattr(hybrid_item, '__doc__', None),
54+
required=False)
5255

5356
def convert_sqlalchemy_composite(composite, registry):
5457
converter = registry.get_converter_for_composite(composite.composite_class)
@@ -97,6 +100,7 @@ def convert_sqlalchemy_type(type, column, registry=None):
97100
@convert_sqlalchemy_type.register(types.Enum)
98101
@convert_sqlalchemy_type.register(postgresql.ENUM)
99102
@convert_sqlalchemy_type.register(postgresql.UUID)
103+
@convert_sqlalchemy_type.register(TSVectorType)
100104
def convert_column_to_string(type, column, registry=None):
101105
return String(description=get_column_doc(column),
102106
required=not(is_column_nullable(column)))

graphene_sqlalchemy/types.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import six
44
from sqlalchemy.inspection import inspect as sqlalchemyinspect
5+
from sqlalchemy.ext.hybrid import hybrid_property
56
from sqlalchemy.orm.exc import NoResultFound
67

78
from graphene import Field, ObjectType
@@ -13,7 +14,8 @@
1314

1415
from .converter import (convert_sqlalchemy_column,
1516
convert_sqlalchemy_composite,
16-
convert_sqlalchemy_relationship)
17+
convert_sqlalchemy_relationship,
18+
convert_sqlalchemy_hybrid_method)
1719
from .registry import Registry, get_global_registry
1820
from .utils import get_query, is_mapped
1921

@@ -47,6 +49,24 @@ def construct_fields(options):
4749
converted_composite = convert_sqlalchemy_composite(composite, options.registry)
4850
fields[name] = converted_composite
4951

52+
for hybrid_item in inspected_model.all_orm_descriptors:
53+
54+
if type(hybrid_item) == hybrid_property:
55+
name = hybrid_item.__name__
56+
57+
is_not_in_only = only_fields and name not in only_fields
58+
is_already_created = name in options.fields
59+
is_excluded = name in exclude_fields or is_already_created
60+
61+
if is_not_in_only or is_excluded:
62+
# We skip this field if we specify only_fields and is not
63+
# in there. Or when we excldue this field in exclude_fields
64+
65+
continue
66+
converted_hybrid_property = convert_sqlalchemy_hybrid_method(
67+
hybrid_item)
68+
fields[name] = converted_hybrid_property
69+
5070
# Get all the columns for the relationships on the model
5171
for relationship in inspected_model.relationships:
5272
is_not_in_only = only_fields and relationship.key not in only_fields

0 commit comments

Comments
 (0)