--- a/iro/validate.py Mon Jan 30 06:51:28 2012 +0100
+++ b/iro/validate.py Mon Jan 30 06:52:46 2012 +0100
@@ -1,10 +1,11 @@
+from twisted.internet import defer
+
import re
from decorator import decorator
-
-from twisted.internet import defer
+from inspect import getcallargs
-from inspect import getcallargs
-from .error import ValidateException
+from .error import ValidateException, NotATelNumber, InvalidMail
+from .telnumber import Telnumber
def vBool(value, field):
'''Validator for boolean values'''
@@ -29,10 +30,70 @@
return value
def vTel(value,field):
- return value
+ '''Validator for Telefonnumbers'''
+ ret = []
+ for v in value:
+ try:
+ ret.append(Telnumber(v))
+ except NotATelNumber, e:
+ e.field=field
+ raise e
+ return ret
def vEmail(value, field):
- return value
+ '''validator for emailadresses (see wikipeda for strange mailadresses and RFC3696)
+ valid:
+ "very.(),:;<>[]\\".VERY.\\"very@\\\ \\"very\\".unusual"@strange.example.com
+ ""@example.org
+ "very.unusual.@.unusual.com"@example.com'
+
+ not valid:
+ Abc.@example.com
+ Abc..123@example.com
+ thisis."notallowed@example.com
+ this\\ still\\"not\\allowed@example.com
+ '''
+ ret = []
+ for v in value:
+ parts= re.match(r'^(.*)@(.+?)$',v)
+ if not parts:
+ raise InvalidMail(v,field)
+ local=parts.group(1)
+ domain=parts.group(2)
+
+ if not re.match(r'^(\[[0-9\.]{7,16}\]|\[[0-9a-f:]{3,}\]|([a-z0-9+\-%_]+\.)+[a-z]{2,6})$',domain.lower()):
+ raise InvalidMail(v,field)
+
+ if local == "":
+ continue
+ if local.startswith(".") or local.endswith("."):
+ raise InvalidMail(v,field)
+ unquote = True
+ parts = local.split('"')
+ c=0
+ i=0
+ for part in parts:
+ if unquote and part != "": #unquoted is not allowd so much
+ if not re.match(r'^[^\\,\[\];\(\)@<>: ]+$',part) or ".." in part:
+ raise InvalidMail(v,field)
+ if i == 0:
+ if unquote and part != "" and len(parts) > 1 and part[-1] != '.': #quoted parts must be seperated by a dot
+ raise InvalidMail(v,field)
+ unquote = not unquote
+ c+=1
+ elif part == '' or part[-1] != "\\":
+ if unquote and part != "": #quoted parts must be seperated by a dot
+ if part[0] != ".":
+ raise InvalidMail(v,field)
+ if i < len(parts)-1 and part[-1] != '.':
+ raise InvalidMail(v,field)
+ unquote = not unquote
+ c += 1
+ i += 1
+ if c%2 == 0 and c > 1: #no single quote allowed
+ raise InvalidMail(v,field)
+ ret.append(v)
+ return ret
def validate(kwd,func, need=True,*args,**kargs):
'''validate decorator