Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

117 Zeilen
3.4KB

  1. from flask import request, json
  2. from flask_classy import route, FlaskView
  3. from flask_login import login_required
  4. from modules.core.core import cbpi
  5. class BaseView(FlaskView):
  6. as_array = False
  7. cache_key = None
  8. api = cbpi
  9. @login_required
  10. @route('/<int:id>', methods=["GET"])
  11. def getOne(self, id):
  12. if self.api.cache.get(self.cache_key) is not None:
  13. return json.dumps(self.api.cache.get(self.cache_key).get(id))
  14. else:
  15. return json.dumps(self.model.get_one(id))
  16. @login_required
  17. @route('/', methods=["GET"])
  18. def getAll(self):
  19. if self.api.cache.get(self.cache_key) is not None:
  20. return json.dumps(self.api.cache.get(self.cache_key))
  21. else:
  22. return json.dumps(self.model.get_all())
  23. def _pre_post_callback(self, data):
  24. pass
  25. def _post_post_callback(self, m):
  26. pass
  27. @login_required
  28. @route('/', methods=["POST"])
  29. def post(self):
  30. data = request.json
  31. self.api._app.logger.info("INSERT Model %s", self.model.__name__)
  32. self._pre_post_callback(data)
  33. m = self.model.insert(**data)
  34. if self.api.cache.get(self.cache_key) is not None:
  35. self.api.cache.get(self.cache_key)[m.id] = m
  36. self._post_post_callback(m)
  37. return json.dumps(m)
  38. def _pre_put_callback(self, m):
  39. pass
  40. def _post_put_callback(self, m):
  41. pass
  42. @login_required
  43. @route('/<int:id>', methods=["PUT"])
  44. def put(self, id):
  45. data = request.json
  46. data["id"] = id
  47. try:
  48. del data["instance"]
  49. except:
  50. pass
  51. if self.api.cache.get(self.cache_key) is not None:
  52. self._pre_put_callback(self.api.cache.get(self.cache_key)[id])
  53. self.api.cache.get(self.cache_key)[id].__dict__.update(**data)
  54. m = self.model.update(**self.api.cache.get(self.cache_key)[id].__dict__)
  55. self._post_put_callback(self.api.cache.get(self.cache_key)[id])
  56. return json.dumps(self.api.cache.get(self.cache_key)[id])
  57. else:
  58. m = self.model.update(**data)
  59. self._post_put_callback(m)
  60. return json.dumps(m)
  61. def _pre_delete_callback(self, m):
  62. pass
  63. def _post_delete_callback(self, id):
  64. pass
  65. @login_required
  66. @route('/<int:id>', methods=["DELETE"])
  67. def delete(self, id):
  68. if self.api.cache.get(self.cache_key) is not None:
  69. self._pre_delete_callback(self.api.cache.get(self.cache_key)[id])
  70. del self.api.cache.get(self.cache_key)[id]
  71. m = self.model.delete(id)
  72. def _post_delete_callback(self, id):
  73. pass
  74. return ('',204)
  75. @classmethod
  76. def post_init_callback(cls, obj):
  77. pass
  78. @classmethod
  79. def init_cache(cls):
  80. with cls.api._app.app_context():
  81. if cls.model.__as_array__ is True:
  82. cls.api.cache[cls.cache_key] = []
  83. for value in cls.model.get_all():
  84. cls.post_init_callback(value)
  85. cls.api.cache[cls.cache_key].append(value)
  86. else:
  87. cls.api.cache[cls.cache_key] = {}
  88. for key, value in cls.model.get_all().iteritems():
  89. cls.post_init_callback(value)
  90. cls.api.cache[cls.cache_key][key] = value