예제 #1
0
def infoagent_search_message(addr, ragn_uri):
    """
    Envia una accion a un agente de informacion
    """
    global mss_cnt
    logger.info('Hacemos una peticion al servicio de informacion')

    gmess = Graph()

    # Supuesta ontologia de acciones de agentes de informacion
    IAA = Namespace('IAActions')

    gmess.bind('foaf', FOAF)
    gmess.bind('iaa', IAA)
    reg_obj = agn[AgentePersonal.name + '-info-search']
    gmess.add((reg_obj, RDF.type, IAA.Search))

    msg = build_message(gmess, perf=ACL.request,
                        sender=AgentePersonal.uri,
                        receiver=ragn_uri,
                        msgcnt=mss_cnt)
    gr = send_message(msg, addr)
    mss_cnt += 1
    logger.info('Recibimos respuesta a la peticion al servicio de informacion')

    return gr
예제 #2
0
def directory_search_message(type):
    """
    Busca en el servicio de registro mandando un
    mensaje de request con una accion Seach del servicio de directorio

    Podria ser mas adecuado mandar un query-ref y una descripcion de registo
    con variables

    :param type:
    :return:
    """
    global mss_cnt
    logger.info('Buscamos en el servicio de registro')

    gmess = Graph()

    gmess.bind('foaf', FOAF)
    gmess.bind('dso', DSO)
    reg_obj = agn[AgentePersonal.name + '-search']
    gmess.add((reg_obj, RDF.type, DSO.Search))
    gmess.add((reg_obj, DSO.AgentType, type))

    msg = build_message(gmess, perf=ACL.request,
                        sender=AgentePersonal.uri,
                        receiver=DirectoryAgent.uri,
                        content=reg_obj,
                        msgcnt=mss_cnt)
    gr = send_message(msg, DirectoryAgent.address)
    mss_cnt += 1
    logger.info('Recibimos informacion del agente')

    return gr
예제 #3
0
def create_and_sendProducts(gr):
    logger.info('Enviamos los productos')

    content = ECSDI['Enviar_lot' + str(get_n_message())]
    gr.add((content, RDF.type, ECSDI.Enviar_lot))

    subjectLoteProducto = ECSDI['Lote_producto' +
                                str(random.randint(1, sys.float_info.max))]
    gr.add((subjectLoteProducto, RDF.type, ECSDI.Lote_producto))
    gr.add(
        (subjectLoteProducto, ECSDI.Prioridad, Literal(1,
                                                       datatype=XSD.integer)))

    for item in gr.subjects(RDF.type, ECSDI.Producto):
        gr.add((subjectLoteProducto, ECSDI.productos, URIRef(item)))

    gr.add((content, ECSDI.a_enviar, URIRef(subjectLoteProducto)))

    # Se ha creado el envio de un lato de productos, ahora se procedede a negociar el envio y enviarlo
    logger.info('Se envia el lote de productos')
    print('Se envia el lote de productos')
    date = dateToMillis(datetime.datetime.utcnow() +
                        datetime.timedelta(days=9))
    urlEnvio = writeSends(gr, date)
    peso = obtenerPesoTotal(urlEnvio)
    requestTransport(date, peso)
    gr = prepareSellResponse(urlEnvio)
    return gr
예제 #4
0
def requestTransports(peso, fecha, destino):
    agents = get_bag_agent_info(agn.ExternalTransportAgent,
                                ExternalTransportDirectory, AgenteNegociador,
                                192310291)
    offers = []
    for agent in agents:
        offer = requestOffer(agent, peso, fecha, destino)
        logger.info('Offer received of ' + str(offer.price))
        if offer:
            offers += [offer]
    offers2 = []
    for i, offer in enumerate(offers):
        offer2 = counter_offer(offer)
        if offer2:
            logger.info('Counter offer accepted at ' + str(offer2.price))
            offers2 += [offer2]
        else:
            logger.info('Counter offer rejected by ' + str(offer.address))
            offers2 += [offer]
    best_offer = min(offers2, key=lambda a: a.price)
    logger.info('La mejor oferta es la de ' + str(best_offer.price) + '€')
    end = False
    for offer in offers2:
        if offer == best_offer:
            end = acceptOffer(best_offer)
        else:
            rejectOffer(offer)
    if end:
        logger.info('La negociacion se ha realizado con exito')
        return best_offer
    else:
        return None
