This commit is contained in:
Benoit Masson 2017-01-09 01:40:33 +00:00 committed by GitHub
commit 0272fe3f0f
4 changed files with 4367 additions and 1 deletions

4346
bottle.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -35,6 +35,7 @@ __license__ = 'MIT'
import sqlite3 import sqlite3
import inspect import inspect
import bottle import bottle
import types
# PluginError is defined to bottle >= 0.10 # PluginError is defined to bottle >= 0.10
if not hasattr(bottle, 'PluginError'): if not hasattr(bottle, 'PluginError'):
@ -104,7 +105,18 @@ class SQLitePlugin(object):
# Ignore it if it does not need a database handle. # Ignore it if it does not need a database handle.
argspec = inspect.getargspec(_callback) argspec = inspect.getargspec(_callback)
if keyword not in argspec.args: if keyword not in argspec.args:
return callback #check for closure
no_keyword_arg = True
if _callback.func_closure is not None:
for closure in _callback.func_closure:
contents = closure.cell_contents
if isinstance(contents, types.FunctionType):
argspec = inspect.getargspec(contents)
if keyword in argspec.args:
no_keyword_arg = False
break
if no_keyword_arg:
return callback
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
# Connect to the database # Connect to the database

View File

@ -28,6 +28,13 @@ class SQLiteTest(unittest.TestCase):
def tearDown(self): def tearDown(self):
os.unlink(self.plugin.dbfile) os.unlink(self.plugin.dbfile)
def test_with_view(self):
@self.app.get('/')
@bottle.view('test_view')
def test(db):
self.assertEqual(type(db), type(sqlite3.connect(':memory:')))
self._request('/')
def test_with_keyword(self): def test_with_keyword(self):
@self.app.get('/') @self.app.get('/')
def test(db): def test(db):

1
views/test_view.tpl Normal file
View File

@ -0,0 +1 @@
test_view