The table in question has a field:
Field('Paiddate', 'date', requires = [IS_EMPTY_OR(IS_DATE()),
IS_EMPTY_OR(IS_MEMBERSHIP_YEAR_END())]),
The custom validator is:
class IS_MEMBERSHIP_YEAR_END(object):
def __init__(self, error_message='Not a membership year end'):
self.error_message = error_message
def __call__(self, value):
yearend = datetime.date(2018,9,30)
if value.month==yearend.month and value.day==yearend.day:
return (value, None)
return (value, self.error_message)
This works in 2.17.2
I updated my test environment to 2.18.4 and it fails.
On the console I see:
web2py Web Framework
Created by Massimo Di Pierro, Copyright 2007-2019
Version 2.18.4-stable+timestamp.2019.03.13.05.27.54
Database drivers available: sqlite3, imaplib, pyodbc, pymysql
please visit:
('\t', 'http://127.0.0.1:8000/')
starting browser...
Traceback (most recent call last):
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 1890, in _validate
(value, errors) = validator(value)
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\packages\dal\pydal\validators.py", line 144, in
__call__
return self.validate(value), None
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\packages\dal\pydal\validators.py", line 2754, in
validate
return self.other.validate(value)
AttributeError: 'IS_MEMBERSHIP_YEAR_END' object has no attribute 'validate'
The ticket shows:
Error ticket for "init" Ticket ID
127.0.0.1.2019-04-04.16-41-08.0dce185d-d8d2-4d36-9e47-8c82bc1d54f5
<type 'exceptions.Exception'> Validation error, field:Paiddate
<pydal.validators.IS_EMPTY_OR object at 0x0000000004878048> Version
web2py™ Version 2.18.4-stable+timestamp.2019.03.13.05.27.54
Python Python 2.7.14: C:\Python27\python.exe (prefix: C:\Python27) Traceback
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Traceback (most recent call last):
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\restricted.py", line 219, in restricted
exec(ccode, environment)
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\applications\init\controllers/default.py", line 1747, in
<module>
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\globals.py", line 421, in <lambda>
self._caller = lambda f: f()
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\applications\init\models\db.py", line 109, in wrapped_f
return f(*args)
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\applications\init\controllers/default.py", line 214, in
memberform
deletable = dltbl, onvalidation=setmodified, onaccept=modmember,
ondelete=delmember)
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\tools.py", line 4322, in update
detect_record_change=self.settings.detect_record_change):
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\sqlhtml.py", line 1758, in accepts
**kwargs
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 2149, in accepts
status = self._traverse(status, hideerror)
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 910, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 910, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 910, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 910, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 917, in _traverse
newstatus = self._validate()
File "C:\Users\David\Google Drive\Oxcamne Archive\Web
Site\OxCamNE.2.1\gluon\html.py", line 1895, in _validate
raise Exception(msg)
Exception: Validation error, field:Paiddate <pydal.validators.IS_EMPTY_OR
object at 0x0000000004878048>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.