class JsonDB(dict):
def __init__(self, json_file=None, **kwargs):
if json_file: # чтение из файла
from json import load
with open(json_file, "r") as f:
dict_json = load(f)
else: dict_json = {} # создаем пустой словарь
# обновим словарем переданным в коснтрукторе
dict_json.update(kwargs)
for key,val in dict_json.iteritems():
# каждый словарь в списке преобразуем в объект этого же класса
# TODO: добавить реализацию для других типов данных
# list[...] = {dict}
if isinstance(val, list):
dict_json[key] = [JsonDB(**sub_val) for sub_val in val]
dict.__init__(self, dict_json) # инициализация словаря родителя
def __getattr__(self, key):
try:
return self[key]
except KeyError, k:
raise AttributeError, k
def __setattr__(self, key, value):
self[key] = value
def __delattr__(self, key):
try:
del self[key]
except KeyError, k:
raise AttributeError, k
Возможности:
- загрузка файла JSON и преобразование его в наследуемый от словаря объект.
- доступ к аттрибутам через точку(.) или по ключу (['key'])
Своего рода база данных для сайта, которая передается шаблону.
Спасибо!