cache.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from abc import ABC, abstractmethod
  2. import uuid
  3. class Cache(ABC):
  4. @abstractmethod
  5. def generate_id(self, *args, **kwargs):
  6. pass
  7. @abstractmethod
  8. def get(self, id, field):
  9. pass
  10. @abstractmethod
  11. def get_all(self, field_list) -> list:
  12. pass
  13. @abstractmethod
  14. def set(self, id, field, value):
  15. pass
  16. @abstractmethod
  17. def delete(self, id):
  18. pass
  19. class MemoryCache(Cache):
  20. def __init__(self):
  21. self.cache = {}
  22. def generate_id(self, *args, **kwargs):
  23. return str(uuid.uuid4())
  24. def set(self, id, field, value):
  25. if id not in self.cache:
  26. self.cache[id] = {}
  27. self.cache[id][field] = value
  28. def get(self, id, field):
  29. if id not in self.cache:
  30. return None
  31. if field not in self.cache[id]:
  32. return None
  33. return self.cache[id][field]
  34. def get_all(self, field_list) -> list:
  35. return [
  36. {
  37. "id": id,
  38. **{
  39. field: self.get(id=id, field=field)
  40. for field in field_list
  41. }
  42. }
  43. for id in self.cache
  44. ]
  45. def delete(self, id):
  46. if id in self.cache:
  47. del self.cache[id]