def howfar(request): request_data = request.json source = str(request_data.get('source')).strip() destination = str(request_data.get('destination')).strip() results = DBSession.query(Journey).filter( Journey.source.ilike(source), Journey.destination.ilike(destination)) if results.count(): result = results.one() distance = result.distance duration = result.duration link = result.link else: howfar_info = compute_howfar(source=source, destination=destination) distance = howfar_info['distance']['text'] duration = howfar_info['duration']['text'] with transaction.manager: journey = Journey(source=source, destination=destination, distance=distance, duration=duration) link = journey.link DBSession.add(journey) return {'source': source, 'destination': destination, 'result': {'distance': distance, 'duration': duration, 'link': link } }
def test_query(): distance_attributes = compute_howfar(source='Delhi', destination='Bangalore') assert isinstance(distance_attributes, dict) assert len(distance_attributes) == 3 assert distance_attributes['status'] == 'OK' assert distance_attributes['distance'] assert distance_attributes['distance']['text'] distance_in_text = distance_attributes['distance']['text'] assert isinstance(distance_in_text, unicode) assert distance_attributes['distance']['value'] distance_in_value = distance_attributes['distance']['value'] assert isinstance(distance_in_value, int) assert distance_attributes['duration'] assert distance_attributes['duration']['text'] duration_in_text = distance_attributes['duration']['text'] assert isinstance(duration_in_text, unicode) assert distance_attributes['duration']['value'] duration_in_value = distance_attributes['duration']['value'] assert isinstance(duration_in_value, int)