project.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import jimit as ji
  4. import json
  5. from flask import Blueprint
  6. from flask import request
  7. from jimvc.api.base import Base
  8. from jimvc.models import Utils
  9. from jimvc.models import Rules
  10. from jimvc.models import Project
  11. from jimvc.models import Service
  12. __author__ = 'James Iter'
  13. __date__ = '2018/10/7'
  14. __contact__ = 'james.iter.cn@gmail.com'
  15. __copyright__ = '(c) 2018 by James Iter.'
  16. blueprint = Blueprint(
  17. 'api_project',
  18. __name__,
  19. url_prefix='/api/project'
  20. )
  21. blueprints = Blueprint(
  22. 'api_projects',
  23. __name__,
  24. url_prefix='/api/projects'
  25. )
  26. project_base = Base(the_class=Project, the_blueprint=blueprint, the_blueprints=blueprints)
  27. @Utils.dumps2response
  28. def r_create():
  29. args_rules = [
  30. Rules.NAME.value
  31. ]
  32. if 'description' in request.json:
  33. args_rules.append(
  34. Rules.DESCRIPTION.value,
  35. )
  36. try:
  37. ret = dict()
  38. ret['state'] = ji.Common.exchange_state(20000)
  39. ji.Check.previewing(args_rules, request.json)
  40. project = Project()
  41. project.name = request.json.get('name', None)
  42. project.description = request.json.get('description', '')
  43. project.create()
  44. project.get_by('create_time')
  45. ret['data'] = project.__dict__
  46. return ret
  47. except ji.PreviewingError, e:
  48. return json.loads(e.message)
  49. @Utils.dumps2response
  50. def r_update(_id):
  51. project = Project()
  52. args_rules = [
  53. Rules.ID.value
  54. ]
  55. if 'name' in request.json:
  56. args_rules.append(
  57. Rules.NAME.value,
  58. )
  59. if 'description' in request.json:
  60. args_rules.append(
  61. Rules.DESCRIPTION.value,
  62. )
  63. if args_rules.__len__() < 2:
  64. ret = dict()
  65. ret['state'] = ji.Common.exchange_state(20000)
  66. return ret
  67. request.json['id'] = _id
  68. try:
  69. ji.Check.previewing(args_rules, request.json)
  70. project.id = int(request.json.get('id'))
  71. project.get()
  72. project.name = request.json.get('name', project.name)
  73. project.description = request.json.get('description', project.description)
  74. project.update()
  75. project.get()
  76. ret = dict()
  77. ret['state'] = ji.Common.exchange_state(20000)
  78. ret['data'] = project.__dict__
  79. return ret
  80. except ji.PreviewingError, e:
  81. return json.loads(e.message)
  82. @Utils.dumps2response
  83. def r_get(ids):
  84. ret = project_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  85. project_ids = list()
  86. if -1 == ids.find(','):
  87. project_ids.append(ret['data']['id'])
  88. else:
  89. for project in ret['data']:
  90. project_ids.append(project['id'])
  91. rows, _ = Service.get_by_filter(filter_str=':'.join([
  92. 'project_id', 'in', ','.join(project_id.__str__() for project_id in project_ids)]))
  93. services_mapping_by_project_id = dict()
  94. for row in rows:
  95. if row['project_id'] not in services_mapping_by_project_id:
  96. services_mapping_by_project_id[row['project_id']] = list()
  97. services_mapping_by_project_id[row['project_id']].append(row)
  98. if -1 == ids.find(','):
  99. ret['data']['services'] = list()
  100. if ret['data']['id'] in services_mapping_by_project_id:
  101. ret['data']['services'] = services_mapping_by_project_id[ret['data']['id']]
  102. else:
  103. for i, project in enumerate(ret['data']):
  104. ret['data'][i]['services'] = list()
  105. if project['id'] in services_mapping_by_project_id:
  106. ret['data'][i]['services'] = services_mapping_by_project_id[project['id']]
  107. return ret
  108. @Utils.dumps2response
  109. def r_get_by_filter():
  110. ret = project_base.get_by_filter()
  111. project_ids = list()
  112. for project in ret['data']:
  113. project_ids.append(project['id'])
  114. rows, _ = Service.get_by_filter(filter_str=':'.join([
  115. 'project_id', 'in', ','.join(project_id.__str__() for project_id in project_ids)]))
  116. services_mapping_by_project_id = dict()
  117. for row in rows:
  118. if row['project_id'] not in services_mapping_by_project_id:
  119. services_mapping_by_project_id[row['project_id']] = list()
  120. services_mapping_by_project_id[row['project_id']].append(row)
  121. for i, project in enumerate(ret['data']):
  122. ret['data'][i]['services'] = list()
  123. if project['id'] in services_mapping_by_project_id:
  124. ret['data'][i]['services'] = services_mapping_by_project_id[project['id']]
  125. return ret
  126. @Utils.dumps2response
  127. def r_content_search():
  128. ret = project_base.content_search()
  129. project_ids = list()
  130. for project in ret['data']:
  131. project_ids.append(project['id'])
  132. rows, _ = Service.get_by_filter(filter_str=':'.join([
  133. 'project_id', 'in', ','.join(project_id.__str__() for project_id in project_ids)]))
  134. services_mapping_by_project_id = dict()
  135. for row in rows:
  136. if row['project_id'] not in services_mapping_by_project_id:
  137. services_mapping_by_project_id[row['project_id']] = list()
  138. services_mapping_by_project_id[row['project_id']].append(row)
  139. for i, project in enumerate(ret['data']):
  140. ret['data'][i]['services'] = list()
  141. if project['id'] in services_mapping_by_project_id:
  142. ret['data'][i]['services'] = services_mapping_by_project_id[project['id']]
  143. return ret
  144. @Utils.dumps2response
  145. def r_delete(ids):
  146. args_rules = [
  147. Rules.IDS.value
  148. ]
  149. try:
  150. ji.Check.previewing(args_rules, {'ids': ids})
  151. project = Project()
  152. # 检测所指定的 项目 都存在
  153. for _id in ids.split(','):
  154. project.id = int(_id)
  155. project.get()
  156. # 执行删除操作
  157. for _id in ids.split(','):
  158. project.id = int(_id)
  159. project.get()
  160. project.delete()
  161. ret = dict()
  162. ret['state'] = ji.Common.exchange_state(20000)
  163. return ret
  164. except ji.PreviewingError, e:
  165. return json.loads(e.message)