os_init.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from flask import Blueprint
  4. from flask import request, g
  5. import jimit as ji
  6. import json
  7. from models import OSInit
  8. from models import OSInitWrite
  9. from models import Rules
  10. from models import Utils
  11. __author__ = 'James Iter'
  12. __date__ = '2017/3/30'
  13. __contact__ = 'james.iter.cn@gmail.com'
  14. __copyright__ = '(c) 2017 by James Iter.'
  15. blueprint = Blueprint(
  16. 'os_init',
  17. __name__,
  18. url_prefix='/api/os_init'
  19. )
  20. @Utils.dumps2response
  21. def r_create():
  22. os_init = OSInit()
  23. args_rules = [
  24. Rules.NAME.value,
  25. Rules.REMARK.value
  26. ]
  27. os_init.name = request.json.get('name')
  28. os_init.remark = request.json.get('remark')
  29. try:
  30. ji.Check.previewing(args_rules, os_init.__dict__)
  31. ret = dict()
  32. ret['state'] = ji.Common.exchange_state(20000)
  33. if os_init.exist_by('name'):
  34. ret['state'] = ji.Common.exchange_state(40901)
  35. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', os_init.name])
  36. return ret
  37. os_init.create()
  38. os_init.get_by('name')
  39. ret['data'] = os_init.__dict__
  40. return ret
  41. except ji.PreviewingError, e:
  42. return json.loads(e.message)
  43. @Utils.dumps2response
  44. def r_update(_id):
  45. os_init = OSInit()
  46. args_rules = [
  47. Rules.ID.value
  48. ]
  49. if 'name' in request.json:
  50. args_rules.append(
  51. Rules.NAME.value,
  52. )
  53. if 'remark' in request.json:
  54. args_rules.append(
  55. Rules.REMARK.value,
  56. )
  57. if args_rules.__len__() < 2:
  58. ret = dict()
  59. ret['state'] = ji.Common.exchange_state(20000)
  60. return ret
  61. request.json['id'] = _id
  62. try:
  63. ji.Check.previewing(args_rules, request.json)
  64. os_init.id = request.json.get('id')
  65. os_init.get()
  66. os_init.name = request.json.get('name', os_init.name)
  67. os_init.remark = request.json.get('remark', os_init.remark)
  68. os_init.update()
  69. g.config = None
  70. os_init.get()
  71. ret = dict()
  72. ret['state'] = ji.Common.exchange_state(20000)
  73. ret['data'] = os_init.__dict__
  74. return ret
  75. except ji.PreviewingError, e:
  76. return json.loads(e.message)
  77. @Utils.dumps2response
  78. def r_delete(_id):
  79. os_init = OSInit()
  80. args_rules = [
  81. Rules.ID.value
  82. ]
  83. os_init.id = _id
  84. try:
  85. ji.Check.previewing(args_rules, os_init.__dict__)
  86. if os_init.exist():
  87. os_init.delete()
  88. OSInitWrite.delete_by_filter(filter_str='os_init_id:in:' + os_init.id.__str__())
  89. else:
  90. ret = dict()
  91. ret['state'] = ji.Common.exchange_state(40401)
  92. return ret
  93. except ji.PreviewingError, e:
  94. return json.loads(e.message)
  95. @Utils.dumps2response
  96. def r_get_by_filter():
  97. page = str(request.args.get('page', 1))
  98. page_size = str(request.args.get('page_size', 50))
  99. args_rules = [
  100. Rules.PAGE.value,
  101. Rules.PAGE_SIZE.value
  102. ]
  103. try:
  104. ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
  105. except ji.PreviewingError, e:
  106. return json.loads(e.message)
  107. page = int(page)
  108. page_size = int(page_size)
  109. # 把page和page_size换算成offset和limit
  110. offset = (page - 1) * page_size
  111. # offset, limit将覆盖page及page_size的影响
  112. offset = str(request.args.get('offset', offset))
  113. limit = str(request.args.get('limit', page_size))
  114. order_by = request.args.get('order_by', 'id')
  115. order = request.args.get('order', 'asc')
  116. filter_str = request.args.get('filter', '')
  117. args_rules = [
  118. Rules.OFFSET.value,
  119. Rules.LIMIT.value,
  120. Rules.ORDER_BY.value,
  121. Rules.ORDER.value
  122. ]
  123. try:
  124. ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order})
  125. offset = int(offset)
  126. limit = int(limit)
  127. ret = dict()
  128. ret['state'] = ji.Common.exchange_state(20000)
  129. ret['data'] = list()
  130. ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size,
  131. 'next': '', 'prev': '', 'first': '', 'last': ''}
  132. ret['data'], ret['paging']['total'] = OSInit.get_by_filter(offset=offset, limit=limit, order_by=order_by,
  133. order=order, filter_str=filter_str)
  134. host_url = request.host_url.rstrip('/')
  135. other_str = '&filter=' + filter_str + '&order=' + order + '&order_by=' + order_by
  136. last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
  137. if page <= 1:
  138. ret['paging']['prev'] = host_url + blueprint.url_prefix + '?page=1&page_size=' + page_size.__str__() + \
  139. other_str
  140. else:
  141. ret['paging']['prev'] = host_url + blueprint.url_prefix + '?page=' + str(page-1) + '&page_size=' + \
  142. page_size.__str__() + other_str
  143. if page >= last_pagination:
  144. ret['paging']['next'] = host_url + blueprint.url_prefix + '?page=' + last_pagination.__str__() + \
  145. '&page_size=' + page_size.__str__() + other_str
  146. else:
  147. ret['paging']['next'] = host_url + blueprint.url_prefix + '?page=' + str(page+1) + '&page_size=' + \
  148. page_size.__str__() + other_str
  149. ret['paging']['first'] = host_url + blueprint.url_prefix + '?page=1&page_size=' + \
  150. page_size.__str__() + other_str
  151. ret['paging']['last'] = \
  152. host_url + blueprint.url_prefix + '?page=' + last_pagination.__str__() + '&page_size=' + \
  153. page_size.__str__() + other_str
  154. return ret
  155. except ji.PreviewingError, e:
  156. return json.loads(e.message)