Files
crawlab/routes/base.py
2019-02-16 22:56:58 +08:00

115 lines
3.2 KiB
Python

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)
for arg, type in self.arguments:
self.parser.add_argument(arg, type=type)
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)
# TODO: getting status for node
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 update(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'
}, 401
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 post(self, id=None, action=None):
if action is None:
return self.update(id)
if not hasattr(self, action):
return {
'status': 'ok',
'code': 400,
'error': 'action "%s" invalid' % action
}, 400
return getattr(self, action)(id)
def delete(self, id=None):
db_manager.remove_one(col_name=self.col_name, id=id)