예제 #5
0
def obtainProducts(gm):
    logger.info("Obtenemos los productos")

    products = Graph()

    sell = None
    for item in gm.subjects(RDF.type, ECSDI.Compra):
        sell = item

    sellsGraph = Graph()
    sellsGraph.parse(open('../data/compres'), format='turtle')

    for item in sellsGraph.objects(sell, ECSDI.Productos):
        marca = sellsGraph.value(subject=item, predicate=ECSDI.Marca)
        nombre = sellsGraph.value(subject=item, predicate=ECSDI.Nombre)
        modelo = sellsGraph.value(subject=item, predicate=ECSDI.Modelo)
        precio = sellsGraph.value(subject=item, predicate=ECSDI.Precio)
        peso = sellsGraph.value(subject=item, predicate=ECSDI.Peso)
        products.add((item, RDF.type, ECSDI.Producto))
        products.add((item, ECSDI.Marca, Literal(marca, datatype=XSD.string)))
        products.add((item, ECSDI.Nombre, Literal(nombre,
                                                  datatype=XSD.string)))
        products.add((item, ECSDI.Modelo, Literal(modelo,
                                                  datatype=XSD.string)))
        products.add((item, ECSDI.Precio, Literal(precio, datatype=XSD.float)))
        products.add((item, ECSDI.Peso, Literal(peso, datatype=XSD.float)))

    return products
예제 #6
0
def sendProducts(gr):
    logger.info('Enviamos los productos')

    content = ECSDI['Enviar_lot' + str(get_count())]
    gr.add((content, RDF.type, ECSDI.Enviar_lot))

    subjectLoteProducto = ECSDI['Lote_producto' +
                                str(random.randint(1, sys.float_info.max))]
    gr.add((subjectLoteProducto, RDF.type, ECSDI.Lote_producto))
    gr.add(
        (subjectLoteProducto, ECSDI.Prioridad, Literal(1,
                                                       datatype=XSD.integer)))

    for item in gr.subjects(RDF.type, ECSDI.Producto):
        gr.add((subjectLoteProducto, ECSDI.productos, URIRef(item)))

    gr.add((content, ECSDI.a_enviar, URIRef(subjectLoteProducto)))

    logistic = get_agent_info(agn.LogisticHubAgent, DirectoryAgent,
                              ProductsAgent, get_count())

    gr = send_message(
        build_message(gr,
                      perf=ACL.request,
                      sender=ProductsAgent.uri,
                      receiver=logistic.uri,
                      msgcnt=get_count(),
                      content=content), logistic.address)

    return gr
예제 #7
0
def requestAvailability(graph):
    logger.info('Comprobamos disponibilidad')
    content = ECSDI['Pedir_disponibilidad' + str(get_count())]

    graph.add((content, RDF.type, ECSDI.Pedir_disponibilidad))

    subjectExiste = ECSDI['Existencia_' + str(get_count())]
    graph.add((subjectExiste, RDF.type, ECSDI.Existencia))
    graph.add((subjectExiste, ECSDI.Cantidad, Literal(1,
                                                      datatype=XSD.integer)))

    for item in graph.subjects(RDF.type, ECSDI.Producto):
        graph.add((subjectExiste, ECSDI.Tiene, URIRef(item)))

    graph.add((content, ECSDI.Existe, URIRef(subjectExiste)))

    logistic = get_agent_info(agn.LogisticHubAgent, DirectoryAgent,
                              ProductsAgent, get_count())

    send_message(
        build_message(graph,
                      perf=ACL.request,
                      sender=ProductsAgent.uri,
                      receiver=logistic.uri,
                      msgcnt=get_count(),
                      content=content), logistic.address)
