def test_2012ct_bad_location(self): with open('test_data/usfirst_html/usfirst_event_details_2012ct.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) event['location'] = "somewhere on mars" self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], None) self.assertEqual(LocationHelper.get_timezone_id(event['location']), None)
def test_2005or(self): with open('test_data/usfirst_html/usfirst_event_details_2005or.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], (45.5230622, -122.6764816)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/Los_Angeles')
def test_2005is(self): with open('test_data/usfirst_html/usfirst_event_details_2005is.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], (32.7940463, 34.989571)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'Asia/Jerusalem')
def test_2001sj(self): with open('test_data/usfirst_html/usfirst_event_details_2001ca2.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], (37.3382082, -121.8863286)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/Los_Angeles')
def test_2013flbr(self): with open('test_data/usfirst_html/usfirst_event_details_2013flbr.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], (26.1224386, -80.13731740000001)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/New_York')
def test_2012ct(self): with open('test_data/usfirst_html/usfirst_event_details_2012ct.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], (41.76371109999999, -72.6850932)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/New_York')
def test_1997il(self): with open('test_data/usfirst_html/usfirst_event_details_1997il.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual( LocationHelper.get_lat_lon(event['location'])[0], (41.8781136, -87.6297982)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/Chicago')
def _render(self): year, location, range_limit, search_type, page = self._get_params() num_results = 0 results = [] distances = [] if location: lat_lon, _ = LocationHelper.get_lat_lon(location, geocode=True) if lat_lon: lat, lon = lat_lon dist_expr = 'distance(location, geopoint({}, {}))'.format( lat, lon) if search_type == 'teams': query_string = '{} < {}'.format( dist_expr, range_limit * self.METERS_PER_MILE) else: query_string = '{} < {} AND year={}'.format( dist_expr, range_limit * self.METERS_PER_MILE, year) offset = self.PAGE_SIZE * page query = search.Query( query_string=query_string, options=search.QueryOptions( limit=self.PAGE_SIZE, offset=offset, sort_options=search.SortOptions(expressions=[ search.SortExpression( expression=dist_expr, direction=search.SortExpression.ASCENDING) ]), returned_expressions=[ search.FieldExpression(name='distance', expression=dist_expr) ], )) if search_type == 'teams': search_index = search.Index(name="teamLocation") else: search_index = search.Index(name="eventLocation") docs = search_index.search(query) num_results = docs.number_found distances = {} keys = [] event_team_count_futures = {} for result in docs.results: distances[result.doc_id] = result.expressions[ 0].value / self.METERS_PER_MILE if search_type == 'teams': event_team_count_futures[ result.doc_id] = EventTeam.query( EventTeam.team == ndb.Key( 'Team', result.doc_id), EventTeam.year == year).count_async( limit=1, keys_only=True) keys.append(ndb.Key('Team', result.doc_id)) else: keys.append(ndb.Key('Event', result.doc_id)) result_futures = ndb.get_multi_async(keys) if search_type == 'teams': results = [] for result_future, team_key in zip(result_futures, keys): if event_team_count_futures[ team_key.id()].get_result() != 0: results.append(result_future.get_result()) else: results = [ result_future.get_result() for result_future in result_futures ] self.template_values.update({ 'valid_years': self.VALID_YEARS, 'valid_ranges': self.VALID_RANGES, 'page_size': self.PAGE_SIZE, 'page': page, 'year': year, 'location': location, 'range_limit': range_limit, 'search_type': search_type, 'num_results': num_results, 'results': results, 'distances': distances, }) return jinja2_engine.render('nearby.html', self.template_values)
def _render(self): year, location, range_limit, search_type, page = self._get_params() num_results = 0 results = [] distances = [] if location: lat_lon, _ = LocationHelper.get_lat_lon(location, geocode=True) if lat_lon: lat, lon = lat_lon dist_expr = 'distance(location, geopoint({}, {}))'.format(lat, lon) if search_type == 'teams': query_string = '{} < {}'.format(dist_expr, range_limit * self.METERS_PER_MILE) else: query_string = '{} < {} AND year={}'.format(dist_expr, range_limit * self.METERS_PER_MILE, year) offset = self.PAGE_SIZE * page query = search.Query( query_string=query_string, options=search.QueryOptions( limit=self.PAGE_SIZE, offset=offset, sort_options=search.SortOptions( expressions=[ search.SortExpression( expression=dist_expr, direction=search.SortExpression.ASCENDING ) ] ), returned_expressions=[ search.FieldExpression( name='distance', expression=dist_expr ) ], ) ) if search_type == 'teams': search_index = search.Index(name="teamLocation") else: search_index = search.Index(name="eventLocation") docs = search_index.search(query) num_results = docs.number_found distances = {} keys = [] event_team_count_futures = {} for result in docs.results: distances[result.doc_id] = result.expressions[0].value / self.METERS_PER_MILE if search_type == 'teams': event_team_count_futures[result.doc_id] = EventTeam.query( EventTeam.team == ndb.Key('Team', result.doc_id), EventTeam.year == year).count_async(limit=1, keys_only=True) keys.append(ndb.Key('Team', result.doc_id)) else: keys.append(ndb.Key('Event', result.doc_id)) result_futures = ndb.get_multi_async(keys) if search_type == 'teams': results = [] for result_future, team_key in zip(result_futures, keys): if event_team_count_futures[team_key.id()].get_result() != 0: results.append(result_future.get_result()) else: results = [result_future.get_result() for result_future in result_futures] self.template_values.update({ 'valid_years': self.VALID_YEARS, 'valid_ranges': self.VALID_RANGES, 'page_size': self.PAGE_SIZE, 'page': page, 'year': year, 'location': location, 'range_limit': range_limit, 'search_type': search_type, 'num_results': num_results, 'results': results, 'distances': distances, }) return jinja2_engine.render('nearby.html', self.template_values)
def test_2002sj(self): with open('test_data/usfirst_html/usfirst_event_details_2002sj.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], (37.3382082, -121.8863286)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/Los_Angeles')
def test_1997il(self): with open('test_data/usfirst_html/usfirst_event_details_1997il.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], (41.8781136, -87.6297982)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/Chicago')
def test_2005or(self): with open('test_data/usfirst_html/usfirst_event_details_2005or.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], (45.5230622, -122.6764816)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/Los_Angeles')
def test_2005is(self): with open('test_data/usfirst_html/usfirst_event_details_2005is.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], (32.7940463, 34.989571)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'Asia/Jerusalem')
def test_2013flbr(self): with open('test_data/usfirst_html/usfirst_event_details_2013flbr.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], (26.1224386, -80.13731740000001)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/New_York')
def test_2012ct(self): with open('test_data/usfirst_html/usfirst_event_details_2012ct.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], (41.76371109999999, -72.6850932)) self.assertEqual(LocationHelper.get_timezone_id(event['location']), 'America/New_York')
def test_2012ct_bad_location(self): with open('test_data/usfirst_html/usfirst_event_details_2012ct.html', 'r') as f: event, _ = UsfirstEventDetailsParser.parse(f.read()) event['location'] = "somewhere on mars" self.assertEqual(LocationHelper.get_lat_lon(event['location'])[0], None) self.assertEqual(LocationHelper.get_timezone_id(event['location']), None)