operate_rule.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. ]
  35. operate_rule.boot_job_id = request.json.get('boot_job_id')
  36. operate_rule.kind = request.json.get('kind')
  37. operate_rule.path = request.json.get('path', '')
  38. operate_rule.content = request.json.get('content', '')
  39. operate_rule.command = request.json.get('command', '')
  40. if operate_rule.kind == OperateRuleKind.cmd.value:
  41. args_rules.append(
  42. Rules.OPERATE_RULE_COMMAND.value
  43. )
  44. else:
  45. args_rules.extend([
  46. Rules.OPERATE_RULE_PATH.value,
  47. Rules.OPERATE_RULE_CONTENT.value
  48. ])
  49. try:
  50. ji.Check.previewing(args_rules, operate_rule.__dict__)
  51. ret = dict()
  52. ret['state'] = ji.Common.exchange_state(20000)
  53. boot_job.id = operate_rule.boot_job_id
  54. if not boot_job.exist():
  55. ret['state'] = ji.Common.exchange_state(40401)
  56. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', boot_job.id.__str__()])
  57. return ret
  58. data, total = operate_rule.get_by_filter(
  59. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  60. ':'.join(['path', 'eq', operate_rule.path]))
  61. if data.__len__() > 0:
  62. ret['state'] = ji.Common.exchange_state(40901)
  63. ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ', path: ', operate_rule.path,
  64. ', boot_job_id: ', operate_rule.boot_job_id.__str__()])
  65. return ret
  66. operate_rule.create()
  67. data, total = operate_rule.get_by_filter(
  68. filter_str=':'.join(['boot_job_id', 'eq', operate_rule.boot_job_id.__str__()]) + ';' +
  69. ':'.join(['path', 'eq', operate_rule.path]))
  70. ret['data'] = data[0]
  71. return ret
  72. except ji.PreviewingError, e:
  73. return json.loads(e.message)
  74. @Utils.dumps2response
  75. def r_update(_id):
  76. operate_rule = OperateRule()
  77. args_rules = [
  78. Rules.ID.value
  79. ]
  80. if 'boot_job_id' in request.json:
  81. args_rules.append(
  82. Rules.BOOT_JOB_ID_EXT.value,
  83. )
  84. if 'kind' in request.json:
  85. args_rules.append(
  86. Rules.OPERATE_RULE_KIND.value,
  87. )
  88. if 'path' in request.json:
  89. args_rules.append(
  90. Rules.OPERATE_RULE_PATH.value,
  91. )
  92. if 'content' in request.json:
  93. args_rules.append(
  94. Rules.OPERATE_RULE_CONTENT.value,
  95. )
  96. if 'command' in request.json:
  97. args_rules.append(
  98. Rules.OPERATE_RULE_COMMAND.value,
  99. )
  100. if args_rules.__len__() < 2:
  101. ret = dict()
  102. ret['state'] = ji.Common.exchange_state(20000)
  103. return ret
  104. request.json['id'] = _id
  105. try:
  106. ji.Check.previewing(args_rules, request.json)
  107. operate_rule.id = request.json.get('id')
  108. operate_rule.get()
  109. operate_rule.boot_job_id = request.json.get('boot_job_id', operate_rule.boot_job_id)
  110. operate_rule.kind = request.json.get('kind', operate_rule.kind)
  111. operate_rule.path = request.json.get('path', operate_rule.path)
  112. operate_rule.content = request.json.get('content', operate_rule.content)
  113. operate_rule.command = request.json.get('command', operate_rule.command)
  114. operate_rule.update()
  115. operate_rule.get()
  116. ret = dict()
  117. ret['state'] = ji.Common.exchange_state(20000)
  118. ret['data'] = operate_rule.__dict__
  119. return ret
  120. except ji.PreviewingError, e:
  121. return json.loads(e.message)
  122. @Utils.dumps2response
  123. def r_delete(ids):
  124. return operate_rule_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  125. @Utils.dumps2response
  126. def r_get(ids):
  127. return operate_rule_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  128. @Utils.dumps2response
  129. def r_get_by_filter():
  130. return operate_rule_base.get_by_filter()
  131. @Utils.dumps2response
  132. def r_content_search():
  133. return operate_rule_base.content_search()