aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/context.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/context.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/context.py133
1 files changed, 0 insertions, 133 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/context.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/context.py
deleted file mode 100755
index 2bda75f1..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/context.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- test-case-name: twisted.test.test_context -*-
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-#
-
-"""
-Dynamic pseudo-scoping for Python.
-
-Call functions with context.call({key: value}, func); func and
-functions that it calls will be able to use 'context.get(key)' to
-retrieve 'value'.
-
-This is thread-safe.
-"""
-
-from threading import local
-
-defaultContextDict = {}
-
-setDefault = defaultContextDict.__setitem__
-
-class ContextTracker:
- """
- A L{ContextTracker} provides a way to pass arbitrary key/value data up and
- down a call stack without passing them as parameters to the functions on
- that call stack.
-
- This can be useful when functions on the top and bottom of the call stack
- need to cooperate but the functions in between them do not allow passing the
- necessary state. For example::
-
- from twisted.python.context import call, get
-
- def handleRequest(request):
- call({'request-id': request.id}, renderRequest, request.url)
-
- def renderRequest(url):
- renderHeader(url)
- renderBody(url)
-
- def renderHeader(url):
- return "the header"
-
- def renderBody(url):
- return "the body (request id=%r)" % (get("request-id"),)
-
- This should be used sparingly, since the lack of a clear connection between
- the two halves can result in code which is difficult to understand and
- maintain.
-
- @ivar contexts: A C{list} of C{dict}s tracking the context state. Each new
- L{ContextTracker.callWithContext} pushes a new C{dict} onto this stack
- for the duration of the call, making the data available to the function
- called and restoring the previous data once it is complete..
- """
- def __init__(self):
- self.contexts = [defaultContextDict]
-
-
- def callWithContext(self, newContext, func, *args, **kw):
- """
- Call C{func(*args, **kw)} such that the contents of C{newContext} will
- be available for it to retrieve using L{getContext}.
-
- @param newContext: A C{dict} of data to push onto the context for the
- duration of the call to C{func}.
-
- @param func: A callable which will be called.
-
- @param *args: Any additional positional arguments to pass to C{func}.
-
- @param **kw: Any additional keyword arguments to pass to C{func}.
-
- @return: Whatever is returned by C{func}
-
- @raise: Whatever is raised by C{func}.
- """
- self.contexts.append(newContext)
- try:
- return func(*args,**kw)
- finally:
- self.contexts.pop()
-
-
- def getContext(self, key, default=None):
- """
- Retrieve the value for a key from the context.
-
- @param key: The key to look up in the context.
-
- @param default: The value to return if C{key} is not found in the
- context.
-
- @return: The value most recently remembered in the context for C{key}.
- """
- for ctx in reversed(self.contexts):
- try:
- return ctx[key]
- except KeyError:
- pass
- return default
-
-
-
-class ThreadedContextTracker(object):
- def __init__(self):
- self.storage = local()
-
- def currentContext(self):
- try:
- return self.storage.ct
- except AttributeError:
- ct = self.storage.ct = ContextTracker()
- return ct
-
- def callWithContext(self, ctx, func, *args, **kw):
- return self.currentContext().callWithContext(ctx, func, *args, **kw)
-
- def getContext(self, key, default=None):
- return self.currentContext().getContext(key, default)
-
-
-def installContextTracker(ctr):
- global theContextTracker
- global call
- global get
-
- theContextTracker = ctr
- call = theContextTracker.callWithContext
- get = theContextTracker.getContext
-
-installContextTracker(ThreadedContextTracker())