summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2006-09-02 03:54:17 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2006-09-02 03:54:17 (GMT)
commitced1218dd1b69ac848f8c79d1afaada5669af33c (patch)
tree597ddd3968f4db0a4b7fb6a6b6c238eb9e49319b
parent69e88975059b0c74e3e9a17dd46b715a532cfd20 (diff)
downloadcpython-ced1218dd1b69ac848f8c79d1afaada5669af33c.zip
cpython-ced1218dd1b69ac848f8c79d1afaada5669af33c.tar.gz
cpython-ced1218dd1b69ac848f8c79d1afaada5669af33c.tar.bz2
Make decimal.ContextManager a private implementation detail of decimal.localcontext()
-rw-r--r--Lib/decimal.py29
-rw-r--r--Lib/test/test_decimal.py15
2 files changed, 7 insertions, 37 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py
index a5176e6..a66beef 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -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)
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index 6e7faf5..841ea6f 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -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: