from flask_restful import reqparse, Resource from db.manager import db_manager from utils import jsonify DEFAULT_ARGS = [ 'page', 'page_size', 'filter' ] class BaseApi(Resource): col_name = 'tmp' parser = reqparse.RequestParser() arguments = [] def __init__(self): super(BaseApi).__init__() self.parser.add_argument('page', type=int) self.parser.add_argument('page_size', type=int) self.parser.add_argument('filter', type=dict) def get(self, id=None): args = self.parser.parse_args() # get item by id if id is None: # filter cond = {} if args.get('filter') is not None: cond = args.filter # cond = json.loads(args.filter) # page number page = 1 if args.get('page') is not None: page = args.page # page = int(args.page) # page size page_size = 10 if args.get('page_size') is not None: page_size = args.page_size # page = int(args.page_size) # TODO: sort functionality # total count total_count = db_manager.count(col_name=self.col_name, cond=cond) # items items = db_manager.list(col_name=self.col_name, cond=cond, skip=(page - 1) * page_size, limit=page_size) return jsonify({ 'status': 'ok', 'total_count': total_count, 'page': page, 'page_size': page_size, 'items': items }) # list items else: return jsonify(db_manager.get(col_name=self.col_name, id=id)) def put(self): args = self.parser.parse_args() item = {} for k in args.keys(): if k not in DEFAULT_ARGS: item[k] = args.get(k) item = db_manager.save(col_name=self.col_name, item=item) return item def post(self, id=None): args = self.parser.parse_args() item = db_manager.get(col_name=self.col_name, id=id) if item is None: return { 'status': 'ok', 'code': 401, 'error': 'item not exists' } values = {} for k in args.keys(): if k not in DEFAULT_ARGS: values[k] = args.get(k) item = db_manager.update_one(col_name=self.col_name, id=id, values=values) return item def delete(self, id=None): pass