# -*- coding: utf-8 -*- # vim: autoindent tabstop=4 shiftwidth=4 expandtab softtabstop=4 filetype=python import inspect from sqlalchemy import create_engine, text from sqlalchemy.ext.sqlsoup import SqlSoup class SoupPlugin(object): name = 'soup' def __init__(self, url, echo=False, keyword='soup'): self.url = url self.keyword = keyword self.echo = echo def setup(self, app): for other in app.plugins: if not isinstance(other, SoupPlugin): continue if other.keyword == self.keyword: raise PluginError("Found another soup plugin with "\ "conflicting settings (non-unique keyword).") self.engine = create_engine(self.url, echo=self.echo) self.soup = SqlSoup(self.engine) def apply(self, callback, context): print "apply" conf = context['config'].get('soup') or {} keyword = conf.get('keyword', self.keyword) args = inspect.getargspec(context['callback'])[0] if keyword not in args: return callback def wrapper(*args, **kwargs): kwargs[keyword] = self.soup return callback(*args, **kwargs) return wrapper