def test_delete_route_by_id(client): #Create a route coordinates1=[{"longitude":2.2,"latitude":3.5,"datetime": 34676},{"longitude":6.8,"latitude":7.4,"datetime": 47580}] Ruta.create( user= USER_ID1, message = MESSAGE_ID1, date = datetime.now(), trajectory = coordinates1 ) client.post(f'/api/v1/{USER_ID1}/route/{MESSAGE_ID1}') assert Ruta.get_or_none(message = MESSAGE_ID1 )==None
def get_route_by_id(user_id, route_id): """ Retrieve a route by it's id. Here we take user_id to ensure that not anyone can access the route_id. At least you need to know the user_id """ if request.method == 'GET': r = Ruta.get_or_none(message=route_id) if r != None: return jsonify({ "distance_total": r.distance, "time": r.time, "date": r.date, }) else: return jsonify({}) elif request.method == 'POST': ruta = Ruta.get_or_none(message=route_id) if (ruta != None) and (ruta.user == user_id): Ruta.delete().where(Ruta.message == route_id).execute() return "Deleted" return "Doesn't exist"
def store_location(user_id: int, m_id: int, position_data: Dict[str, Union[float, int]]): """ Store the trayectory point and time (position_data) produced by an user (user_id) in a message (m_id) """ if ("longitude" in position_data.keys()) and ( "latitude" in position_data.keys()) and ("datetime" in position_data.keys()): correct_types = type(position_data.get("longitude")) == float correct_types = correct_types and type( position_data.get("latitude")) == float correct_types = correct_types and type( position_data.get("datetime")) == int if correct_types: ruta = Ruta.get_or_none(message=m_id) if ruta: ruta.trajectory.append(position_data) if len(ruta.trajectory) >= 2: current_position = tuple([ position_data.get("longitude"), position_data.get("latitude") ]) previous_position = tuple([ ruta.trajectory[-2].get("longitude"), ruta.trajectory[-2].get("latitude") ]) ruta.distance += haversine(previous_position, current_position) ruta.time += position_data.get( "datetime") - ruta.trajectory[-2].get("datetime") ruta.save() else: Ruta.create( user=user_id, message=m_id, date=datetime.now(), trajectory=[position_data], time=0, distance=0.0, ) else: raise InvalidEntry("Invalid type for position_data") else: raise InvalidEntry("latitude or longitude not in the keys")