Improve validation for FormAlchemy date field renderer

This commit is contained in:
Lance Edgar 2016-09-19 13:13:53 -05:00
parent 65661a03f5
commit cff19f38a3

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2015 Lance Edgar
# Copyright © 2010-2016 Lance Edgar
#
# This file is part of Rattail.
#
@ -24,16 +24,16 @@
Core Field Renderers
"""
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
import datetime
import formalchemy
import formalchemy as fa
from formalchemy.fields import AbstractField
from pyramid.renderers import render
class CustomFieldRenderer(formalchemy.FieldRenderer):
class CustomFieldRenderer(fa.FieldRenderer):
"""
Base class for renderers which accept customization args, and "fake out"
FormAlchemy by pretending to still be a renderer factory when in fact it's
@ -59,7 +59,7 @@ class CustomFieldRenderer(formalchemy.FieldRenderer):
return self.request.rattail_config
class DateFieldRenderer(CustomFieldRenderer, formalchemy.DateFieldRenderer):
class DateFieldRenderer(CustomFieldRenderer, fa.DateFieldRenderer):
"""
Date field renderer which uses jQuery UI datepicker widget when rendering
in edit mode.
@ -79,7 +79,12 @@ class DateFieldRenderer(CustomFieldRenderer, formalchemy.DateFieldRenderer):
value = self._serialized_value()
if not value:
return None
try:
return datetime.datetime.strptime(value, '%Y-%m-%d')
except ValueError:
raise fa.ValidationError("Date value must be in YYYY-MM-DD format")
except Exception as error:
raise fa.ValidationError(unicode(error))
def _serialized_value(self):
return self.params.getone(self.name)