예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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)
예제 #5
0
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
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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()
예제 #9
0
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()
예제 #10
0
파일: server.py 프로젝트: tax/snor
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)
예제 #11
0
파일: server.py 프로젝트: tax/snor
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)
예제 #12
0
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