fixed onvalidation for SQLFORM, issue 778, thanks Carlos Galindo

This commit is contained in:
Massimo Di Pierro
2012-05-02 16:08:40 -05:00
parent dfa9cdb51e
commit 1c9a73b6de
3 changed files with 24 additions and 18 deletions
+1 -1
View File
@@ -1 +1 @@
Version 1.99.7 (2012-05-02 16:03:22) dev
Version 1.99.7 (2012-05-02 16:08:31) dev
+4
View File
@@ -1812,6 +1812,9 @@ class FORM(DIV):
self.latest = Storage()
self.accepted = None # none for not submitted
def assert_status(self, status, request_vars):
return status
def accepts(
self,
request_vars,
@@ -1851,6 +1854,7 @@ class FORM(DIV):
status = False
self.record_changed = True
status = self._traverse(status,hideerror)
status = self.assert_status(status, request_vars)
if onvalidation:
if isinstance(onvalidation, dict):
onsuccess = onvalidation.get('onsuccess', None)
+19 -17
View File
@@ -706,6 +706,25 @@ class SQLFORM(FORM):
ID_LABEL_SUFFIX = '__label'
ID_ROW_SUFFIX = '__row'
def assert_status(self, status, request_vars):
if not status and self.record and self.errors:
### if there are errors in update mode
# and some errors refers to an already uploaded file
# delete error if
# - user not trying to upload a new file
# - there is existing file and user is not trying to delete it
# this is because removing the file may not pass validation
for key in self.errors.keys():
if key in self.table \
and self.table[key].type == 'upload' \
and request_vars.get(key, None) in (None, '') \
and self.record[key] \
and not key + UploadWidget.ID_DELETE_SUFFIX in request_vars:
del self.errors[key]
if not self.errors:
status = True
return status
def __init__(
self,
table,
@@ -1111,23 +1130,6 @@ class SQLFORM(FORM):
hideerror=hideerror,
)
if not ret and self.record and self.errors:
### if there are errors in update mode
# and some errors refers to an already uploaded file
# delete error if
# - user not trying to upload a new file
# - there is existing file and user is not trying to delete it
# this is because removing the file may not pass validation
for key in self.errors.keys():
if key in self.table \
and self.table[key].type == 'upload' \
and request_vars.get(key, None) in (None, '') \
and self.record[key] \
and not key + UploadWidget.ID_DELETE_SUFFIX in request_vars:
del self.errors[key]
if not self.errors:
ret = True
self.deleted = \
request_vars.get(self.FIELDNAME_REQUEST_DELETE, False)