project.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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.project 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. project_list, count = project_model.list(page=page, size=size, kw=kw, environment_id=environment_id, space_id=self.space_id)
  39. return self.list_json(list=project_list, count=count, enable_create=permission.enable_role(MASTER))
  40. def item(self, project_id):
  41. """
  42. 获取某个用户组
  43. :param id:
  44. :return:
  45. """
  46. project_model = ProjectModel(id=project_id)
  47. project_info = project_model.item()
  48. if not project_info:
  49. return self.render_json(code=-1)
  50. group_info = MemberModel().members(project_id=project_id)
  51. current_app.logger.info(group_info)
  52. return self.render_json(data=dict(project_info, **group_info))
  53. def post(self):
  54. """
  55. create a project
  56. /environment/
  57. :return:
  58. """
  59. super(ProjectAPI, self).post()
  60. form = ProjectForm(request.form, csrf_enabled=False)
  61. if form.validate_on_submit():
  62. project_new = ProjectModel()
  63. data = form.form2dict()
  64. id = project_new.add(data)
  65. if not id:
  66. return self.render_json(code=-1)
  67. return self.render_json(data=project_new.item())
  68. else:
  69. return self.render_json(code=-1, message=form.errors)
  70. def put(self, project_id, action=None):
  71. """
  72. update environment
  73. /environment/<int:id>
  74. :return:
  75. """
  76. super(ProjectAPI, self).put()
  77. if action and action == 'members':
  78. return self.members(project_id, members=json.loads(request.data))
  79. form = ProjectForm(request.form, csrf_enabled=False)
  80. form.set_id(project_id)
  81. if form.validate_on_submit():
  82. server = ProjectModel().get_by_id(project_id)
  83. data = form.form2dict()
  84. # a new type to update a model
  85. ret = server.update(data)
  86. return self.render_json(data=server.item())
  87. else:
  88. return self.render_json(code=-1, message=form.errors)
  89. def delete(self, project_id):
  90. """
  91. remove an environment
  92. /environment/<int:id>
  93. :return:
  94. """
  95. super(ProjectAPI, self).delete()
  96. project_model = ProjectModel(id=project_id)
  97. project_model.remove(project_id)
  98. return self.render_json(message='')
  99. def members(self, project_id, members):
  100. """
  101. :param project_id:
  102. :param members:
  103. :return:
  104. """
  105. # TODO login for group id
  106. group_id = 1
  107. group_model = MemberModel(project_id=project_id)
  108. ret = group_model.update_project(project_id=project_id, members=members)
  109. item = group_model.members()
  110. return self.render_json(data=item)