Example #1
0
    def get(self, show_id, ep_id, rel_id, session):
        """ Get episode release by show ID, episode ID and release ID """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            raise NotFoundError('release with ID %s not found' % rel_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))
        if not series.release_in_episode(ep_id, rel_id):
            raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id))

        rsp = jsonify(release.to_dict())
        rsp.headers.extend({
            'Series-ID': show_id,
            'Episode-ID': ep_id
        })
        return rsp
Example #2
0
    def delete(self, show_id, ep_id, session):
        """ Deletes all episodes releases by show ID and episode ID """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))

        args = release_delete_parser.parse_args()
        downloaded = args.get('downloaded') is True if args.get('downloaded') is not None else None
        release_items = []
        for release in episode.releases:
            if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded:
                release_items.append(release)

        for release in release_items:
            if args.get('forget'):
                fire_event('forget', release.title)
            series.delete_release_by_id(release.id)
        return success_response('successfully deleted all releases for episode %s from show %s' % (ep_id, show_id))
Example #3
0
    def put(self, show_id, ep_id, rel_id, session):
        """ Resets a downloaded release status """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410
        if not release.downloaded:
            return {'status': 'error',
                    'message': 'Release with id %s is not set as downloaded' % rel_id}, 500

        release.downloaded = False
        return {}
Example #4
0
    def delete(self, show_id, ep_id, rel_id, session):
        """ Delete episode release by show ID, episode ID and release ID """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            raise NotFoundError('release with ID %s not found' % rel_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' %
                             (ep_id, show_id))
        if not series.release_in_episode(ep_id, rel_id):
            raise BadRequest('release id %s does not belong to episode %s' %
                             (rel_id, ep_id))
        args = delete_parser.parse_args()
        if args.get('forget'):
            fire_event('forget', release.title)

        series.delete_release_by_id(rel_id)
        return success_response(
            'successfully deleted release %d from episode %d' %
            (rel_id, ep_id))
Example #5
0
    def get(self, show_id, ep_id, session):
        """ Get all episodes releases by show ID and episode ID """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        args = release_list_parser.parse_args()
        downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None
        release_items = []
        for release in episode.releases:
            if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded:
                release_items.append(get_release_details(release))

        return jsonify({
            'releases': release_items,
            'number_of_releases': len(release_items),
            'episode_id': ep_id,
            'show_id': show_id

        })
Example #6
0
    def delete(self, show_id, ep_id, rel_id, session):
        ''' Delete episode release by show ID, episode ID and release ID '''
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410
        args = delete_parser.parse_args()
        if args.get('delete_seen'):
            fire_event('forget', release.title)

        series.delete_release_by_id(rel_id)
        return {}
Example #7
0
    def delete(self, show_id, ep_id, session):
        """ Deletes all episodes releases by show ID and episode ID """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        args = release_delete_parser.parse_args()
        downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None
        release_items = []
        for release in episode.releases:
            if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded:
                release_items.append(release)
            if args.get('delete_seen'):
                fire_event('forget', release.title)

        for release in release_items:
            series.delete_release_by_id(release.id)
        return {}
Example #8
0
    def put(self, show_id, ep_id, rel_id, session):
        """ Resets a downloaded release status """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            raise NotFoundError('release with ID %s not found' % rel_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))
        if not series.release_in_episode(ep_id, rel_id):
            raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id))

        if not release.downloaded:
            raise BadRequest('release with id %s is not set as downloaded' % rel_id)
        release.downloaded = False

        rsp = jsonify(release.to_dict())
        rsp.headers.extend({
            'Series-ID': show_id,
            'Episode-ID': ep_id
        })
        return rsp
