project.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-03-25 11:15:01
  6. :author: wushuiyong@walle-web.io
  7. """
  8. import json
  9. from flask import request, current_app
  10. from flask_login import login_required
  11. from walle.api.api import SecurityResource
  12. from walle.form.project import ProjectForm
  13. from walle.model.deploy import ProjectModel
  14. from walle.model.user import MemberModel
  15. from walle.service.rbac.role import *
  16. from walle.service.extensions import permission
  17. class ProjectAPI(SecurityResource):
  18. @permission.gte_develop_or_uid
  19. def get(self, action=None, project_id=None):
  20. """
  21. fetch project list or one item
  22. /project/<int:project_id>
  23. :return:
  24. """
  25. super(ProjectAPI, self).get()
  26. return self.item(project_id) if project_id else self.list()
  27. def list(self):
  28. """
  29. fetch project list
  30. :return:
  31. """
  32. page = int(request.args.get('page', 0))
  33. page = page - 1 if page else 0
  34. size = float(request.args.get('size', 10))
  35. kw = request.values.get('kw', '')
  36. environment_id = request.values.get('environment_id', '')
  37. project_model = ProjectModel()
  38. space_id = None if current_user.role == SUPER else session['space_id']
  39. project_list, count = project_model.list(page=page, size=size, kw=kw, environment_id=environment_id, space_id=space_id)
  40. return self.list_json(list=project_list, count=count)
  41. def item(self, project_id):
  42. """
  43. 获取某个用户组
  44. :param id:
  45. :return:
  46. """
  47. project_model = ProjectModel(id=project_id)
  48. project_info = project_model.item()
  49. if not project_info:
  50. return self.render_json(code=-1)
  51. group_info = MemberModel().members(project_id=project_id)
  52. current_app.logger.info(group_info)
  53. return self.render_json(data=dict(project_info, **group_info))
  54. def post(self):
  55. """
  56. create a project
  57. /environment/
  58. :return:
  59. """
  60. super(ProjectAPI, self).post()
  61. form = ProjectForm(request.form, csrf_enabled=False)
  62. if form.validate_on_submit():
  63. project_new = ProjectModel()
  64. data = form.form2dict()
  65. id = project_new.add(data)
  66. if not id:
  67. return self.render_json(code=-1)
  68. return self.render_json(data=project_new.item())
  69. else:
  70. return self.render_json(code=-1, message=form.errors)
  71. def put(self, project_id, action=None):
  72. """
  73. update environment
  74. /environment/<int:id>
  75. :return:
  76. """
  77. super(ProjectAPI, self).put()
  78. if action and action == 'members':
  79. return self.members(project_id, members=json.loads(request.data))
  80. form = ProjectForm(request.form, csrf_enabled=False)
  81. form.set_id(project_id)
  82. if form.validate_on_submit():
  83. server = ProjectModel().get_by_id(project_id)
  84. data = form.form2dict()
  85. # a new type to update a model
  86. ret = server.update(data)
  87. return self.render_json(data=server.item())
  88. else:
  89. return self.render_json(code=-1, message=form.errors)
  90. def delete(self, project_id):
  91. """
  92. remove an environment
  93. /environment/<int:id>
  94. :return:
  95. """
  96. super(ProjectAPI, self).delete()
  97. project_model = ProjectModel(id=project_id)
  98. project_model.remove(project_id)
  99. return self.render_json(message='')
  100. def members(self, project_id, members):
  101. """
  102. :param project_id:
  103. :param members:
  104. :return:
  105. """
  106. # TODO login for group id
  107. group_id = 1
  108. group_model = MemberModel(project_id=project_id)
  109. ret = group_model.update_project(project_id=project_id, members=members)
  110. item = group_model.members()
  111. return self.render_json(data=item)