you're running 0.5.0rc2, an early release candidate of 0.5.  There  
have been five bugfix releases since then, have you tried running on  
the latest release ?


On Jan 26, 2009, at 12:59 PM, Toby Bradshaw wrote:

>
> Ok.. given:
>
> CREATE TABLE example_a
> (
>  id integer NOT NULL,
>  time_units integer,
>  CONSTRAINT example_a_pkey PRIMARY KEY (id)
> )
>
> and (based on
> http://www.sqlalchemy.org/docs/05/mappers.html#using-descriptors):
>
> from sqlalchemy import *
> from sqlalchemy.orm import sessionmaker, mapper, synonym
>
> class A(object):
>  def _set_t(self, t):
>    print "SET"
>    self.timeunits = t / float(10)
>  def _get_t(self):
>    print "GET"
>    return self.timeunits * 10
>  time_units = property(_get_t, _set_t)
>
> engine = create_engine("postgres://tobe:<snip>@localhost/test")
> engine.echo = False
>
> session_class = sessionmaker(
>  bind = engine, autoflush = True, autocommit = False,
> )
>
> meta = MetaData(bind = engine)
> table_A = Table("example_a", meta, autoload = True)
>
> print A.time_units
> mapper(A, table_A, properties = {
>  "time_units" : synonym("timeunits", map_column = True)
> })
>
> session = session_class()
>
> a = session.query(A).all()[0]
> print a.timeunits
> a.timeunits = 1
> print a.timeunits
> print A.timeunits
> print A.time_units
> ~
>
> ~
>
>
>
> Running the above:
>
> t...@bismuth:~/src/tobe/bdp_webif$ python test.py
> <property object at 0x849a7fc>
> 10
> 1
> <Mapper at 0x84f030c; A>.timeunits
> Traceback (most recent call last):
>  File "test.py", line 36, in <module>
>    print A.time_units
>  File
> "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc2-py2.5.egg/ 
> sqlalchemy/orm/attributes.py",
> line 121, in __str__
>    return repr(self.parententity) + "." + self.property.key
>  File
> "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc2-py2.5.egg/ 
> sqlalchemy/orm/attributes.py",
> line 184, in __getattr__
>    return getattr(descriptor, attribute)
> AttributeError: 'property' object has no attribute 'parententity'
>
>
> So you can clearly see that the get and set are not called when
> accessing timeunits. They *are* called when accessing time_units (not
> shown). If you substitute '_email' for 'timeunits' and 'email' for
> 'time_units' then I believe this is an identical pattern to that shown
> in the documentation on
> this:http://www.sqlalchemy.org/docs/05/mappers.html#using-descriptors.
> The same behaviour is observed if I try an example with manually
> specified columns.
>
> So.. again.. am I simply not getting something here, is the example
> misleading or wrong or is the code broke in some way.
>
> Thanks in advance,
>
> --
> Toby Bradshaw
> Ideaworks 3d Ltd,
> London, UK.
>
> Michael Bayer wrote:
>> On Jan 23, 2009, at 1:43 PM, Toby Bradshaw wrote:
>>
>> the synonym() construct and the mapped attribute it creates  
>> represents
>> a proxy to the mapped column only in the context of accessing and
>> setting values within the python application space.  It is not  
>> invoked
>> when the database populates the value of the mapped column itself.
>> the general idea of synonym is that the column-based information  
>> stays
>> represented on the mapped instance in the identical manner that it
>> does within the database, and the synonym-based attribute interprets
>> application-level values into the column representation.
>>
>> it should definitely be invoked when setting the property of an
>> existing instance of B, so if that's not working you can share with  
>> us
>> exactly how you are configuring things, since you might be missing
>> some detail.
>>
>>>
>>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to