Source code for ensure._types

from six import add_metaclass


class NumericStringType(type):
    _type = str
    _cast = float

    def __instancecheck__(self, other):
        try:
            if not isinstance(other, self._type):
                raise TypeError()
            self._cast(other)
            return True
        except (TypeError, ValueError):
            return False


class NumericByteStringType(NumericStringType):
    _type = bytes


class IntegerStringType(NumericStringType):
    _cast = int


class IntegerByteStringType(IntegerStringType):
    _type = bytes


[docs] @add_metaclass(NumericStringType) class NumericString(str): pass
[docs] @add_metaclass(NumericByteStringType) class NumericByteString(bytes): pass
[docs] @add_metaclass(IntegerStringType) class IntegerString(str): pass
[docs] @add_metaclass(IntegerByteStringType) class IntegerByteString(bytes): pass