Example #9
0
 def get(self, show_id, ep_id, session):
     """ Get episode by show ID and episode ID"""
     try:
         show = series.show_by_id(show_id, session=session)
     except NoResultFound:
         return {
             'status': 'error',
             'message': 'Show with ID %s not found' % show_id
         }, 404
     try:
         episode = series.episode_by_id(ep_id, session)
     except NoResultFound:
         return {
             'status': 'error',
             'message': 'Episode with ID %s not found' % ep_id
         }, 414
     if not series.episode_in_show(show_id, ep_id):
         return {
             'status':
             'error',
             'message':
             'Episode with id %s does not belong to show %s' %
             (ep_id, show_id)
         }, 400
     return jsonify({
         'show': show.name,
         'show_id': show_id,
         'episode': get_episode_details(episode)
     })
Example #10
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        args = delete_parser.parse_args()
        if args.get('delete_seen'):
            for release in episode.releases:
                fire_event('forget', release.title)

        series.forget_episodes_by_id(show_id, ep_id)
        return {}
Example #11
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Episode with ID %s not found' % ep_id
            }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {
                'status':
                'error',
                'message':
                'Episode with id %s does not belong to show %s' %
                (ep_id, show_id)
            }, 400

        series.forget_episodes_by_id(show_id, ep_id)
        return {}
Example #12
0
    def get(self, show_id, ep_id, rel_id, session):
        ''' Get episode release by show ID, episode ID and release ID '''
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release id %s does not belong to episode %s' % (rel_id, ep_id)}, 410

        return jsonify({
            'show': show.name,
            'show_id': show_id,
            'episode_id': ep_id,
            'release': get_release_details(release)
        })
Example #13
0
    def put(self, show_id, ep_id, rel_id, session):
        """ Resets a downloaded release status """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410
        if not release.downloaded:
            return {'status': 'error',
                    'message': 'Release with id %s is not set as downloaded' % rel_id}, 500

        release.downloaded = False
        return {}
Example #14
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Episode with ID %s not found' % ep_id
            }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {
                'status':
                'error',
                'message':
                'Episode with id %s does not belong to show %s' %
                (ep_id, show_id)
            }, 400

        args = delete_parser.parse_args()
        if args.get('delete_seen'):
            for release in episode.releases:
                fire_event('forget', release.title)

        series.forget_episodes_by_id(show_id, ep_id)
        return {}
Example #15
0
    def put(self, show_id, ep_id, session):
        """ Marks all downloaded releases as not downloaded """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Episode with ID %s not found' % ep_id
            }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {
                'status':
                'error',
                'message':
                'Episode with id %s does not belong to show %s' %
                (ep_id, show_id)
            }, 400

        for release in episode.releases:
            if release.downloaded:
                release.downloaded = False

        return {}
Example #16
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        args = delete_parser.parse_args()
        try:
            series.remove_series_episode(show.name, episode.identifier, args.get('forget'))
        except ValueError as e:
            return {'status': 'error',
                    'message': e.args[0]
                    }, 404
        return {}
Example #17
0
    def delete(self, show_id, ep_id, rel_id, session):
        ''' Delete episode release by show ID, episode ID and release ID '''
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410

        series.delete_release_by_id(rel_id)
        return {}
Example #18
0
    def put(self, show_id, session):
        """ Set the initial episode of an existing show """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        data = request.json
        ep_id = data.get('episode_identifier')
        alt_names = data.get('alternate_names')
        if ep_id:
            try:
                series.set_series_begin(show, ep_id)
            except ValueError as e:
                return {'status': 'error',
                        'message': e.args[0]
                        }, 501
        if alt_names:
            try:
                series.set_alt_names(alt_names, show, session)
            except PluginError as e:
                return {'status': 'error',
                        'message': e.value
                        }, 502

        return jsonify(get_series_details(show))
