beaker
beaker copied to clipboard
'MetaData' object has no attribute 'schema'
Recently setup a project on a production server and encountered the exception below. Same setup with 1.6.3 doesn't throw an error. I'm assuming it has something to do with this change in 1.6.4:
Add ability to specify schema for database-backed sessions.
Traceback (most recent call last):
File "/home/mcmweb/venv/lib/python2.6/site-packages/Werkzeug-0.8.3-py2.6.egg/werkzeug/serving.py", line 159, in run_wsgi
execute(app)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Werkzeug-0.8.3-py2.6.egg/werkzeug/serving.py", line 146, in execute
application_iter = app(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Paste-1.7.5.1-py2.6.egg/paste/registry.py", line 379, in __call__
app_iter = self.application(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/BlazeWeb-0.4.6-py2.6.egg/blazeweb/middleware.py", line 152, in __call__
return self.wsgiapp(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Werkzeug-0.8.3-py2.6.egg/werkzeug/wsgi.py", line 411, in __call__
return self.app(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/middleware.py", line 155, in __call__
return self.wrap_app(environ, session_start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/SQLAlchemyBWC-0.2.5-py2.6.egg/sqlalchemybwc/lib/middleware.py", line 113, in __call__
return self.application(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/BlazeWeb-0.4.6-py2.6.egg/blazeweb/application.py", line 382, in __call__
return self.wsgi_app(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/BlazeWeb-0.4.6-py2.6.egg/blazeweb/application.py", line 319, in wsgi_app
return response(environ, start_response)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Werkzeug-0.8.3-py2.6.egg/werkzeug/wrappers.py", line 1083, in __call__
start_response(status, headers)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/middleware.py", line 149, in session_start_response
session.persist()
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/session.py", line 717, in persist
self._session().save()
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/session.py", line 405, in save
**self.namespace_args)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/ext/database.py", line 98, in __init__
self.cache = DatabaseNamespaceManager.tables.get(table_key, make_cache)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/util.py", line 171, in get
return self.sync_get(key, createfunc, *args, **kwargs)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/util.py", line 182, in sync_get
return self._create(key, createfunc, *args, **kwargs)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/util.py", line 189, in _create
self[key] = obj = createfunc(*args, **kwargs)
File "/home/mcmweb/venv/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/ext/database.py", line 91, in make_cache
schema=schema_name if schema_name else meta.schema
AttributeError: 'MetaData' object has no attribute 'schema'
SQLAlchemy's MetaData's schema attribute is only guaranteed in later versions. I don't think we have a minimum SQLA version requirement, so we should fix this unless the version you're using is ancient
I was using 0.6.9, but only accidentally. I had some old package that required a pre 0.7 version. I can fix on my side pretty easy.
FWIW, if you can check for .schema and easily avoid the exception, that seems best for BC reasons. If not, then I would think a check for .schema before hand and an exception warning about SA version incompatibility would be helpful.
Thanks for your work on Beaker!