def _check(self, check, radl):
        """
        Check type, operator and unit in a feature.

        Args:
        - check(tuple):
           - v[0]: expected type of the feature value.
           - v[1]: can be a list of possible values or a function to test the value or None.
           - v[2] (optional): can be a list of possible units; if None or not set the
             unit valid is none.
        - radl: second argument passed when calling v[1].
        """

        # Check type
        # If the value must be float, int is also valid
        if check[0] == float:
            if not isinstance(self.value, int) and not isinstance(self.value, float):
                raise RADLParseException("Invalid type; expected %s" % check[0],
                                         line=self.line)
        elif check[0] == str:
            if not isinstance(self.value, str) and not isinstance(self.value, unicode):
                raise RADLParseException("Invalid type; expected %s" % check[0],
                                         line=self.line)
        else:
            if not isinstance(self.value, check[0]):
                raise RADLParseException("Invalid type; expected %s" % check[0],
                                         line=self.line)
        # Check operator
        if (isinstance(self.value, str) or isinstance(self.value, unicode)) and self.prop.find('version') == -1:
            if self.operator != "=":
                raise RADLParseException("Invalid operator; expected '='",
                                         line=self.line)
        elif isinstance(self.value, int) or isinstance(self.value, float) or self.prop.find('version') >= 0:
            if self.operator not in ["=", "<=", ">=", ">", "<"]:
                raise RADLParseException("Invalid operator; expected '=', '<=', " +
                                         "'>=', '>' or '<'", line=self.line)
        elif isinstance(self.value, Features):
            if self.operator != "contains":
                raise RADLParseException(
                    "Invalid operator; expected 'contains'", line=self.line)
        # Check value
        if isinstance(check[1], list):
            if self.value.upper() not in check[1]:
                raise RADLParseException("Invalid value; expected one of %s" % check[1],
                                         line=self.line)
        elif callable(check[1]):
            if not check[1](self, radl):
                raise RADLParseException("Invalid value in property '%s'" % self.prop, line=self.line)
        # Check unit
        if len(check) < 3 or check[2] is None:
            if self.unit:
                raise RADLParseException("Invalid unit; expected none", line=self.line)
        elif len(check) > 2 and check[2]:
            if self.unit.upper() not in check[2]:
                raise RADLParseException(
                    "Invalid unit; expected one of %s" % check[2], line=self.line)
        return True
def _check ( self , check , radl ) : if check [ 0 ] == float : if not isinstance ( self . value , int ) and not isinstance ( self . value , float ) : raise RADLParseException ( "Invalid type; expected %s" % check [ 0 ] , line = self . line ) elif check [ 0 ] == str : if not isinstance ( self . value , str ) and not isinstance ( self . value , unicode ) : raise RADLParseException ( "Invalid type; expected %s" % check [ 0 ] , line = self . line ) else : if not isinstance ( self . value , check [ 0 ] ) : raise RADLParseException ( "Invalid type; expected %s" % check [ 0 ] , line = self . line ) if ( isinstance ( self . value , str ) or isinstance ( self . value , unicode ) ) and self . prop . find ( 'version' ) == - 1 : if self . operator != "=" : raise RADLParseException ( "Invalid operator; expected '='" , line = self . line ) elif isinstance ( self . value , int ) or isinstance ( self . value , float ) or self . prop . find ( 'version' ) >= 0 : if self . operator not in [ "=" , "<=" , ">=" , ">" , "<" ] : raise RADLParseException ( "Invalid operator; expected '=', '<=', " + "'>=', '>' or '<'" , line = self . line ) elif isinstance ( self . value , Features ) : if self . operator != "contains" : raise RADLParseException ( "Invalid operator; expected 'contains'" , line = self . line ) if isinstance ( check [ 1 ] , list ) : if self . value . upper ( ) not in check [ 1 ] : raise RADLParseException ( "Invalid value; expected one of %s" % check [ 1 ] , line = self . line ) elif callable ( check [ 1 ] ) : if not check [ 1 ] ( self , radl ) : raise RADLParseException ( "Invalid value in property '%s'" % self . prop , line = self . line ) if len ( check ) < 3 or check [ 2 ] is None : if self . unit : raise RADLParseException ( "Invalid unit; expected none" , line = self . line ) elif len ( check ) > 2 and check [ 2 ] : if self . unit . upper ( ) not in check [ 2 ] : raise RADLParseException ( "Invalid unit; expected one of %s" % check [ 2 ] , line = self . line ) return True
Check type, operator and unit in a feature.

        Args:
        - check(tuple):
           - v[0]: expected type of the feature value.
           - v[1]: can be a list of possible values or a function to test the value or None.
           - v[2] (optional): can be a list of possible units; if None or not set the
             unit valid is none.
        - radl: second argument passed when calling v[1].