diff --git a/lib/location.py b/lib/location.py index e0ba42c..32ce543 100644 --- a/lib/location.py +++ b/lib/location.py @@ -199,7 +199,49 @@ def location_processing(location, ip_addr): # it should be handled like a search term (for geolocator) override_location_name = None full_address = None + hide_full_address = False + force_show_full_address = location is not None and location.startswith('~') + # location ~ means that it should be detected automatically, + # and shown in the location line below the report + if location == '~': + location = None + + if location and location.lstrip('~').startswith('@'): + try: + location, country = get_location( + socket.gethostbyname( + location.lstrip('~')[1:])) + location = '~' + location + hide_full_address = not force_show_full_address + except: + location, country = NOT_FOUND_LOCATION, None + + query_source_location = get_location(ip_addr) + + country = None + if location is None or location == 'MyLocation': + location, country = query_source_location + + # Let us try to use geolocation services for locations + # that were derived from IPs. + if location: + location = '~' + location + hide_full_address = not force_show_full_address + elif is_ip(location): + location, country = get_location(location) + + # here too + if location: + location = '~' + location + hide_full_address = not force_show_full_address + + if location and not location.startswith('~'): + location = location_canonical_name(location) + + # up to this point it is possible that the name + # contains some unicode symbols + # here we resolve them if location is not None and not ascii_only(location): location = "~" + location @@ -211,27 +253,13 @@ def location_processing(location, ip_addr): if geolocation is not None: override_location_name = location[1:].replace('+', ' ') location = "%s,%s" % (geolocation['latitude'], geolocation['longitude']) - full_address = geolocation['address'] + if not hide_full_address: + full_address = geolocation['address'] + else: + full_address = None else: location = NOT_FOUND_LOCATION #location[1:] - query_source_location = get_location(ip_addr) - - country = None - if location is None or location == 'MyLocation': - location, country = query_source_location - - if is_ip(location): - location, country = get_location(location) - - if location.startswith('@'): - try: - location, country = get_location(socket.gethostbyname(location[1:])) - except: - location, country = NOT_FOUND_LOCATION, None - - location = location_canonical_name(location) - return location, \ override_location_name, \ full_address, \