crunk
1 year ago
7 changed files with 119 additions and 31 deletions
@ -0,0 +1 @@ |
|||
{} |
@ -0,0 +1,60 @@ |
|||
from os import environ, mkdir |
|||
from os.path import exists |
|||
from pathlib import Path |
|||
from logging import DEBUG, INFO, basicConfig, getLogger |
|||
from json import dumps, loads |
|||
|
|||
class SimpleJsonStorage(dict): |
|||
"""A simple json file. |
|||
It is a dictionary which saves to disk on all writes. It is optimised for |
|||
ease of hacking and accessibility and not for performance or efficiency. |
|||
Written by decentral1se, as part of: |
|||
https://git.vvvvvvaria.org/decentral1se/xbotlib/src/branch/main/xbotlib.py |
|||
""" |
|||
|
|||
def __init__(self, filename, log, *args, **kwargs): |
|||
"""Initialise the object.""" |
|||
self.filename = Path(filename).absolute() |
|||
self.log = getLogger(__name__) |
|||
|
|||
self._loads() |
|||
self.update(*args, **kwargs) |
|||
|
|||
def _loads(self): |
|||
"""Load the file.""" |
|||
if not exists(self.filename): |
|||
return |
|||
|
|||
try: |
|||
with open(self.filename, "r") as handle: |
|||
self.update(loads(handle.read())) |
|||
except Exception as exception: |
|||
message = f"Loading file storage failed: {exception}" |
|||
self.log.error(message, exc_info=exception) |
|||
exit(1) |
|||
|
|||
def _dumps(self): |
|||
"""Save the file to disk.""" |
|||
try: |
|||
with open(self.filename, "w") as handle: |
|||
handle.write(dumps(self, indent=4, sort_keys=True)) |
|||
except Exception as exception: |
|||
message = f"Saving file storage failed: {exception}" |
|||
self.log.error(message, exc_info=exception) |
|||
exit(1) |
|||
|
|||
def __setitem__(self, key, val): |
|||
"""Write data to the file.""" |
|||
super().__setitem__(key, val) |
|||
self._dumps() |
|||
|
|||
def __delitem__(self, key): |
|||
"""Remove data from the file.""" |
|||
super().__delitem__(key) |
|||
self._dumps() |
|||
|
|||
def update(self, *args, **kwargs): |
|||
"""Update the file.""" |
|||
for k, v in dict(*args, **kwargs).items(): |
|||
self[k] = v |
|||
self._dumps() |
Loading…
Reference in new issue