a lot of fixes, improve visualization speed, add c++ code
diff --git a/wally/storage.py b/wally/storage.py
index 0459305..aa90ac9 100644
--- a/wally/storage.py
+++ b/wally/storage.py
@@ -235,6 +235,7 @@
def __init__(self, sstorage: ISimpleStorage, serializer: ISerializer) -> None:
self.sstorage = sstorage
self.serializer = serializer
+ self.cache = {}
def sub_storage(self, *path: str) -> 'Storage':
fpath = "/".join(path)
@@ -293,13 +294,17 @@
def load_list(self, obj_class: Type[ObjClass], *path: str) -> List[ObjClass]:
path_s = "/".join(path)
- raw_val = cast(List[Dict[str, Any]], self.get(path_s))
- assert isinstance(raw_val, list)
- return [cast(ObjClass, obj_class.fromraw(val)) for val in raw_val]
+ if path_s not in self.cache:
+ raw_val = cast(List[Dict[str, Any]], self.get(path_s))
+ assert isinstance(raw_val, list)
+ self.cache[path_s] = [cast(ObjClass, obj_class.fromraw(val)) for val in raw_val]
+ return self.cache[path_s]
def load(self, obj_class: Type[ObjClass], *path: str) -> ObjClass:
path_s = "/".join(path)
- return cast(ObjClass, obj_class.fromraw(self.get(path_s)))
+ if path_s not in self.cache:
+ self.cache[path_s] = cast(ObjClass, obj_class.fromraw(self.get(path_s)))
+ return self.cache[path_s]
def sync(self) -> None:
self.sstorage.sync()