os_init_write.py 6.3 KB

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