do not cache normal views because of dependencies

This commit is contained in:
mdipierro
2016-09-30 13:54:37 -05:00
parent d03337a737
commit b19c3419ec
+16 -51
View File
@@ -430,13 +430,10 @@ def build_environment(request, response, session, store_current=True):
current.T = t current.T = t
current.cache = c current.cache = c
global __builtins__
if is_jython: # jython hack if is_jython: # jython hack
global __builtins__
__builtins__ = mybuiltin() __builtins__ = mybuiltin()
elif is_pypy: # apply the same hack to pypy too
__builtins__ = mybuiltin()
elif PY2:
__builtins__['__import__'] = builtin.__import__ # WHY?
environment['request'] = request environment['request'] = request
environment['response'] = response environment['response'] = response
environment['session'] = session environment['session'] = session
@@ -444,7 +441,6 @@ def build_environment(request, response, session, store_current=True):
lambda name, reload=False, app=request.application:\ lambda name, reload=False, app=request.application:\
local_import_aux(name, reload, app) local_import_aux(name, reload, app)
BaseAdapter.set_folder(pjoin(request.folder, 'databases')) BaseAdapter.set_folder(pjoin(request.folder, 'databases'))
response._view_environment = copy.copy(environment)
custom_import_install() custom_import_install()
return environment return environment
@@ -488,7 +484,6 @@ def compile_views(folder, skip_failed_views=False):
raise Exception("%s in %s" % (e, fname)) raise Exception("%s in %s" % (e, fname))
else: else:
filename = 'views.%s.py' % fname.replace(os.path.sep, '.') filename = 'views.%s.py' % fname.replace(os.path.sep, '.')
# filename = ('views/%s.py' % fname).replace('/', '_').replace('\\', '_')
filename = pjoin(folder, 'compiled', filename) filename = pjoin(folder, 'compiled', filename)
write_file(filename, data) write_file(filename, data)
save_pyc(filename) save_pyc(filename)
@@ -504,7 +499,7 @@ def compile_models(folder):
path = pjoin(folder, 'models') path = pjoin(folder, 'models')
for fname in listdir(path, '.+\.py$'): for fname in listdir(path, '.+\.py$'):
data = read_file(pjoin(path, fname)) data = read_file(pjoin(path, fname))
modelfile = 'models.'+fname.replace(os.path.sep,'.') modelfile = 'models.'+fname.replace(os.path.sep, '.')
filename = pjoin(folder, 'compiled', modelfile) filename = pjoin(folder, 'compiled', modelfile)
mktree(filename) mktree(filename)
write_file(filename, data) write_file(filename, data)
@@ -583,11 +578,10 @@ def run_models_in(environment):
continue continue
elif compiled: elif compiled:
code = getcfs(model, model, lambda: read_pyc(model)) code = getcfs(model, model, lambda: read_pyc(model))
elif is_gae: else:
code = getcfs(model, model, code = getcfs(model, model,
lambda: compile2(read_file(model), model)) lambda: compile2(read_file(model), model))
else:
code = getcfs(model, model, None)
restricted(code, environment, layer=model) restricted(code, environment, layer=model)
@@ -611,7 +605,6 @@ def run_controller_in(controller, function, environment):
rewrite.THREAD_LOCAL.routes.error_message % badf, rewrite.THREAD_LOCAL.routes.error_message % badf,
web2py_error=badf) web2py_error=badf)
code = getcfs(filename, filename, lambda: read_pyc(filename)) code = getcfs(filename, filename, lambda: read_pyc(filename))
restricted(code, environment, layer=filename)
elif function == '_TEST': elif function == '_TEST':
# TESTING: adjust the path to include site packages # TESTING: adjust the path to include site packages
from gluon.settings import global_settings from gluon.settings import global_settings
@@ -630,7 +623,6 @@ def run_controller_in(controller, function, environment):
environment['__symbols__'] = environment.keys() environment['__symbols__'] = environment.keys()
code = read_file(filename) code = read_file(filename)
code += TEST_CODE code += TEST_CODE
restricted(code, environment, layer=filename)
else: else:
filename = pjoin(folder, 'controllers/%s.py' filename = pjoin(folder, 'controllers/%s.py'
% controller) % controller)
@@ -645,10 +637,10 @@ def run_controller_in(controller, function, environment):
rewrite.THREAD_LOCAL.routes.error_message % badf, rewrite.THREAD_LOCAL.routes.error_message % badf,
web2py_error=badf) web2py_error=badf)
code = "%s\nresponse._vars=response._caller(%s)\n" % (code, function) code = "%s\nresponse._vars=response._caller(%s)\n" % (code, function)
if is_gae: layer = filename + ':' + function
layer = filename + ':' + function code = getcfs(layer, filename, lambda: compile2(code, layer))
code = getcfs(layer, filename, lambda: compile2(code, layer))
restricted(code, environment, filename) restricted(code, environment, layer=filename)
response = current.response response = current.response
vars = response._vars vars = response._vars
if response.postprocessing: if response.postprocessing:
@@ -683,7 +675,7 @@ def run_view_in(environment):
if not isinstance(view, str): if not isinstance(view, str):
ccode = parse_template(view, pjoin(folder, 'views'), ccode = parse_template(view, pjoin(folder, 'views'),
context=environment) context=environment)
restricted(ccode, environment, 'file stream') layer = 'file stream'
else: else:
filename = pjoin(folder, 'views', view) filename = pjoin(folder, 'views', view)
if os.path.exists(path): # compiled views if os.path.exists(path): # compiled views
@@ -714,16 +706,12 @@ def run_view_in(environment):
rewrite.THREAD_LOCAL.routes.error_message % badv, rewrite.THREAD_LOCAL.routes.error_message % badv,
web2py_error=badv) web2py_error=badv)
layer = filename layer = filename
if is_gae: # Compile the template
ccode = getcfs(layer, filename, ccode = parse_template(view,
lambda: compile2(parse_template(view, pjoin(folder, 'views'),
pjoin(folder, 'views'), context=environment)
context=environment), layer))
else: restricted(ccode, environment, layer=layer)
ccode = parse_template(view,
pjoin(folder, 'views'),
context=environment)
restricted(ccode, environment, layer)
def remove_compiled_application(folder): def remove_compiled_application(folder):
@@ -749,26 +737,3 @@ def compile_application(folder, skip_failed_views=False):
compile_controllers(folder) compile_controllers(folder)
failed_views = compile_views(folder, skip_failed_views) failed_views = compile_views(folder, skip_failed_views)
return failed_views return failed_views
def test():
"""
Example::
>>> import traceback, types
>>> environment={'x':1}
>>> open('a.py', 'w').write('print 1/x')
>>> save_pyc('a.py')
>>> os.unlink('a.py')
>>> if type(read_pyc('a.pyc'))==types.CodeType: print 'code'
code
>>> exec read_pyc('a.pyc') in environment
1
"""
return
if __name__ == '__main__':
import doctest
doctest.testmod()