def suppose_assignment(): # import all not taken deliveries now = datetime.datetime.now() cond = { "conditions" : { # "start" : datetime.datetime(now.year,now.month,now.day,0,0,0).strftime("%Y-%m-%d %H:%M:%S"), # "end" : (datetime.datetime(now.year,now.month,now.day,0,0,0) + datetime.timedelta(days=1, seconds=-1)).strftime("%Y-%m-%d %H:%M:%S"), "state" : "not assigned" } } deliveries = get_all_deliveries(company_id=session["user"]["company_id"], conditions=cond , return_obj=True, get_locations=True) # import drivers drivers = get_all_drivers(session["user"]["company_id"], return_obj=True, vehicles=True) suggestions = [] no_registered = [] for delivery in deliveries: best_distance = None best_driver = None for driver in drivers: if is_assignable(driver, delivery): distance = Location.getDistance(delivery.getSenderLocation(), driver.getLocation()) if best_distance is not None: if distance["distance"]["value"]< best_distance["distance"]["value"] : best_distance = distance best_driver = driver else: best_distance = distance best_driver = driver if best_distance is None or best_driver is None: no_registered.append(delivery) else : best = {"delivery" : delivery, "distance": best_distance["distance"], "duration" : best_distance["duration"]} append_suggestion(suggestions, best_driver, best) #update driver position best_driver.update_location(**delivery.getSenderLocation()) return jsonify(suggestions=suggestions),200
def test_get_all_with_success_obj_location(self, client, mocker): with client.session_transaction() as sess: sess["user"]= { "id" : 3, "type": "driver", "company_id": 2 } delivery_sql = [{ "id" : 2, "customer_id" : 34, "driver_id" : 5, "date_pickup" : datetime.datetime.strptime('2015-11-30 17:23:09', "%Y-%m-%d %H:%M:%S"), "date_delivery" : datetime.datetime.strptime('2015-11-30 17:23:10', "%Y-%m-%d %H:%M:%S"), "date_created" : datetime.datetime.strptime('2015-10-30 19:23:10', "%Y-%m-%d %H:%M:%S"), "date_due" : datetime.datetime.strptime('2015-11-30 16:23:10', "%Y-%m-%d %H:%M:%S"), "weight": 12, "area": 10.1, "content": "fish", "sender_id": 2, "receiver_id": 3, "info": "", "canceled" : 0, "state" : "not taken", "customer_name": "my_customer", "sender_lat": 45.34, "sender_lng": 102.21, "receiver_lat": -12.21, "receiver_lng": -135.78 }] expected_delivery = { "id": 2, "customer_id": 34, "driver_id": 5, "date_pickup": '2015-11-30 17:23:09', "date_delivery": '2015-11-30 17:23:10', "date_created": '2015-10-30 19:23:10', "date_due": '2015-11-30 16:23:10', "weight": 12, "area": 10.1, "content": "fish", "sender_id": 2, "receiver_id": 3, "info": "", "canceled": False, "state": "not taken", "customer_name": "my_customer", "sender_lat": 45.34, "sender_lng": 102.21, "receiver_lat": -12.21, "receiver_lng": -135.78 } expected_obj = Delivery(expected_delivery) cond= { "conditions" : { "start" : "2016-04-02 00:00:00", "end" : "2016-04-04 00:00:00", "state" : "not taken" } } mocker.patch.object(DBHandler, "query", return_value=delivery_sql) res = get_all_deliveries(company_id=2, conditions=cond, return_obj=True, get_locations=True, driver_id=3) assert isinstance(res, list) assert len(res) == 1 assert isinstance(res[0], Delivery) assert res[0] == expected_obj mocker.stopall()