예제 #8
0
def comunicacion():
    global dsgraph
    global mss_cnt
    gr = None
    logger.info('Peticion de info recibida')

    # Extraemos el mensaje que nos envian
    mensaje = request.args['content']
    gm = Graph()
    gm.parse(data=mensaje)

    msgdic = get_message_properties(gm)

    # Comprobacion del mensaje

    if msgdic is None:
        gr = build_message(Graph(),
                           ACL['no_entendido'],
                           sender=AgenteComprador.uri,
                           msgcnt=get_n_message())
    else:
        performative = msgdic['performative']

        if performative != ACL.request:
            gr = build_message(Graph(),
                               ACL['no_entendido'],
                               sender=AgenteComprador.uri,
                               msgcnt=get_n_message())

        else:
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)
            logger.info('Recibida una petición en AgenteComprador')
            print('Recibida una petición en AgenteComprador')
            if accion == ECSDI.Peticion_compra:
                logger.info('Recibida peticion compra')
                compra = None
                for item in gm.subjects(RDF.type, ECSDI.Compra):
                    compra = item

                gm.remove((content, None, None))
                for item in gm.subjects(RDF.type, ACL.FipaAclMessage):
                    gm.remove((item, None, None))

                registerSells(gm)
                payDelivery(compra)
                logger.info('Envio la factura de la venda con id ' + compra +
                            'al usuario comprador.')
                gr = sendSell(gm, compra)

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml'), 200

    pass
예제 #9
0
def comunicacion():
    global dsgraph
    global mss_cnt
    gr = None
    logger.info('Peticion de recomendacion recibida')

    # Extraemos el mensaje que nos envian
    mensaje = request.args['content']
    gm = Graph()
    gm.parse(data=mensaje)

    msgdic = get_message_properties(gm)

    #Comprobacion del mensaje

    if msgdic is None:
        gr = build_message(Graph(),
                           ACL['no_entendido'],
                           sender=AgenteValoraciones.uri,
                           msgcnt=get_count())
    else:
        performative = msgdic['performative']

        if performative != ACL.request:
            gr = build_message(Graph(),
                               ACL['no_entendido'],
                               sender=AgenteValoraciones.uri,
                               msgcnt=get_count())

        else:
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            if accion == ECSDI.Peticion_Valorados:
                get_all_sells()
                if compras.__len__() == 0:
                    g = Graph()
                    serialize = g.serialize(format='xml')
                    return serialize, 200
                gr = findValProducts()
                logger.info('Respondemos a la peticion')
                print('Respondemos a la peticion')
                serialize = gr.serialize(format='xml')
                return serialize, 200
            elif accion == ECSDI.Peticion_valorar:
                print('Valoramos los productos')
                for item in gm.subjects(RDF.type, ACL.FipaAclMessage):
                    gm.remove((item, None, None))
                for item in gm.subjects(RDF.type, ECSDI.Peticion_valorar):
                    gm.remove((item, None, None))
                guardarValoraciones(gm)
                serialize = gm.serialize(format='xml')
                return serialize, 200
예제 #10
0
def register_message():
    """
    Envia un mensaje de registro al servicio de registro
    usando una performativa Request y una accion Register del
    servicio de directorio
    :param gmess:
    :return:
    """

    logger.info('Nos registramos')

    gr = register_agent(AgenteNegociador, DirectoryAgent, AgenteNegociador.uri, get_count())
    return gr
예제 #11
0
def communication():
    """
    Communication Entrypoint
    """

    logger.info('Peticion de informacion recibida')
    global dsGraph

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=QualifierAgent.uri,
                           msgcnt=get_count())
    else:
        # Obtenemos la performativa
        if msgdic['performative'] != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=DirectoryAgent.uri,
                               msgcnt=get_count())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia
            # de registro
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)

            # Accion de busqueda
            if accion == ECSDI.todo_accion:
                # TODO Tratar accion deseada
                return

            # No habia ninguna accion en el mensaje
            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_count())

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml')
예제 #12
0
def register_message():
    """
    Envia un mensaje de registro al servicio de registro
    usando una performativa Request y una accion Register del
    servicio de directorio

    :param gmess:
    :return:
    """

    logger.info('Nos registramos')

    gr = register_agent(QualifierAgent, DirectoryAgent, QualifierAgent.uri, get_count())
    return gr
