def get_categories(): """``GET`` |API_URL_BASE|/categories/ Get a list of categories. :param order: **Query** supported key: *create_time(default)*, *article_count*, *name* :param boolean desc: **Query** decrease order, default: false Response JSON: .. code-block:: javascript // success { $errors: null, categories: [ { id: string, name: string, article_count: integer } ] } Permission: ``READ_CATEGORY`` """ supported_key = { 'create_time': Category.create_time, 'article_count': fn.Count(Article.id), 'name': Category.name } default_key = supported_key['create_time'] order_key = supported_key.get(request.args.get('order'), default_key) if request.args.get('desc', 'false') == 'true': order_key = order_key.desc() raw_categories = Category.query().order_by(order_key) categories = [category.to_dict() for category in raw_categories] return None, {'categories': categories}
def delete_category(id): """``DELETE`` |API_URL_BASE|/cate/:category_id Delete a category. :param id: category id Response JSON: .. code-block:: javascript // success {$errors: null} // failed { $errors: { not_empty: 'this category is not empty.', id: 'this category does not exist.' } } Permission: ``EDIT_CATEGORY`` """ try: this_category = Category.query().where(Category.id == id).get() except Category.DoesNotExist: return {'id': '该分类 %s 不存在' % id} if this_category.count > 0: return {'not_empty': '该分类下还有 %d 篇文章,请清空后再删除' % this_category.count} this_category.delete_instance() signals.event_emitted.send(current_app._get_current_object(), type='Category: Delete', description='category(%s) has been deleted.' % id)