python3: force_text/force_byte

This commit is contained in:
Frédéric Péters 2018-03-26 10:06:25 +02:00
parent fe718e1159
commit d009b35ab2
1 changed files with 18 additions and 4 deletions

View File

@ -5,6 +5,8 @@ import logging
import cgi
from datetime import date
import six
__all__ = ['PaymentCommon', 'URL', 'HTML', 'RANDOM', 'RECEIVED', 'ACCEPTED',
'PAID', 'ERROR', 'WAITING']
@ -29,15 +31,27 @@ ORDERID_TRANSACTION_SEPARATOR = '!'
def force_text(s, encoding='utf-8'):
if isinstance(s, unicode):
if issubclass(type(s), six.text_type):
return s
try:
return unicode(s, encoding)
if not issubclass(type(s), six.string_types):
if six.PY3:
if isinstance(s, bytes):
s = six.text_type(s, encoding)
else:
s = six.text_type(s)
elif hasattr(s, '__unicode__'):
s = six.text_type(s)
else:
s = six.text_type(bytes(s), encoding)
else:
s = s.decode(encoding)
except UnicodeDecodeError:
return unicode(s)
return six.text_type(s, encoding, 'ignore')
return s
def force_byte(s, encoding='utf-8'):
if isinstance(s, str):
if isinstance(s, bytes):
return s
try:
return s.encode(encoding)