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')
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")
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)
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)
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')
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")