mirror of
https://github.com/rembo10/headphones.git
synced 2026-01-12 07:48:16 -05:00
Mostly just updating libraries, removing string encoding/decoding, fixing some edge cases. No new functionality was added in this commit.
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
"""Compatibility code for using CherryPy with various versions of Python.
|
|
|
|
To retain compatibility with older Python versions, this module provides a
|
|
useful abstraction over the differences between Python versions, sometimes by
|
|
preferring a newer idiom, sometimes an older one, and sometimes a custom one.
|
|
|
|
In particular, Python 2 uses str and '' for byte strings, while Python 3
|
|
uses str and '' for unicode strings. We will call each of these the 'native
|
|
string' type for each version. Because of this major difference, this module
|
|
provides
|
|
two functions: 'ntob', which translates native strings (of type 'str') into
|
|
byte strings regardless of Python version, and 'ntou', which translates native
|
|
strings to unicode strings.
|
|
|
|
Try not to use the compatibility functions 'ntob', 'ntou', 'tonative'.
|
|
They were created with Python 2.3-2.5 compatibility in mind.
|
|
Instead, use unicode literals (from __future__) and bytes literals
|
|
and their .encode/.decode methods as needed.
|
|
"""
|
|
|
|
import http.client
|
|
|
|
|
|
def ntob(n, encoding='ISO-8859-1'):
|
|
"""Return the given native string as a byte string in the given
|
|
encoding.
|
|
"""
|
|
assert_native(n)
|
|
# In Python 3, the native string type is unicode
|
|
return n.encode(encoding)
|
|
|
|
|
|
def ntou(n, encoding='ISO-8859-1'):
|
|
"""Return the given native string as a unicode string with the given
|
|
encoding.
|
|
"""
|
|
assert_native(n)
|
|
# In Python 3, the native string type is unicode
|
|
return n
|
|
|
|
|
|
def tonative(n, encoding='ISO-8859-1'):
|
|
"""Return the given string as a native string in the given encoding."""
|
|
# In Python 3, the native string type is unicode
|
|
if isinstance(n, bytes):
|
|
return n.decode(encoding)
|
|
return n
|
|
|
|
|
|
def assert_native(n):
|
|
if not isinstance(n, str):
|
|
raise TypeError('n must be a native str (got %s)' % type(n).__name__)
|
|
|
|
|
|
# Some platforms don't expose HTTPSConnection, so handle it separately
|
|
HTTPSConnection = getattr(http.client, 'HTTPSConnection', None)
|
|
|
|
|
|
text_or_bytes = str, bytes
|