Esempio n. 1
0
 def get(self):
     coord_mechanic = (23.44333, 23.4433)
     motos = MotoModel.get_all()
     motos_json = [m.json_mechaniclistmotos() for m in motos]
     result = MotoModel.compute_distance(motos_json, coord_mechanic,
                                         "distance")
     return result
 def get(self, client_email):
     try:
         client = ClientModel.find_by_email(client_email)
         if client is not None:
             rr = ReservedRunningModel.find_by_client(client.client_id)
             # Compruebo si ha encontrado la reserva del ciente
             if rr is not None:
                 # Compruebo si el estado de la moto es el correcto (ACTIVE)
                 if rr.isActive():
                     # Compruebo que no se ha superado el tiempo limite para el start moto desde la reserva
                     if rr.check_remaining_time():
                         coord_client = (23.44333, 23.4433)
                         moto = rr.moto
                         moto_json = [moto.json_clientMoto()]
                         result = MotoModel.compute_distance(moto_json, coord_client, "distance")
                         # los cambios de keyname de jsons es para coordinar con frontend
                         return {'start_moto': result['motos'][0]}, 201
                     else:
                         ReservedRunningModel.update_state_available(rr)
                         ReservedRunningModel.delete_from_db(rr)
                         return {"message": "The time limit for the start has expired"}, 500
                 else:
                     return {'message': "Error Moto state isn't active"}, 500
             else:
                 return {'message': "Error Client haven't start moto"}, 404
         else:
             return {'message': "Error Client Not Found"}, 404
     except:
         return {"message": "Error Get Start Moto"}, 500
Esempio n. 3
0
 def get(self, id):
     coord_mechanic = (23.44333, 23.4433)
     try:
         moto = MotoModel.find_by_id(id)
         moto_json = [moto.json_mechanicMoto()]
         result = MotoModel.compute_distance(moto_json, coord_mechanic,
                                             "distance")
         # los cambios de keyname de jsons es para coordinar con frontend
         return {'mechanic_moto': result['motos'][0]}, 200
     except:
         return {"message": "Error Get Moto"}, 500
Esempio n. 4
0
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('client_coordinate_latitude',
                            type=float,
                            required=True,
                            help="This field cannot be left blank")
        parser.add_argument('client_coordinate_longitude',
                            type=float,
                            required=True,
                            help="This field cannot be left blank")
        parser.add_argument('model_generic',
                            type=str,
                            required=True,
                            help="This field cannot be left blank")
        parser.add_argument('more_km_restantes',
                            type=int,
                            required=True,
                            help="This field cannot be left blank")
        data = parser.parse_args()

        # Parámetros que pueden ser útiles en el futuro:
        # parser.add_argument('max_distance_m', type=float)

        coord_client = (data["client_coordinate_latitude"],
                        data["client_coordinate_longitude"])

        # Aquí se empieza con las condiciones resultantes de los filtros.
        list_and = []

        # Para el cliente siempre queremos las AVAILABLE
        list_and.append(MotoModel.state == "AVAILABLE")

        # El caso sin filtro es data["more_km_restantes"]==0
        if data["more_km_restantes"] > 0:
            list_and.append(MotoModel.km_restantes > data["more_km_restantes"])

        # El caso sin filtro es data["model_generic"]=="all"
        if data["model_generic"] in ("premium", "basic"):
            list_and.append(MotoModel.model_generic == data['model_generic'])

        # En esta función juntamos todas las condiciones en una sucesión de AND's
        cond_final = MotoModel.condiciones_AND(list_and)

        # Hacemos la query en base a los filtros (condiciones previas)
        motos = MotoModel.query.filter(cond_final).all()

        # Hacemos una lista de jsons para enviarselo a la funcion compute_distance
        motos_json = [m.json_listmotos() for m in motos]

        # Calculamos las distancias y las añadimos a cada moto
        result = MotoModel.compute_distance(motos_json, coord_client,
                                            "distance")

        return result
