15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
import formencode.validators
23
19
from genshi.filters import HTMLFormFiller
25
21
from ivle.webapp.base.xhtml import XHTMLView
28
23
class BaseFormView(XHTMLView):
29
24
"""A base form view."""
107
102
ctx['error_value'] = errors
110
VALID_URL_NAME = re.compile(r'^[a-z0-9][a-z0-9_\+\.\-]*$')
113
class URLNameValidator(formencode.validators.UnicodeString):
114
def validate_python(self, value, state):
115
super(URLNameValidator, self).validate_python(value, state)
116
if not VALID_URL_NAME.match(value):
117
raise formencode.Invalid(
118
'Must consist of a lowercase alphanumeric character followed '
119
'by any number of lowercase alphanumerics, ., +, - or _.',
122
class DateTimeValidator(formencode.validators.FancyValidator):
123
"""Accepts a date/time in YYYY-MM-DD HH:MM:SS format. Converts to a
124
datetime.datetime object."""
125
def _to_python(self, value, state):
126
"""Validate and convert."""
128
return datetime.datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
129
except ValueError, e:
130
raise formencode.Invalid(str(e) + " -> " + repr(value), value, state)
131
raise formencode.Invalid("Must be a timestamp in "
132
"YYYY-MM-DD HH:MM:SS format", value, state)
133
def _from_python(self, value, state):
135
return value.strftime("%Y-%m-%d %H:%M:%S")
136
except AttributeError:
137
raise formencode.Invalid("Must be a datetime.datetime object")