Skip to content

Commit

Permalink
merge amqp.promise changes from callbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
ask committed Nov 6, 2015
1 parent 1a56c37 commit 07b9587
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
35 changes: 33 additions & 2 deletions amqp/promise.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@

import abc
import sys
import logging

from collections import Callable, deque

from .five import with_metaclass
from .utils import get_logger

__all__ = ['Thenable', 'promise', 'barrier', 'wrap',
'maybe_promise', 'ensure_promise']

logger = logging.getLogger(__name__)
logger = get_logger(__name__)


@with_metaclass(abc.ABCMeta)
Expand Down Expand Up @@ -188,6 +188,9 @@ def __init__(self, fun=None, args=None, kwargs=None,
if callback is not None:
self.then(callback)

if self.fun:
assert callable(fun)

def __repr__(self):
if self.fun:
return '<promise@0x{0:x}: {1!r}>'.format(id(self), self.fun)
Expand Down Expand Up @@ -291,6 +294,12 @@ def set_error_state(self, exc=None):
raise
raise exc

@property
def listeners(self):
if self._lvpending:
return self._lvpending
return self._svpending

def throw(self, exc=None):
if exc is None:
return self.set_error_state()
Expand Down Expand Up @@ -364,3 +373,25 @@ def ensure_promise(p):

def starpromise(fun, *args, **kwargs):
return promise(fun, args, kwargs)


def ready_promise(callback=None, *args):
p = ensure_promise(callback)
p(*args)
return p


def ppartial(p, *args, **kwargs):
p = ensure_promise(p)
if args:
p.args = args + p.args
if kwargs:
p.kwargs.update(kwargs)
return p


def preplace(p, *args, **kwargs):

def _replacer(*_, **__):
return p(*args, **kwargs)
return promise(_replacer)
19 changes: 17 additions & 2 deletions amqp/utils.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
from __future__ import absolute_import

import logging
import sys

from functools import wraps

from .promise import promise # noqa

is_py3k = sys.version_info[0] == 3

try:
import fcntl
except ImportError: # pragma: no cover
fcntl = None # noqa

from .five import string_t

try:
from os import set_cloexec # Python 3.4?
except ImportError:
Expand Down Expand Up @@ -77,3 +78,17 @@ def str_to_bytes(s): # noqa

def bytes_to_str(s): # noqa
return s


class NullHandler(logging.Handler):

def emit(self, record):
pass


def get_logger(logger):
if isinstance(logger, string_t):
logger = logging.getLogger(logger)
if not logger.handlers:
logger.addHandler(NullHandler())
return logger

0 comments on commit 07b9587

Please sign in to comment.