mirror of
https://github.com/no2chem/wideq.git
synced 2025-05-19 08:40:25 -07:00
Parameterize language and country (fix #13)
This commit is contained in:
parent
0317c81bdf
commit
74a175fae0
63
wideq.py
63
wideq.py
@ -14,8 +14,8 @@ GATEWAY_URL = 'https://kic.lgthinq.com:46030/api/common/gatewayUriList'
|
|||||||
APP_KEY = 'wideq'
|
APP_KEY = 'wideq'
|
||||||
SECURITY_KEY = 'nuts_securitykey'
|
SECURITY_KEY = 'nuts_securitykey'
|
||||||
DATA_ROOT = 'lgedmRoot'
|
DATA_ROOT = 'lgedmRoot'
|
||||||
COUNTRY = 'US'
|
DEFAULT_COUNTRY = 'US'
|
||||||
LANGUAGE = 'en-US'
|
DEFAULT_LANGUAGE = 'en-US'
|
||||||
SVC_CODE = 'SVC202'
|
SVC_CODE = 'SVC202'
|
||||||
CLIENT_ID = 'LGAO221A02'
|
CLIENT_ID = 'LGAO221A02'
|
||||||
OAUTH_SECRET_KEY = 'c053c2a6ddeb7ad97cb0eed0dcb31cf8'
|
OAUTH_SECRET_KEY = 'c053c2a6ddeb7ad97cb0eed0dcb31cf8'
|
||||||
@ -139,25 +139,28 @@ def lgedm_post(url, data=None, access_token=None, session_id=None):
|
|||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
def gateway_info():
|
def gateway_info(country, language):
|
||||||
"""Load information about the hosts to use for API interaction.
|
"""Load information about the hosts to use for API interaction.
|
||||||
|
|
||||||
|
`country` and `language` are codes, like "US" and "en-US,"
|
||||||
|
respectively.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return lgedm_post(
|
return lgedm_post(
|
||||||
GATEWAY_URL,
|
GATEWAY_URL,
|
||||||
{'countryCode': COUNTRY, 'langCode': LANGUAGE},
|
{'countryCode': country, 'langCode': language},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def oauth_url(auth_base):
|
def oauth_url(auth_base, country, language):
|
||||||
"""Construct the URL for users to log in (in a browser) to start an
|
"""Construct the URL for users to log in (in a browser) to start an
|
||||||
authenticated session.
|
authenticated session.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = urljoin(auth_base, 'login/sign_in')
|
url = urljoin(auth_base, 'login/sign_in')
|
||||||
query = urlencode({
|
query = urlencode({
|
||||||
'country': COUNTRY,
|
'country': country,
|
||||||
'language': LANGUAGE,
|
'language': language,
|
||||||
'svcCode': SVC_CODE,
|
'svcCode': SVC_CODE,
|
||||||
'authSvr': 'oauth2',
|
'authSvr': 'oauth2',
|
||||||
'client_id': CLIENT_ID,
|
'client_id': CLIENT_ID,
|
||||||
@ -177,15 +180,15 @@ def parse_oauth_callback(url):
|
|||||||
return params['access_token'][0], params['refresh_token'][0]
|
return params['access_token'][0], params['refresh_token'][0]
|
||||||
|
|
||||||
|
|
||||||
def login(api_root, access_token):
|
def login(api_root, access_token, country, language):
|
||||||
"""Use an access token to log into the API and obtain a session and
|
"""Use an access token to log into the API and obtain a session and
|
||||||
return information about the session.
|
return information about the session.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = urljoin(api_root + '/', 'member/login')
|
url = urljoin(api_root + '/', 'member/login')
|
||||||
data = {
|
data = {
|
||||||
'countryCode': COUNTRY,
|
'countryCode': country,
|
||||||
'langCode': LANGUAGE,
|
'langCode': language,
|
||||||
'loginType': 'EMP',
|
'loginType': 'EMP',
|
||||||
'token': access_token,
|
'token': access_token,
|
||||||
}
|
}
|
||||||
@ -234,18 +237,21 @@ def refresh_auth(oauth_root, refresh_token):
|
|||||||
|
|
||||||
|
|
||||||
class Gateway(object):
|
class Gateway(object):
|
||||||
def __init__(self, auth_base, api_root, oauth_root):
|
def __init__(self, auth_base, api_root, oauth_root, country, language):
|
||||||
self.auth_base = auth_base
|
self.auth_base = auth_base
|
||||||
self.api_root = api_root
|
self.api_root = api_root
|
||||||
self.oauth_root = oauth_root
|
self.oauth_root = oauth_root
|
||||||
|
self.country = country
|
||||||
|
self.language = language
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def discover(cls):
|
def discover(cls, country, language):
|
||||||
gw = gateway_info()
|
gw = gateway_info(country, language)
|
||||||
return cls(gw['empUri'], gw['thinqUri'], gw['oauthUri'])
|
return cls(gw['empUri'], gw['thinqUri'], gw['oauthUri'],
|
||||||
|
country, language)
|
||||||
|
|
||||||
def oauth_url(self):
|
def oauth_url(self):
|
||||||
return oauth_url(self.auth_base)
|
return oauth_url(self.auth_base, self.country, self.language)
|
||||||
|
|
||||||
|
|
||||||
class Auth(object):
|
class Auth(object):
|
||||||
@ -267,7 +273,8 @@ class Auth(object):
|
|||||||
Session object and a list of the user's devices.
|
Session object and a list of the user's devices.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
session_info = login(self.gateway.api_root, self.access_token)
|
session_info = login(self.gateway.api_root, self.access_token,
|
||||||
|
self.gateway.country, self.gateway.language)
|
||||||
session_id = session_info['jsessionId']
|
session_id = session_info['jsessionId']
|
||||||
return Session(self, session_id), get_list(session_info, 'item')
|
return Session(self, session_id), get_list(session_info, 'item')
|
||||||
|
|
||||||
@ -448,7 +455,8 @@ class Client(object):
|
|||||||
and allows serialization of state.
|
and allows serialization of state.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, gateway=None, auth=None, session=None):
|
def __init__(self, gateway=None, auth=None, session=None,
|
||||||
|
country=DEFAULT_COUNTRY, language=DEFAULT_LANGUAGE):
|
||||||
# The three steps required to get access to call the API.
|
# The three steps required to get access to call the API.
|
||||||
self._gateway = gateway
|
self._gateway = gateway
|
||||||
self._auth = auth
|
self._auth = auth
|
||||||
@ -462,10 +470,14 @@ class Client(object):
|
|||||||
# responses.
|
# responses.
|
||||||
self._model_info = {}
|
self._model_info = {}
|
||||||
|
|
||||||
|
# Locale information used to discover a gateway, if necessary.
|
||||||
|
self._country = country
|
||||||
|
self._language = language
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gateway(self):
|
def gateway(self):
|
||||||
if not self._gateway:
|
if not self._gateway:
|
||||||
self._gateway = Gateway.discover()
|
self._gateway = Gateway.discover(self._country, self._language)
|
||||||
return self._gateway
|
return self._gateway
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -510,7 +522,9 @@ class Client(object):
|
|||||||
if 'gateway' in state:
|
if 'gateway' in state:
|
||||||
data = state['gateway']
|
data = state['gateway']
|
||||||
client._gateway = Gateway(
|
client._gateway = Gateway(
|
||||||
data['auth_base'], data['api_root'], data['oauth_root']
|
data['auth_base'], data['api_root'], data['oauth_root'],
|
||||||
|
data.get('country', DEFAULT_COUNTRY),
|
||||||
|
data.get('language', DEFAULT_LANGUAGE),
|
||||||
)
|
)
|
||||||
|
|
||||||
if 'auth' in state:
|
if 'auth' in state:
|
||||||
@ -525,6 +539,12 @@ class Client(object):
|
|||||||
if 'model_info' in state:
|
if 'model_info' in state:
|
||||||
client._model_info = state['model_info']
|
client._model_info = state['model_info']
|
||||||
|
|
||||||
|
if 'country' in state:
|
||||||
|
client._country = state['country']
|
||||||
|
|
||||||
|
if 'language' in state:
|
||||||
|
client._language = state['language']
|
||||||
|
|
||||||
return client
|
return client
|
||||||
|
|
||||||
def dump(self):
|
def dump(self):
|
||||||
@ -539,6 +559,8 @@ class Client(object):
|
|||||||
'auth_base': self._gateway.auth_base,
|
'auth_base': self._gateway.auth_base,
|
||||||
'api_root': self._gateway.api_root,
|
'api_root': self._gateway.api_root,
|
||||||
'oauth_root': self._gateway.oauth_root,
|
'oauth_root': self._gateway.oauth_root,
|
||||||
|
'country': self._gateway.country,
|
||||||
|
'language': self._gateway.language,
|
||||||
}
|
}
|
||||||
|
|
||||||
if self._auth:
|
if self._auth:
|
||||||
@ -550,6 +572,9 @@ class Client(object):
|
|||||||
if self._session:
|
if self._session:
|
||||||
out['session'] = self._session.session_id
|
out['session'] = self._session.session_id
|
||||||
|
|
||||||
|
out['country'] = self._country
|
||||||
|
out['language'] = self._language
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user