예제 #13
0
def sendSell(gm, sell):
    logger.info('Nos comunicamos con el ProductsAgent')
    content = ECSDI['Enviar_venta_' + str(get_count())]

    gm.add((content, RDF.type, ECSDI.Enviar_venta))
    gm.add((content, ECSDI.identificador_Compra, URIRef(sell)))

    products = get_agent_info(agn.ProductsAgent, DirectoryAgent, FinancialAgent, get_count())

    gr = send_message(
        build_message(gm, perf=ACL.request, sender=FinancialAgent.uri, receiver=products.uri,
                      msgcnt=get_count(),
                      content=content), products.address)

    return gr
예제 #14
0
def returnSell(gm, sell):
    logger.info('Nos comunicamos con el ProductsAgent')
    content = ECSDI['Recoger_venta_' + str(get_count())]

    gm.add((content, RDF.type, ECSDI.Recoger_venta))
    for item in sell:
        gm.add((content, ECSDI.compra_a_retornar, URIRef(item)))

    logistic = get_agent_info(agn.LogisticHubAgent, DirectoryAgent, FinancialAgent, get_count())

    gr = send_message(
        build_message(gm, perf=ACL.request, sender=FinancialAgent.uri, receiver=logistic.uri,
                      msgcnt=get_count(),
                      content=content), logistic.address)
    return gr
예제 #15
0
def communication():
    """
    Communication Entrypoint
    """

    logger.info('Peticion de informacion recibida')
    global dsGraph

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(), ACL['not-understood'], sender=QualifierAgent.uri, msgcnt=get_count())
    else:
        # Obtenemos la performativa
        if msgdic['performative'] != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=DirectoryAgent.uri,
                               msgcnt=get_count())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia
            # de registro
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)

            # Accion de busqueda
            if accion == ECSDI.todo_accion:
                # TODO Tratar accion deseada
                return

            # No habia ninguna accion en el mensaje
            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_count())

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml')
예제 #16
0
def comunicacion():

    global dsgraph
    global mss_cnt
    gr = None
    logger.info('Peticion de info recibida')

    # Extraemos el mensaje que nos envian
    mensaje = request.args['content']
    gm = Graph()
    gm.parse(data=mensaje)

    msgdic = get_message_properties(gm)

    # Comprobacion del mensaje

    if msgdic is None:
        gr = build_message(Graph(),
                           ACL['no_entendido'],
                           sender=AgentePublicador.uri,
                           msgcnt=get_count())
    else:
        performative = msgdic['performative']

        if performative != ACL.request:
            gr = build_message(Graph(),
                               ACL['no_entendido'],
                               sender=AgentePublicador.uri,
                               msgcnt=get_count())

        else:
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            # Aqui realizariamos lo que pide la accion

            if accion == ECSDI.Registrar_productos:
                gr = recordExternalProduct(gm)

    logger.info('Respondemos a la peticion')
    print('Productos externos publicados')

    return gr.serialize(format='xml'), 200

    pass
예제 #17
0
def counter_offer(offer):
    logger.info('Asking counter-offer to ' + offer.address)
    gr = Graph()
    subject = ECSDI['contra-oferta']
    gr.add((subject, RDF.type, ECSDI.Contraoferta))
    new_price = offer.price - 2
    gr.add((subject, ECSDI.Precio_envio, Literal(new_price)))
    resp = send_message(build_message(gr, ACL['counter-proposal'], content=subject, sender=AgenteNegociador.uri),
                        offer.address)
    msg = get_message_properties(resp)
    if 'performative' not in msg or msg['performative'] == ACL.refuse:
        logger.warn('An agent rejected us :(')
        return None
    elif msg['performative'] == ACL.agree:
        return Offer(address=offer.address, price=new_price)
    else:
        logger.error('I can\'t understand:(')
        return None
예제 #18
0
def sendSell(gm, sell):

    logger.info('Nos comunicamos con el Centro Logistico')
    content = ECSDI['Enviar_venta_' + str(get_n_message())]

    gm.add((content, RDF.type, ECSDI.Enviar_venta))
    gm.add((content, ECSDI.identificador_Compra, URIRef(sell)))

    centro_logistico = get_agent_info(agn.AgenteCentroLogistico,
                                      DirectoryAgent, AgenteComprador,
                                      get_n_message())

    gr = send_message(
        build_message(gm,
                      perf=ACL.request,
                      sender=AgenteComprador.uri,
                      receiver=centro_logistico.uri,
                      msgcnt=get_n_message(),
                      content=content), centro_logistico.address)
    return gr
    pass
