validation_greater_field.py 1.44 KB
from .base_validation import BaseValidation


class ValidationGreaterField(BaseValidation):
    def __init__(self, cldr, params=None):
        super(ValidationGreaterField, self).__init__(cldr=cldr, params=params)

        self.__greatervalue = None
        if self.rulevalue in self.allvalues:
            self.__greatervalue = self.allvalues[self.rulevalue]
        self.__message = self.rulemessage or 'Value :attribute harus lebih dari :greater_field.'

    def validate(self):
        if (self.value is None) or (self.value == ''):
            ok = not self.required
        else:
            # ok = ((self.__greatervalue is not None) and (str(self.value) > str(self.__greatervalue)))
            ok = False
            if self.__greatervalue is not None:
                vt = self.value_type()
                if vt == 'string':
                    ok = (str(self.value) > str(self.rulevalue))
                else:
                    # ok = (self.value > self.rulevalue)
                    v = vt == 'float' and float(self.value) or int(self.value)
                    r = vt == 'float' and float(self.__greatervalue) or int(self.__greatervalue)
                    ok = (v > r)

        if not ok:
            gvalue = (self.__greatervalue is not None) and str(self.__greatervalue) or 'UNKNOWN'
            self.colander_invalid[self.inputname] = self.__message.replace(':greater_field', gvalue).replace(':attribute', self.title)
            
        return ok