The web2py book's example could use replacing, since it relies on using 
__init__ and returning (value, error) rather than using def validate and 
returning value or raising ValidationError

On Sunday, 7 April 2019 05:36:13 UTC+1, Massimo Di Pierro wrote:
>
> we will fix the backward incompatibility asap. Not intentional.
>
> On Saturday, 6 April 2019 12:12:47 UTC-7, David Manns wrote:
>>
>> PS this is not backward compatible to 2.17.2
>>
>> On Thursday, April 4, 2019 at 4:52:37 PM UTC-4, David Manns wrote:
>>>
>>> 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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to