FieldJoiner Validator for DateTime
I’ve noticed on the FormEncode’s mailing lists Matthew Wilson asked about an validator joining two fields into one, so he can pass input of date and time directly to his database. Indeed, why did such an validator not exist? For your convenience, I’ve written it. Use it in chained_validators section of your validation schema:
class FieldJoiner(FancyValidator):
"""
Joins fields into one by using the specified delimiter.
::
>>> fj = FieldJoiner('fdatetime', ' ', ('fdate', 'ftime'))
>>> fj.to_python({'fdate': '2008-08-08', 'ftime': '08:08:08'})
{'fdatetime': '2008-08-08 08:08:08', 'fdate': '2008-08-08', 'ftime': '08:08:08'}
>>> fj.to_python({'country': 'DE', 'zip': '30029'})
{'country': 'DE', 'zip': '30029'}
"""
result_fieldname = 'fdatetime'
delimiter = ', '
fields_to_be_joined = 'zip'
__unpackargs__ = ('result_fieldname', 'delimiter', 'fields_to_be_joined')
def validate_python(self, fields_dict, state):
jl = [fields_dict[key] for key in self.fields_to_be_joined \
if key in fields_dict]
fields_dict[self.result_fieldname] = self.delimiter.join(jl)
