diff options
author | Paul Molodowitch <elrond79@gmail.com> | 2012-10-24 11:27:52 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2012-10-24 13:06:36 -0700 |
commit | 52feabbe7641f19a17810438d2469b2395b2819f (patch) | |
tree | a54ad92b80775233aafc05acdf27adf3942973df /sleekxmpp | |
parent | a22ca228cc3a121da8bad4268c39bff5190db969 (diff) | |
download | slixmpp-52feabbe7641f19a17810438d2469b2395b2819f.tar.gz slixmpp-52feabbe7641f19a17810438d2469b2395b2819f.tar.bz2 slixmpp-52feabbe7641f19a17810438d2469b2395b2819f.tar.xz slixmpp-52feabbe7641f19a17810438d2469b2395b2819f.zip |
added setdefaultencoding method so reload(sys) not needed
reload(sys) could cause problem in user code - ie, sys.stdout, excepthook, and displayhook would be reset, etc
Diffstat (limited to 'sleekxmpp')
-rw-r--r-- | sleekxmpp/basexmpp.py | 4 | ||||
-rw-r--r-- | sleekxmpp/util/misc_ops.py | 24 |
2 files changed, 26 insertions, 2 deletions
diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py index 4df7f11a..c3ff5ba3 100644 --- a/sleekxmpp/basexmpp.py +++ b/sleekxmpp/basexmpp.py @@ -43,8 +43,8 @@ log = logging.getLogger(__name__) # In order to make sure that Unicode is handled properly # in Python 2.x, reset the default encoding. if sys.version_info < (3, 0): - reload(sys) - sys.setdefaultencoding('utf8') + from sleekxmpp.util.misc_ops import setdefaultencoding + setdefaultencoding('utf8') class BaseXMPP(XMLStream): diff --git a/sleekxmpp/util/misc_ops.py b/sleekxmpp/util/misc_ops.py index 9bb1db4b..3b246625 100644 --- a/sleekxmpp/util/misc_ops.py +++ b/sleekxmpp/util/misc_ops.py @@ -125,3 +125,27 @@ def hashes(): t += ['MD2'] hashes = ['SHA-' + h[3:] for h in dir(hashlib) if h.startswith('sha')] return t + hashes + +def setdefaultencoding(encoding): + """ + Set the current default string encoding used by the Unicode implementation. + + Actually calls sys.setdefaultencoding under the hood - see the docs for that + for more details. This method exists only as a way to call find/call it + even after it has been 'deleted' when the site module is executed. + + :param string encoding: An encoding name, compatible with sys.setdefaultencoding + """ + func = getattr(sys, 'setdefaultencoding', None) + if func is None: + import gc + import types + for obj in gc.get_objects(): + if (isinstance(obj, types.BuiltinFunctionType) + and obj.__name__ == 'setdefaultencoding'): + func = obj + break + if func is None: + raise RuntimeError("Could not find setdefaultencoding") + sys.setdefaultencoding = func + return func(encoding)
\ No newline at end of file |