Example #19
0
    def get(self, show_id, ep_id, session):
        """ Get all episodes releases by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        args = release_list_parser.parse_args()
        downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None
        release_items = []
        for release in episode.releases:
            if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded:
                release_items.append(get_release_details(release))

        return jsonify({
            'releases': release_items,
            'number_of_releases': len(release_items),
            'episode_id': ep_id,
            'show_id': show_id

        })
Example #20
0
    def get(self, show_id, ep_id, rel_id, session):
        ''' Get episode release by show ID, episode ID and release ID '''
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release id %s does not belong to episode %s' % (rel_id, ep_id)}, 410

        return jsonify({
            'show': show.name,
            'show_id': show_id,
            'episode_id': ep_id,
            'release': get_release_details(release)
        })
Example #21
0
    def delete(self, show_id, ep_id, session):
        """ Deletes all episodes releases by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        args = release_delete_parser.parse_args()
        downloaded = args.get('downloaded') == True if args.get('downloaded') is not None else None
        release_items = []
        for release in episode.releases:
            if downloaded and release.downloaded or downloaded is False and not release.downloaded or not downloaded:
                release_items.append(release)
            if args.get('delete_seen'):
                fire_event('forget', release.title)

        for release in release_items:
            series.delete_release_by_id(release.id)
        return {}
Example #22
0
    def delete(self, show_id, ep_id, rel_id, session):
        ''' Delete episode release by show ID, episode ID and release ID '''
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Release with ID %s not found' % rel_id
                    }, 424
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400
        if not series.release_in_episode(ep_id, rel_id):
            return {'status': 'error',
                    'message': 'Release with id %s does not belong to episode %s' % (rel_id, ep_id)}, 410
        args = delete_parser.parse_args()
        if args.get('delete_seen'):
            fire_event('forget', release.title)

        series.delete_release_by_id(rel_id)
        return {}
Example #23
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        args = delete_parser.parse_args()
        try:
            series.remove_series_episode(show.name, episode.identifier, args.get('forget'))
        except ValueError as e:
            return {'status': 'error',
                    'message': e.args[0]
                    }, 404
        return {}
