Source code for pylablib.core.utils.py3

"""
Dealing with Python2 / Python3 compatibility.
"""
from builtins import bytes as new_bytes

if str is bytes: # Python 2

    textstring=(basestring,)  # pylint: disable=undefined-variable
    bytestring=(str,new_bytes)
    anystring=(str,unicode)  # pylint: disable=undefined-variable

    def as_str(data):
        """Convert a string into a text string"""
        return data
    def as_bytes(data):
        """Convert a string into bytes"""
        return new_bytes(data)
[docs] def as_builtin_bytes(data): """Convert a string into builtin bytes (str in Python 2, bytes in Python 3)""" return data
else: import locale locenc=locale.getpreferredencoding() use_locenc=True textstring=(str,) bytestring=(bytes,) anystring=(str,bytes)
[docs] def as_str(data): """Convert a string into a text string""" try: return data if isinstance(data,str) else data.decode() except UnicodeDecodeError: if use_locenc: return data.decode(encoding=locenc) raise
[docs] def as_bytes(data): """Convert a string into bytes""" return data if isinstance(data,bytes) else (data.encode("utf-8") if isinstance(data,str) else bytes(data))
as_builtin_bytes=as_bytes
[docs]def as_datatype(data, datatype): """ Convert a string into a given datatypes. `datatype` can be ``"str"`` (text string), ``"bytes"`` (byte string), or ``"auto"`` (no conversion). """ if datatype=="auto": return data elif datatype=="str": return as_str(data) return as_bytes(data)