From 897e2ab95da7cd914cbec558d7adfa745590ca36 Mon Sep 17 00:00:00 2001 From: ilvalle Date: Fri, 16 Sep 2016 16:28:20 +0200 Subject: [PATCH 1/2] caching read_pyc for controllers and models --- gluon/compileapp.py | 5 +++-- gluon/restricted.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gluon/compileapp.py b/gluon/compileapp.py index 0ee9c18c9..70f924b1a 100644 --- a/gluon/compileapp.py +++ b/gluon/compileapp.py @@ -581,7 +581,7 @@ def run_models_in(environment): if not regex.search(fname) and c != 'appadmin': continue elif compiled: - code = read_pyc(model) + code = getcfs(model, model, lambda: read_pyc(model)) elif is_gae: code = getcfs(model, model, lambda: compile2(read_file(model), model)) @@ -614,7 +614,8 @@ def run_controller_in(controller, function, environment): raise HTTP(404, rewrite.THREAD_LOCAL.routes.error_message % badf, web2py_error=badf) - restricted(read_pyc(filename), environment, layer=filename) + code = getcfs(filename, filename, lambda: read_pyc(filename)) + restricted(code, environment, layer=filename) elif function == '_TEST': # TESTING: adjust the path to include site packages from settings import global_settings diff --git a/gluon/restricted.py b/gluon/restricted.py index c67bcbf4e..c0725a151 100644 --- a/gluon/restricted.py +++ b/gluon/restricted.py @@ -199,7 +199,7 @@ def __str__(self): def compile2(code, layer): - return compile(code.rstrip(), layer, 'exec') + return compile(code, layer, 'exec') def restricted(code, environment=None, layer='Unknown'): From 352c93bc86347646d8190049fef9ba63f9c0dc0e Mon Sep 17 00:00:00 2001 From: ilvalle Date: Fri, 16 Sep 2016 19:33:07 +0200 Subject: [PATCH 2/2] added getcfs for run_view_in --- gluon/compileapp.py | 2 +- gluon/tests/test_appadmin.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gluon/compileapp.py b/gluon/compileapp.py index 70f924b1a..42794bac5 100644 --- a/gluon/compileapp.py +++ b/gluon/compileapp.py @@ -707,7 +707,7 @@ def run_view_in(environment): for f in files: compiled = pjoin(path, f) if os.path.exists(compiled): - code = read_pyc(compiled) + code = getcfs(compiled, compiled, lambda: read_pyc(compiled)) restricted(code, environment, layer=compiled) return if not os.path.exists(filename) and allow_generic: diff --git a/gluon/tests/test_appadmin.py b/gluon/tests/test_appadmin.py index 9d7e04937..77bb36d62 100644 --- a/gluon/tests/test_appadmin.py +++ b/gluon/tests/test_appadmin.py @@ -10,7 +10,7 @@ import unittest -from gluon.compileapp import run_controller_in, run_view_in +from gluon.compileapp import run_controller_in, run_view_in, compile_application, remove_compiled_application from gluon.languages import translator from gluon.storage import Storage, List from gluon import fileutils @@ -76,7 +76,7 @@ def run_function(self): def run_view(self): return run_view_in(self.env) - def test_index(self): + def _test_index(self): result = self.run_function() self.assertTrue('db' in result['databases']) self.env.update(result) @@ -86,6 +86,15 @@ def test_index(self): print(e.message) self.fail('Could not make the view') + def test_index(self): + self._test_index() + + def test_index_compiled(self): + appname_path = os.path.join(os.getcwd(), 'applications', 'welcome') + compile_application(appname_path) + self._test_index() + remove_compiled_application(appname_path) + def test_select(self): request = self.env['request'] request.args = List(['db'])