operate_rule.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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 api.base import Base
  8. from models import Rules
  9. from models import Utils
  10. from models.boot_job import OperateRule, BootJob
  11. from models.status import OperateRuleKind
  12. __author__ = 'James Iter'
  13. __date__ = '2017/6/19'
  14. __contact__ = 'james.iter.cn@gmail.com'
  15. __copyright__ = '(c) 2017 by James Iter.'
  16. blueprint = Blueprint(
  17. 'api_operate_rule',
  18. __name__,
  19. url_prefix='/api/operate_rule'
  20. )
  21. blueprints = Blueprint(
  22. 'api_operate_rules',
  23. __name__,
  24. url_prefix='/api/operate_rules'
  25. )
  26. operate_rule_base = Base(the_class=OperateRule, the_blueprint=blueprint, the_blueprints=blueprints)
  27. @Utils.dumps2response
  28. def r_create():
  29. boot_job = BootJob()
  30. operate_rule = OperateRule()
  31. args_rules = [
  32. Rules.BOOT_JOB_ID_EXT.value,
  33. Rules.OPERATE_RULE_KIND.value,
  34. Rules.OPERATE_RULE_SEQUENCE.value
  35. ]
  36. operate_rule.boot_job_id = request.json.get('boot_job_id')
  37. operate_rule.kind = request.json.get('kind')
  38. operate_rule.path = request.json.get('path', '')
  39. operate_rule.sequence = request.json.get('sequence', 0)
  40. operate_rule.content = request.json.get('content', '')
  41. operate_rule.command = request.json.get('command', '')
  42. if operate_rule.kind == OperateRuleKind.cmd.value:
  43. args_rules.append(
  44. Rules.OPERATE_RULE_COMMAND.value
  45. )
  46. else:
  47. args_rules.extend([
  48. Rules.OPERATE_RULE_PATH.value,
  49. Rules.OPERATE_RULE_CONTENT.value
  50. ])
  51. try:
  52. ji.Check.previewing(args_rules, operate_rule.__dict__)
  53. ret = dict()
  54. ret['state'] = ji.Common.exchange_state(20000)
  55. boot_job.id = operate_rule.boot_job_id
  56. if not boot_job.exist():
  57. ret['state'] = ji.Common.exchange_state(40401)
  58. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', boot_job.id.__str__()])
  59. return ret
  60. if operate_rule.kind == OperateRuleKind.cmd.value:
  61. data, total = operate_rule.get_by_filter(
  62. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  63. ':'.join(['command', 'eq', operate_rule.command]))
  64. else:
  65. data, total = operate_rule.get_by_filter(
  66. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  67. ':'.join(['path', 'eq', operate_rule.path]))
  68. if data.__len__() > 0:
  69. ret['state'] = ji.Common.exchange_state(40901)
  70. if operate_rule.kind == OperateRuleKind.cmd.value:
  71. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'],
  72. ', command: ', operate_rule.command,
  73. ', boot_job_id: ', operate_rule.boot_job_id.__str__()])
  74. else:
  75. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ', path: ', operate_rule.path,
  76. ', boot_job_id: ', operate_rule.boot_job_id.__str__()])
  77. return ret
  78. operate_rule.create()
  79. data, total = operate_rule.get_by_filter(
  80. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  81. ':'.join(['path', 'eq', operate_rule.path]))
  82. ret['data'] = data[0]
  83. return ret
  84. except ji.PreviewingError, e:
  85. return json.loads(e.message)
  86. @Utils.dumps2response
  87. def r_update(_id):
  88. operate_rule = OperateRule()
  89. args_rules = [
  90. Rules.ID.value
  91. ]
  92. if 'boot_job_id' in request.json:
  93. args_rules.append(
  94. Rules.BOOT_JOB_ID_EXT.value,
  95. )
  96. if 'kind' in request.json:
  97. args_rules.append(
  98. Rules.OPERATE_RULE_KIND.value,
  99. )
  100. if 'sequence' in request.json:
  101. args_rules.append(
  102. Rules.OPERATE_RULE_SEQUENCE.value,
  103. )
  104. if 'path' in request.json:
  105. args_rules.append(
  106. Rules.OPERATE_RULE_PATH.value,
  107. )
  108. if 'content' in request.json:
  109. args_rules.append(
  110. Rules.OPERATE_RULE_CONTENT.value,
  111. )
  112. if 'command' in request.json:
  113. args_rules.append(
  114. Rules.OPERATE_RULE_COMMAND.value,
  115. )
  116. if args_rules.__len__() < 2:
  117. ret = dict()
  118. ret['state'] = ji.Common.exchange_state(20000)
  119. return ret
  120. request.json['id'] = _id
  121. try:
  122. ji.Check.previewing(args_rules, request.json)
  123. operate_rule.id = request.json.get('id')
  124. operate_rule.get()
  125. operate_rule.boot_job_id = request.json.get('boot_job_id', operate_rule.boot_job_id)
  126. operate_rule.kind = request.json.get('kind', operate_rule.kind)
  127. operate_rule.sequence = request.json.get('sequence', operate_rule.sequence)
  128. operate_rule.path = request.json.get('path', operate_rule.path)
  129. operate_rule.content = request.json.get('content', operate_rule.content)
  130. operate_rule.command = request.json.get('command', operate_rule.command)
  131. operate_rule.update()
  132. operate_rule.get()
  133. ret = dict()
  134. ret['state'] = ji.Common.exchange_state(20000)
  135. ret['data'] = operate_rule.__dict__
  136. return ret
  137. except ji.PreviewingError, e:
  138. return json.loads(e.message)
  139. @Utils.dumps2response
  140. def r_delete(ids):
  141. return operate_rule_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  142. @Utils.dumps2response
  143. def r_get(ids):
  144. return operate_rule_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  145. @Utils.dumps2response
  146. def r_get_by_filter():
  147. return operate_rule_base.get_by_filter()
  148. @Utils.dumps2response
  149. def r_content_search():
  150. return operate_rule_base.content_search()