Example #24
0
    def delete(self, show_id, ep_id, session):
        """ Deletes all episodes releases by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        args = release_list_parser.parse_args()
        downloaded = args['downloaded']
        release_items = []
        for release in episode.releases:
            if (downloaded == 'downloaded' and release.downloaded) or \
                    (downloaded == 'not_downloaded' and not release.downloaded) or \
                            downloaded == 'all':
                release_items.append(release)
        number_of_releases = len(release_items)
        for release in release_items:
            series.delete_release_by_id(release.id)
        return {}
Example #25
0
    def put(self, show_id, session):
        """ Set the initial episode of an existing show """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        data = request.json
        ep_id = data.get('episode_identifier')
        alt_names = data.get('alternate_names')
        if ep_id:
            try:
                series.set_series_begin(show, ep_id)
            except ValueError as e:
                return {'status': 'error',
                        'message': e.args[0]
                        }, 501
        if alt_names:
            try:
                series.set_alt_names(alt_names, show, session)
            except PluginError as e:
                return {'status': 'error',
                        'message': e.value
                        }, 502

        return jsonify(get_series_details(show))
Example #26
0
    def get(self, show_id, ep_id, session):
        """ Get episode by show ID and episode ID"""
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))

        rsp = jsonify(episode.to_dict())

        # Add Series-ID header
        rsp.headers.extend({'Series-ID': show_id})
        return rsp
Example #27
0
    def get(self, show_id, session):
        """ Get episodes by show ID """
        args = episode_parser.parse_args()

        # Pagination and sorting params
        page = args['page']
        per_page = args['per_page']
        sort_order = args['order']

        # Handle max size limit
        if per_page > 100:
            per_page = 100

        descending = sort_order == 'desc'

        start = per_page * (page - 1)
        stop = start + per_page

        kwargs = {
            'start': start,
            'stop': stop,
            'descending': descending,
            'session': session
        }

        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)

        total_items = series.show_episodes(show, count=True, session=session)

        if not total_items:
            return jsonify([])

        episodes = [episode.to_dict() for episode in series.show_episodes(show, **kwargs)]

        total_pages = int(ceil(total_items / float(per_page)))

        if total_pages < page and total_pages != 0:
            raise NotFoundError('page %s does not exist' % page)

        # Actual results in page
        actual_size = min(per_page, len(episodes))

        # Get pagination headers
        pagination = pagination_headers(total_pages, total_items, actual_size, request)

        # Created response
        rsp = jsonify(episodes)

        # Add link header to response
        rsp.headers.extend(pagination)

        # Add series ID header
        rsp.headers.extend({'Series-ID': show_id})
        return rsp
Example #28
0
    def get(self, show_id, session):
        """ Get episodes by show ID """
        args = episode_parser.parse_args()
        page = args['page']
        page_size = args['page_size']

        # Handle max size limit
        if page_size > 100:
            page_size = 100

        order = args['order']
        # In case the default 'desc' order was received
        if order == 'desc':
            order = True
        else:
            order = False

        start = page_size * (page - 1)
        stop = start + page_size

        kwargs = {
            'start': start,
            'stop': stop,
            'descending': order,
            'session': session
        }

        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404
        count = series.show_episodes(show, count=True, session=session)
        episodes = [
            get_episode_details(episode)
            for episode in series.show_episodes(show, **kwargs)
        ]
        pages = int(ceil(count / float(page_size)))

        if page > pages and pages != 0:
            return {
                'status': 'error',
                'message': 'page does not exist' % show_id
            }, 500

        return jsonify({
            'show': show.name,
            'show_id': show_id,
            'number_of_episodes': len(episodes),
            'episodes': episodes,
            'total_number_of_episodes': count,
            'page': page,
            'total_number_of_pages': pages
        })
Example #29
0
    def put(self, show_id, ep_id, session):
        """ Marks all downloaded releases as not downloaded """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))

        for release in episode.releases:
            if release.downloaded:
                release.downloaded = False

        return success_response(
            'successfully reset download status for all releases for episode %s from show %s' % (ep_id, show_id))
Example #30
0
 def delete(self, show_id, session):
     """ Deletes all episodes of a show"""
     try:
         show = series.show_by_id(show_id, session=session)
     except NoResultFound:
         raise NotFoundError('show with ID %s not found' % show_id)
     args = delete_parser.parse_args()
     forget = args.get('forget')
     for episode in show.episodes:
         series.remove_series_entity(show.name, episode.identifier, forget)
     return success_response('successfully removed all series %s episodes from DB' % show_id)
Example #31
0
    def get(self, show_id, session):
        """ Get show details by ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('Show with ID %s not found' % show_id)

        args = series_list_parser.parse_args()
        begin = args.get('begin')
        latest = args.get('latest')

        return jsonify(series_details(show, begin, latest))
Example #32
0
    def delete(self, show_id, session):
        """ Remove series from DB """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('Show with ID %s not found' % show_id)

        name = show.name
        args = delete_parser.parse_args()
        series.remove_series(name, forget=args.get('forget'))

        return success_response('successfully removed series %s from DB' % show_id)
Example #33
0
    def get(self, show_id, session):
        """ Get show details by ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('Show with ID %s not found' % show_id)

        args = series_list_parser.parse_args()
        begin = args.get('begin')
        latest = args.get('latest')

        return jsonify(series_details(show, begin, latest))
Example #34
0
    def get(self, show_id, session):
        """ Get show details by ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404

        show = get_series_details(show)

        return jsonify(show)
Example #35
0
    def get(self, show_id, session):
        """ Get show details by ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404

        show = get_series_details(show)

        return jsonify(show)
Example #36
0
    def put(self, show_id, ep_id, session):
        """ Marks all downloaded releases as not downloaded """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        for release in episode.releases:
            if release.downloaded:
                release.downloaded = False

        return {}
Example #37
0
    def get(self, show_id, session):
        """ Get episodes by show ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        episodes = [get_episode_details(episode) for episode in show.episodes]

        return jsonify({'show': show.name,
                        'show_id': show_id,
                        'number_of_episodes': len(episodes),
                        'episodes': episodes})
