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