예제 #19
0
def requestTransport(date, peso):
    logger.info('Pedimos el transporte')

    # Content of the message
    content = ECSDI['Peticion_de_transporte_' + str(get_n_message())]

    # Graph creation
    gr = Graph()
    gr.add((content, RDF.type, ECSDI.Peticion_Transporte))

    # Anadir fecha y peso
    gr.add((content, ECSDI.Fecha, Literal(date, datatype=XSD.float)))
    gr.add((content, ECSDI.Peso_envio, Literal(peso, datatype=XSD.float)))

    Negociador = get_agent_info(agn.AgenteNegociador, DirectoryAgent,
                                AgenteCentroLogistico, get_n_message())

    gr = send_message(
        build_message(gr,
                      perf=ACL.request,
                      sender=AgenteCentroLogistico.uri,
                      receiver=Negociador.uri,
                      msgcnt=get_n_message(),
                      content=content), Negociador.address)
예제 #20
0
def comunicacion():
    global dsgraph
    global mss_cnt
    gr = None
    logger.info('Peticion de recomendacion recibida')

    # Extraemos el mensaje que nos envian
    mensaje = request.args['content']
    gm = Graph()
    gm.parse(data=mensaje)

    msgdic = get_message_properties(gm)

    #Comprobacion del mensaje

    if msgdic is None:
        gr = build_message(Graph(),
                           ACL['no_entendido'],
                           sender=AgenteRecomendador.uri,
                           msgcnt=get_count())
    else:
        performative = msgdic['performative']

        if performative != ACL.request:
            gr = build_message(Graph(),
                               ACL['no_entendido'],
                               sender=AgenteRecomendador.uri,
                               msgcnt=get_count())

        else:
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            if accion == ECSDI.Peticion_Recomendados:
                logger.info("Enviamos una serie de productos recomendados")
                print("Enviamos una serie de productos recomendados")
                compras = get_all_sells()
                if compras.__len__() == 0:
                    gr = Graph()
                    serialize = gr.serialize(format='xml')
                    return serialize, 200
                gr = findRecProducts(compras)

                logger.info('Respondemos a la peticion')

                serialize = gr.serialize(format='xml')
                return serialize, 200
예제 #21
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    logger.info('Peticion de plan recibida')
    global dsGraph

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = None

    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(), ACL['not-understood'], sender=AgenteAlojamiento.uri, msgcnt=get_count())
    else:
        # Obtenemos la performativa
        if msgdic['performative'] != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=DirectoryAgent.uri,
                               msgcnt=get_count())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia
            # de registro
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)

            # Accion de busqueda
            if accion == ECSDI.Peticion_Alojamiento:
                gr = findHoteles()
                logger.info('Api usada')

    serialize = gr.serialize(format='xml')
    logger.info("bye bye")
    return serialize, 200
예제 #22
0
def payDelivery():
    logger.info('Transferencia aceptada')
    print('Transferencia aceptada')
    pass
예제 #23
0
def comunicacion():
    global dsgraph
    global mss_cnt
    gr = None
    logger.info('Peticion de info recibida')

    # Extraemos el mensaje que nos envian
    mensaje = request.args['content']
    gm = Graph()
    gm.parse(data=mensaje)

    msgdic = get_message_properties(gm)

    # Comprobacion del mensaje

    if msgdic is None:
        gr = build_message(Graph(),
                           ACL['no_entendido'],
                           sender=AgenteDevoluciones.uri,
                           msgcnt=get_count())
    else:
        performative = msgdic['performative']

        if performative != ACL.request:
            gr = build_message(Graph(),
                               ACL['no_entendido'],
                               sender=AgenteDevoluciones.uri,
                               msgcnt=get_count())

        else:

            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)
            # peticion de devolucion
            if accion == ECSDI.Peticion_retorno:
                logger.info(
                    "Recibida una peticion de retorno en AgenteDevoluciones")
                print("Recibida una peticion de retorno en AgenteDevoluciones")

                for item in gm.subjects(RDF.type, ACL.FipaAclMessage):
                    gm.remove((item, None, None))

                venta = []
                for item in gm.objects(subject=content,
                                       predicate=ECSDI.CompraRetornada):
                    venta.append(item)

                payDelivery()

                gm.remove((content, None, None))
                gr = returnSell(gm, venta)

            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_count())

    logger.info('Respondemos a la peticion')

    serialize = gr.serialize(format='xml')
    return serialize, 200
