James Iter 9 лет назад
Родитель
Сommit
38a751197d
2 измененных файлов с 182 добавлено и 147 удалено
  1. 175 0
      api/base.py
  2. 7 147
      api/disk.py

+ 175 - 0
api/base.py

@@ -0,0 +1,175 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+
+from flask import request
+import json
+import jimit as ji
+
+from models import Rules
+
+
+__author__ = 'James Iter'
+__date__ = '2017/5/28'
+__contact__ = 'james.iter.cn@gmail.com'
+__copyright__ = '(c) 2017 by James Iter.'
+
+
+class Base(object):
+
+    def __init__(self, the_class=None, the_blueprint=None, the_blueprints=None):
+        self.the_class = the_class
+        self.the_blueprint = the_blueprint
+        self.the_blueprints = the_blueprints
+
+    def get_by_filter(self):
+        page = str(request.args.get('page', 1))
+        page_size = str(request.args.get('page_size', 50))
+
+        args_rules = [
+            Rules.PAGE.value,
+            Rules.PAGE_SIZE.value
+        ]
+
+        try:
+            ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
+        except ji.PreviewingError, e:
+            return json.loads(e.message)
+
+        page = int(page)
+        page_size = int(page_size)
+
+        # 把page和page_size换算成offset和limit
+        offset = (page - 1) * page_size
+        # offset, limit将覆盖page及page_size的影响
+        offset = str(request.args.get('offset', offset))
+        limit = str(request.args.get('limit', page_size))
+
+        order_by = request.args.get('order_by', 'id')
+        order = request.args.get('order', 'asc')
+        filter_str = request.args.get('filter', '')
+
+        args_rules = [
+            Rules.OFFSET.value,
+            Rules.LIMIT.value,
+            Rules.ORDER_BY.value,
+            Rules.ORDER.value
+        ]
+
+        try:
+            ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order})
+            offset = int(offset)
+            limit = int(limit)
+            ret = dict()
+            ret['state'] = ji.Common.exchange_state(20000)
+            ret['data'] = list()
+            ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size,
+                             'next': '', 'prev': '', 'first': '', 'last': ''}
+
+            ret['data'], ret['paging']['total'] = self.the_class.get_by_filter(
+                offset=offset, limit=limit,order_by=order_by, order=order, filter_str=filter_str)
+
+            host_url = request.host_url.rstrip('/')
+            other_str = '&filter=' + filter_str + '&order=' + order + '&order_by=' + order_by
+            last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
+
+            if page <= 1:
+                ret['paging']['prev'] = host_url + self.the_blueprints.url_prefix + '?page=1&page_size=' + \
+                                        page_size.__str__() + other_str
+            else:
+                ret['paging']['prev'] = host_url + self.the_blueprints.url_prefix + '?page=' + str(page - 1) + \
+                                        '&page_size=' + page_size.__str__() + other_str
+
+            if page >= last_pagination:
+                ret['paging']['next'] = host_url + self.the_blueprints.url_prefix + '?page=' + \
+                                        last_pagination.__str__() + '&page_size=' + page_size.__str__() + other_str
+            else:
+                ret['paging']['next'] = host_url + self.the_blueprints.url_prefix + '?page=' + str(page + 1) + \
+                                        '&page_size=' + page_size.__str__() + other_str
+
+            ret['paging']['first'] = host_url + self.the_blueprints.url_prefix + '?page=1&page_size=' + \
+                page_size.__str__() + other_str
+            ret['paging']['last'] = \
+                host_url + self.the_blueprints.url_prefix + '?page=' + last_pagination.__str__() + '&page_size=' + \
+                page_size.__str__() + other_str
+
+            return ret
+        except ji.PreviewingError, e:
+            return json.loads(e.message)
+
+    def content_search(self):
+        page = str(request.args.get('page', 1))
+        page_size = str(request.args.get('page_size', 50))
+
+        args_rules = [
+            Rules.PAGE.value,
+            Rules.PAGE_SIZE.value
+        ]
+
+        try:
+            ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
+        except ji.PreviewingError, e:
+            return json.loads(e.message)
+
+        page = int(page)
+        page_size = int(page_size)
+
+        # 把page和page_size换算成offset和limit
+        offset = (page - 1) * page_size
+        # offset, limit将覆盖page及page_size的影响
+        offset = str(request.args.get('offset', offset))
+        limit = str(request.args.get('limit', page_size))
+
+        order_by = request.args.get('order_by', 'id')
+        order = request.args.get('order', 'asc')
+        keyword = request.args.get('keyword', '')
+
+        args_rules = [
+            Rules.OFFSET.value,
+            Rules.LIMIT.value,
+            Rules.ORDER_BY.value,
+            Rules.ORDER.value,
+            Rules.KEYWORD.value
+        ]
+
+        try:
+            ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order,
+                                             'keyword': keyword})
+            offset = int(offset)
+            limit = int(limit)
+            ret = dict()
+            ret['state'] = ji.Common.exchange_state(20000)
+            ret['data'] = list()
+            ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size}
+
+            ret['data'], ret['paging']['total'] = self.the_class.content_search(
+                offset=offset, limit=limit, order_by=order_by, order=order, keyword=keyword)
+
+            host_url = request.host_url.rstrip('/')
+            other_str = '&keyword=' + keyword + '&order=' + order + '&order_by=' + order_by
+            last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
+
+            if page <= 1:
+                ret['paging']['prev'] = host_url + self.the_blueprints.url_prefix + '/_search?page=1&page_size=' + \
+                                        page_size.__str__() + other_str
+            else:
+                ret['paging']['prev'] = host_url + self.the_blueprints.url_prefix + '/_search?page=' + str(page - 1) + \
+                                        '&page_size=' + page_size.__str__() + other_str
+
+            if page >= last_pagination:
+                ret['paging'][
+                    'next'] = host_url + self.the_blueprints.url_prefix + '/_search?page=' + last_pagination.__str__() + \
+                              '&page_size=' + page_size.__str__() + other_str
+            else:
+                ret['paging']['next'] = host_url + self.the_blueprints.url_prefix + '/_search?page=' + str(page + 1) + \
+                                        '&page_size=' + page_size.__str__() + other_str
+
+            ret['paging']['first'] = host_url + self.the_blueprints.url_prefix + '/_search?page=1&page_size=' + \
+                page_size.__str__() + other_str
+            ret['paging']['last'] = \
+                host_url + self.the_blueprints.url_prefix + '/_search?page=' + last_pagination.__str__() + \
+                '&page_size=' + page_size.__str__() + other_str
+
+            return ret
+        except ji.PreviewingError, e:
+            return json.loads(e.message)

