general.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 os
  9. from flask import request, abort, session, current_app
  10. from flask_login import current_user, login_required
  11. from walle.api.api import SecurityResource
  12. from walle.model.deploy import TaskRecordModel
  13. from walle.model.user import MenuModel
  14. from walle.model.user import UserModel
  15. from walle.service import emails
  16. from walle.service.deployer import Deployer
  17. from walle.service.rbac.role import *
  18. from werkzeug.utils import secure_filename
  19. from walle.service.extensions import permission
  20. class GeneralAPI(SecurityResource):
  21. actions = ['menu', 'websocket']
  22. @permission.gte_develop_or_uid
  23. def get(self, action):
  24. """
  25. fetch role list or one role
  26. :return:
  27. """
  28. if action in self.actions:
  29. self_action = getattr(self, action.lower(), None)
  30. return self_action()
  31. else:
  32. abort(404)
  33. def post(self, action):
  34. """
  35. fetch role list or one role
  36. :return:
  37. """
  38. if action == 'avatar':
  39. return self.avater()
  40. def menu(self):
  41. role = 10
  42. user = UserModel(id=current_user.id).item()
  43. menu = MenuModel().menu(role=role)
  44. space = {
  45. 'current': '',
  46. 'available': '',
  47. }
  48. # TODO
  49. # 超管不需要展示空间列表
  50. if current_user.role <> SUPER:
  51. space = {
  52. 'current': session['space_info'],
  53. 'available': session['space_list'],
  54. }
  55. data = {
  56. 'user': user,
  57. 'menu': menu,
  58. 'space': space,
  59. }
  60. return self.render_json(data=data)
  61. def mail(self):
  62. ret = emails.send_email('wushuiyong@renrenche.com', 'email from service@walle-web.io', 'xxxxxxx', 'yyyyyyy')
  63. return self.render_json(data={
  64. 'avatar': 'emails.send_email',
  65. 'done': ret,
  66. })
  67. def websocket(self, task_id=None):
  68. task_id = 12
  69. wi = Deployer(task_id)
  70. ret = wi.walle_deploy()
  71. record = TaskRecordModel().fetch(task_id)
  72. return self.render_json(data={
  73. 'command': ret,
  74. 'record': record,
  75. })