On Thu, Dec 13, 2018 at 8:40 AM Tolstov Sergey <[email protected]> wrote:
>
> Here is my example, how to get arond decorator classmethod (without it not 
> work, self.__class__ instead of Address not override this function)

sure that works too, the docstring now says "any callable" so sure

the approach I've documented keeps the row-level constructor near the
__composite_values__() method of Address, since these two methods are
mirrors of each other it makes sense to define them in the same scope


> session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(
>     bind=engine, autoflush=False))
>
>
>
>
> def make_dump(obj):
>   return json.dumps(
>       obj, default=lambda o: o.__dict__, sort_keys=True, indent=4)
>
>
>
>
> class TownDetail(object):
>   def __init__(self, name, value):
>     self.name = name
>     self.value = value
>
>
>   def __composite_values__(self):
>     return self.name, self.value
>
>
>   def __eq__(self, other):
>     return isinstance(other, self.__class__) and\
>         make_dump(self) == make_dump(other)
>
>
>   def __ne__(self, other):
>     return not self.__eq__(other)
>
>
>
>
> class Address(object):
>   def __init__(self, name=None, value=None, town_detail=None):
>     self.name = name
>     self.value = value
>     self.town_detail = town_detail
>     Address.generate = self.generate
>
>
>   def __composite_values__(self):
>     return (self.name, self.value) + self.town_detail.__composite_values__()
>
>
>   def __eq__(self, other):
>     return isinstance(other, self.__class__) and\
>         make_dump(self) == make_dump(other)
>
>
>   def __ne__(self, other):
>     return not self.__eq__(other)
>
>
>
>
> def address_gen_function(name, value, town_detail_name, town_detail_value):
>   return Address(name, value, TownDetail(town_detail_name, town_detail_value))
>
>
>
>
> Address.generate = address_gen_function
>
>
>
>
> class TestComposite(Base):
>   __tablename__ = 'test_composite'
>   id = sqlalchemy.Column(sqlalchemy.types.Integer, primary_key=True)
>   name = sqlalchemy.Column(sqlalchemy.types.String)
>   _street_address_name = sqlalchemy.Column(sqlalchemy.types.String)
>   _street_address_value = sqlalchemy.Column(sqlalchemy.types.Integer)
>   _street_address_town_detail_name = 
> sqlalchemy.Column(sqlalchemy.types.String)
>   _street_address_town_detail_value = sqlalchemy.Column(
>       sqlalchemy.types.Integer)
>
>
>   street_address = composite(
>       Address.generate, _street_address_name, _street_address_value,
>       _street_address_town_detail_name, _street_address_town_detail_value
>   )
>
>
>
>
> test_instance = TestComposite(
>     name='tratata!', street_address=Address(
>         name=22, value='values', town_detail=TownDetail(name='test_nested', 
> value=228))
> )
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and 
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> description.
> ---
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to