import logging
from types import MethodType

import blinker

from utils import async


def send_async(self, *sender, **kwargs):
    async.defer(self.send, *sender, **kwargs)


def send_logged(self, *sender, **kwargs):
    logging.info("Signal from: {}. Signal name is: {}".format(str(sender),
                                                              getattr(self, "name", "")))
    self.send_orig(*sender, ** kwargs)

blinker.Signal.send_orig = blinker.Signal.send
#blinker.Signal.send = MethodType(send_logged, None, blinker.Signal)
blinker.Signal.send_async = MethodType(send_async, None, blinker.Signal)