예제 #24
0
def communication():
    global dsgraph
    gr = None

    logger.info('Peticion de informacion recibida')

    # Extraemos el mensaje y creamos un grafo con el
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # Comprobamos que sea un mensaje FIPA ACL
    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=ProductsAgent.uri,
                           msgcnt=get_count())
    else:
        # Obtenemos la performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=ProductsAgent.uri,
                               msgcnt=get_count())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            # Aqui realizariamos lo que pide la accion

            if accion == ECSDI.Registra_productes:
                gr = recordExternalProduct(gm)

            elif accion == ECSDI.Enviar_venta:
                logger.info("Recibe comunicación del FinancialAgent")

                products = obtainProducts(gm)
                requestAvailability(products)

                products = obtainProducts(gm)
                gr = sendProducts(products)

            # No habia ninguna accion en el mensaje
            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_count())

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml'), 200
예제 #25
0
def register_message():
    logger.info("Registrando Agente CentroLogistico...")
    gr = register_agent(AgenteCentroLogistico, DirectoryAgent,
                        AgenteCentroLogistico.uri, get_n_message())
예제 #26
0
def communication():
    global dsgraph
    gr = None

    logger.info('Peticion de informacion recibida')

    # Extraemos el mensaje y creamos un grafo con el
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # Comprobamos que sea un mensaje FIPA ACL
    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgenteCentroLogistico.uri,
                           msgcnt=get_n_message())
    else:
        # Obtenemos la performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgenteCentroLogistico.uri,
                               msgcnt=get_n_message())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            # Aqui realizariamos lo que pide la accion

            if accion == ECSDI.Enviar_venta:
                logger.info('Recibimos la peticion para enviar la venta')
                print('Recibimos la peticion para enviar la venta')
                products = obtainProducts(gm)
                gr = create_and_sendProducts(products)

            elif accion == ECSDI.Recoger_devolucion:
                logger.info(
                    'Recibimos la peticion de recoger la devolucion, para ello contratamos un envio'
                )
                print(
                    'Recibimos la peticion de recoger la devolucion, para ello contratamos un envio'
                )
                date = dateToMillis(datetime.datetime.utcnow() +
                                    datetime.timedelta(days=9))
                for item in gm.objects(subject=content,
                                       predicate=ECSDI.compra_a_devolver):
                    peso = crearEnvio(item, date)
                    requestTransport(date, peso)
                    logger.info('Eliminamos la venta de nuestro registro')
                    ventas = Graph()
                    ventas.parse(open('../Datos/Compras'), format='turtle')
                    ventas.remove((item, None, None))
                    ventas.serialize(destination='../Datos/Compras',
                                     format='turtle')

                gr = Graph()

            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_n_message())

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml'), 200
    pass
