iro/validate.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 27 Jan 2012 15:01:59 +0100
branchdevel
changeset 114 1ed072cc6793
parent 110 601fc908d9f1
child 115 323d06431100
permissions -rw-r--r--
reconstructing validate decorator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
import re
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
     2
from functools import wraps
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
     3
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from inspect import getcallargs
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
from .error import ValidateException
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
     7
def boolean(value, field):
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
     8
    t=[True,"true",1]
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
     9
    f=[False,"false",0]
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    10
    if value in t:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    11
        return True
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    12
    elif value in f:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    13
        return False
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    14
    else:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    15
        raise ValidateException(field=field, msg='%s is not boolean' % field)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    16
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    17
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    18
def validateHash(value,field,minlength=None,maxlength=None):
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    19
    if not re.match(r'^[a-f0-9]*$', value.lower()):
110
601fc908d9f1 exception handling for xmprpc
Sandro Knauß <knauss@netzguerilla.net>
parents: 109
diff changeset
    20
        raise ValidateException(field=field)
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    21
    if minlength and len(value)<minlength:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    22
        raise ValidateException(field=field)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    23
    if maxlength and len(value)>maxlength:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    24
        raise ValidateException(field=field)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    25
    return value
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    27
def vuserhash(value,field):
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    28
    '''vailidate function for userhash'''
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    29
    return validateHash(value,field,minlength=15,maxlength=15)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    30
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    31
def validate(kwd,func, need=True,*args,**kargs):
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
    '''validate decorator
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
    use it like this:
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    34
        @validate(kwd=userhash, func=vuserhash)
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
        f(userhash)
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    36
    that will validate usrhash with the function vuserhash.
109
935b5fcaf152 little typos
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    37
    Every validate function should raise an Exception, if the the value is not valid'''
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
    def v(f):
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    39
        @wraps(f)
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
        def new_f(*a,**k):
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    41
            kp=getcallargs(new_f.original,*a,**k)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    42
            try:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    43
                if need or kp[kwd] is not None:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    44
                    kp[kwd] = func(kp[kwd],kwd,*args,**kargs)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    45
                else:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    46
                    kp[kwd] = None
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    47
            except KeyError:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    48
                if need:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    49
                    raise ValidateException(field=kwd,msg="%s is nessasary"%kwd)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    50
            return f(**kp)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    51
        try:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    52
            new_f.original=f.original
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    53
        except AttributeError:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 110
diff changeset
    54
            new_f.original=f
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
        return new_f
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
    return v
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57