many pep8 improvements
This commit is contained in:
+79
-65
@@ -48,7 +48,7 @@ except:
|
||||
logger.warning('unable to import py_compile')
|
||||
|
||||
is_pypy = settings.global_settings.is_pypy
|
||||
is_gae = settings.global_settings.web2py_runtime_gae
|
||||
is_gae = settings.global_settings.web2py_runtime_gae
|
||||
is_jython = settings.global_settings.is_jython
|
||||
|
||||
pjoin = os.path.join
|
||||
@@ -95,6 +95,7 @@ _TEST()
|
||||
CACHED_REGEXES = {}
|
||||
CACHED_REGEXES_MAX_SIZE = 1000
|
||||
|
||||
|
||||
def re_compile(regex):
|
||||
try:
|
||||
return CACHED_REGEXES[regex]
|
||||
@@ -104,6 +105,7 @@ def re_compile(regex):
|
||||
compiled_regex = CACHED_REGEXES[regex] = re.compile(regex)
|
||||
return compiled_regex
|
||||
|
||||
|
||||
class mybuiltin(object):
|
||||
"""
|
||||
NOTE could simple use a dict and populate it,
|
||||
@@ -114,14 +116,16 @@ class mybuiltin(object):
|
||||
try:
|
||||
return getattr(__builtin__, key)
|
||||
except AttributeError:
|
||||
raise KeyError, key
|
||||
raise KeyError(key)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
setattr(self, key, value)
|
||||
|
||||
|
||||
def LOAD(c=None, f='index', args=None, vars=None,
|
||||
extension=None, target=None,ajax=False,ajax_trap=False,
|
||||
url=None,user_signature=False, timeout=None, times=1,
|
||||
content='loading...',**attr):
|
||||
extension=None, target=None, ajax=False, ajax_trap=False,
|
||||
url=None, user_signature=False, timeout=None, times=1,
|
||||
content='loading...', **attr):
|
||||
""" LOAD a component into the action's document
|
||||
|
||||
Timing options:
|
||||
@@ -134,13 +138,14 @@ def LOAD(c=None, f='index', args=None, vars=None,
|
||||
is added on page loading without delay.
|
||||
"""
|
||||
from html import TAG, DIV, URL, SCRIPT, XML
|
||||
if args is None: args = []
|
||||
if args is None:
|
||||
args = []
|
||||
vars = Storage(vars or {})
|
||||
target = target or 'c'+str(random.random())[2:]
|
||||
attr['_id']=target
|
||||
target = target or 'c' + str(random.random())[2:]
|
||||
attr['_id'] = target
|
||||
request = current.request
|
||||
if '.' in f:
|
||||
f, extension = f.rsplit('.',1)
|
||||
f, extension = f.rsplit('.', 1)
|
||||
if url or ajax:
|
||||
url = url or URL(request.application, c, f, r=request,
|
||||
args=args, vars=vars, extension=extension,
|
||||
@@ -160,19 +165,20 @@ def LOAD(c=None, f='index', args=None, vars=None,
|
||||
if not isinstance(timeout, (int, long)):
|
||||
raise ValueError("Timeout argument must be an integer or None")
|
||||
elif timeout <= 0:
|
||||
raise ValueError("Timeout argument must be greater than zero or None")
|
||||
raise ValueError(
|
||||
"Timeout argument must be greater than zero or None")
|
||||
statement = "web2py_component('%s','%s', %s, %s);" \
|
||||
% (url, target, timeout, times)
|
||||
% (url, target, timeout, times)
|
||||
else:
|
||||
statement = "web2py_component('%s','%s');" % (url, target)
|
||||
script = SCRIPT(statement, _type="text/javascript")
|
||||
if not content is None:
|
||||
return TAG[''](script, DIV(content,**attr))
|
||||
return TAG[''](script, DIV(content, **attr))
|
||||
else:
|
||||
return TAG[''](script)
|
||||
|
||||
else:
|
||||
if not isinstance(args,(list,tuple)):
|
||||
if not isinstance(args, (list, tuple)):
|
||||
args = [args]
|
||||
c = c or request.controller
|
||||
other_request = Storage(request)
|
||||
@@ -186,17 +192,17 @@ def LOAD(c=None, f='index', args=None, vars=None,
|
||||
other_request.post_vars = Storage()
|
||||
other_response = Response()
|
||||
other_request.env.path_info = '/' + \
|
||||
'/'.join([request.application,c,f] + \
|
||||
map(str, other_request.args))
|
||||
'/'.join([request.application, c, f] +
|
||||
map(str, other_request.args))
|
||||
other_request.env.query_string = \
|
||||
vars and URL(vars=vars).split('?')[1] or ''
|
||||
other_request.env.http_web2py_component_location = \
|
||||
request.env.path_info
|
||||
other_request.cid = target
|
||||
other_request.env.http_web2py_component_element = target
|
||||
other_response.view = '%s/%s.%s' % (c,f, other_request.extension)
|
||||
other_response.view = '%s/%s.%s' % (c, f, other_request.extension)
|
||||
|
||||
other_environment = copy.copy(current.globalenv) ### NASTY
|
||||
other_environment = copy.copy(current.globalenv) # NASTY
|
||||
|
||||
other_response._view_environment = other_environment
|
||||
other_response.generic_patterns = \
|
||||
@@ -218,40 +224,41 @@ def LOAD(c=None, f='index', args=None, vars=None,
|
||||
js = None
|
||||
if ajax_trap:
|
||||
link = URL(request.application, c, f, r=request,
|
||||
args=args, vars=vars, extension=extension,
|
||||
user_signature=user_signature)
|
||||
args=args, vars=vars, extension=extension,
|
||||
user_signature=user_signature)
|
||||
js = "web2py_trap_form('%s','%s');" % (link, target)
|
||||
script = js and SCRIPT(js,_type="text/javascript") or ''
|
||||
return TAG[''](DIV(XML(page),**attr),script)
|
||||
|
||||
script = js and SCRIPT(js, _type="text/javascript") or ''
|
||||
return TAG[''](DIV(XML(page), **attr), script)
|
||||
|
||||
|
||||
class LoadFactory(object):
|
||||
"""
|
||||
Attention: this helper is new and experimental
|
||||
"""
|
||||
def __init__(self,environment):
|
||||
def __init__(self, environment):
|
||||
self.environment = environment
|
||||
|
||||
def __call__(self, c=None, f='index', args=None, vars=None,
|
||||
extension=None, target=None,ajax=False,ajax_trap=False,
|
||||
url=None,user_signature=False, content='loading...',**attr):
|
||||
if args is None: args = []
|
||||
extension=None, target=None, ajax=False, ajax_trap=False,
|
||||
url=None, user_signature=False, content='loading...', **attr):
|
||||
if args is None:
|
||||
args = []
|
||||
vars = Storage(vars or {})
|
||||
import globals
|
||||
target = target or 'c'+str(random.random())[2:]
|
||||
attr['_id']=target
|
||||
target = target or 'c' + str(random.random())[2:]
|
||||
attr['_id'] = target
|
||||
request = self.environment['request']
|
||||
if '.' in f:
|
||||
f, extension = f.rsplit('.',1)
|
||||
f, extension = f.rsplit('.', 1)
|
||||
if url or ajax:
|
||||
url = url or html.URL(request.application, c, f, r=request,
|
||||
args=args, vars=vars, extension=extension,
|
||||
user_signature=user_signature)
|
||||
script = html.SCRIPT('web2py_component("%s","%s")' % (url, target),
|
||||
_type="text/javascript")
|
||||
return html.TAG[''](script, html.DIV(content,**attr))
|
||||
return html.TAG[''](script, html.DIV(content, **attr))
|
||||
else:
|
||||
if not isinstance(args,(list,tuple)):
|
||||
if not isinstance(args, (list, tuple)):
|
||||
args = [args]
|
||||
c = c or request.controller
|
||||
|
||||
@@ -266,15 +273,15 @@ class LoadFactory(object):
|
||||
other_request.post_vars = Storage()
|
||||
other_response = globals.Response()
|
||||
other_request.env.path_info = '/' + \
|
||||
'/'.join([request.application,c,f] + \
|
||||
map(str, other_request.args))
|
||||
'/'.join([request.application, c, f] +
|
||||
map(str, other_request.args))
|
||||
other_request.env.query_string = \
|
||||
vars and html.URL(vars=vars).split('?')[1] or ''
|
||||
other_request.env.http_web2py_component_location = \
|
||||
request.env.path_info
|
||||
other_request.cid = target
|
||||
other_request.env.http_web2py_component_element = target
|
||||
other_response.view = '%s/%s.%s' % (c,f, other_request.extension)
|
||||
other_response.view = '%s/%s.%s' % (c, f, other_request.extension)
|
||||
other_environment = copy.copy(self.environment)
|
||||
other_response._view_environment = other_environment
|
||||
other_response.generic_patterns = \
|
||||
@@ -299,8 +306,8 @@ class LoadFactory(object):
|
||||
args=args, vars=vars, extension=extension,
|
||||
user_signature=user_signature)
|
||||
js = "web2py_trap_form('%s','%s');" % (link, target)
|
||||
script = js and html.SCRIPT(js,_type="text/javascript") or ''
|
||||
return html.TAG[''](html.DIV(html.XML(page),**attr),script)
|
||||
script = js and html.SCRIPT(js, _type="text/javascript") or ''
|
||||
return html.TAG[''](html.DIV(html.XML(page), **attr), script)
|
||||
|
||||
|
||||
def local_import_aux(name, reload_force=False, app='welcome'):
|
||||
@@ -321,7 +328,7 @@ def local_import_aux(name, reload_force=False, app='welcome'):
|
||||
This prevents conflict between applications and un-necessary execs.
|
||||
It can be used to import any module, including regular Python modules.
|
||||
"""
|
||||
items = name.replace('/','.')
|
||||
items = name.replace('/', '.')
|
||||
name = "applications.%s.modules.%s" % (app, items)
|
||||
module = __import__(name)
|
||||
for item in name.split(".")[1:]:
|
||||
@@ -355,12 +362,14 @@ OLD IMPLEMENTATION:
|
||||
file.close()
|
||||
imp.release_lock()
|
||||
if not module:
|
||||
raise ImportError, "cannot find module %s in %s" % (filename, modulepath)
|
||||
raise ImportError, "cannot find module %s in %s" % (
|
||||
filename, modulepath)
|
||||
return module
|
||||
"""
|
||||
|
||||
_base_environment_ = dict((k,getattr(html,k)) for k in html.__all__)
|
||||
_base_environment_.update((k,getattr(validators,k)) for k in validators.__all__)
|
||||
_base_environment_ = dict((k, getattr(html, k)) for k in html.__all__)
|
||||
_base_environment_.update(
|
||||
(k, getattr(validators, k)) for k in validators.__all__)
|
||||
_base_environment_['__builtins__'] = __builtins__
|
||||
_base_environment_['HTTP'] = HTTP
|
||||
_base_environment_['redirect'] = redirect
|
||||
@@ -372,6 +381,7 @@ _base_environment_['SQLFORM'] = SQLFORM
|
||||
_base_environment_['SQLTABLE'] = SQLTABLE
|
||||
_base_environment_['LOAD'] = LOAD
|
||||
|
||||
|
||||
def build_environment(request, response, session, store_current=True):
|
||||
"""
|
||||
Build the environment dictionary into which web2py files are executed.
|
||||
@@ -384,7 +394,7 @@ def build_environment(request, response, session, store_current=True):
|
||||
# Enable standard conditional models (i.e., /*.py, /[controller]/*.py, and
|
||||
# /[controller]/[function]/*.py)
|
||||
response.models_to_run = [r'^\w+\.py$', r'^%s/\w+\.py$' % request.controller,
|
||||
r'^%s/%s/\w+\.py$' % (request.controller, request.function)]
|
||||
r'^%s/%s/\w+\.py$' % (request.controller, request.function)]
|
||||
|
||||
t = environment['T'] = translator(request)
|
||||
c = environment['cache'] = Cache(request)
|
||||
@@ -398,23 +408,24 @@ def build_environment(request, response, session, store_current=True):
|
||||
current.cache = c
|
||||
|
||||
global __builtins__
|
||||
if is_jython: # jython hack
|
||||
if is_jython: # jython hack
|
||||
__builtins__ = mybuiltin()
|
||||
elif is_pypy: # apply the same hack to pypy too
|
||||
elif is_pypy: # apply the same hack to pypy too
|
||||
__builtins__ = mybuiltin()
|
||||
else:
|
||||
__builtins__['__import__'] = __builtin__.__import__ ### WHY?
|
||||
__builtins__['__import__'] = __builtin__.__import__ # WHY?
|
||||
environment['request'] = request
|
||||
environment['response'] = response
|
||||
environment['session'] = session
|
||||
environment['local_import'] = \
|
||||
lambda name, reload=False, app=request.application:\
|
||||
local_import_aux(name,reload,app)
|
||||
lambda name, reload=False, app=request.application:\
|
||||
local_import_aux(name, reload, app)
|
||||
BaseAdapter.set_folder(pjoin(request.folder, 'databases'))
|
||||
response._view_environment = copy.copy(environment)
|
||||
custom_import_install()
|
||||
return environment
|
||||
|
||||
|
||||
def save_pyc(filename):
|
||||
"""
|
||||
Bytecode compiles the file `filename`
|
||||
@@ -431,7 +442,7 @@ def read_pyc(filename):
|
||||
"""
|
||||
data = read_file(filename, 'rb')
|
||||
if not is_gae and data[:4] != imp.get_magic():
|
||||
raise SystemError, 'compiled code is incompatible'
|
||||
raise SystemError('compiled code is incompatible')
|
||||
return marshal.loads(data[8:])
|
||||
|
||||
|
||||
@@ -458,7 +469,7 @@ def compile_models(folder):
|
||||
path = pjoin(folder, 'models')
|
||||
for file in listdir(path, '.+\.py$'):
|
||||
data = read_file(pjoin(path, file))
|
||||
filename = pjoin(folder, 'compiled','models',file)
|
||||
filename = pjoin(folder, 'compiled', 'models', file)
|
||||
mktree(filename)
|
||||
write_file(filename, data)
|
||||
save_pyc(filename)
|
||||
@@ -473,14 +484,14 @@ def compile_controllers(folder):
|
||||
path = pjoin(folder, 'controllers')
|
||||
for file in listdir(path, '.+\.py$'):
|
||||
### why is this here? save_pyc(pjoin(path, file))
|
||||
data = read_file(pjoin(path,file))
|
||||
data = read_file(pjoin(path, file))
|
||||
exposed = regex_expose.findall(data)
|
||||
for function in exposed:
|
||||
command = data + "\nresponse._vars=response._caller(%s)\n" % \
|
||||
function
|
||||
filename = pjoin(folder, 'compiled', ('controllers/'
|
||||
+ file[:-3]).replace('/', '_')
|
||||
+ '_' + function + '.py')
|
||||
+ '_' + function + '.py')
|
||||
write_file(filename, command)
|
||||
save_pyc(filename)
|
||||
os.unlink(filename)
|
||||
@@ -500,19 +511,19 @@ def run_models_in(environment):
|
||||
for model in listdir(cpath, '^models_\w+\.pyc$', 0):
|
||||
restricted(read_pyc(model), environment, layer=model)
|
||||
path = pjoin(cpath, 'models')
|
||||
models = listdir(path, '^\w+\.pyc$',0,sort=False)
|
||||
compiled=True
|
||||
models = listdir(path, '^\w+\.pyc$', 0, sort=False)
|
||||
compiled = True
|
||||
else:
|
||||
path = pjoin(folder, 'models')
|
||||
models = listdir(path, '^\w+\.py$',0,sort=False)
|
||||
compiled=False
|
||||
models = listdir(path, '^\w+\.py$', 0, sort=False)
|
||||
compiled = False
|
||||
n = len(path) + 1
|
||||
for model in models:
|
||||
regex = environment['response'].models_to_run
|
||||
if isinstance(regex, list):
|
||||
regex = re_compile('|'.join(regex))
|
||||
file = model[n:].replace(os.path.sep, '/').replace('.pyc', '.py')
|
||||
if not regex.search(file) and c!= 'appadmin':
|
||||
if not regex.search(file) and c != 'appadmin':
|
||||
continue
|
||||
elif compiled:
|
||||
code = read_pyc(model)
|
||||
@@ -538,7 +549,7 @@ def run_controller_in(controller, function, environment):
|
||||
badf = 'invalid function (%s/%s)' % (controller, function)
|
||||
if os.path.exists(path):
|
||||
filename = pjoin(path, 'controllers_%s_%s.pyc'
|
||||
% (controller, function))
|
||||
% (controller, function))
|
||||
if not os.path.exists(filename):
|
||||
raise HTTP(404,
|
||||
rewrite.THREAD_LOCAL.routes.error_message % badf,
|
||||
@@ -548,7 +559,8 @@ def run_controller_in(controller, function, environment):
|
||||
# TESTING: adjust the path to include site packages
|
||||
from settings import global_settings
|
||||
from admin import abspath, add_path_first
|
||||
paths = (global_settings.gluon_parent, abspath('site-packages', gluon=True), abspath('gluon', gluon=True), '')
|
||||
paths = (global_settings.gluon_parent, abspath(
|
||||
'site-packages', gluon=True), abspath('gluon', gluon=True), '')
|
||||
[add_path_first(path) for path in paths]
|
||||
# TESTING END
|
||||
|
||||
@@ -578,18 +590,19 @@ def run_controller_in(controller, function, environment):
|
||||
code = "%s\nresponse._vars=response._caller(%s)\n" % (code, function)
|
||||
if is_gae:
|
||||
layer = filename + ':' + function
|
||||
code = getcfs(layer, filename, lambda: compile2(code,layer))
|
||||
code = getcfs(layer, filename, lambda: compile2(code, layer))
|
||||
restricted(code, environment, filename)
|
||||
response = environment['response']
|
||||
vars=response._vars
|
||||
vars = response._vars
|
||||
if response.postprocessing:
|
||||
vars = reduce(lambda vars, p: p(vars), response.postprocessing, vars)
|
||||
if isinstance(vars,unicode):
|
||||
if isinstance(vars, unicode):
|
||||
vars = vars.encode('utf8')
|
||||
elif hasattr(vars,'xml') and callable(vars.xml):
|
||||
elif hasattr(vars, 'xml') and callable(vars.xml):
|
||||
vars = vars.xml()
|
||||
return vars
|
||||
|
||||
|
||||
def run_view_in(environment):
|
||||
"""
|
||||
Executes the view for the requested action.
|
||||
@@ -606,7 +619,7 @@ def run_view_in(environment):
|
||||
if response.generic_patterns:
|
||||
patterns = response.generic_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 = regex.search(short_action)
|
||||
else:
|
||||
allow_generic = False
|
||||
@@ -626,7 +639,7 @@ def run_view_in(environment):
|
||||
files.append('views_generic.pyc')
|
||||
# end backward compatibility code
|
||||
for f in files:
|
||||
filename = pjoin(path,f)
|
||||
filename = pjoin(path, f)
|
||||
if os.path.exists(filename):
|
||||
code = read_pyc(filename)
|
||||
restricted(code, environment, layer=filename)
|
||||
@@ -648,13 +661,14 @@ def run_view_in(environment):
|
||||
ccode = getcfs(layer, filename,
|
||||
lambda: compile2(parse_template(view,
|
||||
pjoin(folder, 'views'),
|
||||
context=environment),layer))
|
||||
context=environment), layer))
|
||||
else:
|
||||
ccode = parse_template(view,
|
||||
pjoin(folder, 'views'),
|
||||
context=environment)
|
||||
restricted(ccode, environment, layer)
|
||||
|
||||
|
||||
def remove_compiled_application(folder):
|
||||
"""
|
||||
Deletes the folder `compiled` containing the compiled application.
|
||||
@@ -662,7 +676,7 @@ def remove_compiled_application(folder):
|
||||
try:
|
||||
shutil.rmtree(pjoin(folder, 'compiled'))
|
||||
path = pjoin(folder, 'controllers')
|
||||
for file in listdir(path,'.*\.pyc$',drop=False):
|
||||
for file in listdir(path, '.*\.pyc$', drop=False):
|
||||
os.unlink(file)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user