storage.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import os
  2. import pickle
  3. import uuid
  4. import time
  5. class Storage():
  6. objects = {}
  7. def __init__(self, name):
  8. self.name = f"/storage/{name}.obj"
  9. self._load()
  10. def _load(self):
  11. if not os.path.exists(self.name):
  12. self._save()
  13. with open(self.name, "rb") as s:
  14. self.objects = pickle.load(s)
  15. def _save(self):
  16. with open(self.name, "wb") as s:
  17. pickle.dump(self.objects, s, pickle.HIGHEST_PROTOCOL)
  18. def create(self, obj):
  19. obj["id"] = uuid.uuid1().hex
  20. self.update(obj)
  21. def read(self, ts = 0):
  22. if ts == 0:
  23. return self.objects
  24. else:
  25. return { k: v for k, v in self.objects.items() if v["ts"] > ts }
  26. def update(self, obj):
  27. obj["ts"] = time.time()
  28. self.objects[obj["id"]] = obj
  29. self._save()
  30. def delete(self, obj_id):
  31. if not obj_id in self.objects:
  32. return False
  33. del self.objects[obj_id]
  34. self._save()
  35. return True