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
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
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
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
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
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)
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
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
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
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))
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
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)
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)