'Introspect range constraints, convert to string for binding
@param validators: a sequence of validators
@return: a string with the range constraints'

@staticmethod
def _range(validators):

    constraints = []
    for validator in validators:
        if hasattr(validator, 'other'):
            v = validator.other
        else:
            v = validator
        if isinstance(v, (IS_INT_IN_RANGE, IS_FLOAT_IN_RANGE)):
            maximum = v.maximum
            if (maximum is not None):
                constraints.append(('.    <    %s' % maximum))
            minimum = v.minimum
            if (minimum is not None):
                constraints.append(('.    >    %s' % minimum))
    if constraints:
        return ('(%s)' % '    and    '.join(constraints))
    return None
