[Python-checkins] cpython: Avoid triggering the refleak detector

nick.coghlan python-checkins at python.org
Fri Nov 15 15:35:44 CET 2013


http://hg.python.org/cpython/rev/8c4d42c0dc8e
changeset:   87111:8c4d42c0dc8e
user:        Nick Coghlan <ncoghlan at gmail.com>
date:        Sat Nov 16 00:35:34 2013 +1000
summary:
  Avoid triggering the refleak detector

files:
  Lib/test/test_codecs.py |  22 ++++++++++++++--------
  1 files changed, 14 insertions(+), 8 deletions(-)


diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -2386,6 +2386,15 @@
 # currently *only* want this to happen for relatively stateless
 # exceptions, where the only significant information they contain is their
 # type and a single str argument.
+
+# Use a local codec registry to avoid appearing to leak objects when
+# registering multiple seach functions
+_TEST_CODECS = {}
+
+def _get_test_codec(codec_name):
+    return _TEST_CODECS.get(codec_name)
+codecs.register(_get_test_codec) # Returns None, not usable as a decorator
+
 class ExceptionChainingTest(unittest.TestCase):
 
     def setUp(self):
@@ -2395,19 +2404,16 @@
         # The codecs module normalizes codec names, although this doesn't
         # appear to be formally documented...
         self.codec_name = repr(self).lower().replace(" ", "-")
-        self.codec_info = None
-        codecs.register(self.get_codec)
 
-    def get_codec(self, codec_name):
-        if codec_name != self.codec_name:
-            return None
-        return self.codec_info
+    def tearDown(self):
+        _TEST_CODECS.pop(self.codec_name, None)
 
     def set_codec(self, obj_to_raise):
         def raise_obj(*args, **kwds):
             raise obj_to_raise
-        self.codec_info = codecs.CodecInfo(raise_obj, raise_obj,
-                                           name=self.codec_name)
+        codec_info = codecs.CodecInfo(raise_obj, raise_obj,
+                                      name=self.codec_name)
+        _TEST_CODECS[self.codec_name] = codec_info
 
     @contextlib.contextmanager
     def assertWrapped(self, operation, exc_type, msg):

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list