diff options
Diffstat (limited to 'Lib/_pydecimal.py')
| -rw-r--r-- | Lib/_pydecimal.py | 87 | 
1 files changed, 23 insertions, 64 deletions
| diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index edabf72aa7..a43c75fc3e 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -436,75 +436,34 @@ _rounding_modes = (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_CEILING,  # work for older Pythons.  If threads are not part of the build, create a  # mock threading object with threading.local() returning the module namespace. -try: -    import threading -except ImportError: -    # Python was compiled without threads; create a mock object instead -    class MockThreading(object): -        def local(self, sys=sys): -            return sys.modules[__xname__] -    threading = MockThreading() -    del MockThreading - -try: -    threading.local - -except AttributeError: - -    # To fix reloading, force it to create a new context -    # Old contexts have different exceptions in their dicts, making problems. -    if hasattr(threading.current_thread(), '__decimal_context__'): -        del threading.current_thread().__decimal_context__ - -    def setcontext(context): -        """Set this thread's context to context.""" -        if context in (DefaultContext, BasicContext, ExtendedContext): -            context = context.copy() -            context.clear_flags() -        threading.current_thread().__decimal_context__ = context - -    def getcontext(): -        """Returns this thread's context. - -        If this thread does not yet have a context, returns -        a new context and sets this thread's context. -        New contexts are copies of DefaultContext. -        """ -        try: -            return threading.current_thread().__decimal_context__ -        except AttributeError: -            context = Context() -            threading.current_thread().__decimal_context__ = context -            return context +import threading -else: +local = threading.local() +if hasattr(local, '__decimal_context__'): +    del local.__decimal_context__ -    local = threading.local() -    if hasattr(local, '__decimal_context__'): -        del local.__decimal_context__ +def getcontext(_local=local): +    """Returns this thread's context. -    def getcontext(_local=local): -        """Returns this thread's context. - -        If this thread does not yet have a context, returns -        a new context and sets this thread's context. -        New contexts are copies of DefaultContext. -        """ -        try: -            return _local.__decimal_context__ -        except AttributeError: -            context = Context() -            _local.__decimal_context__ = context -            return context - -    def setcontext(context, _local=local): -        """Set this thread's context to context.""" -        if context in (DefaultContext, BasicContext, ExtendedContext): -            context = context.copy() -            context.clear_flags() +    If this thread does not yet have a context, returns +    a new context and sets this thread's context. +    New contexts are copies of DefaultContext. +    """ +    try: +        return _local.__decimal_context__ +    except AttributeError: +        context = Context()          _local.__decimal_context__ = context +        return context + +def setcontext(context, _local=local): +    """Set this thread's context to context.""" +    if context in (DefaultContext, BasicContext, ExtendedContext): +        context = context.copy() +        context.clear_flags() +    _local.__decimal_context__ = context -    del threading, local        # Don't contaminate the namespace +del threading, local        # Don't contaminate the namespace  def localcontext(ctx=None):      """Return a context manager for a copy of the supplied context | 
