Пример #1
0
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)
Пример #2
0
 def test_get_users_zero_values(self):
     hav = round(haversine(0., 0., 0., 0.), -1)
     # Should be 0
     self.assertEqual(hav, 0.)
Пример #3
0
 def test_get_usersZero_distance(self):
     hav = round(haversine(30., 30., 30., 30.), -1)
     # Should be 0
     self.assertEqual(hav, 0.)
Пример #4
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.)
Пример #5
0
 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.)