You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
6 years ago
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
import bottle
|
||
|
import inspect
|
||
|
import beaker
|
||
|
from beaker import middleware
|
||
|
|
||
|
|
||
|
class BeakerPlugin(object):
|
||
|
name = 'beaker'
|
||
|
|
||
|
def __init__(self, keyword='beaker'):
|
||
|
"""
|
||
|
:param keyword: Keyword used to inject beaker in a route
|
||
|
"""
|
||
|
self.keyword = keyword
|
||
|
|
||
|
def setup(self, app):
|
||
|
""" Make sure that other installed plugins don't affect the same
|
||
|
keyword argument and check if metadata is available."""
|
||
|
for other in app.plugins:
|
||
|
if not isinstance(other, BeakerPlugin):
|
||
|
continue
|
||
|
if other.keyword == self.keyword:
|
||
|
raise bottle.PluginError("Found another beaker plugin "
|
||
|
"with conflicting settings ("
|
||
|
"non-unique keyword).")
|
||
|
|
||
|
def apply(self, callback, context):
|
||
|
args = inspect.getargspec(context['callback'])[0]
|
||
|
|
||
|
if self.keyword not in args:
|
||
|
return callback
|
||
|
|
||
|
def wrapper(*args, **kwargs):
|
||
|
kwargs[self.keyword] = beaker
|
||
|
kwargs["{0}_middleware".format(self.keyword)] = middleware
|
||
|
return callback(*args, **kwargs)
|
||
|
|
||
|
return wrapper
|