Beispiel #1
0
 def to_native_string(text):
     if isnewbytes(text):
         return bytes.__str__(text)
     if isinstance(text, native_str):
         return text
     # Must be Unicode...
     return text.encode('utf-8')
 def join(self, iterable):
     errmsg = 'sequence item {0}: expected unicode string, found bytes'
     for i, item in enumerate(iterable):
         # Here we use type() rather than isinstance() because
         # __instancecheck__ is being overridden. E.g.
         # isinstance(b'abc', newbytes) is True on Py2.
         if isnewbytes(item):
             raise TypeError(errmsg.format(i))
     return newstr(super(newstr, self).join(iterable))
 def endswith(self, prefix, *args):
     # Note we need the decorator above as well as the isnewbytes()
     # check because prefix can be either a bytes object or e.g. a
     # tuple of possible prefixes. (If it's a bytes object, each item
     # in it is an int.)
     if isinstance(prefix, Iterable):
         for thing in prefix:
             if isnewbytes(thing):
                 raise TypeError(self.no_convert_msg.format(type(thing)))
     return super(newstr, self).endswith(prefix, *args)
 def __contains__(self, key):
     errmsg = "'in <string>' requires string as left operand, not {0}"
     # Don't use isinstance() here because we only want to catch
     # newstr, not Python 2 unicode:
     if type(key) == newstr:
         newkey = key
     elif isinstance(key, unicode) or isinstance(key, bytes) and not isnewbytes(key):
         newkey = newstr(key)
     else:
         raise TypeError(errmsg.format(type(key)))
     return issubset(list(newkey), list(self))
 def join(self, iterable):
     errmsg = 'sequence item {0}: expected unicode string, found bytes'
     for i, item in enumerate(iterable):
         # Here we use type() rather than isinstance() because
         # __instancecheck__ is being overridden. E.g.
         # isinstance(b'abc', newbytes) is True on Py2.
         if isnewbytes(item):
             raise TypeError(errmsg.format(i))
     # Support use as a staticmethod: str.join('-', ['a', 'b'])
     if type(self) == newstr:
         return newstr(super(newstr, self).join(iterable))
     else:
         return newstr(super(newstr, newstr(self)).join(iterable))
 def __ne__(self, other):
     if (isinstance(other, unicode) or
         isinstance(other, bytes) and not isnewbytes(other)):
         return super(newstr, self).__ne__(other)
     else:
         return True
 def startswith(self, prefix, *args):
     if isinstance(prefix, Iterable):
         for thing in prefix:
             if isnewbytes(thing):
                 raise TypeError(self.no_convert_msg.format(type(thing)))
     return super(newstr, self).startswith(prefix, *args)
Beispiel #8
0
 def __ne__(self, other):
     if (isinstance(other, unicode) or
         isinstance(other, bytes) and not isnewbytes(other)):
         return super(newstr, self).__ne__(other)
     else:
         return True
Beispiel #9
0
 def startswith(self, prefix, *args):
     if isinstance(prefix, Iterable):
         for thing in prefix:
             if isnewbytes(thing):
                 raise TypeError(self.no_convert_msg.format(type(thing)))
     return super(newstr, self).startswith(prefix, *args)
Beispiel #10
0
 def __ge__(self, other):
     if (isinstance(other, unicode)
             or isinstance(other, bytes) and not isnewbytes(other)):
         return super(newstr, self).__ge__(other)
     raise TypeError(self.unorderable_err.format(type(other)))
Beispiel #11
0
 def __hash__(self):
     if (isinstance(self, unicode)
             or isinstance(self, bytes) and not isnewbytes(self)):
         return super(newstr, self).__hash__()
     else:
         raise NotImplementedError()
Beispiel #12
0
 def __eq__(self, other):
     if (isinstance(other, unicode)
             or isinstance(other, bytes) and not isnewbytes(other)):
         return super(newstr, self).__eq__(other)
     else:
         return NotImplemented
Beispiel #13
0
 def __ge__(self, other):
     if (isinstance(other, unicode) or
         isinstance(other, bytes) and not isnewbytes(other)):
         return super(newstr, self).__ge__(other)
     raise TypeError(self.unorderable_err.format(type(other)))