commit merge

This commit is contained in:
Michele Comitini
2012-08-29 14:24:14 +02:00
parent f9afeb51f8
commit e5f9358cf9
75 changed files with 1546 additions and 2066 deletions
+39 -33
View File
@@ -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'