rootsmith wrote:
>
> Well, it appears I have answered my own question and, yes, it was a
> SQLAlchemy issue.  I resolved the problem by explicitly compiling the
> mapping at the end of the model initialization:
>
> manager_mapper = orm.mapper(Manager, manager_table, ... etc.
> ... (all other dependent mappers)
>
> manager_mapper.compile()
>
> My extremely vague understanding of what is going on is that if you
> are explicitly using the SQLAlchemy API to retrieve the pickled object
> then compiling is done implicitly but if the API is not used then the
> compiling is not done and you run into troubles.  I am not sure how
> the beaker session is trying to interact with the object that causes
> the problem versus my own testing of interacting with the pickled
> object being successful but compiling is the answer.
>
> If someone has a more robust explanation I would be very interested to
> hear it.

that seems like a tricky error to reproduce.   When your application
starts, assuming it sets up mappers immediately, as soon as they are used
all mappers are compiled.  pickling/depickling wouldn't have any
compilation related issues.   Additionally your error seems to occur
during *serialization*, which is very strange.  Its not occurring to me
how your application would have a hold of a mapped instance without your
mappers having been compiled...unless that object was pulled from a cache
previously.

In any case if you throw a compile_mappers() at the end of environment.py
load_environment() you shouldn't have this kind of issue.  but i would be
curious how you're getting it to do that.


>
>
> On Oct 21, 10:08 pm, rootsmith <[email protected]> wrote:
>> Hi,
>>
>> I have a pylons application using file based beaker sessions (not to
>> be confused with SQLAlchemy Sessions.)  I retrieve a mapped object
>> from the database, detach it from the SQLAlchemy Session like so:
>>
>> Session.expunge(object)
>>
>> and save it to the beaker session (basically pickling it to a file.)
>> like so:
>>
>> session['user'] = user
>> session.save()
>>
>> If I restart the server and retrieve the pickled object from the
>> session, merge it back into the SQLAlchemy Session everything seems to
>> be fine.
>>
>> user = Session.merge(session['user'], dont_load=True)
>>
>> But then somewhere in the beaker session middleware something goes
>> awry before it completes the call to the controller.
>>
>> Now I know this sounds like a beaker session problem but it is failing
>> when it is making a call to the SQLAlchemy object.  Here is the stack
>> trace:
>>
>> URL:http://127.0.0.1:5000/
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/
>> WebError-0.10.1-py2.6.egg/weberror/evalexception.py', line 431 in
>> respond
>>   app_iter = self.application(environ, detect_start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Paste-1.7.2-
>> py2.6.egg/paste/recursive.py', line 80 in __call__
>>   return self.application(environ, start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/middleware.py', line 73 in __call__
>>   return self.app(environ, start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/middleware.py', line 152 in __call__
>>   return self.wrap_app(environ, session_start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Routes-1.10.3-
>> py2.6.egg/routes/middleware.py', line 130 in __call__
>>   response = self.app(environ, start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Pylons-0.9.7-
>> py2.6.egg/pylons/wsgiapp.py', line 125 in __call__
>>   response = self.dispatch(controller, environ, start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Pylons-0.9.7-
>> py2.6.egg/pylons/wsgiapp.py', line 324 in dispatch
>>   return controller(environ, start_response)
>> File '/Users/kevin/Documents/workspace/ryzoe/ryzoe/lib/base.py', line
>> 54 in __call__
>>   return WSGIController.__call__(self, environ, start_response)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Pylons-0.9.7-
>> py2.6.egg/pylons/controllers/core.py', line 284 in __call__
>>   return response(environ, self.start_response)
>> File 'build/bdist.macosx-10.6-universal/egg/webob/__init__.py', line
>> 2182 in __call__
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/middleware.py', line 146 in session_start_response
>>   session.persist()
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/session.py', line 600 in persist
>>   self._session().save()
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/session.py', line 293 in save
>>   self.namespace.release_write_lock()
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/container.py', line 149 in release_write_lock
>>   self.close(checkcount=True)
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/container.py', line 172 in close
>>   self.do_close()
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/Beaker-1.4.1-
>> py2.6.egg/beaker/container.py', line 536 in do_close
>>   cPickle.dump(self.hash, fh)
>> File '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/
>> python2.6/copy_reg.py', line 84 in _reduce_ex
>>   dict = getstate()
>> File '/Users/kevin/mydevenv/lib/python2.6/site-packages/
>> SQLAlchemy-0.5.6-py2.6.egg/sqlalchemy/orm/collections.py', line 607 in
>> __getstate__
>>   return {'key': self.attr.key,
>> AttributeError: 'NoneType' object has no attribute 'key'
>>
>> Here is the mapper of the object that is pickled:
>>
>> orm.mapper(Manager, manager_table, inherits=User,
>>                polymorphic_identity='manager',
>>                properties={'residences': relation(Residence,
>> lazy=False,
>>
>> back_populates='manager')})
>>
>> In the end, I can always just flush the cache (delete the files) on a
>> server restart but something is striking me odd as to why this is
>> failing.  I want to make sure I don't have some flawed understanding
>> of something somewhere.
>>
>> Any help would be greatly appreciated.
> >
>


--~--~---------~--~----~------------~-------~--~----~
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