def _top_candidate(cand: List) -> Optional[Dict]: """ Return first place in Iceland in Google Places Search API results. """ for place in cand: coords = _parse_coords(place) if coords and in_iceland(coords): return place return None
def sentence(state, result): """ Called when sentence processing is complete """ q: Query = state["query"] if "qtype" in result and "qkey" in result: # Successfully matched a query type q.set_qtype(result.qtype) q.set_key(result.qkey) # Asking for a location outside Iceland if q.location and not in_iceland(q.location): return gen_answer("Ég þekki ekki til veðurs utan Íslands") handler_func = _HANDLERS[result.qkey] try: r = handler_func(q, result) if r: q.set_answer(*r) except Exception as e: logging.warning( "Exception while processing weather query: {0}".format(e)) q.set_error("E_EXCEPTION: {0}".format(e)) raise else: q.set_error("E_QUERY_NOT_UNDERSTOOD")
def query_nearest_stop(query: Query, session, result): """ A query for the stop closest to the user """ # Retrieve the client location location = query.location if location is None: # No location provided in the query answer = "Staðsetning óþekkt" response = dict(answer=answer) voice_answer = "Ég veit ekki hvar þú ert." return response, answer, voice_answer if not in_iceland(location): # User's location is not in Iceland return gen_answer("Ég þekki ekki strætósamgöngur utan Íslands.") # Get the stop closest to the user stop = straeto.BusStop.closest_to(location) answer = stop.name # Use the same word for the bus stop as in the query stop_word = result.stop_word if "stop_word" in result else "stoppistöð" va = [ "Næsta", stop_word, "er", stop.name + ";", "þangað", "eru", voice_distance(straeto.distance(location, stop.location)), ] # Store a location coordinate and a bus stop name in the context query.set_context({"location": stop.location, "bus_stop": stop.name}) voice_answer = " ".join(va) + "." response = dict(answer=answer) return response, answer, voice_answer
def test_geo(): """ Test geography and location-related functions in geo.py """ from geo import ( icelandic_city_name, continent_for_country, coords_for_country, coords_for_street_name, country_name_for_isocode, isocode_for_country_name, icelandic_addr_info, lookup_city_info, parse_address_string, iceprep_for_street, iceprep_for_placename, iceprep_for_country, iceprep_for_cc, capitalize_placename, distance, in_iceland, code_for_us_state, coords_for_us_state_code, location_info, ) assert icelandic_city_name("London") == "Lundúnir" assert icelandic_city_name("Rome") == "Róm" assert continent_for_country("IS") == "EU" assert continent_for_country("no") == "EU" assert continent_for_country("MX") == "NA" assert coords_for_country("DE") is not None assert coords_for_country("it") is not None assert coords_for_street_name("Austurstræti") is not None assert coords_for_street_name("Háaleitisbraut") is not None assert country_name_for_isocode("DE", lang="is") == "Þýskaland" assert country_name_for_isocode("DE") == "Þýskaland" assert isocode_for_country_name("Danmörk", lang="is") == "DK" assert isocode_for_country_name("Danmörk", lang="IS") == "DK" assert isocode_for_country_name("Noregur") == "NO" addr_info = icelandic_addr_info("Fiskislóð 31") assert addr_info and addr_info["stadur_tgf"] == "Reykjavík" # Test city info lookup city_info = lookup_city_info("Kænugarður") assert city_info and len( city_info) == 1 and city_info[0]["country"] == "UA" city_info = lookup_city_info("Kaupmannahöfn") assert city_info and len( city_info) == 1 and city_info[0]["country"] == "DK" city_info = lookup_city_info("Pjongjang") assert city_info and len( city_info) == 1 and city_info[0]["country"] == "KP" city_info = lookup_city_info("Pyongyang") assert city_info and len( city_info) == 1 and city_info[0]["country"] == "KP" # Test address string parsing assert parse_address_string(" Fiskislóð 31") == { "street": "Fiskislóð", "number": 31, "letter": "", } assert parse_address_string("Öldugata 19c ") == { "street": "Öldugata", "number": 19, "letter": "c", } assert parse_address_string(" Dúfnahólar 10 ") == { "street": "Dúfnahólar", "number": 10, "letter": "", } # Test prepositions for street names assert iceprep_for_street("Öldugata") == "á" assert iceprep_for_street("Fiskislóð") == "á" assert iceprep_for_street("Austurstræti") == "í" assert iceprep_for_street("Hamrahlíð") == "í" # Test prepositions for placenames assert iceprep_for_placename("Dalvík") == "á" assert iceprep_for_placename("Akureyri") == "á" assert iceprep_for_placename("Ísafjörður") == "á" assert iceprep_for_placename("Reykjavík") == "í" assert iceprep_for_placename("Hafnarfjörður") == "í" assert iceprep_for_placename("London") == "í" assert iceprep_for_placename("Dyflinni") == "í" # Test prepositions for countries assert iceprep_for_country("Ítalía") == "á" assert iceprep_for_country("Ísland") == "á" assert iceprep_for_country("Þýskaland") == "í" assert iceprep_for_country("Japan") == "í" assert iceprep_for_country("spánn") == "á" # Test prepositions for countries, queried by CC assert iceprep_for_cc("IS") == "á" assert iceprep_for_cc("US") == "í" assert iceprep_for_cc("ES") == "á" assert iceprep_for_cc("es") == "á" # Test placename capitalization assert capitalize_placename("ríó de janeiro") == "Ríó de Janeiro" assert capitalize_placename("vík í mýrdal") == "Vík í Mýrdal" assert capitalize_placename("Vík í mýrdal") == "Vík í Mýrdal" assert capitalize_placename("frankfúrt am main") == "Frankfúrt am Main" assert capitalize_placename("mið-afríkulýðveldið") == "Mið-Afríkulýðveldið" assert capitalize_placename("Norður-kórea") == "Norður-Kórea" assert capitalize_placename("norður-Kórea") == "Norður-Kórea" assert capitalize_placename( "bosnía og hersegóvína") == "Bosnía og Hersegóvína" assert capitalize_placename("Norður-Makedónía") == "Norður-Makedónía" # Distance assert int(distance((64.141439, -21.943944), (65.688131, -18.102528))) == 249 assert in_iceland((66.462205, -15.968417)) assert not in_iceland((62.010846, -6.776709)) assert not in_iceland((62.031342, -18.539553)) # US States assert code_for_us_state("Flórída") == "FL" assert code_for_us_state("Norður-Karólína") == "NC" assert code_for_us_state("Kalifornía") == "CA" assert coords_for_us_state_code("CA") == [36.778261, -119.417932] # Generic location info lookup functions assert "country" in location_info("Reykjavík", "placename") assert "continent" in location_info("Minsk", "placename") assert location_info("Japan", "country")["continent"] == "AS" assert location_info("Danmörk", "country")["continent"] == "EU" assert location_info("Mexíkó", "country")["continent"] == "NA" assert location_info("ísafjörður", "placename")["continent"] == "EU" assert location_info("Meðalfellsvatn", "placename")["country"] == "IS" assert location_info("Georgía", "country")["country"] != "US" assert location_info("Virginía", "placename")["country"] == "US" assert location_info("Norður-Dakóta", "country")["country"] == "US" assert location_info("Kænugarður", "placename")["continent"] == "EU" assert location_info("Fiskislóð 31", "address")["country"] == "IS"