server.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. user = db.Column(String(100))
  22. port = db.Column(Integer)
  23. status = db.Column(Integer)
  24. created_at = db.Column(DateTime, default=current_time)
  25. updated_at = db.Column(DateTime, default=current_time, onupdate=current_time)
  26. def list(self, page=0, size=10, kw=None):
  27. """
  28. 获取分页列表
  29. :param page:
  30. :param size:
  31. :param kw:
  32. :return:
  33. """
  34. query = self.query.filter(ServerModel.status.notin_([self.status_remove]))
  35. if kw:
  36. query = query.filter(ServerModel.name.like('%' + kw + '%'))
  37. count = query.count()
  38. data = query.order_by(ServerModel.id.desc()) \
  39. .offset(int(size) * int(page)).limit(size) \
  40. .all()
  41. server_list = [p.to_json() for p in data]
  42. return server_list, count
  43. def item(self, id=None):
  44. """
  45. 获取单条记录
  46. :param role_id:
  47. :return:
  48. """
  49. id = id if id else self.id
  50. data = self.query.filter(ServerModel.status.notin_([self.status_remove])).filter_by(id=id).first()
  51. return data.to_json() if data else []
  52. def add(self, *args, **kwargs):
  53. data = dict(*args)
  54. server = ServerModel(**data)
  55. db.session.add(server)
  56. db.session.commit()
  57. if server.id:
  58. self.id = server.id
  59. return server.id
  60. def update(self, *args, **kwargs):
  61. update_data = dict(*args)
  62. return super(ServerModel, self).update(**update_data)
  63. def remove(self, id=None):
  64. """
  65. :param role_id:
  66. :return:
  67. """
  68. id = id if id else self.id
  69. self.query.filter_by(id=id).update({'status': self.status_remove})
  70. ret = db.session.commit()
  71. return ret
  72. @classmethod
  73. def fetch_by_id(cls, ids=None):
  74. """
  75. 用户列表
  76. :param uids: []
  77. :return:
  78. """
  79. if not ids:
  80. return None
  81. query = ServerModel.query.filter(ServerModel.id.in_(ids))\
  82. .filter(ServerModel.status.notin_([cls.status_remove]))
  83. data = query.order_by(ServerModel.id.desc()).all()
  84. return [p.to_json() for p in data]
  85. def to_json(self):
  86. item = {
  87. 'id': self.id,
  88. 'name': self.name,
  89. 'host': self.host,
  90. 'user': self.user,
  91. 'port': self.port,
  92. 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  93. 'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  94. }
  95. item.update(self.enable())
  96. return item
  97. def enable(self):
  98. return {
  99. 'enable_view': True,
  100. 'enable_update': permission.role_upper_developer(),
  101. 'enable_delete': permission.role_upper_developer(),
  102. 'enable_create': False,
  103. 'enable_online': False,
  104. 'enable_audit': permission.role_upper_owner(),
  105. 'enable_block': False,
  106. }