# standard imports import logging # third party imports import celery import africastalking # local imports from cic_notify.error import NotInitializedError, AlreadyInitializedError logg = logging.getLogger() celery_app = celery.current_app class AfricasTalkingNotifier: initiated = None sender_id = None def __init__(self): if not self.initiated: raise NotInitializedError() self.api_client = africastalking.SMS @staticmethod def initialize(api_username, api_key, sender_id=None): """ :param api_username: :type api_username: :param api_key: :type api_key: :param sender_id: :type sender_id: """ if AfricasTalkingNotifier.initiated: raise AlreadyInitializedError() africastalking.initialize(username=api_username, api_key=api_key) AfricasTalkingNotifier.sender_id = sender_id AfricasTalkingNotifier.initiated = True def send(self, message, recipient): """ :param message: :type message: :param recipient: :type recipient: :return: :rtype: """ if self.sender_id: response = self.api_client.send(message=message, recipients=[recipient], sender_id=self.sender_id) logg.debug(f'Africastalking response sender-id {response}') else: response = self.api_client.send(message=message, recipients=[recipient]) logg.debug(f'africastalking response no-sender-id {response}') @celery_app.task def send(message, recipient): """ :param message: :type message: :param recipient: :type recipient: :return: :rtype: """ africastalking_notifier = AfricasTalkingNotifier() africastalking_notifier.send(message=message, recipient=recipient)