Beispiel #1
0
    def execute(self):
        """ Validar si la URL para el servicio web esta
            disponible
        """
        if self.soap_conf.url:
            # Creacion de la instancia Client
            client = Client(self.soap_conf.url, cache=None)
            email = Email.get_email_by_id(self.email_id)
            documento = None
            body = None

            if email is not None:
                email = email.__dict__

                if self.soap_conf.con_autenticacion:
                    """ Método por definir cuando el cliente solicita
                        algún metodo de autenticación a un web service
                    """
                    pass

                if self.soap_conf.con_objeto_documento:
                    # Se prepara el objeto documento
                    logging.info("creando objeto documento")
                    documento = client.factory.create(self.soap_conf.nombre_objeto_documento)
                    doc_attr = (self.soap_conf.parametros_objeto_documento).split(';')
                    doc_field = (self.soap_conf.campos_objeto_documento).split(';')

                    for att, field in map(None, doc_attr, doc_field):
                        documento[att] = email[field]

                    logging.info("imprimiendo documento")
                    logging.info(documento)

                if self.soap_conf.con_objeto_request:
                    logging.info("Creando objeto request")
                    body = client.factory.create(self.soap_conf.nombre_objeto_request)

                if self.soap_conf.solo_default:
                    """ Método por definir cuando se utiliza un solo metodo para
                        notificar eventos sendgrid a un web service
                    """
                    pass
                else:

                    if self.event == 'processed':
                        logging.info("ws procesados")
                        data = dict()
                        params = (self.soap_conf.parametros_procesado).split(';')
                        fields = (self.soap_conf.campos_procesado).split(';')

                        client = getattr(client.service, self.soap_conf.metodo_procesado)

                        for param, field in map(None, params, fields):
                            logging.info(field)
                            logging.info(email[field])

                            """ Validar si los parametros se guardan en
                                la variable data o en body.
                            """
                            if self.soap_conf.con_objeto_request:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(body))

                            else:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(**data))

                    elif self.event == 'delivered':
                        logging.info("ws enviados")
                        data = dict()
                        params = (self.soap_conf.parametros_enviado).split(';')
                        fields = (self.soap_conf.campos_enviado).split(';')

                        client = getattr(client.service, self.soap_conf.metodo_enviado)

                        for param, field in map(None, params, fields):
                            logging.info(field)

                            if self.soap_conf.con_objeto_request:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(body))

                            else:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(**data))

                    elif self.event == 'open':
                        logging.info("ws leidos")
                        data = dict()
                        params = (self.soap_conf.parametros_leido).split(';')
                        fields = (self.soap_conf.campos_leido).split(';')

                        client = getattr(client.service, self.soap_conf.metodo_leido)

                        for param, field in map(None, params, fields):

                            if self.soap_conf.con_objeto_request:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(body))

                            else:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(**data))

                    elif self.event == 'dropped':
                        logging.info("ws rechazados")
                        data = dict()
                        params = (self.soap_conf.parametros_rechazado).split(';')
                        fields = (self.soap_conf.campos_rechazado).split(';')

                        client = getattr(client.service, self.soap_conf.metodo_rechazado)

                        for param, field in map(None, params, fields):

                            if self.soap_conf.con_objeto_request:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(body))

                            else:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(**data))

                    elif self.event == 'bounce':
                        logging.info("ws rebotados")
                        data = dict()
                        params = (self.soap_conf.parametros_rebotado).split(';')
                        fields = (self.soap_conf.campos_rebotado).split(';')

                        client = getattr(client.service, self.soap_conf.metodo_rebotado)

                        for param, field in map(None, params, fields):

                            if self.soap_conf.con_objeto_request:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(body))

                            else:

                                if field.endswith('_date') and email[field] is not None:
                                    logging.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith('_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[self.soap_conf.nombre_parametro_documento] = documento

                                logging.info("imprimiendo resultado del WS")
                                logging.info(client(**data))

            else:
                logging.error("Email id no corresponde")
        else:
            logging.error('No hay url soap ws configurada')
Beispiel #2
0
 def __init__(self, email_id, event):
     self.email_id = email_id
     self.event = event
     holding = Email.get_email_by_id(email_id).empresa.holding
     self.soap_conf = SoapWebService.get_ws_conf(holding)
     logging.info("Objeto SoapMiddleware creado")
Beispiel #3
0
    def post(self, request, *args, **kwargs):
        request_body = json.loads(request.body.decode('utf-8'))

        for body in request_body:
            logger.info(request_body)
            try:
                evento_sendgrid = str(body['event']).decode('utf-8')
                email_id = str(body['email_id']).decode('utf-8')
                logger.info(evento_sendgrid)
            except Exception, e:
                logger.error(e)
                return HttpResponse(e)

            try:
                if evento_sendgrid and email_id:
                    email_id = int(email_id, base=10)
                    logger.info("es un webhook para el tracking")

                    if evento_sendgrid == 'processed':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            email.smtp_id = str(
                                body['smtp-id']).decode('utf-8')
                            email.processed_date = body['timestamp']
                            email.processed_event = evento_sendgrid
                            email.processed_sg_event_id = str(
                                body['sg_event_id']).decode('utf-8')
                            email.processed_sg_message_id = str(
                                body['sg_message_id']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'delivered':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            email.smtp_id = str(
                                body['smtp-id']).decode('utf-8')
                            email.delivered_date = body['timestamp']
                            email.delivered_event = evento_sendgrid
                            email.delivered_sg_event_id = str(
                                body['sg_event_id']).decode('utf-8')
                            email.delivered_sg_message_id = str(
                                body['sg_message_id']).decode('utf-8')
                            email.delivered_response = str(
                                body['response']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'open':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            if email.opened_first_date is None:
                                email.opened_first_date = body['timestamp']
                            email.opened_last_date = body['timestamp']
                            email.opened_event = evento_sendgrid
                            email.opened_ip = str(body['ip']).decode('utf-8')
                            email.opened_user_agent = str(
                                body['useragent']).decode('utf-8')
                            email.opened_sg_event_id = str(
                                body['sg_event_id']).decode('utf-8')
                            email.opened_sg_message_id = str(
                                body['sg_message_id']).decode('utf-8')
                            email.opened_count += 1
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'dropped':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            email.smtp_id = str(
                                body['smtp-id']).decode('utf-8')
                            email.dropped_date = body['timestamp']
                            email.dropped_sg_event_id = str(
                                body['sg_event_id']).decode('utf-8')
                            email.dropped_sg_message_id = str(
                                body['sg_message_id']).decode('utf-8')
                            email.dropped_reason = str(
                                body['reason']).decode('utf-8')
                            email.dropped_event = evento_sendgrid
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'bounce':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            email.bounce_date = body['timestamp']
                            email.bounce_event = evento_sendgrid
                            email.bounce_sg_event_id = str(
                                body['sg_event_id']).decode('utf-8')
                            email.bounce_sg_message_id = str(
                                body['sg_message_id']).decode('utf-8')
                            email.bounce_reason = str(
                                body['reason']).decode('utf-8')
                            email.bounce_status = str(
                                body['status']).decode('utf-8')
                            email.bounce_type = str(
                                body['type']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'unsubscribe':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            email.unsubscribe_date = body['timestamp']
                            email.unsubscribe_uid = str(
                                body['uid']).decode('utf-8')
                            email.unsubscribe_purchase = str(
                                body['purchase']).decode('utf-8')
                            email.unsubscribe_id = str(
                                body['id']).decode('utf-8')
                            email.unsubscribe_event = evento_sendgrid
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'click':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logger.info(email)
                            email.click_ip = str(body['ip']).decode('utf-8')
                            email.click_purchase = ''
                            email.click_useragent = str(
                                body['useragent']).decode('utf-8')
                            email.click_event = evento_sendgrid
                            email.click_email = str(
                                body['email']).decode('utf-8')
                            email.click_date = body['timestamp']
                            email.click_url = str(body['url']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)
                else:
                    logger.error(
                        "parametros incompletos, correo no corresponde.")
            except Exception, e:
                logger.error(e)
                return HttpResponse(e, status=500)
Beispiel #4
0
    def post(self, request, *args, **kwargs):
        request_body = json.loads(request.body.decode('utf-8'))

        for body in request_body:
            logging.info(request_body)
            try:
                evento_sendgrid = str(body['event']).decode('utf-8')
                email_id = str(body['email_id']).decode('utf-8')
                logging.info(evento_sendgrid)
            except Exception, e:
                logging.error(e)
                return HttpResponse(e)

            try:
                if evento_sendgrid and email_id:
                    email_id = int(email_id, base=10)
                    logging.info("es un webhook para el tracking")

                    if evento_sendgrid == 'processed':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            email.smtp_id = str(body['smtp-id']).decode('utf-8')
                            email.processed_date = body['timestamp']
                            email.processed_event = evento_sendgrid
                            email.processed_sg_event_id = str(body['sg_event_id']).decode('utf-8')
                            email.processed_sg_message_id = str(body['sg_message_id']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'delivered':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            email.smtp_id = str(body['smtp-id']).decode('utf-8')
                            email.delivered_date = body['timestamp']
                            email.delivered_event = evento_sendgrid
                            email.delivered_sg_event_id = str(body['sg_event_id']).decode('utf-8')
                            email.delivered_sg_message_id = str(body['sg_message_id']).decode('utf-8')
                            email.delivered_response = str(body['response']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'open':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            if email.opened_first_date is None:
                                email.opened_first_date = body['timestamp']
                            email.opened_last_date = body['timestamp']
                            email.opened_event = evento_sendgrid
                            email.opened_ip = str(body['ip']).decode('utf-8')
                            email.opened_user_agent = str(body['useragent']).decode('utf-8')
                            email.opened_sg_event_id = str(body['sg_event_id']).decode('utf-8')
                            email.opened_sg_message_id = str(body['sg_message_id']).decode('utf-8')
                            email.opened_count += 1
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'dropped':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            email.smtp_id = str(body['smtp-id']).decode('utf-8')
                            email.dropped_date = body['timestamp']
                            email.dropped_sg_event_id = str(body['sg_event_id']).decode('utf-8')
                            email.dropped_sg_message_id = str(body['sg_message_id']).decode('utf-8')
                            email.dropped_reason = str(body['reason']).decode('utf-8')
                            email.dropped_event = evento_sendgrid
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'bounce':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            email.bounce_date = body['timestamp']
                            email.bounce_event = evento_sendgrid
                            email.bounce_sg_event_id = str(body['sg_event_id']).decode('utf-8')
                            email.bounce_sg_message_id = str(body['sg_message_id']).decode('utf-8')
                            email.bounce_reason = str(body['reason']).decode('utf-8')
                            email.bounce_status = str(body['status']).decode('utf-8')
                            email.bounce_type = str(body['type']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'unsubscribe':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            email.unsubscribe_date = body['timestamp']
                            email.unsubscribe_uid = str(body['uid']).decode('utf-8')
                            email.unsubscribe_purchase = str(body['purchase']).decode('utf-8')
                            email.unsubscribe_id = str(body['id']).decode('utf-8')
                            email.unsubscribe_event = evento_sendgrid
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)

                    elif evento_sendgrid == 'click':
                        email = Email.get_email_by_id(email_id)

                        if email is not None:
                            logging.info(email)
                            email.click_ip = str(body['ip']).decode('utf-8')
                            email.click_purchase = ''
                            email.click_useragent = str(body['useragent']).decode('utf-8')
                            email.click_event = evento_sendgrid
                            email.click_email = str(body['email']).decode('utf-8')
                            email.click_date = body['timestamp']
                            email.click_url = str(body['url']).decode('utf-8')
                            email.save()
                            soap_ws = SoapMiddleware(email.pk, evento_sendgrid)
                            soap_ws.evaluate()
                            # proceso de registrar eventos en tabla log
                            EmailLogEvent.write_event(evento_sendgrid, body)
                else:
                    logging.error("parametros incompletos, correo no corresponde.")
            except Exception, e:
                logging.error(e)
                return HttpResponse(e, status=500)
Beispiel #5
0
    def execute(self):
        """ Validar si la URL para el servicio web esta
            disponible
        """
        if self.soap_conf.url:
            # Creacion de la instancia Client
            client = Client(self.soap_conf.url, cache=None)
            email = Email.get_email_by_id(self.email_id)
            documento = None
            body = None

            if email is not None:
                email = email.__dict__

                if self.soap_conf.con_autenticacion:
                    """ Método por definir cuando el cliente solicita
                        algún metodo de autenticación a un web service
                    """
                    pass

                if self.soap_conf.con_objeto_documento:
                    # Se prepara el objeto documento
                    logger.info("creando objeto documento")
                    documento = client.factory.create(
                        self.soap_conf.nombre_objeto_documento)
                    doc_attr = self.soap_conf.parametros_objeto_documento.split(
                        ';')
                    doc_field = self.soap_conf.campos_objeto_documento.split(
                        ';')

                    for att, field in map(None, doc_attr, doc_field):
                        documento[att] = email[field]

                    logger.info("imprimiendo documento")
                    logger.info(documento)

                if self.soap_conf.con_objeto_request:
                    logger.info("Creando objeto request")
                    body = client.factory.create(
                        self.soap_conf.nombre_objeto_request)

                if self.soap_conf.solo_default:
                    """ Método por definir cuando se utiliza un solo metodo para
                        notificar eventos sendgrid a un web service
                    """
                    pass
                else:

                    if self.event == 'processed':
                        logger.info("ws procesados")
                        data = dict()
                        params = self.soap_conf.parametros_procesado.split(';')
                        fields = self.soap_conf.campos_procesado.split(';')

                        client = getattr(client.service,
                                         self.soap_conf.metodo_procesado)

                        for param, field in map(None, params, fields):
                            logger.info(field)
                            logger.info(email[field])
                            """ Validar si los parametros se guardan en
                                la variable data o en body.
                            """
                            if self.soap_conf.con_objeto_request:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(body))

                            else:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(**data))

                    elif self.event == 'delivered':
                        logger.info("ws enviados")
                        data = dict()
                        params = self.soap_conf.parametros_enviado.split(';')
                        fields = self.soap_conf.campos_enviado.split(';')

                        client = getattr(client.service,
                                         self.soap_conf.metodo_enviado)

                        for param, field in map(None, params, fields):
                            logger.info(field)

                            if self.soap_conf.con_objeto_request:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(body))

                            else:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(**data))

                    elif self.event == 'open':
                        logger.info("ws leidos")
                        data = dict()
                        params = self.soap_conf.parametros_leido.split(';')
                        fields = self.soap_conf.campos_leido.split(';')

                        client = getattr(client.service,
                                         self.soap_conf.metodo_leido)

                        for param, field in map(None, params, fields):

                            if self.soap_conf.con_objeto_request:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(body))

                            else:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(**data))

                    elif self.event == 'dropped':
                        logger.info("ws rechazados")
                        data = dict()
                        params = self.soap_conf.parametros_rechazado.split(';')
                        fields = self.soap_conf.campos_rechazado.split(';')

                        client = getattr(client.service,
                                         self.soap_conf.metodo_rechazado)

                        for param, field in map(None, params, fields):

                            if self.soap_conf.con_objeto_request:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(body))

                            else:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(**data))

                    elif self.event == 'bounce':
                        logger.info("ws rebotados")
                        data = dict()
                        params = self.soap_conf.parametros_rebotado.split(';')
                        fields = self.soap_conf.campos_rebotado.split(';')

                        client = getattr(client.service,
                                         self.soap_conf.metodo_rebotado)

                        for param, field in map(None, params, fields):

                            if self.soap_conf.con_objeto_request:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    body[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    body[param] = datetime.now()

                                else:
                                    body[param] = email[field]

                                if documento is not None:
                                    body[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(body))

                            else:

                                if field.endswith(
                                        '_date') and email[field] is not None:
                                    logger.info(email[field])
                                    field = timestamp_to_date(email[field])
                                    data[param] = field

                                elif field.endswith(
                                        '_date') and email[field] is None:
                                    data[param] = datetime.now()

                                else:
                                    data[param] = email[field]

                                if documento is not None:
                                    data[
                                        self.soap_conf.
                                        nombre_parametro_documento] = documento

                                logger.info("imprimiendo resultado del WS")
                                logger.info(client(**data))

            else:
                logger.error("Email id no corresponde")
        else:
            logger.error('No hay url soap ws configurada')
Beispiel #6
0
 def __init__(self, email_id, event):
     self.email_id = email_id
     self.event = event
     holding = Email.get_email_by_id(email_id).empresa.holding
     self.soap_conf = SoapWebService.get_ws_conf(holding)
     logger.info("Objeto SoapMiddleware creado")