def getAllUsersUnderFiftyMiles() -> List[dict]: ''' You can call this function using the get method at http://localhost:5000/users/London This returns all users 50 or fewer miles from London ''' # This allows us to alter where we're searching from generalising the API # This is advantageous as some people may use slightly different coordinates for London # and this gives them that flexibility. Will default to (51.507222, -0.1275) for # the latitude and longitude respectively if no values are provided in the request # For different parameters, use curl -i "http://localhost:5000/users/London?latitude=x&longitude=y" try: london_lat = float(request.args.get('latitude', 51.507222)) london_long = float(request.args.get('longitude', -0.1275)) except ValueError: # Throw an error 404 if the user enters an non-float/integer for latuitude/longitude abort(404) # This gets us the users from https://bpdts-test-app.herokuapp.com all_users = getUsers() # Now we need to filter out the ones not within 50 miles max_distance = 50.0 # The maximum distance from London, 50 miles users_fifty_miles = list(filter(lambda person: haversine(london_lat, london_long, float(person['latitude']), float(person['longitude'])) <= max_distance, all_users)) # Returning a json response return jsonify(users_fifty_miles)
def test_get_users_zero_values(self): hav = round(haversine(0., 0., 0., 0.), -1) # Should be 0 self.assertEqual(hav, 0.)
def test_get_usersZero_distance(self): hav = round(haversine(30., 30., 30., 30.), -1) # Should be 0 self.assertEqual(hav, 0.)
def test_get_users_general(self): hav = round(haversine(30., -20., -30., 20.), -1) # This was checked using an online calculator self.assertEqual(hav, 4910.)
def test_get_users_positives(self): hav = round(haversine(-10., -20., -30., -40.), -1) # To 3sf # This was checked using an online calculator self.assertEqual(hav, 1890.)