space.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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 current_app
  10. from flask import request, abort
  11. from walle.api.api import SecurityResource
  12. from walle.form.space import SpaceForm
  13. from walle.model.member import MemberModel
  14. from walle.model.space import SpaceModel
  15. from walle.model.user import UserModel
  16. from walle.service.extensions import permission
  17. from walle.service.rbac.role import *
  18. class SpaceAPI(SecurityResource):
  19. actions = ['members', 'item', 'list', 'member', 'switch']
  20. @permission.upper_developer
  21. def get(self, space_id=None, action=None):
  22. """
  23. fetch space list or one item
  24. /space/<int:space_id>
  25. :return:
  26. """
  27. super(SpaceAPI, self).get()
  28. if action is None:
  29. action = 'item' if space_id else 'list'
  30. if action in self.actions:
  31. self_action = getattr(self, action.lower(), None)
  32. return self_action(space_id)
  33. else:
  34. abort(404)
  35. def list(self, space_id=None):
  36. """
  37. fetch space list
  38. :return:
  39. """
  40. page = int(request.args.get('page', 0))
  41. page = page - 1 if page else 0
  42. size = int(request.args.get('size', 10))
  43. kw = request.values.get('kw', '')
  44. space_model = SpaceModel()
  45. space_list, count = space_model.list(page=page, size=size, kw=kw)
  46. return self.list_json(list=space_list, count=count, enable_create=permission.role_upper_owner())
  47. def item(self, space_id):
  48. """
  49. 获取某个用户组
  50. :param id:
  51. :return:
  52. """
  53. space_model = SpaceModel(id=space_id)
  54. space_info = space_model.item()
  55. if not space_info:
  56. return self.render_json(code=-1)
  57. return self.render_json(data=space_info)
  58. @permission.upper_master
  59. def post(self):
  60. """
  61. create a space
  62. /environment/
  63. :return:
  64. """
  65. super(SpaceAPI, self).post()
  66. form = SpaceForm(request.form, csrf=False)
  67. # return self.render_json(code=-1, data = form.form2dict())
  68. if form.validate_on_submit():
  69. # create space
  70. space_new = SpaceModel()
  71. data = form.form2dict()
  72. id = space_new.add(data)
  73. if not id:
  74. return self.render_json(code=-1)
  75. current_app.logger.info(request.json)
  76. # create group
  77. data['role'] = OWNER
  78. members = [data]
  79. MemberModel(group_id=id).update_group(members=members)
  80. return self.render_json(data=space_new.item())
  81. else:
  82. return self.render_error(code=Code.form_error, message=form.errors)
  83. def put(self, space_id, action=None):
  84. """
  85. update environment
  86. /environment/<int:id>
  87. :return:
  88. """
  89. super(SpaceAPI, self).put()
  90. if action is None:
  91. return self.update(space_id)
  92. if action in self.actions:
  93. self_action = getattr(self, action.lower(), None)
  94. return self_action(space_id)
  95. else:
  96. abort(404)
  97. @permission.upper_master
  98. def update(self, space_id):
  99. form = SpaceForm(request.form, csrf=False)
  100. form.set_id(space_id)
  101. if form.validate_on_submit():
  102. space = SpaceModel().get_by_id(space_id)
  103. data = form.form2dict()
  104. current_app.logger.info(data)
  105. # a new type to update a model
  106. ret = space.update(data)
  107. # create group
  108. if 'members' in request.form:
  109. MemberModel(group_id=space_id).update_group(members=json.loads(request.form['members']))
  110. return self.render_json(data=space.item())
  111. else:
  112. return self.render_error(code=Code.form_error, message=form.errors)
  113. @permission.upper_master
  114. def delete(self, space_id):
  115. """
  116. remove an environment
  117. /environment/<int:id>
  118. :return:
  119. """
  120. super(SpaceAPI, self).delete()
  121. space_model = SpaceModel(id=space_id)
  122. space_model.remove(space_id)
  123. return self.render_json(message='')
  124. def switch(self, space_id):
  125. session['space_id'] = space_id
  126. # TODO
  127. current_user.last_space = space_id
  128. current_user.save()
  129. UserModel.fresh_session()
  130. return self.render_json()
  131. def member(self, space_id):
  132. '''
  133. 查看成员
  134. @param space_id:
  135. @return:
  136. '''
  137. space_id = session['space_id']
  138. user_id = request.form['user_id']
  139. role = request.form['role']
  140. members = MemberModel(group_id=space_id).member(user_id=user_id, role=role, group_id=space_id)
  141. return self.render_json(data=members)
  142. @permission.upper_developer
  143. def members(self, space_id):
  144. '''
  145. 更新组成员
  146. @param space_id:
  147. @return:
  148. '''
  149. page = int(request.args.get('page', 1))
  150. page = page - 1 if page else 0
  151. size = int(request.args.get('size', 10))
  152. kw = request.values.get('kw', '')
  153. members, count, user_ids = MemberModel(group_id=space_id).members(page=page, size=size, kw=kw)
  154. return self.list_json(list=members, count=count, enable_create=permission.role_upper_master())