25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

111 satır
3.3KB

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