space.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. from flask import request, current_app, session
  9. from walle.api.api import SecurityResource
  10. from walle.form.space import SpaceForm
  11. from walle.model.user import SpaceModel, MemberModel, UserModel
  12. import json
  13. from walle.service.rbac.role import *
  14. from walle.service.extensions import permission
  15. class SpaceAPI(SecurityResource):
  16. def get(self, space_id=None):
  17. """
  18. fetch space list or one item
  19. /space/<int:space_id>
  20. :return:
  21. """
  22. super(SpaceAPI, self).get()
  23. return self.item(space_id) if space_id else self.list()
  24. def list(self):
  25. """
  26. fetch space list
  27. :return:
  28. """
  29. page = int(request.args.get('page', 0))
  30. page = page - 1 if page else 0
  31. size = float(request.args.get('size', 10))
  32. kw = request.values.get('kw', '')
  33. space_model = SpaceModel()
  34. space_list, count = space_model.list(page=page, size=size, kw=kw)
  35. return self.list_json(list=space_list, count=count, enable_create=permission.enable_role(OWNER))
  36. def item(self, space_id):
  37. """
  38. 获取某个用户组
  39. :param id:
  40. :return:
  41. """
  42. space_model = SpaceModel(id=space_id)
  43. space_info = space_model.item()
  44. if not space_info:
  45. return self.render_json(code=-1)
  46. return self.render_json(data=space_info)
  47. def post(self):
  48. """
  49. create a space
  50. /environment/
  51. :return:
  52. """
  53. super(SpaceAPI, self).post()
  54. form = SpaceForm(request.form, csrf_enabled=False)
  55. # return self.render_json(code=-1, data = form.form2dict())
  56. if form.validate_on_submit():
  57. # create space
  58. space_new = SpaceModel()
  59. data = form.form2dict()
  60. id = space_new.add(data)
  61. if not id:
  62. return self.render_json(code=-1)
  63. current_app.logger.info(request.json)
  64. # create group
  65. data['role'] = OWNER
  66. members = [data]
  67. MemberModel(group_id=id).update_group(members=members)
  68. return self.render_json(data=space_new.item())
  69. else:
  70. return self.render_json(code=-1, message=form.errors)
  71. def put(self, space_id, action=None):
  72. """
  73. update environment
  74. /environment/<int:id>
  75. :return:
  76. """
  77. super(SpaceAPI, self).put()
  78. if action and action == 'switch':
  79. return self.switch(space_id)
  80. form = SpaceForm(request.form, csrf_enabled=False)
  81. form.set_id(space_id)
  82. if form.validate_on_submit():
  83. space = SpaceModel().get_by_id(space_id)
  84. data = form.form2dict()
  85. # a new type to update a model
  86. ret = space.update(data)
  87. # create group
  88. if request.form.has_key('members'):
  89. MemberModel(group_id=space_id).update_group(members=json.loads(request.form['members']))
  90. return self.render_json(data=space.item())
  91. else:
  92. return self.render_json(code=-1, message=form.errors)
  93. def delete(self, space_id):
  94. """
  95. remove an environment
  96. /environment/<int:id>
  97. :return:
  98. """
  99. super(SpaceAPI, self).delete()
  100. space_model = SpaceModel(id=space_id)
  101. space_model.remove(space_id)
  102. return self.render_json(message='')
  103. def switch(self, space_id):
  104. session['space_id'] = space_id
  105. # TODO
  106. current_user.last_space = space_id
  107. current_user.save()
  108. UserModel.fresh_session()
  109. return self.render_json()