def get(self, list_id, session=None): """ Get pending list by ID """ try: list = get_list_by_id(list_id=list_id, session=session) except NoResultFound: raise NotFoundError('list_id %d does not exist' % list_id) return jsonify(list.to_dict())
def get(self, list_id, session=None): """ Get entries by list ID """ try: list = get_list_by_id(list_id=list_id, session=session) except NoResultFound: raise NotFoundError('list_id %d does not exist' % list_id) args = entries_parser.parse_args() # Pagination and sorting params page = args['page'] per_page = args['per_page'] sort_by = args['sort_by'] sort_order = args['order'] # Handle max size limit if per_page > 100: per_page = 100 start = per_page * (page - 1) stop = start + per_page descending = sort_order == 'desc' kwargs = { 'start': start, 'stop': stop, 'list_id': list_id, 'order_by': sort_by, 'descending': descending, 'session': session } total_items = list.entries.count() if not total_items: return jsonify([]) log.debug('pending lists entries count is %d', total_items) entries = [entry.to_dict() for entry in get_entries_by_list_id(**kwargs)] # Total number of pages total_pages = int(ceil(total_items / float(per_page))) if page > total_pages: raise NotFoundError('page %s does not exist' % page) # Actual results in page actual_size = min(len(entries), per_page) # Get pagination headers pagination = pagination_headers(total_pages, total_items, actual_size, request) # Create response rsp = jsonify(entries) # Add link header to response rsp.headers.extend(pagination) return rsp
def post(self, list_id, session=None): """ Create a new entry object""" try: 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 = 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 = PendingListEntry(entry=data, pending_list_id=list_id) if data.get('approved'): entry_object.approved = data['approved'] session.add(entry_object) session.commit() response = jsonify(entry_object.to_dict()) response.status_code = 201 return response
def get(self, list_id, session=None): """ Get entries by list ID """ try: list = get_list_by_id(list_id=list_id, session=session) except NoResultFound: raise NotFoundError('list_id %d does not exist' % list_id) args = entries_parser.parse_args() # Pagination and sorting params page = args['page'] per_page = args['per_page'] sort_by = args['sort_by'] sort_order = args['order'] # Handle max size limit if per_page > 100: per_page = 100 start = per_page * (page - 1) stop = start + per_page descending = sort_order == 'desc' kwargs = { 'start': start, 'stop': stop, 'list_id': list_id, 'order_by': sort_by, 'descending': descending, 'session': session } total_items = list.entries.count() if not total_items: return jsonify([]) log.debug('pending lists entries count is %d', total_items) entries = [ entry.to_dict() for entry in get_entries_by_list_id(**kwargs) ] # Total number of pages total_pages = int(ceil(total_items / float(per_page))) if page > total_pages: raise NotFoundError('page %s does not exist' % page) # Actual results in page actual_size = min(len(entries), per_page) # Get pagination headers pagination = pagination_headers(total_pages, total_items, actual_size, request) # Create response rsp = jsonify(entries) # Add link header to response rsp.headers.extend(pagination) return rsp