lab_weather/geocoder/keys.py

66 lines
2.2 KiB
Python

#!/usr/bin/python
# coding: utf8
import os
import re
import requests
bing_key = os.environ.get('BING_API_KEY')
tomtom_key = os.environ.get('TOMTOM_API_KEY')
here_app_id = os.environ.get('HERE_APP_ID')
here_app_code = os.environ.get('HERE_APP_CODE')
geonames_username = os.environ.get('GEONAMES_USERNAME')
opencage_key = os.environ.get('OPENCAGE_API_KEY')
mapquest_key = os.environ.get('MAPQUEST_API_KEY')
baidu_key = os.environ.get('BAIDU_API_KEY')
baidu_security_key = os.environ.get('BAIDU_SECURITY_KEY')
gaode_key = os.environ.get('GAODE_API_KEY')
w3w_key = os.environ.get('W3W_API_KEY')
mapbox_access_token = os.environ.get('MAPBOX_ACCESS_TOKEN')
google_key = os.environ.get('GOOGLE_API_KEY')
google_client = os.environ.get('GOOGLE_CLIENT')
google_client_secret = os.environ.get('GOOGLE_CLIENT_SECRET')
mapzen_key = os.environ.get('MAPZEN_API_KEY')
tamu_key = os.environ.get('TAMU_API_KEY')
geocodefarm_key = os.environ.get('GEOCODEFARM_API_KEY')
tgos_key = os.environ.get('TGOS_API_KEY')
locationiq_key = os.environ.get('LOCATIONIQ_API_KEY')
class CanadapostKeyLazySingleton(object):
CANADAPOST_KEY_REGEX = re.compile(r"'(....-....-....-....)';")
def __init__(self):
self._key = None
def __call__(self, **kwargs):
if self._key is None:
self._key = self.retrieve_key(**kwargs)
return self._key
@classmethod
def retrieve_key(cls, **kwargs):
# get key with traditionnal mechanism
key = kwargs.get('key')
canadapost_key = os.environ.get('CANADAPOST_API_KEY')
if key or canadapost_key:
return key if key else canadapost_key
# fallback
try:
url = 'http://www.canadapost.ca/cpo/mc/personal/postalcode/fpc.jsf'
timeout = kwargs.get('timeout', 5.0)
proxies = kwargs.get('proxies', '')
r = requests.get(url, timeout=timeout, proxies=proxies)
match = cls.CANADAPOST_KEY_REGEX.search(r.text)
if match:
return match.group(1)
else:
raise ValueError('No API Key found')
except Exception as err:
raise ValueError('Could not retrieve API Key: %s' % err)
canadapost_key_getter = CanadapostKeyLazySingleton()