ayaka.json_ctrl

 1class AbstractJsonCtrl:
 2    '''JSON控制器'''
 3
 4    def __init__(self, *keys) -> None:
 5        self._keys = keys
 6
 7    def _load(self):
 8        raise NotImplementedError
 9
10    def _save(self, data):
11        raise NotImplementedError
12
13    def chain(self, *keys) -> "AbstractJsonCtrl":
14        raise NotImplementedError
15
16    def get(self, default=None):
17        data = self._load()
18        for k in self._keys:
19            if not isinstance(data, dict):
20                return default
21            if k not in data:
22                return default
23            data = data[k]
24        return data
25
26    def set(self, value):
27        if not self._keys:
28            self._save(value)
29            return value
30
31        origin = self._load()
32        if not isinstance(origin, dict):
33            origin = {}
34        data = origin
35        for k in self._keys[:-1]:
36            if k not in data or not isinstance(data[k], dict):
37                data[k] = {}
38            data = data[k]
39        data[self._keys[-1]] = value
40        self._save(origin)
41        return value
class AbstractJsonCtrl:
 2class AbstractJsonCtrl:
 3    '''JSON控制器'''
 4
 5    def __init__(self, *keys) -> None:
 6        self._keys = keys
 7
 8    def _load(self):
 9        raise NotImplementedError
10
11    def _save(self, data):
12        raise NotImplementedError
13
14    def chain(self, *keys) -> "AbstractJsonCtrl":
15        raise NotImplementedError
16
17    def get(self, default=None):
18        data = self._load()
19        for k in self._keys:
20            if not isinstance(data, dict):
21                return default
22            if k not in data:
23                return default
24            data = data[k]
25        return data
26
27    def set(self, value):
28        if not self._keys:
29            self._save(value)
30            return value
31
32        origin = self._load()
33        if not isinstance(origin, dict):
34            origin = {}
35        data = origin
36        for k in self._keys[:-1]:
37            if k not in data or not isinstance(data[k], dict):
38                data[k] = {}
39            data = data[k]
40        data[self._keys[-1]] = value
41        self._save(origin)
42        return value

JSON控制器

AbstractJsonCtrl(*keys)
5    def __init__(self, *keys) -> None:
6        self._keys = keys
def chain(self, *keys) -> ayaka.json_ctrl.AbstractJsonCtrl:
14    def chain(self, *keys) -> "AbstractJsonCtrl":
15        raise NotImplementedError
def get(self, default=None):
17    def get(self, default=None):
18        data = self._load()
19        for k in self._keys:
20            if not isinstance(data, dict):
21                return default
22            if k not in data:
23                return default
24            data = data[k]
25        return data
def set(self, value):
27    def set(self, value):
28        if not self._keys:
29            self._save(value)
30            return value
31
32        origin = self._load()
33        if not isinstance(origin, dict):
34            origin = {}
35        data = origin
36        for k in self._keys[:-1]:
37            if k not in data or not isinstance(data[k], dict):
38                data[k] = {}
39            data = data[k]
40        data[self._keys[-1]] = value
41        self._save(origin)
42        return value