os_template.py 6.4 KB

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