On 0.3.x, use EXT_PASS rather than EXT_CONTINUE.

Michael Bayer wrote:
> sorry, the docstring is wrong.  create_instance() should return  
> EXT_CONTINUE if it would like to bypass creating the instance itself.   
> However, "self" here is the MapperExtension instance, not the mapped  
> instance.   the method is called before anything is created.
> 
> if you want to populate an attribute on a newly loaded instance but  
> not create it, you're better off using populate_instance().  return  
> EXT_CONTINUE from that method as well.
> 
> class MyExt(MapperExtension):
>       def populate_instance(self, mapper, selectcontext, row, instance,  
> **flags):
>               if not hasattr(instance, 'mutex'):
>                       instance.mutex = mutex()
>               return EXT CONTINUE
> 
> the hasattr() is assuming you dont want to replace the mutex in the  
> case of a session.refresh() or similar.
> 
> On Jan 30, 2008, at 1:36 PM, Ross wrote:
> 
>> Hello,
>>
>> I have recently converted a Pylons app from SQLObject to SQLAlchemy
>> 0.3.10.  Conversion went quite well.
>>
>> I need to serialize access to some of my objects, so I've looked into
>> extending MapperExtension as described at [1] to add a mutex on load.
>>
>> First, I define an extension and instantiate it:
>> --------
>> from sqlalchemy.orm import MapperExtension
>> import mutex
>>
>> class MutexExtension(MapperExtension):
>>    def create_instance(self, mapper, selectcontext, row, class_):
>>        self.mutex = mutex.mutex()
>>        return None
>>
>> mutexext = MutexExtension()
>> -------
>>
>>
>> My mapper setup looks like this:
>>
>> switch_mapper = mapper (Switch, switch_table,
>> extension=[mutexext.mutexext, sac.ext],
>>
>> properties={'ports':sqla.relation(SwitchPort)})
>>
>>
>> When I try to fetch objects from the database, I get a exception
>> setting
>> self.entity_name:
>>
>>
>> Module sqlalchemy.orm.mapper:1485 in _instance
>> <<                  instance = self._create_instance(context.session)
>>                else:
>>                    instance._entity_name = self.entity_name
>>                if self.__should_log_debug:
>>                    self.__log_debug("_instance(): created new
>> instance %s identity %s" % (mapperutil.instance_str(instance),
>> %str(identitykey)))>>
>> instance._entity_name = self.entity_name
>> exceptions.AttributeError: 'NoneType' object has no attribute
>> '_entity_name'
>>
>>
>> What did I do wrong?
>>
>> Thanks,
>> Ross
>>
>>
>>
>>
>> [1] 
>> http://www.sqlalchemy.org/docs/03/adv_datamapping.html#advdatamapping_extending
>>
> 
> 
> > 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to