os_init_write.py 6.4 KB

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