os_init.py 5.9 KB

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