]> granicus.if.org Git - python/commitdiff
Make decimal.ContextManager a private implementation detail of decimal.localcontext()
authorNick Coghlan <ncoghlan@gmail.com>
Sat, 2 Sep 2006 03:54:17 +0000 (03:54 +0000)
committerNick Coghlan <ncoghlan@gmail.com>
Sat, 2 Sep 2006 03:54:17 +0000 (03:54 +0000)
Lib/decimal.py
Lib/test/test_decimal.py

index a5176e6fe6c43d51e645685c688a430694b50b88..a66beef6cd2e4e082a4ce2cb675393c0111e5521 100644 (file)
@@ -130,9 +130,6 @@ __all__ = [
     'ROUND_DOWN', 'ROUND_HALF_UP', 'ROUND_HALF_EVEN', 'ROUND_CEILING',
     'ROUND_FLOOR', 'ROUND_UP', 'ROUND_HALF_DOWN',
 
-    # helper for context management
-    'ContextManager',
-
     # Functions for manipulating contexts
     'setcontext', 'getcontext', 'localcontext'
 ]
@@ -501,8 +498,8 @@ def localcontext(ctx=None):
     >>> print getcontext().prec
     28
     """
-    if ctx is None: ctx = getcontext().copy()
-    return ContextManager(ctx.copy())
+    if ctx is None: ctx = getcontext()
+    return _ContextManager(ctx)
 
 
 ##### Decimal class ###########################################
@@ -2219,30 +2216,14 @@ for name in rounding_functions:
 
 del name, val, globalname, rounding_functions
 
-class ContextManager(object):
+class _ContextManager(object):
     """Context manager class to support localcontext().
 
-      Sets the supplied context in __enter__() and restores
+      Sets a copy of the supplied context in __enter__() and restores
       the previous decimal context in __exit__()
-
-    """
-    # The below can't be included in the docstring until Python 2.6
-    # as the doctest module doesn't understand __future__ statements
-    """
-    Sample usage:
-    >>> from __future__ import with_statement
-    >>> print getcontext().prec
-    28
-    >>> ctx = Context(prec=15)
-    >>> with ContextManager(ctx):
-    ...     print getcontext().prec
-    ...
-    15
-    >>> print getcontext().prec
-    28
     """
     def __init__(self, new_context):
-        self.new_context = new_context
+        self.new_context = new_context.copy()
     def __enter__(self):
         self.saved_context = getcontext()
         setcontext(self.new_context)
index 6e7faf5fcc26eff7eb98625805760dadf47e31e9..841ea6fc068e8248fd6677bdcfdb143a5728a876 100644 (file)
@@ -1068,20 +1068,9 @@ class ContextAPItests(unittest.TestCase):
 class WithStatementTest(unittest.TestCase):
     # Can't do these as docstrings until Python 2.6
     # as doctest can't handle __future__ statements
-    def test_ContextManager(self):
-        # The basic context manager uses the supplied context
-        # without making a copy of it
-        orig_ctx = getcontext()
-        new_ctx = Context()
-        with ContextManager(new_ctx) as enter_ctx:
-            set_ctx = getcontext()
-        final_ctx = getcontext()
-        self.assert_(orig_ctx is final_ctx, 'did not restore context correctly')
-        self.assert_(new_ctx is set_ctx, 'did not set correct context')
-        self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context')
 
     def test_localcontext(self):
-        # The helper function makes a copy of the supplied context
+        # Use a copy of the current context in the block
         orig_ctx = getcontext()
         with localcontext() as enter_ctx:
             set_ctx = getcontext()
@@ -1091,7 +1080,7 @@ class WithStatementTest(unittest.TestCase):
         self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context')
 
     def test_localcontextarg(self):
-        # The helper function makes a copy of the supplied context
+        # Use a copy of the supplied context in the block
         orig_ctx = getcontext()
         new_ctx = Context(prec=42)
         with localcontext(new_ctx) as enter_ctx: