operate_rule.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. data, total = operate_rule.get_by_filter(
  61. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  62. ':'.join(['path', 'eq', operate_rule.path]))
  63. if data.__len__() > 0:
  64. ret['state'] = ji.Common.exchange_state(40901)
  65. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ', path: ', operate_rule.path,
  66. ', boot_job_id: ', operate_rule.boot_job_id.__str__()])
  67. return ret
  68. operate_rule.create()
  69. data, total = operate_rule.get_by_filter(
  70. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  71. ':'.join(['path', 'eq', operate_rule.path]))
  72. ret['data'] = data[0]
  73. return ret
  74. except ji.PreviewingError, e:
  75. return json.loads(e.message)
  76. @Utils.dumps2response
  77. def r_update(_id):
  78. operate_rule = OperateRule()
  79. args_rules = [
  80. Rules.ID.value
  81. ]
  82. if 'boot_job_id' in request.json:
  83. args_rules.append(
  84. Rules.BOOT_JOB_ID_EXT.value,
  85. )
  86. if 'kind' in request.json:
  87. args_rules.append(
  88. Rules.OPERATE_RULE_KIND.value,
  89. )
  90. if 'sequence' in request.json:
  91. args_rules.append(
  92. Rules.OPERATE_RULE_SEQUENCE.value,
  93. )
  94. if 'path' in request.json:
  95. args_rules.append(
  96. Rules.OPERATE_RULE_PATH.value,
  97. )
  98. if 'content' in request.json:
  99. args_rules.append(
  100. Rules.OPERATE_RULE_CONTENT.value,
  101. )
  102. if 'command' in request.json:
  103. args_rules.append(
  104. Rules.OPERATE_RULE_COMMAND.value,
  105. )
  106. if args_rules.__len__() < 2:
  107. ret = dict()
  108. ret['state'] = ji.Common.exchange_state(20000)
  109. return ret
  110. request.json['id'] = _id
  111. try:
  112. ji.Check.previewing(args_rules, request.json)
  113. operate_rule.id = request.json.get('id')
  114. operate_rule.get()
  115. operate_rule.boot_job_id = request.json.get('boot_job_id', operate_rule.boot_job_id)
  116. operate_rule.kind = request.json.get('kind', operate_rule.kind)
  117. operate_rule.sequence = request.json.get('sequence', operate_rule.sequence)
  118. operate_rule.path = request.json.get('path', operate_rule.path)
  119. operate_rule.content = request.json.get('content', operate_rule.content)
  120. operate_rule.command = request.json.get('command', operate_rule.command)
  121. operate_rule.update()
  122. operate_rule.get()
  123. ret = dict()
  124. ret['state'] = ji.Common.exchange_state(20000)
  125. ret['data'] = operate_rule.__dict__
  126. return ret
  127. except ji.PreviewingError, e:
  128. return json.loads(e.message)
  129. @Utils.dumps2response
  130. def r_delete(ids):
  131. return operate_rule_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  132. @Utils.dumps2response
  133. def r_get(ids):
  134. return operate_rule_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  135. @Utils.dumps2response
  136. def r_get_by_filter():
  137. return operate_rule_base.get_by_filter()
  138. @Utils.dumps2response
  139. def r_content_search():
  140. return operate_rule_base.content_search()