mirror of
https://github.com/hrfee/jellyfin-accounts.git
synced 2026-06-24 04:11:42 +00:00
Modularized JSON storage
user_template and other files are now accessed via JSONStorage, which has dictionary like attributes for each file which can be used like a dictionary, without the need to manually read and write the file. This was done so that other storage types (e.g a database) can be added in future.
This commit is contained in:
66
jellyfin_accounts/data_store.py
Normal file
66
jellyfin_accounts/data_store.py
Normal file
@@ -0,0 +1,66 @@
|
||||
import json
|
||||
import datetime
|
||||
|
||||
class JSONFile(dict):
|
||||
@staticmethod
|
||||
def readJSON(path):
|
||||
try:
|
||||
with open(path, 'r') as f:
|
||||
return json.load(f)
|
||||
except FileNotFoundError:
|
||||
return {}
|
||||
|
||||
@staticmethod
|
||||
def writeJSON(path, data):
|
||||
with open(path, 'w') as f:
|
||||
return f.write(json.dumps(data, indent=4, default=str))
|
||||
|
||||
def __init__(self, path, data=None):
|
||||
self.path = path
|
||||
if data is None:
|
||||
super(JSONFile, self).__init__(self.readJSON(self.path))
|
||||
else:
|
||||
super(JSONFile, self).__init__(data)
|
||||
self.writeJSON(self.path, data)
|
||||
|
||||
def __getitem__(self, key):
|
||||
super(JSONFile, self).__init__(self.readJSON(self.path))
|
||||
return super(JSONFile, self).__getitem__(key)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
data = self.readJSON(self.path)
|
||||
data[key] = value
|
||||
self.writeJSON(self.path, data)
|
||||
super(JSONFile, self).__init__(data)
|
||||
|
||||
def __delitem__(self, key):
|
||||
data = self.readJSON(self.path)
|
||||
super(JSONFile, self).__init__(data)
|
||||
del data[key]
|
||||
self.writeJSON(self.path, data)
|
||||
super(JSONFile, self).__delitem__(key)
|
||||
|
||||
def __str__(self):
|
||||
super(JSONFile, self).__init__(self.readJSON(self.path))
|
||||
return json.dumps(super(JSONFile, self))
|
||||
|
||||
|
||||
class JSONStorage:
|
||||
def __init__(self,
|
||||
emails,
|
||||
invites,
|
||||
user_template,
|
||||
user_displayprefs,
|
||||
user_configuration):
|
||||
self.emails = JSONFile(path=emails)
|
||||
self.invites = JSONFile(path=invites)
|
||||
self.user_template = JSONFile(path=user_template)
|
||||
self.user_displayprefs = JSONFile(path=user_displayprefs)
|
||||
self.user_configuration = JSONFile(path=user_configuration)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
if hasattr(self, name):
|
||||
path = self.__dict__[name].path
|
||||
self.__dict__[name] = JSONFile(path=path, data=value)
|
||||
else:
|
||||
self.__dict__[name] = value
|
||||
Reference in New Issue
Block a user