Example #38
0
    def get(self, show_id, session):
        """ Get episodes by show ID """
        args = episode_parser.parse_args()
        page = args['page']
        page_size = args['page_size']

        # Handle max size limit
        if page_size > 100:
            page_size = 100

        order = args['order']
        # In case the default 'desc' order was received
        if order == 'desc':
            order = True
        else:
            order = False

        start = page_size * (page - 1)
        stop = start + page_size

        kwargs = {
            'start': start,
            'stop': stop,
            'descending': order,
            'session': session
        }

        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        count = series.show_episodes(show, count=True, session=session)
        episodes = [get_episode_details(episode) for episode in series.show_episodes(show, **kwargs)]
        pages = int(ceil(count / float(page_size)))

        if page > pages and pages != 0:
            return {'status': 'error',
                    'message': 'page does not exist' % show_id
                    }, 500

        return jsonify({'show': show.name,
                        'show_id': show_id,
                        'number_of_episodes': len(episodes),
                        'episodes': episodes,
                        'total_number_of_episodes': count,
                        'page': page,
                        'total_number_of_pages': pages})
Example #39
0
    def delete(self, show_id, ep_id, rel_id, session):
        """ Delete episode release by show ID, episode ID and release ID """
        try:
            series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        try:
            release = series.release_by_id(rel_id, session)
        except NoResultFound:
            raise NotFoundError('release with ID %s not found' % rel_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))
        if not series.release_in_episode(ep_id, rel_id):
            raise BadRequest('release id %s does not belong to episode %s' % (rel_id, ep_id))
        args = delete_parser.parse_args()
        if args.get('forget'):
            fire_event('forget', release.title)

        series.delete_release_by_id(rel_id)
        return success_response('successfully deleted release %d from episode %d' % (rel_id, ep_id))
Example #40
0
    def delete(self, show_id, session):
        """ Forgets all episodes of a show"""
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404

        for episode in show.episodes:
            try:
                series.forget_episodes_by_id(show.id, episode.id)
            except ValueError as e:
                return {'status': 'error', 'message': e.args[0]}, 500
        return {}
Example #41
0
 def delete(self, show_id, session):
     """ Deletes all episodes of a show"""
     try:
         show = series.show_by_id(show_id, session=session)
     except NoResultFound:
         return {
             'status': 'error',
             'message': 'Show with ID %s not found' % show_id
         }, 404
     name = show.name
     args = delete_parser.parse_args()
     try:
         series.remove_series(name, forget=args.get('forget'))
     except ValueError as e:
         return {'status': 'error', 'message': e.args[0]}, 404
     return {}
Example #42
0
    def delete(self, show_id, session):
        """ Forgets all episodes of a show"""
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404

        for episode in show.episodes:
            try:
                series.forget_episodes_by_id(show.id, episode.id)
            except ValueError as e:
                return {'status': 'error',
                        'message': e.args[0]
                        }, 500
        return {}
Example #43
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            raise NotFoundError('show with ID %s not found' % show_id)
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            raise NotFoundError('episode with ID %s not found' % ep_id)
        if not series.episode_in_show(show_id, ep_id):
            raise BadRequest('episode with id %s does not belong to show %s' % (ep_id, show_id))

        args = delete_parser.parse_args()
        series.remove_series_entity(show.name, episode.identifier, args.get('forget'))

        return success_response('successfully removed episode %s from show %s' % (ep_id, show_id))
