server.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2019 walle-web.io
  5. :created time: 2018-11-24 06:15:11
  6. :author: wushuiyong@walle-web.io
  7. """
  8. from datetime import datetime
  9. from sqlalchemy import String, Integer, DateTime
  10. from walle.model.database import SurrogatePK, db, Model
  11. from walle.service.extensions import permission
  12. from walle.service.rbac.role import *
  13. # server
  14. class ServerModel(SurrogatePK, Model):
  15. __tablename__ = 'servers'
  16. current_time = datetime.now()
  17. # 表的结构:
  18. id = db.Column(Integer, primary_key=True, autoincrement=True)
  19. name = db.Column(String(100))
  20. host = db.Column(String(100))
  21. status = db.Column(Integer)
  22. created_at = db.Column(DateTime, default=current_time)
  23. updated_at = db.Column(DateTime, default=current_time, onupdate=current_time)
  24. def list(self, page=0, size=10, kw=None):
  25. """
  26. 获取分页列表
  27. :param page:
  28. :param size:
  29. :param kw:
  30. :return:
  31. """
  32. query = self.query.filter(ServerModel.status.notin_([self.status_remove]))
  33. if kw:
  34. query = query.filter(ServerModel.name.like('%' + kw + '%'))
  35. count = query.count()
  36. data = query.order_by(ServerModel.id.desc()) \
  37. .offset(int(size) * int(page)).limit(size) \
  38. .all()
  39. server_list = [p.to_json() for p in data]
  40. return server_list, count
  41. def item(self, id=None):
  42. """
  43. 获取单条记录
  44. :param role_id:
  45. :return:
  46. """
  47. id = id if id else self.id
  48. data = self.query.filter(ServerModel.status.notin_([self.status_remove])).filter_by(id=id).first()
  49. return data.to_json() if data else []
  50. def add(self, name, host):
  51. # todo permission_ids need to be formated and checked
  52. server = ServerModel(name=name, host=host, status=self.status_available)
  53. db.session.add(server)
  54. db.session.commit()
  55. if server.id:
  56. self.id = server.id
  57. return server.id
  58. def update(self, name, host, id=None):
  59. # todo permission_ids need to be formated and checked
  60. id = id if id else self.id
  61. role = ServerModel.query.filter_by(id=id).first()
  62. if not role:
  63. return False
  64. role.name = name
  65. role.host = host
  66. ret = db.session.commit()
  67. return ret
  68. def remove(self, id=None):
  69. """
  70. :param role_id:
  71. :return:
  72. """
  73. id = id if id else self.id
  74. self.query.filter_by(id=id).update({'status': self.status_remove})
  75. ret = db.session.commit()
  76. return ret
  77. @classmethod
  78. def fetch_by_id(cls, ids=None):
  79. """
  80. 用户列表
  81. :param uids: []
  82. :return:
  83. """
  84. if not ids:
  85. return None
  86. query = ServerModel.query.filter(ServerModel.id.in_(ids))
  87. data = query.order_by(ServerModel.id.desc()).all()
  88. return [p.to_json() for p in data]
  89. def to_json(self):
  90. item = {
  91. 'id': self.id,
  92. 'name': self.name,
  93. 'host': self.host,
  94. 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  95. 'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  96. }
  97. item.update(self.enable())
  98. return item
  99. def enable(self):
  100. return {
  101. 'enable_view': True,
  102. 'enable_update': permission.role_upper_developer(),
  103. 'enable_delete': permission.role_upper_developer(),
  104. 'enable_create': False,
  105. 'enable_online': False,
  106. 'enable_audit': permission.role_upper_owner(),
  107. 'enable_block': False,
  108. }