Index: third_party/twisted_8_1/twisted/flow/wrap.py |
diff --git a/third_party/twisted_8_1/twisted/flow/wrap.py b/third_party/twisted_8_1/twisted/flow/wrap.py |
deleted file mode 100644 |
index 3a55d41f9cdfdc830f83643e34952d693a27242d..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/flow/wrap.py |
+++ /dev/null |
@@ -1,217 +0,0 @@ |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
-# |
-# Author: Clark Evans (cce@clarkevans.com) |
-# |
- |
-""" flow.wrap |
- |
- This module provides the wrap() function in the flow module and |
- the private classes used for its implementation. |
-""" |
- |
-from base import * |
-from twisted.python.failure import Failure |
-from twisted.internet.defer import Deferred |
- |
-class _String(Stage): |
- """ Wrapper for a string object; don't create directly use flow.wrap |
- |
- This is probably the simplest stage of all. It is a |
- constant list of one item. See wrap for an example. |
- |
- """ |
- def __init__(self, str): |
- Stage.__init__(self) |
- self.results.append(str) |
- self.stop = True |
- def _yield(self): |
- pass |
- |
-class _List(Stage): |
- """ Wrapper for lists and tuple objects; don't create directly |
- |
- A simple stage, which admits the usage of instructions, |
- such as Cooperate() within the list. This would be |
- much simpler without logic to handle instructions. |
- |
- """ |
- def __init__(self, seq): |
- Stage.__init__(self) |
- self._seq = list(seq) |
- def _yield(self): |
- seq = self._seq |
- while seq: |
- result = seq.pop(0) |
- if isinstance(result, Instruction): |
- return result |
- self.results.append(result) |
- self.stop = True |
- |
-class _DeferredInstruction(CallLater): |
- def __init__(self, deferred): |
- self.deferred = deferred |
- def callLater(self, callable): |
- self.deferred.addBoth(callable) |
- |
-class _Iterable(Stage): |
- """ Wrapper for iterable objects, pass in a next() function |
- |
- This wraps functions (or bound methods). Execution starts with |
- the initial function. If the return value is a Stage, then |
- control passes on to that stage for the next round of execution. |
- If the return value is Cooperate, then the chain of Stages is |
- put on hold, and this return value travels all the way up the |
- call stack so that the underlying mechanism can sleep, or |
- perform other tasks, etc. All other non-Instruction return |
- values, Failure objects included, are passed back to the |
- previous stage via self.result |
- |
- All exceptions signal the end of the Stage. StopIteration |
- means to stop without providing a result, while all other |
- exceptions provide a Failure self.result followed by stoppage. |
- |
- """ |
- def __init__(self, iterable, *trap): |
- Stage.__init__(self, *trap) |
- self._iterable = iter(iterable) |
- self._next = None |
- |
- def _yield(self): |
- """ executed during a yield statement """ |
- if self.results or self.stop or self.failure: |
- return |
- while True: |
- next = self._next |
- if next: |
- instruction = next._yield() |
- if instruction: |
- return instruction |
- self._next = None |
- try: |
- result = self._iterable.next() |
- if isinstance(result, Instruction): |
- if isinstance(result, Stage): |
- self._next = result |
- continue |
- return result |
- if isinstance(result, Deferred): |
- if result.called: |
- continue |
- return _DeferredInstruction(result) |
- self.results.append(result) |
- except StopIteration: |
- self.stop = True |
- except Failure, fail: |
- self.failure = fail |
- except: |
- self.failure = Failure() |
- return |
- |
-class _Deferred(Stage): |
- """ Wraps a Deferred object into a stage; create with flow.wrap |
- |
- This stage provides a callback 'catch' for errback and |
- callbacks. If not called, then this returns an Instruction |
- which will let the reactor execute other operations, such |
- as the producer for this deferred. |
- |
- """ |
- def __init__(self, deferred, *trap): |
- Stage.__init__(self, *trap) |
- self._called = False |
- deferred.addCallbacks(self._callback, self._errback) |
- self._cooperate = _DeferredInstruction(deferred) |
- |
- def _callback(self, res): |
- self._called = True |
- self.results = [res] |
- |
- def _errback(self, fail): |
- self._called = True |
- self.failure = fail |
- |
- def _yield(self): |
- if self.results or self.stop or self.failure: |
- return |
- if not self._called: |
- return self._cooperate |
- if self._called: |
- self.stop = True |
- return |
- |
-def wrap(obj, *trap): |
- """ |
- Wraps various objects for use within a flow |
- |
- The following example illustrates many different ways in which regular |
- objects can be wrapped by the flow module to behave in a cooperative |
- manner. |
- |
- For example:: |
- |
- # required imports |
- from __future__ import generators |
- from twisted.flow import flow |
- from twisted.internet import reactor, defer |
- |
- # save this function, it is used everwhere |
- def printFlow(source): |
- def printer(source): |
- source = flow.wrap(source) |
- while True: |
- yield source |
- print source.next() |
- d = flow.Deferred(printer(source)) |
- d.addCallback(lambda _: reactor.stop()) |
- reactor.run() |
- |
- source = "string" |
- printFlow(source) |
- |
- source = ["one",flow.Cooperate(1),"two"] |
- printFlow(source) |
- |
- def source(): |
- yield "aeye" |
- yield flow.Cooperate() |
- yield "capin" |
- printFlow(source) |
- |
- source = Deferred() |
- reactor.callLater(1, lambda: source.callback("howdy")) |
- printFlow(source) |
- |
- """ |
- if isinstance(obj, Stage): |
- if trap: |
- # merge trap list |
- trap = list(trap) |
- for ex in obj._trap: |
- if ex not in trap: |
- trap.append(ex) |
- obj._trap = tuple(trap) |
- return obj |
- |
- if callable(obj): |
- obj = obj() |
- |
- typ = type(obj) |
- |
- if typ is type([]) or typ is type(tuple()): |
- return _List(obj) |
- |
- if typ is type(''): |
- return _String(obj) |
- |
- if isinstance(obj, Deferred): |
- return _Deferred(obj, *trap) |
- |
- try: |
- return _Iterable(obj, *trap) |
- except TypeError: |
- pass |
- |
- raise ValueError, "A wrapper is not available for %r" % (obj,) |
- |