+ 7 - 147
api/disk.py

@@ -15,6 +15,8 @@ from models import Disk
 from models import Rules
 from models import Utils
 
+from base import Base
+
 
 __author__ = 'James Iter'
 __date__ = '2017/4/24'
@@ -35,6 +37,9 @@ blueprints = Blueprint(
 )
 
 
+disk_base = Base(the_class=Disk, the_blueprint=blueprint, the_blueprints=blueprints)
+
+
 @Utils.dumps2response
 def r_create():
 
@@ -195,157 +200,12 @@ def r_get(uuid):
 
 @Utils.dumps2response
 def r_get_by_filter():
-    page = str(request.args.get('page', 1))
-    page_size = str(request.args.get('page_size', 50))
-
-    args_rules = [
-        Rules.PAGE.value,
-        Rules.PAGE_SIZE.value
-    ]
-
-    try:
-        ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
-    except ji.PreviewingError, e:
-        return json.loads(e.message)
-
-    page = int(page)
-    page_size = int(page_size)
-
-    # 把page和page_size换算成offset和limit
-    offset = (page - 1) * page_size
-    # offset, limit将覆盖page及page_size的影响
-    offset = str(request.args.get('offset', offset))
-    limit = str(request.args.get('limit', page_size))
-
-    order_by = request.args.get('order_by', 'id')
-    order = request.args.get('order', 'asc')
-    filter_str = request.args.get('filter', '')
-
-    args_rules = [
-        Rules.OFFSET.value,
-        Rules.LIMIT.value,
-        Rules.ORDER_BY.value,
-        Rules.ORDER.value
-    ]
-
-    try:
-        ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order})
-        offset = int(offset)
-        limit = int(limit)
-        ret = dict()
-        ret['state'] = ji.Common.exchange_state(20000)
-        ret['data'] = list()
-        ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size,
-                         'next': '', 'prev': '', 'first': '', 'last': ''}
-
-        ret['data'], ret['paging']['total'] = Disk.get_by_filter(offset=offset, limit=limit, order_by=order_by,
-                                                                 order=order, filter_str=filter_str)
-
-        host_url = request.host_url.rstrip('/')
-        other_str = '&filter=' + filter_str + '&order=' + order + '&order_by=' + order_by
-        last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
-
-        if page <= 1:
-            ret['paging']['prev'] = host_url + blueprints.url_prefix + '?page=1&page_size=' + page_size.__str__() + \
-                                    other_str
-        else:
-            ret['paging']['prev'] = host_url + blueprints.url_prefix + '?page=' + str(page-1) + '&page_size=' + \
-                                    page_size.__str__() + other_str
-
-        if page >= last_pagination:
-            ret['paging']['next'] = host_url + blueprints.url_prefix + '?page=' + last_pagination.__str__() + \
-                                    '&page_size=' + page_size.__str__() + other_str
-        else:
-            ret['paging']['next'] = host_url + blueprints.url_prefix + '?page=' + str(page+1) + '&page_size=' + \
-                                    page_size.__str__() + other_str
-
-        ret['paging']['first'] = host_url + blueprints.url_prefix + '?page=1&page_size=' + \
-            page_size.__str__() + other_str
-        ret['paging']['last'] = \
-            host_url + blueprints.url_prefix + '?page=' + last_pagination.__str__() + '&page_size=' + \
-            page_size.__str__() + other_str
-
-        return ret
-    except ji.PreviewingError, e:
-        return json.loads(e.message)
+    return disk_base.get_by_filter()
 
 
 @Utils.dumps2response
 def r_content_search():
