TypeError: %d format: a number is required, not dict

1,478 views
Skip to first unread message

Annet

unread,
Sep 4, 2013, 2:49:29 PM9/4/13
to web...@googlegroups.com
In a table definition I have these two fields:

Field('startDate', label='Start datum * ', **isdate),
Field('endDate', label='Eind datum', **isemptyorisdate),

Since I have more of these fields I defined the following dicts

isdate = dict(type='date', requires=IS_DATE(format='%d-%m-%Y', error_message='Formaat komt niet overeen met %d-%m-%Y'), represent=lambda v: v.strftime('%d/%m/%Y') if v else '')
isemptyorisdate = dict(type='date', requires=IS_EMPTY_OR(IS_DATE(format='%d-%m-%Y', error_message='Formaat komt niet overeen met %d-%m-%Y')), represent=lambda v: v.strftime('%d/%m/%Y') if v else '')

I have more of these dict validators which all work fine:

istime = dict(type='time', requires=IS_TIME(error_message='Formaat komt niet overeen met HH:MM'), widget=timewidget, comment='Formaat HH:MM')
isemptyoristime = dict(type='time', requires=IS_EMPTY_OR(IS_TIME(error_message='Formaat komt niet overeen met HH:MM')), widget=timewidget, comment='Formaat HH:MM')


When I submit: http://127.0.0.1:8000/dbModel/appadmin/insert/db/eventList

I get the following error:


Traceback (most recent call last):
File "/Users/annet/web2py/gluon/restricted.py", line 212, in restricted
exec ccode in environment
File "/Users/annet/web2py/applications/dbModel/controllers/appadmin.py", line 615, in <module>
File "/Users/annet/web2py/gluon/globals.py", line 194, in <lambda>
self._caller = lambda f: f()
File "/Users/annet/web2py/applications/dbModel/controllers/appadmin.py", line 142, in insert
if form.accepts(request.vars, session):
File "/Users/annet/web2py/gluon/sqlhtml.py", line 1370, in accepts
**kwargs
File "/Users/annet/web2py/gluon/html.py", line 2010, in accepts
status = self._traverse(status, hideerror)
File "/Users/annet/web2py/gluon/html.py", line 846, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "/Users/annet/web2py/gluon/html.py", line 846, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "/Users/annet/web2py/gluon/html.py", line 846, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "/Users/annet/web2py/gluon/html.py", line 846, in _traverse
newstatus = c._traverse(status, hideerror) and newstatus
File "/Users/annet/web2py/gluon/html.py", line 853, in _traverse
newstatus = self._validate()
File "/Users/annet/web2py/gluon/html.py", line 1759, in _validate
(value, errors) = validator(value)
File "/Users/annet/web2py/gluon/validators.py", line 2695, in __call__
return self.other(value)
File "/Users/annet/web2py/gluon/validators.py", line 2269, in __call__
return (ovalue, translate(self.error_message) % self.extremes)
TypeError: %d format: a number is required, not dict


Kind regards,


Annet

Massimo Di Pierro

unread,
Sep 4, 2013, 9:27:59 PM9/4/13
to web...@googlegroups.com
which version?

Annet

unread,
Sep 5, 2013, 1:42:04 AM9/5/13
to web...@googlegroups.com


Version 2.5.1-stable+timestamp.2013.06.06.15.39.19


Kind regards,

Annet

Massimo Di Pierro

unread,
Sep 5, 2013, 8:24:30 AM9/5/13
to web...@googlegroups.com
Please try trunk or nightly build. I believe this is fixed.

On Thursday, 5 September 2013 00:42:04 UTC-5, Annet wrote:


Version 2.5.1-stable+timestamp.2013.06.06.15.39.19


Kind regards,

Annet

Annet

unread,
Sep 6, 2013, 11:19:31 AM9/6/13
to web...@googlegroups.com
I downloaded web2py from: https://github.com/web2py/web2py/
And tested my application, I still get the same error.


Kind regards,

Annet.

Massimo Di Pierro

unread,
Sep 11, 2013, 9:50:00 AM9/11/13
to web...@googlegroups.com
The problem is that 

IS_TIME(...error_message='Formaat komt niet overeen met %d-%m-%Y')...)

should be

IS_TIME(...error_message='Formaat komt niet overeen met %%d-%%m-%%Y')...)

or

IS_TIME(...error_message='Formaat komt niet overeen met DD-MM-YYYY')...)

If you want a '%' in an error message it must be escaped '%%' else it is interpreted as a placeholder.

Annet

unread,
Sep 11, 2013, 12:25:38 PM9/11/13
to web...@googlegroups.com
Massimo,

Thanks for figuring out what the problem was, it didn't cross my
mind that the error messages were the problem.

Kind regards,

Annet
Reply all
Reply to author
Forward
0 new messages