Ejemplo n.º 1
0
    def post(self):
        # registro de header y body del request
        #logging.info(self.request.headers)
        #logging.info(self.request.body)
        # seteo de parametros recibidos
        empresa = self.request.get('empresa')
        rut_receptor = self.request.get('rut_receptor')
        rut_emisor = self.request.get('rut_emisor')
        tipo_envio = self.request.get('tipo_envio')
        tipo_dte = self.request.get('tipo_dte')
        numero_folio = self.request.get('numero_folio')
        resolucion_receptor = self.request.get('resolucion_receptor')
        resolucion_emisor = self.request.get('resolucion_emisor')
        monto = self.request.get('monto')
        fecha_emision = self.request.get('fecha_emision')
        fecha_recepcion = self.request.get('fecha_recepcion')
        estado_documento = self.request.get('estado_documento')
        tipo_operacion = self.request.get('tipo_operacion')
        tipo_receptor = self.request.get('tipo_receptor')
        nombre_cliente = self.request.get('nombre_cliente')
        correo = self.request.get('correo')
        asunto = self.request.get('asunto')
        html = self.request.get('html')
        # seteo de adjuntos si es que lo hubiera
        adjunto1 = self.request.POST.get('adjunto1', None)
        adjunto2 = self.request.POST.get('adjunto2', None)
        adjunto3 = self.request.POST.get('adjunto3', None)

        if (correo and asunto and html and numero_folio and tipo_dte):
            # Proceso de creación del objeto email
            my_email = EmailModel()
            email_result = my_email.search_email(correo, numero_folio, tipo_dte)
            if email_result == None:
                #try:
                my_email.nombre_cliente = nombre_cliente
                my_email.correo = correo
                my_email.asunto = asunto
                my_email.html = html
                my_email.tipo_dte = tipo_dte
                my_email.numero_folio = numero_folio
                if empresa:
                    my_email.empresa = empresa
                if rut_receptor:
                    my_email.rut_receptor = rut_receptor
                if rut_emisor:
                    my_email.rut_emisor = rut_emisor
                if tipo_envio:
                    my_email.tipo_envio = tipo_envio
                if resolucion_receptor:
                    my_email.resolucion_receptor = resolucion_receptor
                if resolucion_emisor:
                    my_email.resolucion_emisor = resolucion_emisor
                if monto:
                    try:
                        my_email.monto = int(monto, base=10)
                    except:
                        pass
                if fecha_emision and not None:
                    my_email.fecha_emision = datetime.datetime.fromtimestamp(float(fecha_emision))
                if fecha_recepcion and not None:
                    my_email.fecha_recepcion = datetime.datetime.fromtimestamp(float(fecha_recepcion))
                if estado_documento:
                    my_email.estado_documento = estado_documento
                if tipo_operacion:
                    my_email.tipo_operacion = tipo_operacion
                if tipo_receptor:
                    my_email.tipo_receptor = tipo_receptor
                # Evaluar adjuntos
                if not adjunto1 == None:
                    att = AttachModel(
                        nombre=adjunto1.filename, archivo=adjunto1.file.read()).put()
                    my_email.attachs.append(att)
                if not adjunto2 == None:
                    att = AttachModel(
                        nombre=adjunto2.filename, archivo=adjunto2.file.read()).put()
                    my_email.attachs.append(att)
                if not adjunto3 == None:
                    att = AttachModel(
                        nombre=adjunto3.filename, archivo=adjunto3.file.read()).put()
                    my_email.attachs.append(att)
                my_email.put()
                context = {
                    'correo': correo,
                    'numero_folio': numero_folio,
                    'tipo_dte': tipo_dte,
                }
                # Inicio taskqueue
                q = taskqueue.Queue('InputQueue')
                t = taskqueue.Task(url='/inputqueue', params=context)
                q.add(t)
                self.response.write({'message': 'success'})
                #except Exception, e:
                #    logging.error(e)
            else:
                logging.info('objeto ya existe')
            # fin todo
        else:
            self.response.write({'message': 'error fields'})
