Implements prefer english names setting for MapQuest API in config.ini (#290)

Implements prefer english names setting in config.ini which adds English as accepted header to MapQuest requests and results in the response location names being mostly in English not their native country language
This commit is contained in:
Denis 2019-01-22 07:27:38 +03:00 committed by Jaisen Mathai
parent 69937ca1a3
commit e5af0dfb4e
4 changed files with 37 additions and 1 deletions

View File

@ -349,6 +349,8 @@ cp config.ini-sample ~/.elodie/config.ini
# now you're ready to add your MapQuest key # now you're ready to add your MapQuest key
``` ```
If you're an english speaker then you will probably want to add `prefer_english_names=True` to the `[MapQuest]` section else you'll have cities named using the local language.
## Questions, comments or concerns? ## Questions, comments or concerns?
The best ways to provide feedback is by opening a [GitHub issue](https://github.com/jmathai/elodie/issues) or emailing me at [jaisen@jmathai.com](mailto:jaisen@jmathai.com). The best ways to provide feedback is by opening a [GitHub issue](https://github.com/jmathai/elodie/issues) or emailing me at [jaisen@jmathai.com](mailto:jaisen@jmathai.com).

View File

@ -1,2 +1,3 @@
[MapQuest] [MapQuest]
key=your-api-key-goes-here key=your-api-key-goes-here
prefer_english_names=False

View File

@ -20,6 +20,7 @@ from elodie.localstorage import Db
__KEY__ = None __KEY__ = None
__DEFAULT_LOCATION__ = 'Unknown Location' __DEFAULT_LOCATION__ = 'Unknown Location'
__PREFER_ENGLISH_NAMES__ = None
def coordinates_by_name(name): def coordinates_by_name(name):
@ -114,6 +115,24 @@ def get_key():
__KEY__ = config['MapQuest']['key'] __KEY__ = config['MapQuest']['key']
return __KEY__ return __KEY__
def get_prefer_english_names():
global __PREFER_ENGLISH_NAMES__
if __PREFER_ENGLISH_NAMES__ is not None:
return __PREFER_ENGLISH_NAMES__
config_file = '%s/config.ini' % constants.application_directory
if not path.exists(config_file):
return False
config = load_config()
if('MapQuest' not in config):
return False
if('prefer_english_names' not in config['MapQuest']):
return False
__PREFER_ENGLISH_NAMES__ = bool(config['MapQuest']['prefer_english_names'])
return __PREFER_ENGLISH_NAMES__
def place_name(lat, lon): def place_name(lat, lon):
lookup_place_name_default = {'default': __DEFAULT_LOCATION__} lookup_place_name_default = {'default': __DEFAULT_LOCATION__}
@ -167,6 +186,7 @@ def lookup(**kwargs):
return None return None
key = get_key() key = get_key()
prefer_english_names = get_prefer_english_names()
if(key is None): if(key is None):
return None return None
@ -181,7 +201,10 @@ def lookup(**kwargs):
path, path,
urllib.parse.urlencode(params) urllib.parse.urlencode(params)
) )
r = requests.get(url) headers = {}
if(prefer_english_names):
headers = {'Accept-Language':'en-EN,en;q=0.8'}
r = requests.get(url, headers=headers)
return parse_result(r.json()) return parse_result(r.json())
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
log.error(e) log.error(e)

View File

@ -112,6 +112,16 @@ def test_lookup_with_valid_key():
assert latLng['lat'] == 37.36883, latLng assert latLng['lat'] == 37.36883, latLng
assert latLng['lng'] == -122.03635, latLng assert latLng['lng'] == -122.03635, latLng
@mock.patch('elodie.geolocation.__PREFER_ENGLISH_NAMES__', True)
def test_lookup_with_prefer_english_names_true():
res = geolocation.lookup(lat=55.66333, lon=37.61583)
assert res['address']['city'] == 'Nagorny District', res
@mock.patch('elodie.geolocation.__PREFER_ENGLISH_NAMES__', False)
def test_lookup_with_prefer_english_names_false():
res = geolocation.lookup(lat=55.66333, lon=37.61583)
assert res['address']['city'] == u'\u041d\u0430\u0433\u043e\u0440\u043d\u044b\u0439 \u0440\u0430\u0439\u043e\u043d', res
@mock.patch('elodie.constants.location_db', '%s/location.json-cached' % gettempdir()) @mock.patch('elodie.constants.location_db', '%s/location.json-cached' % gettempdir())
def test_place_name_deprecated_string_cached(): def test_place_name_deprecated_string_cached():
# See gh-160 for backwards compatability needed when a string is stored instead of a dict # See gh-160 for backwards compatability needed when a string is stored instead of a dict