You can do
db.table.filter_in = lambda value: 'NT' is value is None else value
On Saturday, 27 October 2012 02:54:53 UTC-5, Joe Barnhart wrote:
>
> But Paolo -- you forgot the third option...
>
> FIX the problem in dal.py so that Validator classes work properly. It has
> no deleterious effects on other validators (at least so far in my testing)
> and it permits validators to format None values.
>
> -- Joe B.
>
>
> On Friday, October 26, 2012 9:56:57 AM UTC-7, Paolo Caruccio wrote:
>>
>> In my opinion, you have mainly two options to bypass None value check
>> that formatter function in DAL does:
>>
>> option 1 : store None in database, delete formatter from validator, use
>> represent in table field (I prefer this approach)
>>
>> class IS_ELAPSED_TIME(object):
>> def __init__(self,error_message='Must be MM:SS.hh or MMSShh (with no
>> punctuation)'):
>> self.error_message=error_message
>> def __call__(self,value):
>> try:
>> if value and value.upper() != 'NT':
>> res = hms_to_int(value)
>> else:
>> res = None
>> return (res,None)
>> except:
>> return (value,self.error_message)
>>
>>
>> Field('est', 'string', requires=IS_ELAPSED_TIME(), represent=lambda value
>> ,row:int_to_hms(value) if value else "NT")
>>
>>
>> option 2: store 'NT' in database in place of None
>>
>> class IS_ELAPSED_TIME(object):
>> def __init__(self,error_message='Must be MM:SS.hh or MMSShh (with no
>> punctuation)'):
>> self.error_message=error_message
>> def __call__(self,value):
>> try:
>> if value and value.upper() != 'NT':
>> res = hms_to_int(value)
>> else:
>> res = 'NT'
>> return (res,None)
>> except:
>> return (value,self.error_message)
>> def formatter(self,value):
>> if value != 'NT':
>> rtn = int_to_hms(value)
>> else:
>> rtn = 'Elapsed Standard Time not available'
>> return rtn
>>
>>
>> Field('est', 'string', requires=IS_ELAPSED_TIME())
>>
>>
>>
>> Il giorno venerdì 26 ottobre 2012 04:13:55 UTC+2, Joe Barnhart ha scritto:
>>>
>>> I do manage the "None" value in my formatter, Paulo.
>>>
>>> But it never gets called because the built-in code of the Field class
>>> tests the value for None and then exits before calling my formatter. So it
>>> doesn't matter that my formatter can handle None -- it is never called.
>>>
>>> That's why I posted the change to the Field class in the first message
>>> of this thread.
>>>
>>> -- Joe B.
>>>
>>> On Thursday, October 25, 2012 5:53:43 PM UTC-7, Paolo Caruccio wrote:
>>>>
>>>> Why don't you manage None values in int_to_hms function?
>>>>
>>>>
>>>> Il giorno giovedì 25 ottobre 2012 03:20:29 UTC+2, Joe Barnhart ha
>>>>>>> scritto:
>>>>>>>>
>>>>>>>> I have an application where I expect "None" items in my database
>>>>>>>> and I want to format them to "NT". It is an app that uses time
>>>>>>>> standards,
>>>>>>>> and if there is no standard present I expect a "None" in the database
>>>>>>>> which
>>>>>>>> translates to a field of "No Time" or "NT".
>>>>>>>>
>>>>>>>> The problem is that the current implementation of formatter in the
>>>>>>>> Field class tests the value for "None" and escapes before the
>>>>>>>> formatter is
>>>>>>>> called.
>>>>>>>>
>>>>>>>> I can see why this behavior might be expected in a lot of cases,
>>>>>>>> but it seems extreme to deny the ability to format "None" into a more
>>>>>>>> pleasing form for those applications that could benefit from it. Here
>>>>>>>> is
>>>>>>>> the offending part of formatter (located in gluon/dal.py):
>>>>>>>>
>>>>>>>> def formatter(self, value):
>>>>>>>> requires = self.requires
>>>>>>>> if value is None or not requires:
>>>>>>>> return value
>>>>>>>>
>>>>>>>> If I change the above to:
>>>>>>>>
>>>>>>>> def formatter(self, value):
>>>>>>>> requires = self.requires
>>>>>>>> if not requires:
>>>>>>>> return value
>>>>>>>>
>>>>>>>> I get my desired behavior, which is to pass "None" to my formatter
>>>>>>>> which is implemented as part of a custom Validator object. I realize
>>>>>>>> the
>>>>>>>> code now has to go "further" for cases where the value is None, but is
>>>>>>>> it
>>>>>>>> really safe to assume nobody will ever want to "format" None into
>>>>>>>> another
>>>>>>>> string? Not in my case, at least!
>>>>>>>>
>>>>>>>> Joe B.
>>>>>>>>
>>>>>>>>
>>>>>>>>
--