UTop/src/core/desktop_parsing/db/KeyValueJsonDb.py

43 lines
1.1 KiB
Python

# Python imports
import os
import json
from distutils.dir_util import mkpath
# Lib imports
# Application imports
from .KeyValueDb import KeyValueDb, Key, Value
class KeyValueJsonDb(KeyValueDb[Key, Value]):
"""
Key-value JSON database
Use open() method to load DB from a file and commit() to save it
"""
def open(self) -> 'KeyValueJsonDb':
"""Create a new data base or open existing one"""
if os.path.exists(self._name):
if not os.path.isfile(self._name):
raise IOError("%s exists and is not a file" % self._name)
try:
with open(self._name, 'r') as _in:
self.set_records(json.load(_in))
except json.JSONDecodeError:
self.commit()
else:
mkpath(os.path.dirname(self._name))
self.commit()
return self
def commit(self) -> 'KeyValueJsonDb':
""" Write the database to a file... """
with open(self._name, 'w') as out:
json.dump(self._records, out, indent=4)
out.close()
return self