-    page = str(request.args.get('page', 1))
-    page_size = str(request.args.get('page_size', 50))
-
-    args_rules = [
-        Rules.PAGE.value,
-        Rules.PAGE_SIZE.value
-    ]
-
-    try:
-        ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
-    except ji.PreviewingError, e:
-        return json.loads(e.message)
-
-    page = int(page)
-    page_size = int(page_size)
-
-    # 把page和page_size换算成offset和limit
-    offset = (page - 1) * page_size
-    # offset, limit将覆盖page及page_size的影响
-    offset = str(request.args.get('offset', offset))
-    limit = str(request.args.get('limit', page_size))
-
-    order_by = request.args.get('order_by', 'id')
-    order = request.args.get('order', 'asc')
-    keyword = request.args.get('keyword', '')
-
-    args_rules = [
-        Rules.OFFSET.value,
-        Rules.LIMIT.value,
-        Rules.ORDER_BY.value,
-        Rules.ORDER.value,
-        Rules.KEYWORD.value
-    ]
-
-    try:
-        ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order,
-                                         'keyword': keyword})
-        offset = int(offset)
-        limit = int(limit)
-        ret = dict()
-        ret['state'] = ji.Common.exchange_state(20000)
-        ret['data'] = list()
-        ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size}
-
-        ret['data'], ret['paging']['total'] = Disk.content_search(offset=offset, limit=limit, order_by=order_by,
-                                                                  order=order, keyword=keyword)
-
-        host_url = request.host_url.rstrip('/')
-        other_str = '&keyword=' + keyword + '&order=' + order + '&order_by=' + order_by
-        last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
-
-        if page <= 1:
-            ret['paging']['prev'] = host_url + blueprints.url_prefix + '/_search?page=1&page_size=' + \
-                                    page_size.__str__() + other_str
-        else:
-            ret['paging']['prev'] = host_url + blueprints.url_prefix + '/_search?page=' + str(page-1) + \
-                                    '&page_size=' + page_size.__str__() + other_str
-
-        if page >= last_pagination:
-            ret['paging']['next'] = host_url + blueprints.url_prefix + '/_search?page=' + last_pagination.__str__() + \
-                                    '&page_size=' + page_size.__str__() + other_str
-        else:
-            ret['paging']['next'] = host_url + blueprints.url_prefix + '/_search?page=' + str(page+1) + \
-                                    '&page_size=' + page_size.__str__() + other_str
-
-        ret['paging']['first'] = host_url + blueprints.url_prefix + '/_search?page=1&page_size=' + \
-            page_size.__str__() + other_str
-        ret['paging']['last'] = \
-            host_url + blueprints.url_prefix + '/_search?page=' + last_pagination.__str__() + '&page_size=' + \
-            page_size.__str__() + other_str
-
-        return ret
-    except ji.PreviewingError, e:
-        return json.loads(e.message)
+    return disk_base.content_search()
 
 
 @Utils.dumps2response