2014-09-01 07:52:01 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2014-05-04 17:26:43 +00:00
|
|
|
import os
|
|
|
|
import json
|
|
|
|
|
|
|
|
class pdict(dict):
|
|
|
|
def __init__(self, path, defaults=None):
|
|
|
|
self._path = None
|
|
|
|
self._defaults = defaults
|
|
|
|
if os.path.exists(path):
|
|
|
|
with open(path) as fd:
|
|
|
|
_data = json.load(fd)
|
|
|
|
for key in _data:
|
|
|
|
self[key] = _data[key]
|
|
|
|
self._path = path
|
|
|
|
|
|
|
|
def _save(self):
|
|
|
|
if self._path:
|
2016-03-23 13:42:16 +00:00
|
|
|
with open(self._path, 'w', encoding='utf-8') as fd:
|
|
|
|
json.dump(self, fd, indent=4, sort_keys=True, ensure_ascii=False)
|
2014-05-04 17:26:43 +00:00
|
|
|
|
|
|
|
def get(self, key, default=None):
|
2019-01-11 09:48:53 +00:00
|
|
|
if default is None and self._defaults:
|
2014-05-04 17:26:43 +00:00
|
|
|
default = self._defaults.get(key)
|
|
|
|
return dict.get(self, key, default)
|
|
|
|
|
|
|
|
def __getitem__(self, key):
|
|
|
|
if key not in self and self._defaults and key in self._defaults:
|
|
|
|
return self._defaults[key]
|
|
|
|
return dict.__getitem__(self, key)
|
|
|
|
|
|
|
|
def __setitem__(self, key, value):
|
|
|
|
dict.__setitem__(self, key, value)
|
|
|
|
self._save()
|
|
|
|
|
|
|
|
def __delitem__(self, key):
|
|
|
|
dict.__delitem__(self, key)
|
|
|
|
self._save()
|
|
|
|
|