~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/base/forms.py

  • Committer: William Grant
  • Date: 2012-06-28 01:52:02 UTC
  • Revision ID: me@williamgrant.id.au-20120628015202-f6ru7o367gt6nvgz
Hah

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
17
17
 
 
18
import re
 
19
import datetime
 
20
 
18
21
import formencode
 
22
import formencode.validators
19
23
from genshi.filters import HTMLFormFiller
20
24
 
21
25
from ivle.webapp.base.xhtml import XHTMLView
22
26
 
 
27
 
23
28
class BaseFormView(XHTMLView):
24
29
    """A base form view."""
25
30
 
102
107
            ctx['error_value'] = errors
103
108
 
104
109
 
 
110
VALID_URL_NAME = re.compile(r'^[a-z0-9][a-z0-9_\+\.\-]*$')
 
111
 
 
112
 
 
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 _.',
 
120
                value, state)
 
121
 
 
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."""
 
127
        try:
 
128
            return datetime.datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
 
129
        except ValueError, e:
 
130
            raise formencode.Invalid("Must be a timestamp in "
 
131
                "YYYY-MM-DD HH:MM:SS format", value, state)
 
132
    def _from_python(self, value, state):
 
133
        try:
 
134
            return value.strftime("%Y-%m-%d %H:%M:%S")
 
135
        except AttributeError:
 
136
            raise formencode.Invalid("Must be a datetime.datetime object")