minor compileapp refactor
This commit is contained in:
+27
-26
@@ -230,8 +230,8 @@ def LOAD(c=None, f='index', args=None, vars=None,
|
|||||||
if isinstance(page, dict):
|
if isinstance(page, dict):
|
||||||
other_response._vars = page
|
other_response._vars = page
|
||||||
other_response._view_environment.update(page)
|
other_response._view_environment.update(page)
|
||||||
run_view_in(other_response._view_environment)
|
page = run_view_in(other_response._view_environment)
|
||||||
page = other_response.body.getvalue()
|
|
||||||
current.request, current.response = original_request, original_response
|
current.request, current.response = original_request, original_response
|
||||||
js = None
|
js = None
|
||||||
if ajax_trap:
|
if ajax_trap:
|
||||||
@@ -309,8 +309,8 @@ class LoadFactory(object):
|
|||||||
if isinstance(page, dict):
|
if isinstance(page, dict):
|
||||||
other_response._vars = page
|
other_response._vars = page
|
||||||
other_response._view_environment.update(page)
|
other_response._view_environment.update(page)
|
||||||
run_view_in(other_response._view_environment)
|
page = run_view_in(other_response._view_environment)
|
||||||
page = other_response.body.getvalue()
|
|
||||||
current.request, current.response = original_request, original_response
|
current.request, current.response = original_request, original_response
|
||||||
js = None
|
js = None
|
||||||
if ajax_trap:
|
if ajax_trap:
|
||||||
@@ -577,13 +577,11 @@ def run_models_in(environment):
|
|||||||
if not regex.search(fname) and c != 'appadmin':
|
if not regex.search(fname) and c != 'appadmin':
|
||||||
continue
|
continue
|
||||||
elif compiled:
|
elif compiled:
|
||||||
code = getcfs(model, model, lambda: read_pyc(model))
|
f = lambda: read_pyc(model)
|
||||||
else:
|
else:
|
||||||
code = getcfs(model, model,
|
f = lambda: compile2(read_file(model), model)
|
||||||
lambda: compile2(read_file(model), model))
|
ccode = getcfs(model, model, f)
|
||||||
|
restricted(ccode, environment, layer=model)
|
||||||
restricted(code, environment, layer=model)
|
|
||||||
|
|
||||||
|
|
||||||
def run_controller_in(controller, function, environment):
|
def run_controller_in(controller, function, environment):
|
||||||
"""
|
"""
|
||||||
@@ -594,17 +592,17 @@ def run_controller_in(controller, function, environment):
|
|||||||
|
|
||||||
# if compiled should run compiled!
|
# if compiled should run compiled!
|
||||||
folder = current.request.folder
|
folder = current.request.folder
|
||||||
path = pjoin(folder, 'compiled')
|
cpath = pjoin(folder, 'compiled')
|
||||||
badc = 'invalid controller (%s/%s)' % (controller, function)
|
badc = 'invalid controller (%s/%s)' % (controller, function)
|
||||||
badf = 'invalid function (%s/%s)' % (controller, function)
|
badf = 'invalid function (%s/%s)' % (controller, function)
|
||||||
if os.path.exists(path):
|
if os.path.exists(cpath):
|
||||||
filename = pjoin(path, 'controllers.%s.%s.pyc'
|
filename = pjoin(cpath, 'controllers.%s.%s.pyc'
|
||||||
% (controller, function))
|
% (controller, function))
|
||||||
if not os.path.exists(filename):
|
if not os.path.exists(filename):
|
||||||
raise HTTP(404,
|
raise HTTP(404,
|
||||||
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))
|
ccode = getcfs(filename, filename, lambda: read_pyc(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
|
||||||
@@ -623,6 +621,7 @@ 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
|
||||||
|
ccode = compile2(code, filename)
|
||||||
else:
|
else:
|
||||||
filename = pjoin(folder, 'controllers/%s.py'
|
filename = pjoin(folder, 'controllers/%s.py'
|
||||||
% controller)
|
% controller)
|
||||||
@@ -636,11 +635,11 @@ def run_controller_in(controller, function, environment):
|
|||||||
raise HTTP(404,
|
raise HTTP(404,
|
||||||
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)" % (code, function)
|
||||||
layer = filename + ':' + function
|
layer = "%s:%s" % (filename, function)
|
||||||
code = getcfs(layer, filename, lambda: compile2(code, layer))
|
ccode = getcfs(layer, filename, lambda: compile2(code, layer))
|
||||||
|
|
||||||
restricted(code, environment, layer=filename)
|
restricted(ccode, environment, layer=filename)
|
||||||
response = current.response
|
response = current.response
|
||||||
vars = response._vars
|
vars = response._vars
|
||||||
if response.postprocessing:
|
if response.postprocessing:
|
||||||
@@ -663,9 +662,10 @@ def run_view_in(environment):
|
|||||||
response = current.response
|
response = current.response
|
||||||
view = environment['response'].view
|
view = environment['response'].view
|
||||||
folder = request.folder
|
folder = request.folder
|
||||||
path = pjoin(folder, 'compiled')
|
cpath = pjoin(folder, 'compiled')
|
||||||
badv = 'invalid view (%s)' % view
|
badv = 'invalid view (%s)' % view
|
||||||
patterns = response.get('generic_patterns')
|
patterns = response.get('generic_patterns')
|
||||||
|
layer = None
|
||||||
if patterns:
|
if patterns:
|
||||||
regex = re_compile('|'.join(map(fnmatch.translate, patterns)))
|
regex = re_compile('|'.join(map(fnmatch.translate, patterns)))
|
||||||
short_action = '%(controller)s/%(function)s.%(extension)s' % request
|
short_action = '%(controller)s/%(function)s.%(extension)s' % request
|
||||||
@@ -678,10 +678,10 @@ def run_view_in(environment):
|
|||||||
layer = '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(cpath): # compiled views
|
||||||
x = view.replace('/', '.')
|
x = view.replace('/', '.')
|
||||||
files = ['views.%s.pyc' % x]
|
files = ['views.%s.pyc' % x]
|
||||||
is_compiled = os.path.exists(pjoin(path, files[0]))
|
is_compiled = os.path.exists(pjoin(cpath, files[0]))
|
||||||
# Don't use a generic view if the non-compiled view exists.
|
# Don't use a generic view if the non-compiled view exists.
|
||||||
if is_compiled or (not is_compiled and not os.path.exists(filename)):
|
if is_compiled or (not is_compiled and not os.path.exists(filename)):
|
||||||
if allow_generic:
|
if allow_generic:
|
||||||
@@ -693,11 +693,11 @@ def run_view_in(environment):
|
|||||||
files.append('views.generic.pyc')
|
files.append('views.generic.pyc')
|
||||||
# end backward compatibility code
|
# end backward compatibility code
|
||||||
for f in files:
|
for f in files:
|
||||||
compiled = pjoin(path, f)
|
compiled = pjoin(cpath, f)
|
||||||
if os.path.exists(compiled):
|
if os.path.exists(compiled):
|
||||||
code = getcfs(compiled, compiled, lambda: read_pyc(compiled))
|
ccode = getcfs(compiled, compiled, lambda: read_pyc(compiled))
|
||||||
restricted(code, environment, layer=compiled)
|
layer = compiled
|
||||||
return
|
break
|
||||||
if not os.path.exists(filename) and allow_generic:
|
if not os.path.exists(filename) and allow_generic:
|
||||||
view = 'generic.' + request.extension
|
view = 'generic.' + request.extension
|
||||||
filename = pjoin(folder, 'views', view)
|
filename = pjoin(folder, 'views', view)
|
||||||
@@ -713,7 +713,8 @@ def run_view_in(environment):
|
|||||||
context=environment),
|
context=environment),
|
||||||
layer))
|
layer))
|
||||||
restricted(ccode, environment, layer=layer)
|
restricted(ccode, environment, layer=layer)
|
||||||
|
# parse_template saves everything in response body
|
||||||
|
return environment['response'].body.getvalue()
|
||||||
|
|
||||||
def remove_compiled_application(folder):
|
def remove_compiled_application(folder):
|
||||||
"""
|
"""
|
||||||
|
|||||||
+2
-4
@@ -439,13 +439,11 @@ class Response(Storage):
|
|||||||
from gluon._compat import StringIO
|
from gluon._compat import StringIO
|
||||||
(obody, oview) = (self.body, self.view)
|
(obody, oview) = (self.body, self.view)
|
||||||
(self.body, self.view) = (StringIO(), view)
|
(self.body, self.view) = (StringIO(), view)
|
||||||
run_view_in(self._view_environment)
|
page = run_view_in(self._view_environment)
|
||||||
page = self.body.getvalue()
|
|
||||||
self.body.close()
|
self.body.close()
|
||||||
(self.body, self.view) = (obody, oview)
|
(self.body, self.view) = (obody, oview)
|
||||||
else:
|
else:
|
||||||
run_view_in(self._view_environment)
|
page = run_view_in(self._view_environment)
|
||||||
page = self.body.getvalue()
|
|
||||||
return page
|
return page
|
||||||
|
|
||||||
def include_meta(self):
|
def include_meta(self):
|
||||||
|
|||||||
+2
-2
@@ -180,8 +180,8 @@ def serve_controller(request, response, session):
|
|||||||
if isinstance(page, dict):
|
if isinstance(page, dict):
|
||||||
response._vars = page
|
response._vars = page
|
||||||
response._view_environment.update(page)
|
response._view_environment.update(page)
|
||||||
run_view_in(response._view_environment)
|
page = run_view_in(response._view_environment)
|
||||||
page = response.body.getvalue()
|
|
||||||
# logic to garbage collect after exec, not always, once every 100 requests
|
# logic to garbage collect after exec, not always, once every 100 requests
|
||||||
global requests
|
global requests
|
||||||
requests = ('requests' in globals()) and (requests + 1) % 100 or 0
|
requests = ('requests' in globals()) and (requests + 1) % 100 or 0
|
||||||
|
|||||||
Reference in New Issue
Block a user