No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

109 líneas
3.1KB

  1. from flask import request, json
  2. from flask_classy import route, FlaskView
  3. from modules 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._pre_post_callback(data)
  28. m = self.model.insert(**data)
  29. if self.api.cache.get(self.cache_key) is not None:
  30. self.api.cache.get(self.cache_key)[m.id] = m
  31. self._post_post_callback(m)
  32. return json.dumps(m)
  33. def _pre_put_callback(self, m):
  34. pass
  35. def _post_put_callback(self, m):
  36. pass
  37. @route('/<int:id>', methods=["PUT"])
  38. def put(self, id):
  39. data = request.json
  40. data["id"] = id
  41. try:
  42. del data["instance"]
  43. except:
  44. pass
  45. if self.api.cache.get(self.cache_key) is not None:
  46. self._pre_put_callback(self.api.cache.get(self.cache_key)[id])
  47. self.api.cache.get(self.cache_key)[id].__dict__.update(**data)
  48. m = self.model.update(**self.api.cache.get(self.cache_key)[id].__dict__)
  49. self._post_put_callback(self.api.cache.get(self.cache_key)[id])
  50. return json.dumps(self.api.cache.get(self.cache_key)[id])
  51. else:
  52. m = self.model.update(**data)
  53. self._post_put_callback(m)
  54. return json.dumps(m)
  55. def _pre_delete_callback(self, m):
  56. pass
  57. def _post_delete_callback(self, id):
  58. pass
  59. @route('/<int:id>', methods=["DELETE"])
  60. def delete(self, id):
  61. if self.api.cache.get(self.cache_key) is not None:
  62. self._pre_delete_callback(self.api.cache.get(self.cache_key)[id])
  63. del self.api.cache.get(self.cache_key)[id]
  64. m = self.model.delete(id)
  65. def _post_delete_callback(self, id):
  66. pass
  67. return ('',204)
  68. @classmethod
  69. def post_init_callback(cls, obj):
  70. pass
  71. @classmethod
  72. def init_cache(cls):
  73. with cls.api.app.app_context():
  74. if cls.model.__as_array__ is True:
  75. cls.api.cache[cls.cache_key] = []
  76. for value in cls.model.get_all():
  77. cls.post_init_callback(value)
  78. cls.api.cache[cls.cache_key].append(value)
  79. else:
  80. cls.api.cache[cls.cache_key] = {}
  81. for key, value in list(cls.model.get_all().items()):
  82. cls.post_init_callback(value)
  83. cls.api.cache[cls.cache_key][key] = value