def with_config(loop=None): """ :return: an instance of the txaio API with the given configuration. This won't affect anything using the 'gloabl' config nor other instances created using this function. If you need to customize txaio configuration separately (e.g. to use multiple event-loops in asyncio), you can take code like this: import txaio class FunTimes(object): def something_async(self): return txaio.call_later(1, lambda: 'some result') and instead do this: import txaio class FunTimes(object): txaio = txaio def something_async(self): # this will run in the local/new event loop created in the constructor return self.txaio.call_later(1, lambda: 'some result') fun0 = FunTimes() fun1 = FunTimes() fun1.txaio = txaio.with_config(loop=asyncio.new_event_loop()) So `fun1` will run its futures on the newly-created event loop, while `fun0` will work just as it did before this `with_config` method was introduced (after 2.6.2). """ cfg = _Config() if loop is not None: cfg.loop = loop return _AsyncioApi(cfg)
from twisted.internet.defer import succeed, fail from twisted.internet.interfaces import IReactorTime from zope.interface import provider from txaio.interfaces import IFailedFuture, ILogger, log_levels from txaio._iotype import guess_stream_needs_encoding from txaio import _Config from txaio._common import _BatchedTimer import six using_twisted = True using_asyncio = False config = _Config() _stderr, _stdout = sys.stderr, sys.stdout # some book-keeping variables here. _observer is used as a global by # the "backwards compatible" (Twisted < 15) loggers. The _loggers object # is a weak-ref set; we add Logger instances to this *until* such # time as start_logging is called (with the desired log-level) and # then we call _set_log_level on each instance. After that, # Logger's ctor uses _log_level directly. _observer = None # for Twisted legacy logging support; see below _loggers = weakref.WeakSet() # weak-references of each logger we've created _log_level = 'info' # global log level; possibly changed in start_logging() _started_logging = False _categories = {}
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ############################################################################### """ This provides a version of the API which only throws exceptions; this is the default so that you have to pick asyncio or twisted explicitly by calling .use_twisted() or .use_asyncio() """ from __future__ import absolute_import, division, print_function from txaio import _Config using_twisted = False using_asyncio = False config = _Config() def _throw_usage_error(*args, **kw): raise RuntimeError("To use txaio, you must first select a framework " "with .use_twisted() or .use_asyncio()") # all the txaio API methods just raise the error create_future = _throw_usage_error create_future_success = _throw_usage_error create_future_error = _throw_usage_error create_failure = _throw_usage_error as_future = _throw_usage_error is_future = _throw_usage_error reject = _throw_usage_error