示例#1
0
    def post(self, session):
        """ Create a new show and set its first accepted episode and/or alternate names """
        data = request.json
        series_name = data.get('name')

        normalized_name = series.normalize_series_name(series_name)
        matches = series.shows_by_exact_name(normalized_name, session=session)
        if matches:
            raise Conflict('Show `%s` already exist in DB' % series_name)
        show = series.Series()
        show.name = series_name
        session.add(show)

        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)
        session.commit()
        rsp = jsonify(series_details(show, begin=ep_id is not None))
        rsp.status_code = 201
        return rsp
示例#2
0
 def post(self, list_id, session=None):
     """ Add movies to list by ID """
     try:
         ml.get_list_by_id(list_id=list_id, session=session)
     except NoResultFound:
         raise NotFoundError('list_id %d does not exist' % list_id)
     data = request.json
     movie_identifiers = data.get('movie_identifiers', [])
     # Validates ID type based on allowed ID
     for id_name in movie_identifiers:
         if list(id_name)[0] not in MovieListBase().supported_ids:
             raise BadRequest('movie identifier %s is not allowed' %
                              id_name)
     title, year = data['movie_name'], data.get('movie_year')
     movie = ml.get_movie_by_title_and_year(list_id=list_id,
                                            title=title,
                                            year=year,
                                            session=session)
     if movie:
         raise Conflict('movie with name "%s" already exist in list %d' %
                        (title, list_id))
     movie = ml.MovieListMovie()
     movie.title = title
     movie.year = year
     movie.ids = ml.get_db_movie_identifiers(
         identifier_list=movie_identifiers, session=session)
     movie.list_id = list_id
     session.add(movie)
     session.commit()
     response = jsonify(movie.to_dict())
     response.status_code = 201
     return response
示例#3
0
    def post(self, session=None):
        """ Add new task """
        data = request.json

        task_name = data['name']

        if task_name in self.manager.user_config.get('tasks', {}):
            raise Conflict('task already exists')

        if 'tasks' not in self.manager.user_config:
            self.manager.user_config['tasks'] = {}
        if 'tasks' not in self.manager.config:
            self.manager.config['tasks'] = {}

        task_schema_processed = copy.deepcopy(data)
        errors = process_config(
            task_schema_processed, schema=task_input_schema.__schema__, set_defaults=True
        )

        if errors:
            raise APIError('problem loading config, raise a BUG as this should not happen!')

        self.manager.user_config['tasks'][task_name] = data['config']
        self.manager.config['tasks'][task_name] = task_schema_processed['config']

        self.manager.save_config()
        self.manager.config_changed()
        rsp = jsonify({'name': task_name, 'config': self.manager.user_config['tasks'][task_name]})
        rsp.status_code = 201
        return rsp
示例#4
0
    def post(self, session=None):
        """ Add new schedule """
        data = request.json

        schedules = self.manager.config.get('schedules', [])

        # Checks for boolean config
        if schedules is True:
            schedules = DEFAULT_SCHEDULES
        elif schedules is False:
            raise Conflict('Schedules are disables in config')

        self.manager.config['schedules'] = schedules

        self.manager.config['schedules'].append(data)
        schedules = self.manager.config['schedules']
        new_schedule, _ = _schedule_by_id(id(data), schedules)

        if not new_schedule:
            raise APIError('schedule went missing after add')

        self.manager.save_config()
        self.manager.config_changed()
        resp = jsonify(new_schedule)
        resp.status_code = 201
        return resp
示例#5
0
    def put(self, schedule_id, session=None):
        """ Update schedule """
        new_schedule = request.json

        schedules = self.manager.config.get('schedules', [])

        # Checks for boolean config
        if schedules is True:
            self.manager.config['schedules'] = DEFAULT_SCHEDULES
        elif schedules is False:
            raise Conflict('Schedules are disables in config')

        schedule, idx = _schedule_by_id(schedule_id,
                                        self.manager.config['schedules'])
        if not schedule:
            raise NotFoundError('schedule %d not found' % schedule_id)

        new_schedule['id'] = id(schedule)
        self.manager.config['schedules'][idx] = new_schedule

        self.manager.save_config()
        self.manager.config_changed()
        resp = jsonify(new_schedule)
        resp.status_code = 201
        return resp
