Skip to content

Add a meta option to allow field names renaming #178

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add implementation for aliased_fields meta option
  • Loading branch information
Nabellaleen committed Mar 28, 2019
commit f97a8807b5e91f0004d6b25bed17a94a23b8f062
19 changes: 13 additions & 6 deletions graphene_sqlalchemy/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
from .utils import get_query, is_mapped_class, is_mapped_instance


def construct_fields(model, registry, only_fields, exclude_fields):
def construct_fields(model, registry, only_fields, exclude_fields, aliased_fields):
inspected_model = sqlalchemyinspect(model)
if aliased_fields is None:
aliased_fields = {}

fields = OrderedDict()

Expand All @@ -33,7 +35,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
# in there. Or when we exclude this field in exclude_fields
continue
converted_column = convert_sqlalchemy_column(column, registry)
fields[name] = converted_column
alias = aliased_fields.get(name, name)
fields[alias] = converted_column

for name, composite in inspected_model.composites.items():
is_not_in_only = only_fields and name not in only_fields
Expand All @@ -44,7 +47,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
# in there. Or when we exclude this field in exclude_fields
continue
converted_composite = convert_sqlalchemy_composite(composite, registry)
fields[name] = converted_composite
alias = aliased_fields.get(name, name)
fields[alias] = converted_composite

for hybrid_item in inspected_model.all_orm_descriptors:

Expand All @@ -61,7 +65,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
continue

converted_hybrid_property = convert_sqlalchemy_hybrid_method(hybrid_item)
fields[name] = converted_hybrid_property
alias = aliased_fields.get(name, name)
fields[alias] = converted_hybrid_property

# Get all the columns for the relationships on the model
for relationship in inspected_model.relationships:
Expand All @@ -74,7 +79,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
continue
converted_relationship = convert_sqlalchemy_relationship(relationship, registry)
name = relationship.key
fields[name] = converted_relationship
alias = aliased_fields.get(name, name)
fields[alias] = converted_relationship

return fields

Expand All @@ -95,6 +101,7 @@ def __init_subclass_with_meta__(
skip_registry=False,
only_fields=(),
exclude_fields=(),
aliased_fields=None,
connection=None,
connection_class=None,
use_connection=None,
Expand All @@ -116,7 +123,7 @@ def __init_subclass_with_meta__(
).format(cls.__name__, registry)

sqla_fields = yank_fields_from_attrs(
construct_fields(model, registry, only_fields, exclude_fields), _as=Field
construct_fields(model, registry, only_fields, exclude_fields, aliased_fields), _as=Field
)

if use_connection is None and interfaces:
Expand Down