예제 #27
0
def comunicacion():
    global dsgraph
    global mss_cnt
    gr = None
    logger.info('Peticion de info recibida')

    # Extraemos el mensaje que nos envian
    mensaje = request.args['content']
    gm = Graph()
    gm.parse(data=mensaje)

    msgdic = get_message_properties(gm)

    #Comprobacion del mensaje

    if msgdic is None:
        gr = build_message(Graph(),
                           ACL['no_entendido'],
                           sender=AgenteBuscador.uri,
                           msgcnt=get_count())
    else:
        performative = msgdic['performative']

        if performative != ACL.request:
            gr = build_message(Graph(),
                               ACL['no_entendido'],
                               sender=AgenteBuscador.uri,
                               msgcnt=get_count())

        else:

            content = msgdic['content']
            accion = gm.value(subject=content, predicate=RDF.type)

            if accion == ECSDI.Peticion_Busqueda:
                logger.info(
                    'Agente Buscador recibe una peticion de búsqueda, la tratamos'
                )
                print(
                    'Agente Buscador recibe una peticion de búsqueda, la tratamos'
                )
                restricciones = gm.objects(content, ECSDI.Restricciones)
                restricciones_vec = {}
                for restriccion in restricciones:
                    if gm.value(subject=restriccion,
                                predicate=RDF.type) == ECSDI.Restriccion_Marca:
                        marca = gm.value(subject=restriccion,
                                         predicate=ECSDI.Marca)
                        logger.info('MARCA: ' + marca)
                        restricciones_vec['brand'] = marca
                    elif gm.value(
                            subject=restriccion,
                            predicate=RDF.type) == ECSDI.Restriccion_modelo:
                        modelo = gm.value(subject=restriccion,
                                          predicate=ECSDI.Modelo)
                        logger.info('MODELO: ' + modelo)
                        restricciones_vec['modelo'] = modelo
                    elif gm.value(subject=restriccion,
                                  predicate=RDF.type) == ECSDI.Rango_precio:
                        preu_max = gm.value(subject=restriccion,
                                            predicate=ECSDI.Precio_max)
                        preu_min = gm.value(subject=restriccion,
                                            predicate=ECSDI.Precio_min)
                        if preu_min:
                            logger.info('Preu minim: ' + preu_min)
                            restricciones_vec['min_price'] = preu_min.toPython(
                            )
                        if preu_max:
                            logger.info('Preu maxim: ' + preu_max)
                            restricciones_vec['max_price'] = preu_max.toPython(
                            )

                gr = findProducts(**restricciones_vec)

                logger.info('Respondemos a la peticion')

                serialize = gr.serialize(format='xml')
                return serialize, 200
예제 #28
0
def payDelivery(compra_url):
    logger.info('Se acepta la transferencia de' + compra_url)
    print('Se acepta la transferencia de' + compra_url)
예제 #29
0
def register_message():
    logger.info('Registrando Agente Comprador...')
    gr = register_agent(AgenteComprador, DirectoryAgent, AgenteComprador.uri,
                        get_n_message())
예제 #30
0
def communication():
    """
    Communication Entrypoint
    """

    global dsGraph
    logger.info('Peticion de informacion recibida')

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = None

    if msgdic is None:
        # Si no es, respondemos que no hemos entendido el mensaje
        gr = build_message(Graph(), ACL['not-understood'], sender=FinancialAgent.uri, msgcnt=get_count())
    else:
        # Obtenemos la performativa
        if msgdic['performative'] != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=DirectoryAgent.uri,
                               msgcnt=get_count())
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia
            # de registro
            content = msgdic['content']
            # Averiguamos el tipo de la accion
            accion = gm.value(subject=content, predicate=RDF.type)

            # Accion de enviar venta
            if accion == ECSDI.Vull_comprar:
                gm.remove((content, None, None))
                for item in gm.subjects(RDF.type, ACL.FipaAclMessage):
                    gm.remove((item, None, None))

                sell = None
                for item in gm.subjects(RDF.type, ECSDI.Compra):
                    sell = item

                registerSells(gm)
                payDelivery(sell)

                deliverReceipt(sell)
                gr = sendSell(gm, sell)

            # Accion de retorno
            elif accion == ECSDI.Peticion_retorno:

                for item in gm.subjects(RDF.type, ACL.FipaAclMessage):
                    gm.remove((item, None, None))

                sell = []
                for item in gm.objects(subject=content, predicate=ECSDI.CompraRetornada):
                    sell.append(item)
                for item in sell:
                    payDelivery(item)

                gm.remove((content, None, None))
                gr = returnSell(gm, sell)

            # Ninguna accion a realizar
            else:
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=DirectoryAgent.uri,
                                   msgcnt=get_count())

    logger.info('Respondemos a la peticion')

    return gr.serialize(format='xml'), 200
예제 #31
0
def deliverReceipt(sell):
    logger.info('Envio la factura de la venda con id ' + sell + 'al usuario comprador.')