Ejemplo n.º 2
0
    def post(self):
        """ Metodo que recibe los eventos generados al intentar enviar correos a SendGrid
        Los eventos capturados son (procesado, enviado, abierto, descartado, rebotado) """
        # se captura y se parsea a json el body del request recibido por el
        # webhook
        request_body = json.loads(self.request.body)

        for body in request_body:
            """ Evaluar el tipo de evento ya que trae campos diferentes """
            logging.info(request_body)

            event = str(body['event'])
            correo = str(body['email'])
            numero_folio = str(body['numero_folio'])
            tipo_dte = str(body['tipo_dte'])

            logging.info(event)

            if event and correo and numero_folio and tipo_dte:

                if event == 'processed':
                    email_model = EmailModel.search_email(correo, numero_folio, tipo_dte)
                    if not email_model == None:
                        email_model.smtp_id = body['smtp-id']
                        email_model.processed_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.processed_event = event
                        email_model.processed_sg_event_id = body['sg_event_id']
                        email_model.processed_sg_message_id = body['sg_message_id']
                        email_model.correo = str(body['email'])
                        email_model.numero_folio = str(body['numero_folio'])
                        email_model.tipo_dte = str(body['tipo_dte'])
                        email_model.put()
                    else:
                        e = EmailModel()
                        e.smtp_id = body['smtp-id']
                        e.processed_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.processed_event = event
                        e.processed_sg_event_id = body['sg_event_id']
                        e.processed_sg_message_id = body['sg_message_id']
                        e.correo = str(body['email'])
                        e.numero_folio = str(body['numero_folio'])
                        e.tipo_dte = str(body['tipo_dte'])
                        e.put()

                elif event == 'delivered':
                    email_model = EmailModel.search_email(correo, numero_folio, tipo_dte)
                    if not email_model == None:
                        email_model.smtp_id = body['smtp-id']
                        email_model.delivered_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.delivered_event = event
                        email_model.delivered_sg_event_id = body['sg_event_id']
                        email_model.delivered_sg_message_id = body['sg_message_id']
                        email_model.delivered_response = body['response']
                        email_model.correo = str(body['email'])
                        email_model.numero_folio = str(body['numero_folio'])
                        email_model.tipo_dte = str(body['tipo_dte'])
                        email_model.put()
                    else:
                        e = EmailModel()
                        e.smtp_id = body['smtp-id']
                        e.delivered_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.delivered_event = event
                        e.delivered_sg_event_id = body['sg_event_id']
                        e.delivered_sg_message_id = body['sg_message_id']
                        e.delivered_response = body['response']
                        e.correo = str(body['email'])
                        e.numero_folio = str(body['numero_folio'])
                        e.tipo_dte = str(body['tipo_dte'])
                        e.put()

                elif event == 'open':
                    model = EmailModel()
                    email_model = EmailModel.search_email(correo, numero_folio, tipo_dte)
                    if not email_model == None:
                        if email_model.opened_first_date == None:
                            email_model.opened_first_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.opened_last_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.opened_event = event
                        email_model.opened_ip = body['ip']
                        email_model.opened_user_agent = body['useragent']
                        email_model.opened_sg_event_id = body['sg_event_id']
                        email_model.opened_sg_message_id = body['sg_message_id']
                        model.email_add_count(email_model)
                        email_model.correo = str(body['email'])
                        email_model.numero_folio = str(body['numero_folio'])
                        email_model.tipo_dte = str(body['tipo_dte'])
                        email_model.put()
                    else:
                        e = EmailModel()
                        if e.opened_first_date == None:
                            e.opened_first_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.opened_last_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.opened_event = event
                        e.opened_ip = body['ip']
                        e.opened_user_agent = body['useragent']
                        e.opened_sg_event_id = body['sg_event_id']
                        e.opened_sg_message_id = body['sg_message_id']
                        e.email_add_count(e)
                        e.correo = str(body['email'])
                        e.numero_folio = str(body['numero_folio'])
                        e.tipo_dte = str(body['tipo_dte'])
                        e.put()

                elif event == 'dropped':
                    email_model = EmailModel.search_email(correo, numero_folio, tipo_dte)
                    if not email_model == None:
                        email_model.smtp_id = body['smtp-id']
                        email_model.dropped_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.dropped_sg_event_id = body['sg_event_id']
                        email_model.dropped_sg_message_id = body['sg_message_id']
                        email_model.dropped_reason = body['reason']
                        email_model.dropped_event = event
                        email_model.correo = str(body['email'])
                        email_model.numero_folio = str(body['numero_folio'])
                        email_model.tipo_dte = str(body['tipo_dte'])
                        email_model.put()
                    else:
                        e = EmailModel()
                        e.smtp_id = body['smtp-id']
                        e.dropped_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.dropped_sg_event_id = body['sg_event_id']
                        e.dropped_sg_message_id = body['sg_message_id']
                        e.dropped_reason = body['reason']
                        e.dropped_event = event
                        e.correo = str(body['email'])
                        e.numero_folio = str(body['numero_folio'])
                        e.tipo_dte = str(body['tipo_dte'])
                        e.put()

                elif event == 'bounce':
                    email_model = EmailModel.search_email(correo, numero_folio, tipo_dte)
                    if not email_model == None:
                        email_model.bounce_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.bounce_event = event
                        email_model.bounce_sg_event_id = body['sg_event_id']
                        email_model.bounce_sg_message_id = body['sg_message_id']
                        email_model.bounce_reason = body['reason']
                        email_model.bounce_status = body['status']
                        email_model.bounce_type = body['type']
                        email_model.correo = str(body['email'])
                        email_model.numero_folio = str(body['numero_folio'])
                        email_model.tipo_dte = str(body['tipo_dte'])
                        email_model.put()
                    else:
                        e = EmailModel()
                        e.bounce_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.bounce_event = event
                        e.bounce_sg_event_id = body['sg_event_id']
                        e.bounce_sg_message_id = body['sg_message_id']
                        e.bounce_reason = str(body['reason']).decode("utf-8")
                        e.bounce_status = body['status']
                        e.bounce_type = body['type']
                        e.correo = str(body['email'])
                        e.numero_folio = str(body['numero_folio'])
                        e.tipo_dte = str(body['tipo_dte'])
                        e.put()

                elif event == 'unsubscribe':
                    email_model = EmailModel.search_email(correo, numero_folio, tipo_dte)
                    if not email_model == None:
                        email_model.unsubscribe_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        email_model.unsubscribe_uid = body['uid']
                        email_model.unsubscribe_purchase = body['purchase']
                        email_model.unsubscribe_id = body['id']
                        email_model.unsubscribe_event = body['event']
                        email_model.correo = str(body['email'])
                        email_model.numero_folio = str(body['numero_folio'])
                        email_model.tipo_dte = str(body['tipo_dte'])
                        email_model.put()
                    else:
                        e = EmailModel()
                        e.unsubscribe_date = datetime.datetime.fromtimestamp(body['timestamp'])
                        e.unsubscribe_uid = body['uid']
                        e.unsubscribe_purchase = body['purchase']
                        e.unsubscribe_id = body['id']
                        e.unsubscribe_event = body['event']
                        e.correo = str(body['email'])
                        e.numero_folio = str(body['numero_folio'])
                        e.tipo_dte = str(body['tipo_dte'])
                        e.put()
            else:
                logging.info('body con campos vacios')