merge() makes a copy of the object in a similar manner as which it would be loaded from the DB for the first time, using __new__ instead of __init__ and assigning state according to the available MapperPropertys. Since your state relies upon extra steps in populate_instance, theres no corresponding hook within merge().
0.5 has a better hook than populate_instance for post-load activities which is consistently called whenever an instance is reconsituted. On Jun 3, 2008, at 11:08 AM, Martin Pengelly-Phillips wrote: > > > Thanks as always for the quick response and fix. > > As a slight aside; I am using a MapperExtension to create an attribute > on an object. When the object is stored, reloaded and then merged back > into a session this attribute is no longer available. > > Any thoughts on why this might be? > > ta > > Martin > > > Pseudo code: > ========== > class EntityMapperExtension(MapperExtension): > def populate_instance(self, mapper, selectcontext, row, instance, > **flags): > if not hasattr(instance, 'property'): > instance.property = PropertyDict(instance) > return EXT_CONTINUE > > obj = Entity() > obj.property['group'] > [prop1, prop2] > store[id] = obj > Session.remove() > ... > session = Session() > obj = session.merge(store[id]) > obj.property['group'] > AttributeError: 'Entity' object has no > attribute 'property' > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---