Skip to content

Commit

Permalink
Merge pull request #91 from TribuneX/issue89-support-display-name-for…
Browse files Browse the repository at this point in the history
…-relationship

Closes issue #89: Add support for display_name property for relationship
  • Loading branch information
insightindustry committed Oct 13, 2020
2 parents fc55991 + 4e708c6 commit e2d38df
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
8 changes: 7 additions & 1 deletion sqlathanor/schema.py
Expand Up @@ -193,6 +193,7 @@ def __init__(self,
supports_dict = False,
on_serialize = None,
on_deserialize = None,
display_name = None,
**kwargs):
"""Provide a relationship between two mapped classes.
Expand Down Expand Up @@ -353,6 +354,7 @@ def __init__(self,
self.supports_dict = supports_dict
self.on_serialize = on_serialize
self.on_deserialize = on_deserialize
self.display_name = display_name

comparator_factory = kwargs.pop('comparator_factory', RelationshipProperty.Comparator)

Expand Down Expand Up @@ -388,7 +390,11 @@ def on_serialize(self):

@property
def on_deserialize(self):
return self.prop.on_deserialize
return self.prop.on_deserialize\

@property
def display_name(self):
return self.prop.display_name


relationship = public_factory(RelationshipProperty, ".orm.relationship")
Expand Down
51 changes: 51 additions & 0 deletions tests/test_relationship_serialize_display_name.py
@@ -0,0 +1,51 @@
"""
******************************************
tests.test_relationship_sererialize
******************************************
Tests display name when relationships are deserialized.
"""

from sqlathanor import declarative_base, Column, relationship

from sqlalchemy import Integer, String, Sequence, ForeignKey

Base = declarative_base()


class User(Base):
__tablename__ = 'users'

id = Column(Integer, Sequence('user_id_seq'), primary_key = True)

addresses = relationship("Address",
backref = "user",
lazy = "joined",
supports_json = True,
display_name = "all-addresses"
)


class Address(Base):
__tablename__ = 'addresses'

id = Column(Integer,primary_key=True)

email = Column(String,
nullable=False,
supports_json=True,
)

user_id = Column(Integer, ForeignKey('users.id'))


def test_display_name_used_for_attribute():

scott = User()
email_com = 'scott@example.com'
scott.addresses = [Address(email=email_com)]

json_str = scott.to_json(max_nesting=2)

assert json_str == '{"all-addresses": [{"email": "%s"}]}' % (email_com)

0 comments on commit e2d38df

Please sign in to comment.