示例#6
0
文件: api.py 项目: ksurl/Flexget
    def delete(self, schedule_id, session=None):
        """Delete a schedule"""
        schedules = self.manager.config.get('schedules')

        # Checks for boolean config
        if schedules is True:
            raise Conflict('Schedules usage is set to default, cannot delete')
        elif schedules is False:
            raise Conflict('Schedules are disables in config')

        for i in range(len(self.manager.config.get('schedules', []))):
            if id(self.manager.config['schedules'][i]) == schedule_id:
                del self.manager.config['schedules'][i]
                self.manager.save_config()
                self.manager.config_changed()
                return success_response('schedule %d successfully deleted' % schedule_id)

        raise NotFoundError('schedule %d not found' % schedule_id)
示例#7
0
 def post(self, session=None):
     """ Create a new list """
     data = request.json
     name = data.get('name')
     try:
         movie_list = ml.get_list_by_exact_name(name=name, session=session)
     except NoResultFound:
         movie_list = None
     if movie_list:
         raise Conflict('list with name \'%s\' already exists' % name)
     movie_list = ml.MovieListList(name=name)
     session.add(movie_list)
     session.commit()
     resp = jsonify(movie_list.to_dict())
     resp.status_code = 201
     return resp
示例#8
0
 def post(self, session=None):
     """Create a new entry list"""
     data = request.json
     name = data.get('name')
     new_list = False
     try:
         db.get_list_by_exact_name(name=name, session=session)
     except NoResultFound:
         new_list = True
     if not new_list:
         raise Conflict('list with name \'%s\' already exists' % name)
     entry_list = db.EntryListList(name=name)
     session.add(entry_list)
     session.commit()
     resp = jsonify(entry_list.to_dict())
     resp.status_code = 201
     return resp
示例#9
0
文件: api.py 项目: pospqsjac/Flexget
 def post(self, list_id, session=None):
     """ Create a new entry object"""
     try:
         db.get_list_by_id(list_id=list_id, session=session)
     except NoResultFound:
         raise NotFoundError('list_id %d does not exist' % list_id)
     data = request.json
     title = data.get('title')
     entry_object = db.get_entry_by_title(list_id=list_id, title=title, session=session)
     if entry_object:
         raise Conflict('entry with title \'%s\' already exists' % title)
     entry_object = db.EntryListEntry(entry=data, entry_list_id=list_id)
     session.add(entry_object)
     session.commit()
     response = jsonify(entry_object.to_dict())
     response.status_code = 201
     return response
示例#10
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))
示例#11
0
    def post(self, session=None):
        """ Create a new pending list """
        data = request.json
        name = data.get('name')

        try:
            get_list_by_exact_name(name=name, session=session)
        except NoResultFound:
            pass
        else:
            raise Conflict('list with name \'%s\' already exists' % name)

        pending_list = PendingListList()
        pending_list.name = name
        session.add(pending_list)
        session.commit()
        resp = jsonify(pending_list.to_dict())
        resp.status_code = 201
        return resp
示例#12
0
    def get(self, session=None):
        """ List schedules """
        schedule_list = []

        schedules = self.manager.config.get('schedules', [])

        # Checks for boolean config
        if schedules is True:
            schedules = DEFAULT_SCHEDULES
        elif schedules is False:
            raise Conflict('Schedules are disables in config')

        for schedule in schedules:
            # Copy the object so we don't apply id to the config
            schedule_id = id(schedule)
            schedule = schedule.copy()
            schedule['id'] = schedule_id
            schedule_list.append(schedule)

        return jsonify(schedule_list)
示例#13
0
    def get(self, schedule_id, session=None):
        """ Get schedule details """
        schedules = self.manager.config.get('schedules', [])

        # Checks for boolean config
        if schedules is True:
            schedules = DEFAULT_SCHEDULES
        elif schedules is False:
            raise Conflict('Schedules are disables in config')

        schedule, _ = _schedule_by_id(schedule_id, schedules)
        if schedule is None:
            raise NotFoundError('schedule %d not found' % schedule_id)

        job_id = scheduler_job_map.get(schedule_id)
        if job_id:
            job = scheduler.get_job(job_id)
            if job:
                schedule['next_run_time'] = job.next_run_time
        return jsonify(schedule)