def _episode_detail(episode_code): context = make_context() context['episode'] = Episode.get(Episode.code == episode_code) context['jokes'] = {} context['joke_count'] = 0 for joke in EpisodeJoke.select().where( EpisodeJoke.episode == context['episode']): group = joke.joke.primary_character if group not in app_config.PRIMARY_CHARACTER_LIST: group = 'Miscellaneous' if group not in context['jokes']: context['jokes'][group] = [] context['jokes'][group].append(joke) context['joke_count'] += 1 context['seasons'] = _all_seasons() context['group_order'] = [ g for g in app_config.PRIMARY_CHARACTER_LIST if g in context['jokes'] ] try: context['next'] = Episode.get(number=context['episode'].number + 1) except Episode.DoesNotExist: context['next'] = None try: context['prev'] = Episode.get(number=context['episode'].number - 1) except Episode.DoesNotExist: context['prev'] = None return render_template('episode_detail.html', **context)
def parse_tvdb_xml(xmlfile): FIELDS_LIST = [ ('blurb', 'Overview', 'str'), ('run_date', 'FirstAired', 'date'), ('season', 'Combined_season', 'int'), ('production_code', 'ProductionCode', 'str'), ('episode', 'EpisodeNumber', 'int'), ('season', 'Season', 'int') ] soup = BeautifulSoup(xmlfile, "xml") for episode in soup.findAll('Episode'): season = int(episode.find('Combined_season').text) if season > 0: episode_dict = {} for model_field, xml_field, data_type in FIELDS_LIST: try: if episode.find(xml_field).text: episode_dict[model_field] = episode.find(xml_field).text if data_type == 'int': episode_dict[model_field] = int(episode_dict[model_field]) if data_type == 'date': d = parse(episode_dict[model_field]) episode_dict[model_field] = datetime.date(d.year, d.month, d.day) except AttributeError: pass if episode.find('filename').text: episode_dict['tvdb_image'] = 'http://thetvdb.com/banners/_cache/%s' % episode.find('filename').text episode_dict['code'] = 's%se%s' % ( str(episode_dict['season']).zfill(2), str(episode_dict['episode']).zfill(2)) try: Episode.get(code=episode_dict['code']) Episode.update(**episode_dict).where(Episode.code == episode_dict['code']).execute() except Episode.DoesNotExist: pass
def _admin_episodes(episode_code): from flask import request if request.method == 'GET': context = {} context['episode'] = Episode.get(code=episode_code) context['episodejokes'] = EpisodeJoke.select().join(Episode).where( Episode.code == episode_code) context['jokes'] = Joke.select().order_by(Joke.primary_character) context['seasons'] = _all_seasons() try: context['next'] = Episode.get(number=context['episode'].number + 1) except Episode.DoesNotExist: context['next'] = None try: context['prev'] = Episode.get(number=context['episode'].number - 1) except Episode.DoesNotExist: context['prev'] = None return render_template('admin_episode_detail.html', **context) if request.method == 'PUT': e = Episode.get(code=episode_code) e.blurb = request.form.get('blurb', None) e.save() return '%s' % e.id
def _episode_detail(episode_code): context = make_context() context['episode'] = Episode.get(Episode.code == episode_code) context['jokes'] = {} context['joke_count'] = 0 for joke in EpisodeJoke.select().where(EpisodeJoke.episode == context['episode']): group = joke.joke.primary_character if group not in app_config.PRIMARY_CHARACTER_LIST: group = 'Miscellaneous' if group not in context['jokes']: context['jokes'][group] = [] context['jokes'][group].append(joke) context['joke_count'] += 1 context['seasons'] = _all_seasons() context['group_order'] = [g for g in app_config.PRIMARY_CHARACTER_LIST if g in context['jokes']] try: context['next'] = Episode.get(number=context['episode'].number + 1) except Episode.DoesNotExist: context['next'] = None try: context['prev'] = Episode.get(number=context['episode'].number - 1) except Episode.DoesNotExist: context['prev'] = None return render_template('episode_detail.html', **context)
def _admin_episodes(episode_code): from flask import request if request.method == 'GET': context = {} context['episode'] = Episode.get(code=episode_code) context['episodejokes'] = EpisodeJoke.select().join(Episode).where(Episode.code == episode_code) context['jokes'] = Joke.select().order_by(Joke.primary_character) context['seasons'] = _all_seasons() try: context['next'] = Episode.get(number=context['episode'].number + 1) except Episode.DoesNotExist: context['next'] = None try: context['prev'] = Episode.get(number=context['episode'].number - 1) except Episode.DoesNotExist: context['prev'] = None return render_template('admin_episode_detail.html', **context) if request.method == 'PUT': e = Episode.get(code=episode_code) e.blurb = request.form.get('blurb', None) e.save() return '%s' % e.id
def _admin_episodejokes(episode_code): from flask import request details = request.form.get('details', None) if request.method == 'POST': episode_joke_id = request.form.get('episode_joke_id', None) ej = EpisodeJoke.get(id=int(episode_joke_id)) ej.details = details ej.save() return '%s' % ej.id if request.method == 'PUT': joke_code = request.form.get('joke_code', None) joke_type = request.form.get('type', None) joke = Joke.get(code=int(joke_code)) episode = Episode.get(code=episode_code) code = 's%se%sj%s' % (str(episode.season).zfill(2), str( episode.episode).zfill(2), joke.code) context = {} context['ej'] = EpisodeJoke(joke=joke, episode=episode, joke_type=joke_type, details=details, code=code) context['ej'].save() return render_template('_episodejoke_form_row.html', **context)
def _admin_episodejokes(episode_code): from flask import request details = request.form.get('details', None) if request.method == 'POST': episode_joke_id = request.form.get('episode_joke_id', None) ej = EpisodeJoke.get(id=int(episode_joke_id)) ej.details = details ej.save() return '%s' % ej.id if request.method == 'PUT': joke_code = request.form.get('joke_code', None) joke_type = request.form.get('type', None) joke = Joke.get(code=int(joke_code)) episode = Episode.get(code=episode_code) code = 's%se%sj%s' % ( str(episode.season).zfill(2), str(episode.episode).zfill(2), joke.code ) context = {} context['ej'] = EpisodeJoke(joke=joke, episode=episode, joke_type=joke_type, details=details, code=code) context['ej'].save() return render_template('_episodejoke_form_row.html', **context)
def _parse_episodes(sheet): """ Parses episode sheet. Imports episodes. Will not update. """ episodes = [] seasons = [] ratings = [] names = [] indexes = [] zip_list = [seasons, episodes, ratings, None, names] counter = 0 for row in sheet: if counter != 3: zip_list[counter] += row.values() counter += 1 indexes = row.keys() output = [] for episode in zip(episodes, seasons, ratings, names, indexes): if episode[0] == 'EPISODE': pass else: episode_dict = {} episode_dict['episode'] = int(episode[0]) episode_dict['season'] = int(episode[1]) episode_dict['title'] = episode[3].decode('utf-8') episode_dict['rating'] = episode[2] episode_dict['code'] = 's%se%s' % (episode[1].zfill(2), episode[0].zfill(2)) episode_dict['number'] = int(episode[4]) output.append(episode_dict) for row in output: try: Episode.get(Episode.code == row['code']) except Episode.DoesNotExist: Episode.create(**row).save()
def _parse_episodes(sheet): """ Parses episode sheet. Imports episodes. Will not update. """ episodes = [] seasons = [] ratings = [] names = [] indexes = [] zip_list = [seasons, episodes, ratings, None, names] counter = 0 for row in sheet: if counter != 3: zip_list[counter] += row.values() counter += 1 indexes = row.keys() output = [] for episode in zip(episodes, seasons, ratings, names, indexes): if episode[0] == 'EPISODE': pass else: episode_dict = {} episode_dict['episode'] = int(episode[0]) episode_dict['season'] = int(episode[1]) episode_dict['title'] = episode[3].decode('utf-8') episode_dict['rating'] = episode[2] episode_dict['code'] = 's%se%s' % (episode[1].zfill(2), episode[0].zfill(2)) episode_dict['number'] = int(episode[4]) output.append(episode_dict) for row in output: try: Episode.get(Episode.code == row['code']) except Episode.DoesNotExist: Episode.create(**row).save()
def api(**kwargs): args = [] action = request.args.get('action', '') def scan_show(show): return show.check_download_status() def delete_show(show): show.delete_instance(recursive=True) def update_show(show): return utils.save_show(tvdb_id=show.tvdb_id) def episode_mark_skipped(episode): episode.status = models.SKIPPED episode.save() def episode_mark_wanted(episode): episode.status = models.WANTED episode.save() def episode_mark_downloaded(episode, location): episode.status = models.DOWNLOADED episode.location = location episode.save() actions = { 'scan': scan_show, 'delete': delete_show, 'update': update_show, 'episode_mark_wanted': episode_mark_wanted, 'episode_mark_skipped': episode_mark_skipped, 'episode_mark_downloaded': episode_mark_downloaded, 'background_search': utils.process_search_torrent, 'background_download': utils.process_download_torrent, 'background_update': utils.process_check_new_episodes, 'background_status': utils.process_check_downloaded } if not action in actions: msg = 'No action named {}'.format(action) return jsonify(stat='fail', msg=msg, result=[]) if 'show_id' in request.args: args.append(Show.get(id=request.args['show_id'])) if 'episode_id' in request.args: args.append(Episode.get(id=request.args['episode_id'])) if 'location' in request.args: args.append(request.args['location']) res = actions[action](*args) return jsonify(stat='ok', result=res)
def api(**kwargs): args = [] action = request.args.get('action', '') def scan_show(show): return show.check_download_status() def delete_show(show): show.delete_instance(recursive=True) def update_show(show): return utils.save_show(tvdb_id=show.tvdb_id) def episode_mark_skipped(episode): episode.status = models.SKIPPED episode.save() def episode_mark_wanted(episode): episode.status = models.WANTED episode.save() def episode_mark_downloaded(episode, location): episode.status = models.DOWNLOADED episode.location = location episode.save() actions = { 'scan': scan_show, 'delete': delete_show, 'update': update_show, 'episode_mark_wanted': episode_mark_wanted, 'episode_mark_skipped': episode_mark_skipped, 'episode_mark_downloaded': episode_mark_downloaded, 'background_search': utils.process_search_torrent, 'background_download': utils.process_download_torrent, 'background_update': utils.process_check_new_episodes, 'background_status': utils.process_check_downloaded } if not action in actions: msg = 'No action named {}'.format(action) return jsonify(stat='fail', msg=msg, result=[]) if 'show_id' in request.args: args.append(Show.get(id=request.args['show_id'])) if 'episode_id' in request.args: args.append(Episode.get(id=request.args['episode_id'])) if 'location' in request.args: args.append(request.args['location']) res = actions[action](*args) return jsonify(stat='ok', result=res)
def parse_tvdb_xml(xmlfile): FIELDS_LIST = [('blurb', 'Overview', 'str'), ('run_date', 'FirstAired', 'date'), ('season', 'Combined_season', 'int'), ('production_code', 'ProductionCode', 'str'), ('episode', 'EpisodeNumber', 'int'), ('season', 'Season', 'int')] soup = BeautifulSoup(xmlfile, "xml") for episode in soup.findAll('Episode'): season = int(episode.find('Combined_season').text) if season > 0: episode_dict = {} for model_field, xml_field, data_type in FIELDS_LIST: try: if episode.find(xml_field).text: episode_dict[model_field] = episode.find( xml_field).text if data_type == 'int': episode_dict[model_field] = int( episode_dict[model_field]) if data_type == 'date': d = parse(episode_dict[model_field]) episode_dict[model_field] = datetime.date( d.year, d.month, d.day) except AttributeError: pass if episode.find('filename').text: episode_dict[ 'tvdb_image'] = 'http://thetvdb.com/banners/_cache/%s' % episode.find( 'filename').text episode_dict['code'] = 's%se%s' % (str( episode_dict['season']).zfill(2), str( episode_dict['episode']).zfill(2)) try: Episode.get(code=episode_dict['code']) Episode.update(**episode_dict).where( Episode.code == episode_dict['code']).execute() except Episode.DoesNotExist: pass