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
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
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
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
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
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