def token(): """Requests initial token is_bound=false""" url = ANDROID_HOST + '/token/device' params = dict(client_id='er_android_device', device_id=DEVICE_ID, timestamp=str(int(time.time()))) resp = _request('get', url, params=params, headers=HEADERS) return utils.subset(resp, 'is_bound', 'token', 'expires')
def regions(token): url = ANDROID_HOST + '/er/misc/domains' resp = _request('get', url, headers=_headers(token)) domains = [] for item in resp['domains']: if item['code']: domain = utils.subset(item, 'extid', 'code', 'title') domains.append(domain) return domains
def auth(token, username, password, region): """Requests sso and then requests token is_bound=true""" url = ANDROID_HOST + '/er/ssoauth/auth' data = dict(username=username, password=password, region=region) resp = _request('post', url, headers=_headers(token), data=data) url = ANDROID_HOST + '/token/subscriber_device/by_sso' params = dict(sso_system='er', sso_key=resp['sso']) resp = _request('get', url, params=params, headers=_headers(token)) return utils.subset(resp, 'is_bound', 'token', 'expires')
def sms_check(token, phone, region, agr_id, sms_code): url = ANDROID_HOST + '/er/sms/check' data = { 'phone': phone, 'region': region, 'agr_id': str(agr_id), 'sms_code': str(sms_code) } resp = _request('post', url, headers=_headers(token), data=data) if not resp.get('token'): raise ApiResponseError( {'message': resp['Agreements']['sms_error_text']}) return utils.subset(resp, 'is_bound', 'token', 'expires')
def sms_auth(token, phone): url = ANDROID_HOST + '/er/ott/get_agreements_by_phone' params = {'phone_number': phone} resp = _request('get', url, params=params, headers=_headers(token)) if not resp['principals']: raise ApiResponseError( {'message': _('error.contract_not_found') % phone}) url = ANDROID_HOST + '/er/sms/auth' region = resp['principals'][0]['domain'] data = {'phone': phone, 'region': region} resp = _request('post', url, headers=_headers(token), data=data) result = utils.subset(resp['agreements'], 'send_sms', ('sms_error_text', 'message'), (lambda d: d['agreement'][0]['agr_id'], 'agr_id')) result['region'] = region return result
def channels_all(token, public=False): url = ANDROID_HOST + '/channel_list/multiscreen' resp = _request('get', url, headers=_headers(token)) chs = [] for item in resp['collection']: ch = utils.subset(item, 'id', 'title', 'description', ('er_lcn', 'lcn')) resources = {r['category']: r for r in item['resources']} if public and not resources.get('hls', {}).get('is_public'): continue res = { 'hls_id': resources['hls']['id'], 'poster_id': resources['poster_channel_grid_blueprint']['id'] } ch.update(res) chs.append(ch) return {'channels': chs}
def _map_items(items, keys, res_map, limit=100, offset=0): mapped = [] for item in items: offset += 1 if item['available']['type'] == 'not-available': continue mi = utils.subset(item, *keys) resources = {r['type']: r for r in item['resources']} res = {} for data_key, res_type in res_map.items(): if isinstance(res_type, str): res[data_key] = resources.get(res_type, {}).get('id') else: res[data_key] = next( (resources[t]['id'] for t in res_type if resources.get(t)), None) mi.update(res) mapped.append(mi) if len(mapped) == limit: break return [mapped, offset]
def test_subset(): assert utils.subset({'a': 1, 'b': 2, 'c': 3}, 'a', 'c') == {'a': 1, 'c': 3} assert utils.subset({'a': 1, 'b': 2, 'c': 3}, 'a', ('c', 'y')) == {'a': 1, 'y': 3} assert utils.subset({'a': 1, 'b': 2, 'c': 3}, 'a', (lambda d: d['c'], 'y')) == {'a': 1, 'y': 3}