def catalogue_movies(certificate='', env='quality'): """Test playability of every movie in the catalogue """ url = f'http://client.{env}.nowtv.bskyb.com/catalogue/programs?limit=20&offset=' umv = get_umv() headers = {'cache-control': 'no-cache'} for offset in range(0, 1000, 20): url_offset = '{}{}'.format(url, offset) Verbose().output(url_offset, end=' ') response = requests.request('GET', url_offset, headers=headers) if response.status_code == 200: Verbose().output('Got a catalogue of {} bytes'.format( len(response.text))) catalogue = response.json() for content in catalogue['list']: crid = content.get('id', 'n/a') title = AsJson(content).get("title", "n/a") # matching cert or no cert filter if certificate and content.get( 'certificate', 'x') == certificate or not certificate: if in_atom(crid) and playout(umv, crid, env): print( f"{content.get('certificate', ''):<3} {title:<50} {crid:<15} {content.get('uri', 'n/a'):<120} Ends: {end_date(content)}" ) else: print('No data') return
def test_verbosity_level_reached(capsys): Verbose().set(2) Verbose().output('level is set to 2', verbosity=1) out, err = capsys.readouterr() assert 'level is set to 2' in out Verbose().set(3) Verbose().output('level is set to 3', verbosity=1) out, err = capsys.readouterr() assert 'level is set to 3' in out
def in_atom(crid): url = 'http://e2e.dev.aws.atom.sky.com/adapter-atlas/v1/query/content_id/' + crid headers = {'x-skyott-proposition': "NOWTV", 'x-skyott-territory': "GB", 'x-skyott-device': "MOBILE", 'x-skyott-platform': "IOS", 'cache-control': "no-cache"} response = requests.get(url, headers=headers, timeout=5) Verbose().output(f'Atom lookup request: {url}\nReturned: {response.status_code}') Verbose().output(f'{pformat(response.json())}', verbosity=1) if response.status_code == 200: return True return False
def test_borg(): """There is only one Borg...""" Verbose().set() borg = Verbose() assert Verbose().level() assert borg.level() borg.unset() assert not borg.level()
def playout(umv, crid, env='quality'): url = f'http://playout.{env}.nowtv.bskyb.com/vod/{crid}' headers = { 'authorization': umv, 'X-NowTV-DeviceID': 'playps3 NowTV_Player;1;PS3;Win32', 'X-NowTV-ClientID': 'ps3 client crosstv:1.5.1', } Verbose().output(f'Request: {url}') response = requests.get(url, headers=headers, timeout=5) Verbose().output(f'Returned: {response.status_code}') if response.status_code == 200: Verbose().output(f'{pformat(response.json())}', verbosity=1) return True Verbose().output(f'{pformat(response.json())}') return False
def command_line_runner(argv=None): parser = get_parser() if argv is None: argv = sys.argv if len(argv) == 1: parser.print_usage() return args = parser.parse_args(argv[1:]) if args.verbose: Verbose().set(level=args.verbose) # Show crid details if args.crid: catalogue_content(args.crid, args.env) return # List all QA crids if args.list_crids: assets.list_titles() return # Find collections in the catalogue if args.collections: catalogue_collections(args.env) return # Find playable movies in the catalogue if args.movies: catalogue_movies(certificate=args.with_cert, env=args.env) return # Playout title|crid if args.asset: # asset can be a crid or a title crid = assets.get_crid(' '.join(args.asset)) x = ' '.join(args.asset) print(f'Looking for: {x}') if not crid: crid = args.asset[0] print(f'Using: {crid}') if play(crid, env=args.env): print('Playable') return else: print('Not playable') return 1
#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse import logging import sys from playable.usernames import Usernames from playable.assets import Assets from playable.playout import play, catalogue_movies, catalogue_collections, catalogue_content from playable.verbose import Verbose users = Usernames() assets = Assets() verbose = Verbose() logging.basicConfig(level=logging.INFO, format='%(message)s') def get_parser(): parser = argparse.ArgumentParser(description='Playout tool') parser.add_argument('--collections', action='store_true', default=False, help='Find collections in the catalogue') parser.add_argument('--crid', action='store', default='', help='Show crid details from the catalogue') parser.add_argument('--movies', action='store_true', default=False,
def test_status(): Verbose().unset() assert Verbose().level() == 0 Verbose().set() assert Verbose().level() == 1
def test_verbosity_level_under(capsys): Verbose().set(0) Verbose().output('Hide unless level is set to 1 or more', verbosity=1) out, err = capsys.readouterr() assert '' == out
def test_verbosity_level_defaults(capsys): Verbose().set() Verbose().output('You can not hide this', verbosity=0) out, err = capsys.readouterr() assert 'You can not hide this' in out
def test_output_supressed(capsys): """Output to stdout suppressed """ Verbose().unset() Verbose().output('This will always be hidden') out, err = capsys.readouterr() assert '' == out
def test_output(capsys): """Output to stdout""" Verbose().set() Verbose().output('show when true') out, err = capsys.readouterr() assert 'show when true' in out
def get_umv(): users = Usernames scratchy = users.get('scratch_tester') umv = session(scratchy) Verbose().output('Using user: scratch_tester', verbosity=1) return umv