Mercurial > public > mercurial-scm > hg-stable
diff mercurial/pycompat.py @ 32488:548478efc46c
pycompat: try __bytes__() to convert object to bytestr
It should be better than using __str__() unconditionally.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 04 May 2017 11:51:07 +0900 |
parents | 76f9a0009b4b |
children | c9318beb7c1a |
line wrap: on
line diff
--- a/mercurial/pycompat.py Tue May 23 15:44:50 2017 +0200 +++ b/mercurial/pycompat.py Thu May 04 11:51:07 2017 +0900 @@ -87,6 +87,14 @@ >>> s = bytestr(b'foo') >>> assert s is bytestr(s) + __bytes__() should be called if provided: + + >>> class bytesable(object): + ... def __bytes__(self): + ... return b'bytes' + >>> bytestr(bytesable()) + b'bytes' + There's no implicit conversion from non-ascii str as its encoding is unknown: @@ -127,7 +135,8 @@ def __new__(cls, s=b''): if isinstance(s, bytestr): return s - if not isinstance(s, (bytes, bytearray)): + if (not isinstance(s, (bytes, bytearray)) + and not hasattr(s, u'__bytes__')): # hasattr-py3-only s = str(s).encode(u'ascii') return bytes.__new__(cls, s)