From 5e2fcd850b334efce569db6b5a5199208520015f Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 7 May 2013 12:00:54 -0400 Subject: Compat: b64encode for py3k that works on strings and bytes --- src/lib/Bcfg2/Compat.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Compat.py') diff --git a/src/lib/Bcfg2/Compat.py b/src/lib/Bcfg2/Compat.py index 4e9239e26..2ceb7555b 100644 --- a/src/lib/Bcfg2/Compat.py +++ b/src/lib/Bcfg2/Compat.py @@ -92,7 +92,13 @@ def u_str(string, encoding=None): # base64 compat if sys.hexversion >= 0x03000000: from base64 import b64encode as _b64encode, b64decode as _b64decode - b64encode = lambda s: _b64encode(s.encode('UTF-8')).decode('UTF-8') + + def b64encode(val): + try: + return _b64encode(val) + except TypeError: + return _b64encode(val.encode('UTF-8')).decode('UTF-8') + b64decode = lambda s: _b64decode(s.encode('UTF-8')).decode('UTF-8') else: from base64 import b64encode, b64decode -- cgit v1.2.3-1-g7c22 From a430fb769d2c0c2bf880a8d572d5bb0c41435dd1 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 7 May 2013 13:29:50 -0400 Subject: Compat: better b64encode/decode funcs for py3k --- src/lib/Bcfg2/Compat.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/lib/Bcfg2/Compat.py') diff --git a/src/lib/Bcfg2/Compat.py b/src/lib/Bcfg2/Compat.py index 2ceb7555b..c376b7a2d 100644 --- a/src/lib/Bcfg2/Compat.py +++ b/src/lib/Bcfg2/Compat.py @@ -89,17 +89,28 @@ def u_str(string, encoding=None): else: return unicode(string) +try: + from functools import wraps +except ImportError: + def wraps(wrapped): # pylint: disable=W0613 + """ implementation of functools.wraps() for python 2.4 """ + return lambda f: f + + # base64 compat if sys.hexversion >= 0x03000000: from base64 import b64encode as _b64encode, b64decode as _b64decode - def b64encode(val): + @wraps(_b64encode) + def b64encode(val, **kwargs): try: - return _b64encode(val) + return _b64encode(val, **kwargs) except TypeError: - return _b64encode(val.encode('UTF-8')).decode('UTF-8') + return _b64encode(val.encode('UTF-8'), **kwargs).decode('UTF-8') - b64decode = lambda s: _b64decode(s.encode('UTF-8')).decode('UTF-8') + @wraps(_b64decode) + def b64decode(val, **kwargs): + return _b64decode(val.encode('UTF-8'), **kwargs).decode('UTF-8') else: from base64 import b64encode, b64decode @@ -248,14 +259,6 @@ except ImportError: from md5 import md5 -try: - from functools import wraps -except ImportError: - def wraps(wrapped): # pylint: disable=W0613 - """ implementation of functools.wraps() for python 2.4 """ - return lambda f: f - - def oct_mode(mode): """ Convert a decimal number describing a POSIX permissions mode to a string giving the octal mode. In Python 2, this is a synonym -- cgit v1.2.3-1-g7c22 From 3e9e7fe1a3602e0102a6db2291f5a7dcdfeff20b Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 7 May 2013 14:43:50 -0400 Subject: fixed unit tests --- src/lib/Bcfg2/Compat.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/lib/Bcfg2/Compat.py') diff --git a/src/lib/Bcfg2/Compat.py b/src/lib/Bcfg2/Compat.py index c376b7a2d..d034c0777 100644 --- a/src/lib/Bcfg2/Compat.py +++ b/src/lib/Bcfg2/Compat.py @@ -102,14 +102,14 @@ if sys.hexversion >= 0x03000000: from base64 import b64encode as _b64encode, b64decode as _b64decode @wraps(_b64encode) - def b64encode(val, **kwargs): + def b64encode(val, **kwargs): # pylint: disable=C0111 try: return _b64encode(val, **kwargs) except TypeError: return _b64encode(val.encode('UTF-8'), **kwargs).decode('UTF-8') @wraps(_b64decode) - def b64decode(val, **kwargs): + def b64decode(val, **kwargs): # pylint: disable=C0111 return _b64decode(val.encode('UTF-8'), **kwargs).decode('UTF-8') else: from base64 import b64encode, b64decode -- cgit v1.2.3-1-g7c22