Exemplo n.º 1
0
def process_webhook(
    sender: Type[Model],
    instance: Union[TokenTransfer, InternalTx, MultisigConfirmation,
                    MultisigTransaction, SafeContract, ],
    created: bool,
    **kwargs,
) -> None:
    logger.debug("Start building payloads for created=%s object=%s", created,
                 instance)
    payloads = build_webhook_payload(sender, instance)
    logger.debug("End building payloads %s for created=%s object=%s", payloads,
                 created, instance)
    for payload in payloads:
        if address := payload.get("address"):
            if is_relevant_notification(sender, instance, created):
                logger.debug(
                    "Triggering send_webhook and send_notification tasks for created=%s object=%s",
                    created,
                    instance,
                )
                send_webhook_task.apply_async(
                    args=(address, payload),
                    priority=2  # Almost lowest priority
                )  # Almost the lowest priority
                send_notification_task.apply_async(
                    args=(address, payload),
                    countdown=5,
                    priority=2,  # Almost lowest priority
                )
            else:
                logger.debug(
                    "Notification will not be sent for created=%s object=%s",
                    created,
                    instance,
                )
Exemplo n.º 2
0
def process_webhook(sender: Type[Model],
                    instance: Union[EthereumEvent, InternalTx,
                                    MultisigConfirmation, MultisigTransaction],
                    created: bool, **kwargs) -> None:
    if is_valid_webhook(sender, instance, created):
        # Don't send information for older than 10 minutes transactions
        # This triggers a DB query on EthereumEvent, InternalTx (they are not TimeStampedModel)
        payload = build_webhook_payload(sender, instance)
        if payload and (address := payload.get('address')):
            send_webhook_task.delay(address, payload)
            send_notification_task.apply_async(args=(address, payload),
                                               countdown=2)
Exemplo n.º 3
0
def process_webhook(sender: Type[Model],
                    instance: Union[EthereumEvent, InternalTx,
                                    MultisigConfirmation, MultisigTransaction],
                    created: bool, **kwargs) -> None:

    if not created and sender != MultisigTransaction:  # MultisigTransaction can change from Pending to Executed
        return

    payload = build_webhook_payload(sender, instance)
    if payload and (address := payload.get('address')):
        send_webhook_task.delay(address, payload)
        send_notification_task.apply_async(args=(address, payload),
                                           countdown=2)