fixed some pep8 stuff
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 2.1.1 (2012-10-18 18:20:45) dev
|
||||
Version 2.1.1 (2012-10-19 09:40:10) dev
|
||||
|
||||
@@ -8,3 +8,5 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -310,3 +310,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,3 +7,4 @@ def webapp_add_wsgi_middleware(app):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -444,3 +444,4 @@ def ccache():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ def interact():
|
||||
lineno = web_debugger.lineno
|
||||
if filename:
|
||||
lines = dict([(i+1, l) for (i, l) in enumerate(
|
||||
[l.strip("\n").strip("\r") for l
|
||||
[l.strip("\n").strip("\r") for l
|
||||
in open(filename).readlines()])])
|
||||
filename = os.path.basename(filename)
|
||||
else:
|
||||
@@ -76,9 +76,9 @@ def interact():
|
||||
response.flash = T('"User Exception" debug mode. '
|
||||
'An error ticket could be issued!')
|
||||
|
||||
return dict(app=app, data="",
|
||||
filename=web_debugger.filename, lines=lines, lineno=lineno,
|
||||
f_globals=f_globals, f_locals=f_locals,
|
||||
return dict(app=app, data="",
|
||||
filename=web_debugger.filename, lines=lines, lineno=lineno,
|
||||
f_globals=f_globals, f_locals=f_locals,
|
||||
exception=web_debugger.exception_info)
|
||||
|
||||
def step():
|
||||
@@ -120,8 +120,8 @@ def breakpoints():
|
||||
|
||||
# Get all .py files
|
||||
files = listdir(apath('', r=request), '.*\.py$')
|
||||
files = [filename for filename in files
|
||||
if filename and 'languages' not in filename
|
||||
files = [filename for filename in files
|
||||
if filename and 'languages' not in filename
|
||||
and not filename.startswith("admin")
|
||||
and not filename.startswith("examples")]
|
||||
|
||||
@@ -129,16 +129,16 @@ def breakpoints():
|
||||
Field('filename', requires=IS_IN_SET(files), label=T("Filename")),
|
||||
Field('lineno', 'integer', label=T("Line number"),
|
||||
requires=IS_NOT_EMPTY()),
|
||||
Field('temporary', 'boolean', label=T("Temporary"),
|
||||
Field('temporary', 'boolean', label=T("Temporary"),
|
||||
comment=T("deleted after first hit")),
|
||||
Field('condition', 'string', label=T("Condition"),
|
||||
comment=T("honored only if the expression evaluates to true")),
|
||||
)
|
||||
|
||||
if form.accepts(request.vars, session):
|
||||
filename = os.path.join(request.env['applications_parent'],
|
||||
filename = os.path.join(request.env['applications_parent'],
|
||||
'applications', form.vars.filename)
|
||||
err = qdb_debugger.do_set_breakpoint(filename,
|
||||
err = qdb_debugger.do_set_breakpoint(filename,
|
||||
form.vars.lineno,
|
||||
form.vars.temporary,
|
||||
form.vars.condition)
|
||||
@@ -150,9 +150,9 @@ def breakpoints():
|
||||
qdb_debugger.do_clear(item[7:])
|
||||
|
||||
breakpoints = [{'number': bp[0], 'filename': os.path.basename(bp[1]),
|
||||
'path': bp[1], 'lineno': bp[2],
|
||||
'temporary': bp[3], 'enabled': bp[4], 'hits': bp[5],
|
||||
'condition': bp[6]}
|
||||
'path': bp[1], 'lineno': bp[2],
|
||||
'temporary': bp[3], 'enabled': bp[4], 'hits': bp[5],
|
||||
'condition': bp[6]}
|
||||
for bp in qdb_debugger.do_list_breakpoint()]
|
||||
|
||||
return dict(breakpoints=breakpoints, form=form)
|
||||
@@ -160,11 +160,11 @@ def breakpoints():
|
||||
|
||||
def toggle_breakpoint():
|
||||
"Set or clear a breakpoint"
|
||||
|
||||
|
||||
lineno = None
|
||||
ok = None
|
||||
try:
|
||||
filename = os.path.join(request.env['applications_parent'],
|
||||
filename = os.path.join(request.env['applications_parent'],
|
||||
'applications', request.vars.filename)
|
||||
if not request.vars.data:
|
||||
# ace send us the line number!
|
||||
@@ -184,7 +184,7 @@ def toggle_breakpoint():
|
||||
no, bp_filename, bp_lineno, temporary, enabled, hits, cond = bp
|
||||
if filename == bp_filename and lineno == bp_lineno:
|
||||
err = qdb_debugger.do_clear_breakpoint(filename, lineno)
|
||||
response.flash = T("Removed Breakpoint on %s at line %s", (
|
||||
response.flash = T("Removed Breakpoint on %s at line %s", (
|
||||
filename, lineno))
|
||||
ok = False
|
||||
break
|
||||
@@ -199,3 +199,4 @@ def toggle_breakpoint():
|
||||
session.flash = str(e)
|
||||
return response.json({'ok': ok, 'lineno': lineno})
|
||||
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ def site():
|
||||
else:
|
||||
session.flash = \
|
||||
DIV(T('unable to create application "%s"' % appname),
|
||||
PRE(error))
|
||||
PRE(error))
|
||||
redirect(URL(r=request))
|
||||
|
||||
elif form_update.accepted:
|
||||
@@ -241,18 +241,18 @@ def site():
|
||||
DIV(T('Unable to download app because:'),PRE(str(e)))
|
||||
redirect(URL(r=request))
|
||||
fname = form_update.vars.url
|
||||
|
||||
|
||||
elif form_update.accepted and form_update.vars.file:
|
||||
fname = request.vars.file.filename
|
||||
f = request.vars.file.file
|
||||
|
||||
|
||||
else:
|
||||
session.flash = 'No file uploaded and no URL specified'
|
||||
redirect(URL(r=request))
|
||||
|
||||
if f:
|
||||
appname = cleanpath(form_update.vars.name)
|
||||
installed = app_install(appname, f,
|
||||
installed = app_install(appname, f,
|
||||
request, fname,
|
||||
overwrite=form_update.vars.overwrite)
|
||||
if f and installed:
|
||||
@@ -282,7 +282,7 @@ def site():
|
||||
|
||||
apps = sorted(apps,lambda a,b:cmp(a.upper(),b.upper()))
|
||||
|
||||
return dict(app=None, apps=apps, myversion=myversion,
|
||||
return dict(app=None, apps=apps, myversion=myversion,
|
||||
form_create=form_create, form_update=form_update)
|
||||
|
||||
|
||||
@@ -340,7 +340,7 @@ def pack_plugin():
|
||||
|
||||
def upgrade_web2py():
|
||||
dialog = FORM.confirm(T('Upgrade'),
|
||||
{T('Cancel'):URL('site')})
|
||||
{T('Cancel'):URL('site')})
|
||||
if dialog.accepted:
|
||||
(success, error) = upgrade(request)
|
||||
if success:
|
||||
@@ -355,7 +355,7 @@ def uninstall():
|
||||
|
||||
dialog = FORM.confirm(T('Uninstall'),
|
||||
{T('Cancel'):URL('site')})
|
||||
|
||||
|
||||
if dialog.accepted:
|
||||
if MULTI_USER_MODE:
|
||||
if is_manager() and db(db.app.name==app).delete():
|
||||
@@ -1227,7 +1227,7 @@ def create_file():
|
||||
if request.vars.plugin and not filename.startswith('plugin_%s/' % request.vars.plugin):
|
||||
filename = 'plugin_%s/%s' % (request.vars.plugin, filename)
|
||||
text = ''
|
||||
|
||||
|
||||
else:
|
||||
redirect(request.vars.sender+anchor)
|
||||
|
||||
@@ -1641,7 +1641,7 @@ def git_pull():
|
||||
session.flash = GIT_MISSING
|
||||
redirect(URL('site'))
|
||||
dialog = FORM.confirm(T('Pull'),
|
||||
{T('Cancel'):URL('site')})
|
||||
{T('Cancel'):URL('site')})
|
||||
if dialog.accepted:
|
||||
try:
|
||||
repo = Repo(os.path.join(apath(r=request),app))
|
||||
@@ -1698,3 +1698,4 @@ def git_push():
|
||||
redirect(URL('site'))
|
||||
return dict(app=app,form=form)
|
||||
|
||||
|
||||
|
||||
@@ -91,3 +91,4 @@ def callback():
|
||||
return (output+errors).replace('\n','<br/>')
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -82,3 +82,4 @@ def revision():
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ def deploy():
|
||||
kill()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
ignore_apps = [item for item in apps if not item in form.vars.applications]
|
||||
regex = re.compile('\(applications/\(.*')
|
||||
w2p_origin = os.getcwd()
|
||||
@@ -44,13 +44,13 @@ def deploy():
|
||||
#shutil.copytree(appsrc,appdest)
|
||||
index.add(['wsgi/'+osname+'/applications/'+i])
|
||||
new_commit = index.commit("Deploy from Web2py IDE")
|
||||
|
||||
|
||||
origin = repo.remotes.origin
|
||||
origin.push
|
||||
origin.push()
|
||||
#Git code ends here
|
||||
return dict(form=form,command=cmd)
|
||||
|
||||
|
||||
class EXISTS(object):
|
||||
def __init__(self, error_message='file not found'):
|
||||
self.error_message = error_message
|
||||
@@ -58,3 +58,4 @@ class EXISTS(object):
|
||||
if os.path.exists(value):
|
||||
return (value,None)
|
||||
return (value,self.error_message)
|
||||
|
||||
|
||||
@@ -8,3 +8,4 @@ def about():
|
||||
return locals()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -45,3 +45,4 @@ def reset():
|
||||
return 'done'
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -29,3 +29,4 @@ def profiler():
|
||||
return data
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ def attach_debugger(host='localhost', port=6000, authkey='secret password'):
|
||||
|
||||
if isinstance(authkey, unicode):
|
||||
authkey = authkey.encode('utf8')
|
||||
|
||||
|
||||
if not hasattr(gluon.debug, 'qdb_listener'):
|
||||
# create a remote debugger server and wait for connection
|
||||
address = (host, port) # family is deduced to be 'AF_INET'
|
||||
@@ -128,3 +128,4 @@ def call():
|
||||
session.forget()
|
||||
return service()
|
||||
|
||||
|
||||
|
||||
@@ -556,3 +556,4 @@ def call(): return service()
|
||||
os.unlink(file)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ TEXT_EDITOR = 'codemirror' or 'ace' or 'edit_area' or 'amy'
|
||||
|
||||
## Editor Color scheme (only for ace)
|
||||
TEXT_EDITOR_THEME = (
|
||||
"chrome", "clouds", "clouds_midnight", "cobalt", "crimson_editor", "dawn",
|
||||
"chrome", "clouds", "clouds_midnight", "cobalt", "crimson_editor", "dawn",
|
||||
"dreamweaver", "eclipse", "idle_fingers", "kr_theme", "merbivore",
|
||||
"merbivore_soft", "monokai", "mono_industrial", "pastel_on_dark",
|
||||
"merbivore_soft", "monokai", "mono_industrial", "pastel_on_dark",
|
||||
"solarized_dark", "solarized_light", "textmate", "tomorrow",
|
||||
"tomorrow_night", "tomorrow_night_blue", "tomorrow_night_bright",
|
||||
"tomorrow_night_eighties", "twilight", "vibrant_ink")[0]
|
||||
@@ -80,3 +80,4 @@ if 'adminLanguage' in request.cookies and not (request.cookies['adminLanguage']
|
||||
T.force(request.cookies['adminLanguage'].value)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -30,3 +30,4 @@ from gluon.restricted import *
|
||||
from gluon.compileapp import compile_application, remove_compiled_application
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ if request.controller == "webservices":
|
||||
time.sleep(10)
|
||||
raise HTTP(403,"Not authorized")
|
||||
elif not session.authorized and not \
|
||||
(request.controller+'/'+request.function in
|
||||
(request.controller+'/'+request.function in
|
||||
('default/index','default/user','plugin_jqmobile/index','plugin_jqmobile/about')):
|
||||
|
||||
if request.env.query_string:
|
||||
@@ -169,3 +169,4 @@ if request.controller=='appadmin' and DEMO_MODE:
|
||||
session.flash = 'Appadmin disabled in demo mode'
|
||||
redirect(URL('default','sites'))
|
||||
|
||||
|
||||
|
||||
@@ -36,3 +36,4 @@ def searchbox(elementid):
|
||||
return TAG[''](LABEL(IMG(_id="search_start",_src=URL('static', 'images/search.png'), _alt=T('filter')), _class='icon', _for=elementid), ' ', INPUT(_id=elementid, _type='text', _size=12))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,3 +38,4 @@ def is_manager():
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ if not session.authorized:
|
||||
else:
|
||||
response.menu.append((T('Logout'), False,
|
||||
URL(_a,'default',f='logout')))
|
||||
response.menu.append((T('Debug'), False,
|
||||
response.menu.append((T('Debug'), False,
|
||||
URL(_a, 'debug','interact')))
|
||||
|
||||
if os.path.exists('applications/examples'):
|
||||
@@ -35,3 +35,4 @@ else:
|
||||
response.menu.append((T('Help'), False, 'http://web2py.com/examples'))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,3 +3,4 @@ response.files.append(URL('static','plugin_multiselect/multi-select.css'))
|
||||
response.files.append(URL('static','plugin_multiselect/start.js'))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -21,3 +21,4 @@ def fade():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -444,3 +444,4 @@ def ccache():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -49,3 +49,4 @@ def cache_controller_and_view():
|
||||
return response.render(d)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -74,3 +74,4 @@ def changelog():
|
||||
filename = os.path.join(request.env.gluon_parent, 'CHANGELOG')
|
||||
return response.render(dict(changelog=MARKMIN(read_file(filename))))
|
||||
|
||||
|
||||
|
||||
@@ -26,3 +26,4 @@ def form():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -80,3 +80,4 @@ def vars():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -23,3 +23,4 @@ def basic():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -11,3 +11,4 @@ def counter():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -138,3 +138,4 @@ Quoted text
|
||||
def ajaxwiki_onclick():
|
||||
return MARKMIN(request.vars.text).xml()
|
||||
|
||||
|
||||
|
||||
@@ -8,3 +8,4 @@ def index():
|
||||
#sheet.cell('r0c3',value='=r0c0+r0c1+r0c2',readonly=True)
|
||||
return dict(sheet=sheet)
|
||||
|
||||
|
||||
|
||||
@@ -34,3 +34,4 @@ def beautify():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -47,3 +47,4 @@ def code_feed_reader(project,mode='div'):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,3 +38,4 @@ def get_content(b=None,\
|
||||
|
||||
return html
|
||||
|
||||
|
||||
|
||||
@@ -43,3 +43,4 @@ def toggle_menuclass(cssclass='pressed',menuid='headermenu'):
|
||||
else:
|
||||
return ''
|
||||
|
||||
|
||||
|
||||
@@ -444,3 +444,4 @@ def ccache():
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -71,3 +71,4 @@ def data():
|
||||
LOAD('default','data.load',args='tables',ajax=True,user_signature=True)
|
||||
"""
|
||||
return dict(form=crud())
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
if not request.env.web2py_runtime_gae:
|
||||
## if NOT running on Google App Engine use SQLite or other DB
|
||||
db = DAL('sqlite://storage.sqlite')
|
||||
db = DAL('sqlite://storage.sqlite')
|
||||
else:
|
||||
## connect to Google BigTable (optional 'google:datastore://namespace')
|
||||
db = DAL('google:datastore')
|
||||
@@ -81,3 +81,4 @@ use_janrain(auth,filename='private/janrain.key')
|
||||
|
||||
## after defining tables, uncomment below to enable auditing
|
||||
# auth.enable_record_versioning(db)
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ def _():
|
||||
# shortcuts
|
||||
app = request.application
|
||||
ctr = request.controller
|
||||
# useful links to internal and external resources
|
||||
# useful links to internal and external resources
|
||||
response.menu+=[
|
||||
(SPAN('web2py',_class='highlighted'),False, 'http://web2py.com', [
|
||||
(T('My Sites'),False,URL('admin','default','site')),
|
||||
@@ -99,3 +99,4 @@ def _():
|
||||
)]
|
||||
_()
|
||||
|
||||
|
||||
|
||||
@@ -66,3 +66,4 @@ wsgiref.handlers.CGIHandler().run(gluon.main.wsgibase)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -56,3 +56,4 @@ fcgi.WSGIServer(application, bindAddress='/tmp/fcgi.sock').run()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -102,3 +102,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -53,3 +53,4 @@ if 0:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -481,3 +481,4 @@ def create_missing_app_folders(request):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+6
-5
@@ -46,13 +46,13 @@ class CacheAbstract(object):
|
||||
Main function is now to provide referenced api documentation.
|
||||
|
||||
Use CacheInRam or CacheOnDisk instead which are derived from this class.
|
||||
|
||||
|
||||
Attentions, Michele says:
|
||||
|
||||
There are signatures inside gdbm files that are used directly
|
||||
by the python gdbm adapter that often are lagging behind in the
|
||||
detection code in python part.
|
||||
On every occasion that a gdbm store is probed by the python adapter,
|
||||
On every occasion that a gdbm store is probed by the python adapter,
|
||||
the probe fails, because gdbm file version is newer.
|
||||
Using gdbm directly from C would work, because there is backward
|
||||
compatibility, but not from python!
|
||||
@@ -258,7 +258,7 @@ class CacheOnDisk(CacheAbstract):
|
||||
on self.locker first. Replaces the close method of the
|
||||
returned shelf instance with one that releases the lock upon
|
||||
closing."""
|
||||
|
||||
|
||||
storage = None
|
||||
locker = None
|
||||
locked = False
|
||||
@@ -296,7 +296,7 @@ class CacheOnDisk(CacheAbstract):
|
||||
self.initialized = False
|
||||
self.request = request
|
||||
self.folder = folder
|
||||
|
||||
|
||||
def initialize(self):
|
||||
if self.initialized: return
|
||||
else: self.initialized = True
|
||||
@@ -468,7 +468,7 @@ class Cache(object):
|
||||
"""
|
||||
allow replacing cache.ram with cache.with_prefix(cache.ram,'prefix')
|
||||
it will add prefix to all the cache keys used.
|
||||
"""
|
||||
"""
|
||||
return lambda key, f, time_expire=DEFAULT_TIME_EXPIRE, prefix=prefix:\
|
||||
cache_model(prefix + key, f, time_expire)
|
||||
|
||||
@@ -492,3 +492,4 @@ def lazy_cache(key=None,time_expire=None,cache_model='ram'):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -58,3 +58,4 @@ def getcfs(key, filename, filter=None):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -371,7 +371,7 @@ _base_environment_['SQLField'] = SQLField # for backward compatibility
|
||||
_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.
|
||||
@@ -707,3 +707,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -724,3 +724,4 @@ def contenttype(filename, default='text/plain'):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -264,3 +264,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -244,3 +244,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,3 +6,4 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -502,3 +502,4 @@ aes_Rcon = array('B',
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -205,3 +205,4 @@ if __name__=="__main__":
|
||||
print test()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3911,3 +3911,4 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class MemcacheClient(object):
|
||||
key,
|
||||
f,
|
||||
time_expire=300,
|
||||
):
|
||||
):
|
||||
key = '%s/%s' % (self.request.application, key)
|
||||
dt = time_expire
|
||||
value = None
|
||||
@@ -44,7 +44,7 @@ class MemcacheClient(object):
|
||||
obj = self.client.get(key)
|
||||
if obj:
|
||||
value = obj[1] + value
|
||||
self.client.set(key, (time.time(), value))
|
||||
self.client.set(key, (time.time(), value))
|
||||
return value
|
||||
|
||||
def clear(self, key = None):
|
||||
@@ -65,3 +65,4 @@ class MemcacheClient(object):
|
||||
|
||||
def flush_all(self,*a,**b):
|
||||
return self.client.delete(*a,**b)
|
||||
|
||||
|
||||
@@ -91,3 +91,4 @@ def autoretry_datastore_timeouts(attempts=5.0, interval=0.1, exponent=2.0):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -68,3 +68,4 @@ def pdf_from_html(html):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -20,3 +20,4 @@ def button(merchant_id="123456789012345",
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -10,3 +10,4 @@ from gluon.dal import DAL, Field, Table, Query, Set, Expression, Row, Rows, driv
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -59,3 +59,4 @@ def THUMB(image, nx=120, ny=120, gae=False, name='thumb'):
|
||||
return image
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -912,3 +912,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -128,3 +128,4 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -130,3 +130,4 @@ if __name__ == '__main__':
|
||||
test()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -172,3 +172,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -10,3 +10,4 @@ from fpdf import *
|
||||
# import warnings
|
||||
# warnings.warn("pyfpdf package name is deprecated, please use fpdf instead")
|
||||
|
||||
|
||||
|
||||
@@ -965,3 +965,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -168,3 +168,4 @@ class RedisClient(object):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ class MockTable(object):
|
||||
|
||||
class MockQuery(object):
|
||||
"""a fake Query object that supports querying by id
|
||||
and listing all keys. No other operation is supported
|
||||
and listing all keys. No other operation is supported
|
||||
"""
|
||||
def __init__(self, field=None, db=None, prefix=None, session_expiry=False):
|
||||
self.field = field
|
||||
@@ -187,15 +187,15 @@ class MockQuery(object):
|
||||
|
||||
class RecordDeleter(object):
|
||||
"""Dumb record deleter to support sessions2trash.py"""
|
||||
|
||||
|
||||
def __init__(self, db, key, keyprefix):
|
||||
self.db, self.key, self.keyprefix = db, key, keyprefix
|
||||
|
||||
|
||||
def __call__(self):
|
||||
id_idx = "%s:id_idx" % self.keyprefix
|
||||
#remove from the index
|
||||
self.db.srem(id_idx, self.key)
|
||||
#remove the key itself
|
||||
self.db.delete(self.key)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -593,3 +593,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -271,3 +271,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -152,3 +152,4 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -117,3 +117,4 @@ def sms_email(number,provider):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -880,3 +880,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -67,3 +67,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -248,3 +248,4 @@ class TaskBarIcon:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -96,3 +96,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -521,3 +521,4 @@ class mobilize(object):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ mostly for testing purposes
|
||||
|
||||
- customizable
|
||||
- supports basic auth
|
||||
- supports cookies
|
||||
- supports cookies
|
||||
- supports session cookies (tested with web2py sessions)
|
||||
- detects broken session
|
||||
- detects web2py form postbacks and handles formname and formkey
|
||||
@@ -51,7 +51,7 @@ class WebClient(object):
|
||||
|
||||
def post(self,url,data=None,cookies=None,headers=None,auth=None):
|
||||
self.url = self.app+url
|
||||
|
||||
|
||||
# if this POST form requires a postback do it
|
||||
if data and '_formname' in data and self.postbacks and \
|
||||
self.history and self.history[-1][1]!=self.url:
|
||||
@@ -202,3 +202,4 @@ if __name__ == '__main__':
|
||||
test_web2py_registration_and_login()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -195,3 +195,4 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -188,3 +188,4 @@ class TrackImporter(object):
|
||||
return file
|
||||
|
||||
TRACK_IMPORTER = TrackImporter()
|
||||
|
||||
|
||||
+9
-8
@@ -500,7 +500,7 @@ class ConnectionPool(object):
|
||||
|
||||
# ## this allows gluon to commit/rollback all dbs in this thread
|
||||
|
||||
def close(self,action='commit',really=True):
|
||||
def close(self,action='commit',really=True):
|
||||
if action:
|
||||
if callable(action):
|
||||
action(self)
|
||||
@@ -599,7 +599,7 @@ class BaseAdapter(ConnectionPool):
|
||||
support_distributed_transaction = False
|
||||
uploads_in_blob = False
|
||||
can_select_for_update = True
|
||||
|
||||
|
||||
TRUE = 'T'
|
||||
FALSE = 'F'
|
||||
types = {
|
||||
@@ -1661,7 +1661,7 @@ class BaseAdapter(ConnectionPool):
|
||||
|
||||
def prepare(self, key):
|
||||
if self.connection: self.connection.prepare()
|
||||
|
||||
|
||||
def commit_prepared(self, key):
|
||||
if self.connection: self.connection.commit()
|
||||
|
||||
@@ -6572,7 +6572,7 @@ def smart_query(fields,text):
|
||||
elif field._db._adapter.dbengine=='google:datastore' and \
|
||||
field.type in ('list:integer', 'list:string', 'list:reference'):
|
||||
if op == 'contains': new_query = field.contains(value)
|
||||
else: raise RuntimeError, "Invalid operation"
|
||||
else: raise RuntimeError, "Invalid operation"
|
||||
else: raise RuntimeError, "Invalid operation"
|
||||
if neg: new_query = ~new_query
|
||||
if query is None:
|
||||
@@ -6596,7 +6596,7 @@ class DAL(object):
|
||||
Field('fieldname2'))
|
||||
"""
|
||||
|
||||
def __new__(cls, uri='sqlite://dummy.db', *args, **kwargs):
|
||||
def __new__(cls, uri='sqlite://dummy.db', *args, **kwargs):
|
||||
if not hasattr(THREAD_LOCAL,'db_instances'):
|
||||
THREAD_LOCAL.db_instances = {}
|
||||
if not hasattr(THREAD_LOCAL,'db_instances_zombie'):
|
||||
@@ -6746,9 +6746,9 @@ class DAL(object):
|
||||
kwargs = dict(db=self,uri=uri,
|
||||
pool_size=pool_size,
|
||||
folder=folder,
|
||||
db_codec=db_codec,
|
||||
db_codec=db_codec,
|
||||
credential_decoder=credential_decoder,
|
||||
driver_args=driver_args or {},
|
||||
driver_args=driver_args or {},
|
||||
adapter_args=adapter_args or {},
|
||||
do_connect=do_connect)
|
||||
self._adapter = ADAPTERS[self._dbname](**kwargs)
|
||||
@@ -7184,7 +7184,7 @@ def index():
|
||||
|
||||
def close(self):
|
||||
self._adapter.close()
|
||||
if self._db_uid in THREAD_LOCAL.db_instances:
|
||||
if self._db_uid in THREAD_LOCAL.db_instances:
|
||||
db_group = THREAD_LOCAL.db_instances[self._db_uid]
|
||||
db_group.remove(self)
|
||||
if not db_group:
|
||||
@@ -9548,3 +9548,4 @@ DAL.Table = Table # was necessary in gluon/globals.py session.connect
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
||||
|
||||
@@ -193,3 +193,4 @@ gluon.main.global_settings.debugging = True
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -79,3 +79,4 @@ def decoder(buffer):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -398,3 +398,4 @@ def abspath(*relpath, **base):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+13
-12
@@ -251,11 +251,11 @@ class Response(Storage):
|
||||
if item.endswith('.css'):
|
||||
has_css = True
|
||||
files.append(item)
|
||||
|
||||
|
||||
if have_minify and ((self.optimize_css and has_css) or (self.optimize_js and has_js)):
|
||||
# cache for 5 minutes by default
|
||||
key = hashlib.md5(repr(files)).hexdigest()
|
||||
|
||||
|
||||
cache = self.cache_includes or (current.cache.ram, 60*5)
|
||||
def call_minify(files=files):
|
||||
return minify.minify(files,
|
||||
@@ -344,7 +344,7 @@ class Response(Storage):
|
||||
os.path.getsize(filename)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
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 \
|
||||
@@ -388,7 +388,7 @@ class Response(Storage):
|
||||
headers['Content-Disposition'] = \
|
||||
'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)
|
||||
@@ -425,9 +425,9 @@ class Response(Storage):
|
||||
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) -
|
||||
dbtables = dict([(regex_nopasswd.sub('******',i.uri),
|
||||
{'defined':
|
||||
sorted(list(set(i.db.tables) -
|
||||
set(i.db._LAZY_TABLES.keys()))) or
|
||||
'[no defined tables]',
|
||||
'lazy': sorted(i.db._LAZY_TABLES.keys()) or
|
||||
@@ -489,7 +489,7 @@ class Session(Storage):
|
||||
response.session_id_name = 'session_id_%s' % masterapp.lower()
|
||||
response.session_data_name = 'session_data_%s' % masterapp.lower()
|
||||
response.session_cookie_expires = cookie_expires
|
||||
|
||||
|
||||
# Load session data from cookie
|
||||
cookies = request.cookies
|
||||
|
||||
@@ -505,7 +505,7 @@ class Session(Storage):
|
||||
session_cookie_data = cookies[response.session_data_name].value
|
||||
else:
|
||||
session_cookie_data = None
|
||||
|
||||
|
||||
# if we are supposed to use cookie based session data
|
||||
if cookie_key:
|
||||
response.session_storage_type = 'cookie'
|
||||
@@ -658,11 +658,11 @@ class Session(Storage):
|
||||
name = response.session_data_name
|
||||
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 = response.cookies
|
||||
rcookies.pop(name,None)
|
||||
rcookies[name] = value
|
||||
rcookies[name]['path'] = '/'
|
||||
if expires:
|
||||
if expires:
|
||||
rcookies[name]['expires'] = expires.strftime(FMT)
|
||||
return True
|
||||
|
||||
@@ -751,3 +751,4 @@ class Session(Storage):
|
||||
del response.session_file
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
@@ -349,3 +349,4 @@ if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -2064,7 +2064,7 @@ class FORM(DIV):
|
||||
message_onfailure = kwargs.get('message_onfailure',
|
||||
current.T("Errors in form, please check it out."))
|
||||
message_onchange = kwargs.get('message_onchange',
|
||||
current.T("Form consecutive submissions not allowed. " +
|
||||
current.T("Form consecutive submissions not allowed. " +
|
||||
"Try re-submitting or refreshing the form page."))
|
||||
next = kwargs.get('next',None)
|
||||
for key in ('message_onsuccess','message_onfailure','onsuccess',
|
||||
@@ -2535,3 +2535,4 @@ class MARKMIN(XmlComponent):
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
||||
|
||||
@@ -156,3 +156,4 @@ def redirect(location, how=303, client_side=False):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -114,3 +114,4 @@ for module in base_modules + contributed_modules:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+17
-16
@@ -166,7 +166,7 @@ def read_possible_plural_rules():
|
||||
pname = modname+'.py'
|
||||
nplurals = getattr(module,'nplurals', DEFAULT_NPLURALS)
|
||||
get_plural_id = getattr(
|
||||
module,'get_plural_id',
|
||||
module,'get_plural_id',
|
||||
DEFAULT_GET_PLURAL_ID)
|
||||
construct_plural_form = getattr(
|
||||
module,'construct_plural_form',
|
||||
@@ -210,7 +210,7 @@ def read_possible_languages_aux(langdir):
|
||||
nplurals, # nplurals for current language
|
||||
get_plural_id, # get_plural_id() for current language
|
||||
construct_plural_form) # construct_plural_form() for current language
|
||||
|
||||
|
||||
plurals = {}
|
||||
flist = oslistdir(langdir)
|
||||
# scan languages directory for plural dict files:
|
||||
@@ -223,7 +223,7 @@ def read_possible_languages_aux(langdir):
|
||||
for fname in flist:
|
||||
if regex_langfile.match(fname) or fname == 'default.py':
|
||||
fname_with_path = pjoin(langdir,fname)
|
||||
d = read_dict(fname_with_path)
|
||||
d = read_dict(fname_with_path)
|
||||
lang = fname[:-3]
|
||||
langcode = d.get('!langcode!', lang if lang != 'default'
|
||||
else DEFAULT_LANGUAGE)
|
||||
@@ -241,7 +241,7 @@ def read_possible_languages_aux(langdir):
|
||||
if deflangcode not in langs:
|
||||
# create language from default.py:
|
||||
langs[deflangcode] = deflang[:2]+(0,)+deflang[3:]
|
||||
|
||||
|
||||
return langs
|
||||
|
||||
def read_possible_languages(appdir):
|
||||
@@ -403,11 +403,11 @@ class translator(object):
|
||||
|
||||
notice 1: there is no need to force since, by default, T uses
|
||||
http_accept_language to determine a translation file.
|
||||
notice 2:
|
||||
notice 2:
|
||||
en and en-en are considered different languages!
|
||||
notice 3:
|
||||
notice 3:
|
||||
if language xx-yy is not found force() probes other similar
|
||||
languages using such algorithm:
|
||||
languages using such algorithm:
|
||||
xx-yy.py -> xx.py -> xx-yy*.py -> xx*.py
|
||||
"""
|
||||
|
||||
@@ -489,7 +489,7 @@ class translator(object):
|
||||
languages[0], (tuple, list)):
|
||||
languages = languages[0]
|
||||
if not languages or languages[0] is None:
|
||||
# set default language from default.py/DEFAULT_LANGUAGE
|
||||
# set default language from default.py/DEFAULT_LANGUAGE
|
||||
pl_info = self.get_possible_languages_info('default')
|
||||
if pl_info[2]==0: # langfile_mtime
|
||||
# if languages/default.py is not found
|
||||
@@ -505,7 +505,7 @@ class translator(object):
|
||||
self.current_languages = list(languages)
|
||||
self.force(self.http_accept_language)
|
||||
|
||||
|
||||
|
||||
def plural(self, word, n):
|
||||
""" get plural form of word for number *n*
|
||||
NOTE: *word" MUST be defined in current language
|
||||
@@ -619,7 +619,7 @@ class translator(object):
|
||||
self.language_file,
|
||||
({},allocate_lock()))
|
||||
set_plural(language)
|
||||
self.accepted_language = language
|
||||
self.accepted_language = language
|
||||
return languages
|
||||
self.accepted_language = language or self.current_languages[0]
|
||||
self.language_file = self.default_language_file
|
||||
@@ -676,7 +676,7 @@ class translator(object):
|
||||
message = self.params_substitution(message, symbols)
|
||||
return XML(message.translate(ttab_out))
|
||||
|
||||
def M(self, message, symbols={}, language=None,
|
||||
def M(self, message, symbols={}, language=None,
|
||||
lazy=None, filter=None, ftag=None):
|
||||
"""
|
||||
get cached translated markmin-message with inserted parametes
|
||||
@@ -710,10 +710,10 @@ class translator(object):
|
||||
the ## notation is ignored in multiline strings and strings that
|
||||
start with ##. this is to allow markmin syntax to be translated
|
||||
"""
|
||||
if isinstance(message, unicode):
|
||||
message = message.encode('utf8')
|
||||
if isinstance(prefix, unicode):
|
||||
prefix = prefix.encode('utf8')
|
||||
if isinstance(message, unicode):
|
||||
message = message.encode('utf8')
|
||||
if isinstance(prefix, unicode):
|
||||
prefix = prefix.encode('utf8')
|
||||
key = prefix+message
|
||||
mt = self.t.get(key, None)
|
||||
if mt is not None: return mt
|
||||
@@ -831,7 +831,7 @@ class translator(object):
|
||||
"""
|
||||
get cached translated message with inserted parameters(symbols)
|
||||
"""
|
||||
message = get_from_cache(self.cache, message,
|
||||
message = get_from_cache(self.cache, message,
|
||||
lambda: self.get_t(message))
|
||||
if symbols or symbols == 0 or symbols == "":
|
||||
if isinstance(symbols, dict):
|
||||
@@ -905,3 +905,4 @@ def update_all_languages(application_path):
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
||||
|
||||
+7
-6
@@ -235,7 +235,7 @@ def serve_controller(request, response, session):
|
||||
default_headers = [
|
||||
('Content-Type', contenttype('.'+request.extension)),
|
||||
('Cache-Control','no-store, no-cache, must-revalidate, post-check=0, pre-check=0'),
|
||||
('Expires', time.strftime('%a, %d %b %Y %H:%M:%S GMT',
|
||||
('Expires', time.strftime('%a, %d %b %Y %H:%M:%S GMT',
|
||||
time.gmtime())),
|
||||
('Pragma', 'no-cache')]
|
||||
for key,value in default_headers:
|
||||
@@ -440,7 +440,7 @@ def wsgibase(environ, responder):
|
||||
local_hosts = global_settings.local_hosts
|
||||
client = get_client(env)
|
||||
x_req_with = str(env.http_x_requested_with).lower()
|
||||
|
||||
|
||||
request.update(
|
||||
client = client,
|
||||
folder = abspath('applications',app) + os.sep,
|
||||
@@ -524,14 +524,14 @@ def wsgibase(environ, responder):
|
||||
import gluon.debug
|
||||
# activate the debugger
|
||||
gluon.debug.dbg.do_debug(mainpyfile=request.folder)
|
||||
|
||||
|
||||
serve_controller(request, response, session)
|
||||
|
||||
except HTTP, http_response:
|
||||
|
||||
if static_file:
|
||||
return http_response.to(responder,env=env)
|
||||
|
||||
|
||||
if request.body:
|
||||
request.body.close()
|
||||
|
||||
@@ -557,9 +557,9 @@ def wsgibase(environ, responder):
|
||||
# if session not in db try store session on filesystem
|
||||
# this must be done after trying to commit database!
|
||||
# ##################################################
|
||||
|
||||
|
||||
session._try_store_in_cookie_or_file(request, response)
|
||||
|
||||
|
||||
if request.cid:
|
||||
if response.flash:
|
||||
http_response.headers['web2py-component-flash'] = urllib2.quote(xmlescape(response.flash).replace('\n',''))
|
||||
@@ -858,3 +858,4 @@ class HttpServer(object):
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
@@ -15,3 +15,4 @@ class MessageBoxHandler(logging.Handler):
|
||||
tkMessageBox.showinfo('info1', msg)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,3 +33,4 @@ regex_extend = re.compile(\
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -330,7 +330,7 @@ def crondance(applications_parent, ctype='soft', startup=False, apps=None):
|
||||
commands = command
|
||||
|
||||
# from python docs:
|
||||
# You do not need shell=True to run a batch file or
|
||||
# You do not need shell=True to run a batch file or
|
||||
# console-based executable.
|
||||
shell = False
|
||||
|
||||
@@ -348,3 +348,4 @@ def crondance(applications_parent, ctype='soft', startup=False, apps=None):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# portalocker.py
|
||||
# portalocker.py
|
||||
# Cross-platform (posix/nt) API for flock-style file locking.
|
||||
# Requires python 1.5.2 or better.
|
||||
|
||||
@@ -142,7 +142,7 @@ class LockedFile(object):
|
||||
def __del__(self):
|
||||
if not self.file is None:
|
||||
self.close()
|
||||
|
||||
|
||||
def read_locked(filename):
|
||||
fp = LockedFile(filename, 'r')
|
||||
data = fp.read()
|
||||
@@ -165,3 +165,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1718,3 +1718,4 @@ ADAPTERS['all'] = reduce(lambda a,b:a.union(b),(x for x in ADAPTERS.values()))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -100,7 +100,7 @@ class TicketStorage(Storage):
|
||||
table = self._get_table(self.db, self.tablename, app)
|
||||
rows = self.db(table.ticket_id == ticket_id).select()
|
||||
return cPickle.loads(rows[0].ticket_data) if rows else {}
|
||||
|
||||
|
||||
|
||||
|
||||
class RestrictedError(Exception):
|
||||
@@ -312,3 +312,4 @@ def snapshot(info=None, context=5, code=None, environment=None):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+7
-6
@@ -197,7 +197,7 @@ def url_out(request, environ, application, controller, function,
|
||||
host = request.env.http_host
|
||||
if not scheme or scheme is True:
|
||||
scheme = request.env.get('wsgi_url_scheme', 'http').lower() \
|
||||
if request else 'http'
|
||||
if request else 'http'
|
||||
if host:
|
||||
host_port = host if not port else host.split(':',1)[0]+':%s'%port
|
||||
url = '%s://%s%s' % (scheme, host_port, url)
|
||||
@@ -579,7 +579,7 @@ def regex_filter_in(e):
|
||||
e['REQUEST_URI'] = e['PATH_INFO'] + (query and ('?' + query) or '')
|
||||
return e
|
||||
|
||||
|
||||
|
||||
def sluggify(key):
|
||||
return key.lower().replace('.','_')
|
||||
|
||||
@@ -609,7 +609,7 @@ def regex_url_in(request, environ):
|
||||
if not match:
|
||||
raise HTTP(400,
|
||||
routes.error_message % 'invalid request',
|
||||
web2py_error='invalid path')
|
||||
web2py_error='invalid path')
|
||||
elif match.group('c')=='static':
|
||||
application = match.group('a')
|
||||
version, filename = None, match.group('z')
|
||||
@@ -623,9 +623,9 @@ def regex_url_in(request, environ):
|
||||
else:
|
||||
# ##################################################
|
||||
# parse application, controller and function
|
||||
# ##################################################
|
||||
request.application = match.group('a') or routes.default_application
|
||||
request.controller = match.group('c') or routes.default_controller
|
||||
# ##################################################
|
||||
request.application = match.group('a') or routes.default_application
|
||||
request.controller = match.group('c') or routes.default_controller
|
||||
request.function = match.group('f') or routes.default_function
|
||||
request.raw_extension = match.group('e')
|
||||
request.extension = request.raw_extension or 'html'
|
||||
@@ -1316,3 +1316,4 @@ def get_effective_router(appname):
|
||||
if not routers or appname not in routers:
|
||||
return None
|
||||
return Storage(routers[appname]) # return a copy
|
||||
|
||||
|
||||
@@ -1881,3 +1881,4 @@ if __name__=='__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user