commit merge
This commit is contained in:
+39
-33
@@ -296,7 +296,8 @@ def URL(
|
||||
if other.endswith('/'):
|
||||
other += '/' # add trailing slash to make last trailing empty arg explicit
|
||||
|
||||
if vars.has_key('_signature'): vars.pop('_signature')
|
||||
if '_signature' in vars:
|
||||
vars.pop('_signature')
|
||||
list_vars = []
|
||||
for (key, vals) in sorted(vars.items()):
|
||||
if not isinstance(vals, (list, tuple)):
|
||||
@@ -387,7 +388,7 @@ def verifyURL(request, hmac_key=None, hash_vars=True, salt=None, user_signature=
|
||||
|
||||
"""
|
||||
|
||||
if not request.get_vars.has_key('_signature'):
|
||||
if not '_signature' in request.get_vars:
|
||||
return False # no signature in the request URL
|
||||
|
||||
# check if user_signature requires
|
||||
@@ -484,15 +485,17 @@ class XmlComponent(object):
|
||||
components += [other]
|
||||
return CAT(*components)
|
||||
|
||||
def add_class(self, name):
|
||||
def add_class(self, name):
|
||||
""" add a class to _class attribute """
|
||||
classes = set(self['_class'].split())|set(name.split())
|
||||
c = self['_class']
|
||||
classes = (set(c.split()) if c else set())|set(name.split())
|
||||
self['_class'] = ' '.join(classes) if classes else None
|
||||
return self
|
||||
|
||||
def remove_class(self, name):
|
||||
""" remove a class from _class attribute """
|
||||
classes = set(self['_class'].split())-set(name.split())
|
||||
c = self['_class']
|
||||
classes = (set(c.split()) if c else set())-set(name.split())
|
||||
self['_class'] = ' '.join(classes) if classes else None
|
||||
return self
|
||||
|
||||
@@ -656,17 +659,17 @@ class DIV(XmlComponent):
|
||||
self.attributes = attributes
|
||||
self._fixup()
|
||||
# converts special attributes in components attributes
|
||||
self._postprocessing()
|
||||
self.parent = None
|
||||
for c in self.components:
|
||||
self._setnode(c)
|
||||
self._postprocessing()
|
||||
|
||||
def update(self, **kargs):
|
||||
"""
|
||||
dictionary like updating of the tag attributes
|
||||
"""
|
||||
|
||||
for (key, value) in kargs.items():
|
||||
for (key, value) in kargs.iteritems():
|
||||
self[key] = value
|
||||
return self
|
||||
|
||||
@@ -811,7 +814,9 @@ class DIV(XmlComponent):
|
||||
c.latest = self.latest
|
||||
c.session = self.session
|
||||
c.formname = self.formname
|
||||
if hideerror: c['hideerror'] = hideerror
|
||||
if hideerror and not \
|
||||
self.attributes.get('hideerror',False):
|
||||
c['hideerror'] = hideerror
|
||||
newstatus = c._traverse(status,hideerror) and newstatus
|
||||
|
||||
# for input, textarea, select, option
|
||||
@@ -1038,7 +1043,7 @@ class DIV(XmlComponent):
|
||||
tag = getattr(self,'tag').replace('/', '')
|
||||
if args and tag not in args:
|
||||
check = False
|
||||
for (key, value) in kargs.items():
|
||||
for (key, value) in kargs.iteritems():
|
||||
if key not in ['first_only', 'replace', 'find_text']:
|
||||
if isinstance(value, (str, int)):
|
||||
if self[key] != str(value):
|
||||
@@ -1109,16 +1114,15 @@ class DIV(XmlComponent):
|
||||
sibs = [s for s in self.parent.components if not s == self]
|
||||
matches = []
|
||||
first_only = False
|
||||
if kargs.has_key("first_only"):
|
||||
first_only = kargs["first_only"]
|
||||
del kargs["first_only"]
|
||||
if 'first_only' in kargs:
|
||||
first_only = kargs.pop('first_only')
|
||||
for c in sibs:
|
||||
try:
|
||||
check = True
|
||||
tag = getattr(c,'tag').replace("/","")
|
||||
if args and tag not in args:
|
||||
check = False
|
||||
for (key, value) in kargs.items():
|
||||
for (key, value) in kargs.iteritems():
|
||||
if c[key] != value:
|
||||
check = False
|
||||
if check:
|
||||
@@ -1682,14 +1686,14 @@ class INPUT(DIV):
|
||||
if name is None or name == '':
|
||||
return True
|
||||
name = str(name)
|
||||
|
||||
request_vars_get = self.request_vars.get
|
||||
if self['_type'] != 'checkbox':
|
||||
self['old_value'] = self['value'] or self['_value'] or ''
|
||||
value = self.request_vars.get(name, '')
|
||||
value = request_vars_get(name, '')
|
||||
self['value'] = value
|
||||
else:
|
||||
self['old_value'] = self['value'] or False
|
||||
value = self.request_vars.get(name)
|
||||
value = request_vars_get(name)
|
||||
if isinstance(value, (tuple, list)):
|
||||
self['value'] = self['_value'] in value
|
||||
else:
|
||||
@@ -1932,14 +1936,15 @@ class FORM(DIV):
|
||||
# check formname and formkey
|
||||
|
||||
status = True
|
||||
if self.session:
|
||||
formkey = self.session.get('_formkey[%s]' % self.formname, None)
|
||||
request_vars = self.request_vars
|
||||
if session:
|
||||
formkey = session.get('_formkey[%s]' % formname, None)
|
||||
# check if user tampering with form and void CSRF
|
||||
if formkey != self.request_vars._formkey:
|
||||
if formkey != request_vars._formkey:
|
||||
status = False
|
||||
if self.formname != self.request_vars._formname:
|
||||
if formname != request_vars._formname:
|
||||
status = False
|
||||
if status and self.session:
|
||||
if status and session:
|
||||
# check if editing a record that has been modified by the server
|
||||
if hasattr(self,'record_hash') and self.record_hash != formkey:
|
||||
status = False
|
||||
@@ -1983,10 +1988,10 @@ class FORM(DIV):
|
||||
|
||||
def hidden_fields(self):
|
||||
c = []
|
||||
attr = self.attributes.get('hidden',{})
|
||||
if 'hidden' in self.attributes:
|
||||
for (key, value) in self.attributes.get('hidden',{}).items():
|
||||
c.append(INPUT(_type='hidden', _name=key, _value=value))
|
||||
|
||||
c = [INPUT(_type='hidden', _name=key, _value=value)
|
||||
for (key, value) in attr.iteritems()]
|
||||
if hasattr(self, 'formkey') and self.formkey:
|
||||
c.append(INPUT(_type='hidden', _name='_formkey',
|
||||
_value=self.formkey))
|
||||
@@ -2055,7 +2060,7 @@ class FORM(DIV):
|
||||
onsuccess(self)
|
||||
if next:
|
||||
if self.vars:
|
||||
for key,value in self.vars.items():
|
||||
for key,value in self.vars.iteritems():
|
||||
next = next.replace('[%s]' % key,
|
||||
urllib.quote(str(value)))
|
||||
if not next.startswith('/'):
|
||||
@@ -2116,11 +2121,11 @@ class FORM(DIV):
|
||||
inputs = [INPUT(_type='button',
|
||||
_value=name,
|
||||
_onclick=FORM.REDIRECT_JS % link) \
|
||||
for name,link in buttons.items()]
|
||||
for name,link in buttons.iteritems()]
|
||||
inputs += [INPUT(_type='hidden',
|
||||
_name=name,
|
||||
_value=value)
|
||||
for name,value in hidden.items()]
|
||||
for name,value in hidden.iteritems()]
|
||||
form = FORM(INPUT(_type='submit',_value=text),*inputs)
|
||||
form.process()
|
||||
return form
|
||||
@@ -2268,10 +2273,11 @@ class MENU(DIV):
|
||||
select = SELECT(**self.attributes)
|
||||
for item in data:
|
||||
if len(item) <= 4 or item[4] == True:
|
||||
if item[2]:
|
||||
select.append(OPTION(CAT(prefix, item[0]), _value=item[2], _selected=item[1]))
|
||||
if len(item)>3 and len(item[3]):
|
||||
self.serialize_mobile(item[3], select, prefix = CAT(prefix, item[0], '/'))
|
||||
select.append(OPTION(CAT(prefix, item[0]),
|
||||
_value=item[2], _selected=item[1]))
|
||||
if len(item)>3 and len(item[3]):
|
||||
self.serialize_mobile(
|
||||
item[3], select, prefix = CAT(prefix, item[0], '/'))
|
||||
select['_onchange'] = 'window.location=this.value'
|
||||
return select
|
||||
|
||||
@@ -2323,7 +2329,7 @@ def test():
|
||||
>>> print form.accepts({'myvar':'34'}, formname=None)
|
||||
False
|
||||
>>> print form.xml()
|
||||
<form action="" enctype="multipart/form-data" method="post"><input class="invalidinput" name="myvar" type="text" value="34" /><div class="error" id="myvar__error">invalid expression</div></form>
|
||||
<form action="" enctype="multipart/form-data" method="post"><input class="invalidinput" name="myvar" type="text" value="34" /><div class="error_wrapper"><div class="error" id="myvar__error">invalid expression</div></div></form>
|
||||
>>> print form.accepts({'myvar':'4'}, formname=None, keepvalues=True)
|
||||
True
|
||||
>>> print form.xml()
|
||||
@@ -2337,7 +2343,7 @@ def test():
|
||||
>>> print form.accepts({'myvar':'as df'}, formname=None)
|
||||
False
|
||||
>>> print form.xml()
|
||||
<form action=\"\" enctype=\"multipart/form-data\" method=\"post\"><input class=\"invalidinput\" name=\"myvar\" type=\"text\" value=\"as df\" /><div class=\"error\" id=\"myvar__error\">only alphanumeric!</div></form>
|
||||
<form action="" enctype="multipart/form-data" method="post"><input class="invalidinput" name="myvar" type="text" value="as df" /><div class="error_wrapper"><div class="error" id="myvar__error">only alphanumeric!</div></div></form>
|
||||
>>> session={}
|
||||
>>> form=FORM(INPUT(value=\"Hello World\", _name=\"var\", requires=IS_MATCH('^\w+$')))
|
||||
>>> if form.accepts({}, session,formname=None): print 'passed'
|
||||
|
||||
Reference in New Issue
Block a user