Example #44
0
 def delete(self, show_id, session):
     """ Deletes all episodes of a show"""
     try:
         show = series.show_by_id(show_id, session=session)
     except NoResultFound:
         return {'status': 'error',
                 'message': 'Show with ID %s not found' % show_id
                 }, 404
     name = show.name
     args = delete_parser.parse_args()
     try:
         series.remove_series(name, forget=args.get('forget'))
     except ValueError as e:
         return {'status': 'error',
                 'message': e.args[0]
                 }, 404
     return {}
Example #45
0
    def get(self, show_id, session):
        """ Get episodes by show ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404
        episodes = [get_episode_details(episode) for episode in show.episodes]

        return jsonify({
            'show': show.name,
            'show_id': show_id,
            'number_of_episodes': len(episodes),
            'episodes': episodes
        })
Example #46
0
    def delete(self, show_id, session):
        """ Remove series from DB """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404

        name = show.name

        try:
            series.forget_series(name)
        except ValueError as e:
            return {'status': 'error', 'message': e.args[0]}, 400
        return {}
Example #47
0
    def delete(self, show_id, session):
        """ Remove series from DB """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404

        name = show.name

        try:
            series.forget_series(name)
        except ValueError as e:
            return {'status': 'error',
                    'message': e.args[0]
                    }, 400
        return {}
Example #48
0
 def put(self, show_id, session):
     """ Set the initial episode of an existing show """
     try:
         show = series.show_by_id(show_id, session=session)
     except NoResultFound:
         raise NotFoundError('Show with ID %s not found' % show_id)
     data = request.json
     ep_id = data.get('begin_episode')
     alt_names = data.get('alternate_names')
     if ep_id:
         series.set_series_begin(show, ep_id)
     if alt_names:
         try:
             series.set_alt_names(alt_names, show, session)
         except PluginError as e:
             # Alternate name already exist for a different show
             raise Conflict(e.value)
     return jsonify(series_details(show, begin=ep_id is not None))
Example #49
0
 def put(self, show_id, session):
     """ Set the initial episode of an existing show """
     try:
         show = series.show_by_id(show_id, session=session)
     except NoResultFound:
         raise NotFoundError('Show with ID %s not found' % show_id)
     data = request.json
     ep_id = data.get('begin_episode')
     alt_names = data.get('alternate_names')
     if ep_id:
         series.set_series_begin(show, ep_id)
     if alt_names:
         try:
             series.set_alt_names(alt_names, show, session)
         except PluginError as e:
             # Alternate name already exist for a different show
             raise Conflict(e.value)
     return jsonify(series_details(show, begin=ep_id is not None))
Example #50
0
    def delete(self, show_id, ep_id, session):
        """ Forgets episode by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Show with ID %s not found' % show_id
                    }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {'status': 'error',
                    'message': 'Episode with ID %s not found' % ep_id
                    }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {'status': 'error',
                    'message': 'Episode with id %s does not belong to show %s' % (ep_id, show_id)}, 400

        series.forget_episodes_by_id(show_id, ep_id)
        return {}
Example #51
0
    def delete(self, show_id, ep_id, session):
        """ Deletes all episodes releases by show ID and episode ID """
        try:
            show = series.show_by_id(show_id, session=session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Show with ID %s not found' % show_id
            }, 404
        try:
            episode = series.episode_by_id(ep_id, session)
        except NoResultFound:
            return {
                'status': 'error',
                'message': 'Episode with ID %s not found' % ep_id
            }, 414
        if not series.episode_in_show(show_id, ep_id):
            return {
                'status':
                'error',
                'message':
                'Episode with id %s does not belong to show %s' %
                (ep_id, show_id)
            }, 400

        args = release_list_parser.parse_args()
        downloaded = args['downloaded']
        release_items = []
        for release in episode.releases:
            if (downloaded == 'downloaded' and release.downloaded) or \
                    (downloaded == 'not_downloaded' and not release.downloaded) or \
                            downloaded == 'all':
                release_items.append(release)
        number_of_releases = len(release_items)
        for release in release_items:
            series.delete_release_by_id(release.id)
        return {}