#
# pso.fields.py - Python Service Objects Form Tag lib
#
# Author: Thanos Vassilakis thanos@0x01.com
#
# Copyright (c) thanos vassilakis 2000,2001, 2002
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation; either version 2.1 of the
# License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# See terms of license at gnu.org.
#
# $Id: fields.py,v 1.5 2004/07/12 04:03:31 thanos Exp $
#
__version__="$Revision: 1.5 $"
from string import letters,digits
from form import ValidationFailure,FieldMissing,ValidationError,DefaultField,Select,Input
from isocodes import USStates
from validation import isZipCode
class StateSelect(Select):
OPTIONS=( ('NN','Non US or Canada'), ) + USStates
class ZipInput(Input):
def validate(self, handler):
value = Input.validate(self, handler)
if not value: return ''
try:
isZipCode(value)
except Exception, e:
raise ValidationError(self.getName(), '%s' % e)
return value
class PhoneInput(Input):
def validate(self, handler):
value = Input.validate(self, handler)
if not value: return ''
class EmailInput(Input):
def validate(self, handler):
value = Input.validate(self, handler)
if len(value):
if value.count('@') != 1:
raise ValidationError(self.getName(), 'invalid e-mail')
if value.count('.') < 1:
raise ValidationError(self.getName(), 'invalid e-mail')
return value
class UrlInput(Input):
def validate(self, handler):
value = Input.validate(self, handler)
if value:
from urllib import urlopen
try:
urlopen(value)
except:
raise ValidationError(self.getName(), 'invalide url')
return value
class UserIdInput(Input):
SIZE=5
VALIDCHAR = letters+digits
REQUIRED=1
def validate(self, handler):
value = Input.validate(self, handler)
v = [ch for ch in value if ch not in self.VALIDCHAR]
if v:
raise ValidationError(value, 'login id must be alphnumerical [a-z, A-Z, 0-9]')
size = int(self.getAttrs().get('size', str(self.SIZE)))
if len(value) < size:
raise ValidationError(value, 'login id must be %d character or longer' % size)
return value
|