Esempio n. 5
0
def test_ClientMotoList3_DistanciaMaximaPequeña():
    lista_motos = [m1, m2, m3, m4]
    json_motos = [m.json_listmotos() for m in lista_motos]

    keyword = "distance"
    distancia_maxima = 100
    coord = (22.9, 22.9)
    respuesta = MotoModel.compute_distance(json_motos, coord, keyword,
                                           distancia_maxima)
    assert "motos" in respuesta.keys()
    #esperamos una lista vacía, dado que la distancia es menor que la mínima
    assert len(respuesta["motos"]) == 0
Esempio n. 6
0
def test_ClientMotoList1_Basico():
    lista_motos = [m1, m2, m3, m4]
    json_motos = [m.json_listmotos() for m in lista_motos]

    keyword = "distance"
    coord = (22.9, 22.9)
    respuesta = MotoModel.compute_distance(json_motos, coord, keyword)
    assert "motos" in respuesta.keys()
    dist_anterior = 0
    for r in respuesta["motos"]:
        distancia = r[keyword]
        # Esto es que está ordenada la lista
        assert dist_anterior <= distancia
        # Esto es que esté redondeado sin decimales
        assert distancia % 1 == 0
        dist_anterior = distancia
    def get(self, client_email):
        try:
            client = ClientModel.find_by_email(client_email)
            # Compruebo si ha encontrado el cliente con ese email
            if client is not None:
                rr = ReservedRunningModel.find_by_client(client.client_id)
                # Compruebo si ha encontrado la reserva del ciente
                if rr is not None:
                    # Compruebo el estado de la moto
                    if rr.isReserved():
                        # Compruebo que no se ha superado el tiempo limite para el start moto desde la reserva
                        if rr.check_remaining_time():
                            coord_client = (23.44333, 23.4433)
                            moto = rr.moto
                            moto_json = [moto.json_clientMoto()]
                            result = MotoModel.compute_distance(moto_json, coord_client, "distance")
                            # los cambios de keyname de jsons es para coordinar con frontend

                            remaining_time = rr.make_remaining_time()
                            if remaining_time.minute < 10:
                                time_min = "0" + str(remaining_time.minute)
                            else:
                                time_min = str(remaining_time.minute)
                            if remaining_time.hour < 10:
                                time_h = "0" + str(remaining_time.hour)
                            else:
                                time_h = str(remaining_time.hour)

                            return {'reserved_moto': result['motos'][0],
                                    "message": "You have until {}:{}h to start the motorbike".format(time_h, time_min),
                                    "remaining_time": time_h + ":" + time_min}, 201
                        else:
                            ReservedRunningModel.update_state_available(rr)
                            ReservedRunningModel.delete_from_db(rr)
                            return {"message": "The time limit for the start has expired"}, 500
                    else:
                        return {"message": "ERROR RESERVED MOTO. Moto state isn't RESERVED, moto state = [{}]".format(
                            rr.moto.state)}, 500
                else:
                    return {"message": "ERROR RESERVED MOTO. Error Client [{}] haven't reserved moto".format(
                        client.client_id)}, 404
            else:
                return {"message": "ERROR RESERVED MOTO. Error Client Not Found"}, 404

        except:
            return {"message": "ERROR RESERVED MOTO. Error Get Reserved Moto"}, 500
Esempio n. 8
0
    def get(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument('client_coordinate_latitude',
                            type=float,
                            required=True,
                            help="This field cannot be left blank")
        parser.add_argument('client_coordinate_longitude',
                            type=float,
                            required=True,
                            help="This field cannot be left blank")
        data = parser.parse_args()

        coord_client = (data["client_coordinate_latitude"],
                        data["client_coordinate_longitude"])

        try:
            moto = MotoModel.find_by_id(id)
            moto_json = [moto.json_clientMoto()]
            result = MotoModel.compute_distance(moto_json, coord_client,
                                                "distance")
            # los cambios de keyname de jsons es para coordinar con frontend
            return {'client_moto': result['motos'][0]}, 200
        except:
            return {"message": "Error Get Moto"}, 500