speeding with map()

This commit is contained in:
Michele Comitini
2012-08-28 00:03:31 +02:00
parent 8ac8164b06
commit eb33b3fd5c
2 changed files with 18 additions and 26 deletions
+12 -24
View File
@@ -160,12 +160,8 @@ def LOAD(c=None, f='index', args=None, vars=None,
if not isinstance(args,(list,tuple)): if not isinstance(args,(list,tuple)):
args = [args] args = [args]
c = c or request.controller c = c or request.controller
other_request = Storage() other_request = Storage(request)
for key, value in request.items(): other_request['env'] = Storage(request.env)
other_request[key] = value
other_request['env'] = Storage()
for key, value in request.env.items():
other_request.env[key] = value
other_request.controller = c other_request.controller = c
other_request.function = f other_request.function = f
other_request.extension = extension or request.extension other_request.extension = extension or request.extension
@@ -200,8 +196,7 @@ def LOAD(c=None, f='index', args=None, vars=None,
page = run_controller_in(c, f, other_environment) page = run_controller_in(c, f, other_environment)
if isinstance(page, dict): if isinstance(page, dict):
other_response._vars = page other_response._vars = page
for key in page: other_response._view_environment.update(page)
other_response._view_environment[key] = page[key]
run_view_in(other_response._view_environment) run_view_in(other_response._view_environment)
page = other_response.body.getvalue() page = other_response.body.getvalue()
current.request, current.response = original_request, original_response current.request, current.response = original_request, original_response
@@ -245,12 +240,8 @@ class LoadFactory(object):
args = [args] args = [args]
c = c or request.controller c = c or request.controller
other_request = Storage() other_request = Storage(request)
for key, value in request.items(): other_request['env'] = Storage(request.env)
other_request[key] = value
other_request['env'] = Storage()
for key, value in request.env.items():
other_request.env['key'] = value
other_request.controller = c other_request.controller = c
other_request.function = f other_request.function = f
other_request.extension = extension or request.extension other_request.extension = extension or request.extension
@@ -283,8 +274,7 @@ class LoadFactory(object):
page = run_controller_in(c, f, other_environment) page = run_controller_in(c, f, other_environment)
if isinstance(page, dict): if isinstance(page, dict):
other_response._vars = page other_response._vars = page
for key in page: other_response._view_environment.update(page)
other_response._view_environment[key] = page[key]
run_view_in(other_response._view_environment) run_view_in(other_response._view_environment)
page = other_response.body.getvalue() page = other_response.body.getvalue()
current.request, current.response = original_request, original_response current.request, current.response = original_request, original_response
@@ -359,11 +349,10 @@ def build_environment(request, response, session, store_current=True):
Build the environment dictionary into which web2py files are executed. Build the environment dictionary into which web2py files are executed.
""" """
environment = {} _validators = validators
for key in html.__all__: _html = html
environment[key] = getattr(html, key) environment = dict(map(lambda key: (key, getattr(_html, key)), _html.__all__))
for key in validators.__all__: environment.update(map(lambda key: (key, getattr(_validators, key)), _validators.__all__))
environment[key] = getattr(validators, key)
if not request.env: if not request.env:
request.env = Storage() request.env = Storage()
@@ -570,8 +559,7 @@ def run_controller_in(controller, function, environment):
response = environment['response'] response = environment['response']
vars=response._vars vars=response._vars
if response.postprocessing: if response.postprocessing:
for p in response.postprocessing: vars = reduce(lambda vars, p: p(vars), response.postprocessing, vars)
vars = p(vars)
if isinstance(vars,unicode): if isinstance(vars,unicode):
vars = vars.encode('utf8') vars = vars.encode('utf8')
elif hasattr(vars,'xml') and callable(vars.xml): elif hasattr(vars,'xml') and callable(vars.xml):
@@ -592,7 +580,7 @@ def run_view_in(environment):
path = os.path.join(folder, 'compiled') path = os.path.join(folder, 'compiled')
badv = 'invalid view (%s)' % response.view badv = 'invalid view (%s)' % response.view
patterns = response.generic_patterns or [] patterns = response.generic_patterns or []
regex = re.compile('|'.join(fnmatch.translate(r) for r in 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
allow_generic = patterns and regex.search(short_action) allow_generic = patterns and regex.search(short_action)
if not isinstance(response.view, str): if not isinstance(response.view, str):
+6 -2
View File
@@ -6289,6 +6289,8 @@ class Row(dict):
this is only used to store a Row this is only used to store a Row
""" """
__slots__=()
__setattr__ = dict.__setitem__ __setattr__ = dict.__setitem__
__getattr__ = dict.__getitem__ __getattr__ = dict.__getitem__
__delattr__ = dict.__delitem__ __delattr__ = dict.__delitem__
@@ -6501,7 +6503,8 @@ class DAL(dict):
db.define_table('tablename', Field('fieldname1'), db.define_table('tablename', Field('fieldname1'),
Field('fieldname2')) Field('fieldname2'))
""" """
__slots__ = ()
@staticmethod @staticmethod
def set_folder(folder): def set_folder(folder):
""" """
@@ -7219,7 +7222,8 @@ class Table(dict):
db.users.insert(name='me') # print db.users._insert(...) to see SQL db.users.insert(name='me') # print db.users._insert(...) to see SQL
db.users.drop() db.users.drop()
""" """
__slots__ = ()
def __init__( def __init__(
self, self,
db, db,