Ver Fonte

Merge pull request #2145 from zauberzeug/robust_persistence

Persistence should handle issues when json data is broken
Falko Schindler há 1 ano atrás
pai
commit
7662ac123a
1 ficheiros alterados com 6 adições e 1 exclusões
  1. 6 1
      nicegui/storage.py

+ 6 - 1
nicegui/storage.py

@@ -13,6 +13,7 @@ from starlette.requests import Request
 from starlette.responses import Response
 from starlette.responses import Response
 
 
 from . import background_tasks, context, core, json, observables
 from . import background_tasks, context, core, json, observables
+from .logging import log
 
 
 request_contextvar: contextvars.ContextVar[Optional[Request]] = contextvars.ContextVar('request_var', default=None)
 request_contextvar: contextvars.ContextVar[Optional[Request]] = contextvars.ContextVar('request_var', default=None)
 
 
@@ -43,7 +44,11 @@ class PersistentDict(observables.ObservableDict):
 
 
     def __init__(self, filepath: Path) -> None:
     def __init__(self, filepath: Path) -> None:
         self.filepath = filepath
         self.filepath = filepath
-        data = json.loads(filepath.read_text()) if filepath.exists() else {}
+        try:
+            data = json.loads(filepath.read_text()) if filepath.exists() else {}
+        except Exception:
+            log.warning(f'Could not load storage file {filepath}')
+            data = {}
         super().__init__(data, on_change=self.backup)
         super().__init__(data, on_change=self.backup)
 
 
     def backup(self) -> None:
     def backup(self) -> None: