many pep8 improvements

This commit is contained in:
mdipierro committed 2012-10-19 12:33:53 -05:00
1 parent 71ec15190b
commit 6aa5edc7ff
117 files changed
+7160 -5670

No files matched your search

+113 -87
View File
@@ -61,6 +61,7 @@ less_template = '<link href="%s" rel="stylesheet/less" type="text/css" />'
css_inline = '<style type="text/css">\n%s\n</style>'
js_inline = '<script type="text/javascript">\n%s\n</script>'
class Request(Storage):
"""
@@ -82,7 +83,7 @@ class Request(Storage):
def __init__(self):
Storage.__init__(self)
self.wsgi = Storage() # hooks to environ and start_response
self.wsgi = Storage() # hooks to environ and start_response
self.env = Storage()
self.cookies = Cookie.SimpleCookie()
self.get_vars = Storage()
@@ -116,8 +117,8 @@ class Request(Storage):
if session:
session._user_agent = user_agent
user_agent = Storage(user_agent)
for key,value in user_agent.items():
if isinstance(value,dict):
for key, value in user_agent.items():
if isinstance(value, dict):
user_agent[key] = Storage(value)
return user_agent
@@ -133,25 +134,26 @@ class Request(Storage):
current.session.secure()
def restful(self):
def wrapper(action,self=self):
def f(_action=action,_self=self,*a,**b):
def wrapper(action, self=self):
def f(_action=action, _self=self, *a, **b):
self.is_restful = True
method = _self.env.request_method
if len(_self.args) and '.' in _self.args[-1]:
_self.args[-1],_self.extension = _self.args[-1].rsplit('.',1)
_self.args[-
1], _self.extension = _self.args[-1].rsplit('.', 1)
current.response.headers['Content-Type'] = \
contenttype(_self.extension.lower())
if not method in ['GET','POST','DELETE','PUT']:
raise HTTP(400,"invalid method")
rest_action = _action().get(method,None)
if not method in ['GET', 'POST', 'DELETE', 'PUT']:
raise HTTP(400, "invalid method")
rest_action = _action().get(method, None)
if not rest_action:
raise HTTP(400,"method not supported")
raise HTTP(400, "method not supported")
try:
return rest_action(*_self.args,**_self.vars)
return rest_action(*_self.args, **_self.vars)
except TypeError, e:
exc_type, exc_value, exc_traceback = sys.exc_info()
if len(traceback.extract_tb(exc_traceback))==1:
raise HTTP(400,"invalid arguments")
if len(traceback.extract_tb(exc_traceback)) == 1:
raise HTTP(400, "invalid arguments")
else:
raise e
f.__doc__ = action.__doc__
@@ -180,8 +182,8 @@ class Response(Storage):
self.meta = Storage() # used by web2py_ajax.html
self.menu = [] # used by the default view layout
self.files = [] # used by web2py_ajax.html
self.generic_patterns = [] # patterns to allow generic views
self.delimiters = ('{{','}}')
self.generic_patterns = [] # patterns to allow generic views
self.delimiters = ('{{', '}}')
self._vars = None
self._caller = lambda f: f()
self._view_environment = None
@@ -197,7 +199,8 @@ class Response(Storage):
def render(self, *a, **b):
from compileapp import run_view_in
if len(a) > 2:
raise SyntaxError, 'Response.render can be called with two arguments, at most'
raise SyntaxError(
'Response.render can be called with two arguments, at most')
elif len(a) == 2:
(view, self._vars) = (a[0], a[1])
elif len(a) == 1 and isinstance(a[0], str):
@@ -225,9 +228,9 @@ class Response(Storage):
def include_meta(self):
s = '\n'.join(
'<meta name="%s" content="%s" />\n' % (k,xmlescape(v))
for k,v in (self.meta or {}).iteritems())
self.write(s,escape=False)
'<meta name="%s" content="%s" />\n' % (k, xmlescape(v))
for k, v in (self.meta or {}).iteritems())
self.write(s, escape=False)
def include_files(self, extensions=None):
@@ -256,44 +259,52 @@ class Response(Storage):
# cache for 5 minutes by default
key = hashlib.md5(repr(files)).hexdigest()
cache = self.cache_includes or (current.cache.ram, 60*5)
cache = self.cache_includes or (current.cache.ram, 60 * 5)
def call_minify(files=files):
return minify.minify(files,
URL('static','temp'),
URL('static', 'temp'),
current.request.folder,
self.optimize_css,
self.optimize_js)
if cache:
cache_model, time_expire = cache
files = cache_model('response.files.minified/'+key,
files = cache_model('response.files.minified/' + key,
call_minify,
time_expire)
else:
files = call_minify()
s = ''
for item in files:
if isinstance(item,str):
if isinstance(item, str):
f = item.lower().split('?')[0]
if self.static_version:
item = item.replace('/static/', '/static/_%s/' % self.static_version, 1)
if f.endswith('.css'): s += css_template % item
elif f.endswith('.js'): s += js_template % item
elif f.endswith('.coffee'): s += coffee_template % item
elif f.endswith('.less'): s += less_template % item
elif isinstance(item,(list,tuple)):
item = item.replace(
'/static/', '/static/_%s/' % self.static_version, 1)
if f.endswith('.css'):
s += css_template % item
elif f.endswith('.js'):
s += js_template % item
elif f.endswith('.coffee'):
s += coffee_template % item
elif f.endswith('.less'):
s += less_template % item
elif isinstance(item, (list, tuple)):
f = item[0]
if f=='css:inline': s += css_inline % item[1]
elif f=='js:inline': s += js_inline % item[1]
if f == 'css:inline':
s += css_inline % item[1]
elif f == 'js:inline':
s += js_inline % item[1]
self.write(s, escape=False)
def stream(
self,
stream,
chunk_size = DEFAULT_CHUNK_SIZE,
chunk_size=DEFAULT_CHUNK_SIZE,
request=None,
attachment=False,
filename=None,
):
):
"""
if a controller function::
@@ -347,7 +358,7 @@ class Response(Storage):
env = request.env
# Internet Explorer < 9.0 will not allow downloads over SSL unless caching is enabled
if request.is_https and isinstance(env.http_user_agent,str) and \
if request.is_https and isinstance(env.http_user_agent, str) and \
not re.search(r'Opera', env.http_user_agent) and \
re.search(r'MSIE [5-8][^0-9]', env.http_user_agent):
headers['Pragma'] = 'cache'
@@ -359,7 +370,7 @@ class Response(Storage):
wrapped = streamer(stream, chunk_size=chunk_size)
return wrapped
def download(self, request, db, chunk_size = DEFAULT_CHUNK_SIZE, attachment=True):
def download(self, request, db, chunk_size=DEFAULT_CHUNK_SIZE, attachment=True):
"""
example of usage in controller::
@@ -373,7 +384,7 @@ class Response(Storage):
raise HTTP(404)
name = request.args[-1]
items = re.compile('(?P<table>.*?)\.(?P<field>.*?)\..*')\
.match(name)
.match(name)
if not items:
raise HTTP(404)
(t, f) = (items.group('table'), items.group('field'))
@@ -389,9 +400,8 @@ class Response(Storage):
'attachment; filename=%s' % filename
return self.stream(stream, chunk_size=chunk_size, request=request)
def json(self, data, default=None):
return json(data, default = default or custom_json)
return json(data, default=default or custom_json)
def xmlrpc(self, request, methods):
"""
@@ -408,7 +418,8 @@ class Response(Storage):
the add function. Example::
import xmlrpclib
connection = xmlrpclib.ServerProxy('http://hostname/app/contr/func')
connection = xmlrpclib.ServerProxy(
'http://hostname/app/contr/func')
print connection.add(3, 4)
"""
@@ -418,14 +429,14 @@ class Response(Storage):
def toolbar(self):
from html import DIV, SCRIPT, BEAUTIFY, TAG, URL, A
BUTTON = TAG.button
admin = URL("admin","default","design",
admin = URL("admin", "default", "design",
args=current.request.application)
from gluon.dal import THREAD_LOCAL
if hasattr(THREAD_LOCAL,'instances'):
dbstats = [TABLE(*[TR(PRE(row[0]),'%.2fms' % (row[1]*1000)) \
for row in i.db._timings]) \
for i in THREAD_LOCAL.instances]
dbtables = dict([(regex_nopasswd.sub('******',i.uri),
if hasattr(THREAD_LOCAL, 'instances'):
dbstats = [TABLE(*[TR(PRE(row[0]), '%.2fms' % (row[1] * 1000))
for row in i.db._timings])
for i in THREAD_LOCAL.instances]
dbtables = dict([(regex_nopasswd.sub('******', i.uri),
{'defined':
sorted(list(set(i.db.tables) -
set(i.db._LAZY_TABLES.keys()))) or
@@ -434,25 +445,35 @@ class Response(Storage):
'[no lazy tables]'})
for i in THREAD_LOCAL.instances])
else:
dbstats = [] # if no db or on GAE
dbstats = [] # if no db or on GAE
dbtables = {}
u = web2py_uuid()
backtotop = A('Back to top', _href="#totop-%s" % u)
return DIV(
BUTTON('design',_onclick="document.location='%s'" % admin),
BUTTON('request',_onclick="jQuery('#request-%s').slideToggle()"%u),
BUTTON('response',_onclick="jQuery('#response-%s').slideToggle()"%u),
BUTTON('session',_onclick="jQuery('#session-%s').slideToggle()"%u),
BUTTON('db tables',_onclick="jQuery('#db-tables-%s').slideToggle()"%u),
BUTTON('db stats',_onclick="jQuery('#db-stats-%s').slideToggle()"%u),
DIV(BEAUTIFY(current.request), backtotop,_class="hidden",_id="request-%s"%u),
DIV(BEAUTIFY(current.session), backtotop, _class="hidden",_id="session-%s"%u),
DIV(BEAUTIFY(current.response), backtotop, _class="hidden",_id="response-%s"%u),
DIV(BEAUTIFY(dbtables), backtotop, _class="hidden",_id="db-tables-%s"%u),
DIV(BEAUTIFY(dbstats), backtotop, _class="hidden",_id="db-stats-%s"%u),
SCRIPT("jQuery('.hidden').hide()")
,_id="totop-%s" % u
)
BUTTON('design', _onclick="document.location='%s'" % admin),
BUTTON('request',
_onclick="jQuery('#request-%s').slideToggle()" % u),
BUTTON('response',
_onclick="jQuery('#response-%s').slideToggle()" % u),
BUTTON('session',
_onclick="jQuery('#session-%s').slideToggle()" % u),
BUTTON('db tables',
_onclick="jQuery('#db-tables-%s').slideToggle()" % u),
BUTTON('db stats',
_onclick="jQuery('#db-stats-%s').slideToggle()" % u),
DIV(BEAUTIFY(current.request), backtotop,
_class="hidden", _id="request-%s" % u),
DIV(BEAUTIFY(current.session), backtotop,
_class="hidden", _id="session-%s" % u),
DIV(BEAUTIFY(current.response), backtotop,
_class="hidden", _id="response-%s" % u),
DIV(BEAUTIFY(dbtables), backtotop, _class="hidden",
_id="db-tables-%s" % u),
DIV(BEAUTIFY(
dbstats), backtotop, _class="hidden", _id="db-stats-%s" % u),
SCRIPT("jQuery('.hidden').hide()"), _id="totop-%s" % u
)
class Session(Storage):
@@ -468,19 +489,21 @@ class Session(Storage):
tablename='web2py_session',
masterapp=None,
migrate=True,
separate = None,
separate=None,
check_client=False,
cookie_key=None,
cookie_expires=None,
compression_level=None
):
):
"""
separate can be separate=lambda(session_name): session_name[-2:]
and it is used to determine a session prefix.
separate can be True and it is set to session_name[-2:]
"""
if request is None: request = current.request
if response is None: response = current.response
if request is None:
request = current.request
if response is None:
response = current.response
if separate == True:
separate = lambda session_name: session_name[-2:]
self._unlock(response)
@@ -512,7 +535,8 @@ class Session(Storage):
response.session_cookie_key = cookie_key
response.session_cookie_compression_level = compression_level
if session_cookie_data:
data = secure_loads(session_cookie_data,cookie_key,compression_level=compression_level)
data = secure_loads(session_cookie_data, cookie_key,
compression_level=compression_level)
if data:
self.update(data)
# else if we are supposed to use file based sessions
@@ -527,7 +551,7 @@ class Session(Storage):
if regex_session_id.match(response.session_id):
response.session_filename = \
os.path.join(up(request.folder), masterapp,
'sessions', response.session_id)
'sessions', response.session_id)
else:
response.session_id = None
# do not try load the data from file is these was data in cookie
@@ -543,8 +567,8 @@ class Session(Storage):
response.session_file.seek(0)
oc = response.session_filename.split('/')[-1]\
.split('-')[0]
if check_client and client!=oc:
raise Exception, "cookie attack"
if check_client and client != oc:
raise Exception("cookie attack")
finally:
pass
#This causes admin login to break. Must find out why.
@@ -557,7 +581,7 @@ class Session(Storage):
if separate:
prefix = separate(response.session_id)
response.session_id = '%s/%s' % \
(prefix,response.session_id)
(prefix, response.session_id)
response.session_filename = \
os.path.join(up(request.folder), masterapp,
'sessions', response.session_id)
@@ -585,25 +609,25 @@ class Session(Storage):
Field('locked', 'boolean', default=False),
Field('client_ip', length=64),
Field('created_datetime', 'datetime',
default=request.now),
default=request.now),
Field('modified_datetime', 'datetime'),
Field('unique_key', length=64),
Field('session_data', 'blob'),
migrate=table_migrate,
)
table = db[tname] # to allow for lazy table
)
table = db[tname] # to allow for lazy table
try:
# Get session data out of the database
(record_id, unique_key) = response.session_id.split(':')
if record_id == '0':
raise Exception, 'record_id == 0'
raise Exception('record_id == 0')
# Select from database
if not session_cookie_data:
rows = db(table.id == record_id).select()
# Make sure the session data exists in the database
if len(rows) == 0 or rows[0].unique_key != unique_key:
raise Exception, 'No record'
raise Exception('No record')
# rows[0].update_record(locked=True)
# Unpickle the data
session_data = cPickle.loads(rows[0].session_data)
@@ -620,7 +644,8 @@ class Session(Storage):
rcookies[response.session_id_name] = response.session_id
rcookies[response.session_id_name]['path'] = '/'
if cookie_expires:
rcookies[response.session_id_name]['expires'] = cookie_expires.strftime(FMT)
rcookies[response.session_id_name][
'expires'] = cookie_expires.strftime(FMT)
# if not cookie_key, but session_data_name in cookies
# expire session_data_name from cookies
if session_cookie_data:
@@ -637,10 +662,10 @@ class Session(Storage):
self._start_timestamp = datetime.datetime.today()
return True
def is_expired(self, seconds = 3600):
def is_expired(self, seconds=3600):
now = datetime.datetime.today()
if not self._last_timestamp or \
self._last_timestamp + datetime.timedelta(seconds = seconds) > now:
self._last_timestamp + datetime.timedelta(seconds=seconds) > now:
self._last_timestamp = now
return False
else:
@@ -654,12 +679,13 @@ class Session(Storage):
self._forget = True
def _try_store_in_cookie(self, request, response):
if response.session_storage_type!='cookie': return False
if response.session_storage_type != 'cookie':
return False
name = response.session_data_name
value = secure_dumps(dict(self),response.session_cookie_key, compression_level=response.session_cookie_compression_level)
value = secure_dumps(dict(self), response.session_cookie_key, compression_level=response.session_cookie_compression_level)
expires = response.session_cookie_expires
rcookies = response.cookies
rcookies.pop(name,None)
rcookies.pop(name, None)
rcookies[name] = value
rcookies[name]['path'] = '/'
if expires:
@@ -667,7 +693,7 @@ class Session(Storage):
return True
def _unchanged(self):
previous_session_hash = self.pop('_session_hash',None)
previous_session_hash = self.pop('_session_hash', None)
if not previous_session_hash and not \
any(value is not None for value in self.itervalues()):
return True
@@ -683,7 +709,7 @@ class Session(Storage):
# don't save if file-based sessions,
# no session id, or session being forgotten
# or no changes to session
if response.session_storage_type!='db' or not response.session_id \
if response.session_storage_type != 'db' or not response.session_id \
or self._forget or self._unchanged():
return False
@@ -692,7 +718,7 @@ class Session(Storage):
unique_key = response.session_db_unique_key
dd = dict(locked=False,
client_ip=request.client.replace(':','.'),
client_ip=request.client.replace(':', '.'),
modified_datetime=request.now,
session_data=cPickle.dumps(dict(self)),
unique_key=unique_key)
@@ -708,11 +734,11 @@ class Session(Storage):
def _try_store_in_cookie_or_file(self, request, response):
return \
self._try_store_in_cookie(request,response) or \
self._try_store_in_file(request,response)
self._try_store_in_cookie(request, response) or \
self._try_store_in_file(request, response)
def _try_store_in_file(self, request, response):
if response.session_storage_type!='file':
if response.session_storage_type != 'file':
return False
try:
@@ -740,7 +766,7 @@ class Session(Storage):
try:
portalocker.unlock(response.session_file)
response.session_locked = False
except: ### this should never happen but happens in Windows
except: # this should never happen but happens in Windows
pass
def _close(self, response):