Skip to content

Commit 57ab2ce

Browse files
committed
Update jconfig
1 parent 531bf06 commit 57ab2ce

3 files changed

Lines changed: 57 additions & 55 deletions

File tree

jconfig/base.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: python273
4+
@contact: https://vk.com/python273
5+
@license Apache License, Version 2.0, see LICENSE file
6+
7+
Copyright (C) 2017
8+
"""
9+
10+
11+
class BaseConfig(object):
12+
13+
__slots__ = ('section_name', '_settings', '_section')
14+
15+
def __init__(self, section, **kwargs):
16+
self.section_name = section
17+
18+
self._settings = self.load(**kwargs)
19+
self._section = self._settings.setdefault(section, {})
20+
21+
def __getattr__(self, name):
22+
return self._section.get(name)
23+
24+
__getitem__ = __getattr__
25+
26+
def __setattr__(self, name, value):
27+
if name in self.__slots__:
28+
return super(BaseConfig, self).__setattr__(name, value)
29+
30+
self._section[name] = value
31+
32+
__setitem__ = __setattr__
33+
34+
def setdefault(self, k, d=None):
35+
return self._section.setdefault(k, d)
36+
37+
def clear_section(self):
38+
self._section.clear()
39+
40+
def load(self, **kwargs):
41+
raise NotImplementedError
42+
43+
def save(self):
44+
raise NotImplementedError

jconfig/jconfig.py

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,26 @@
99

1010
import json
1111

12+
from .base import BaseConfig
1213

13-
class Config(object):
14-
__slots__ = ('_section', '_filename', '_settings')
1514

16-
def __init__(self, section, filename='.jconfig'):
17-
self._section = section
18-
self._filename = filename
19-
self._settings = self.load()
20-
21-
def __getattr__(self, name):
22-
return self._settings[self._section].get(name)
23-
24-
def __getitem__(self, key):
25-
return self.__getattr__(key)
15+
class Config(BaseConfig):
2616

27-
def __setattr__(self, name, value):
28-
if name.startswith('_'):
29-
super(Config, self).__setattr__(name, value)
30-
return
17+
__slots__ = BaseConfig.__slots__ + ('_filename',)
3118

32-
self._settings[self._section][name] = value
33-
34-
def __setitem__(self, key, value):
35-
return self.__setattr__(key, value)
19+
def __init__(self, section, filename='.jconfig'):
20+
self._filename = filename
3621

37-
def clear_section(self):
38-
self._settings[self._section] = {}
22+
super(Config, self).__init__(section, filename=filename)
3923

40-
def load(self):
24+
def load(self, filename, **kwargs):
4125
try:
42-
with open(self._filename, 'r') as f:
26+
with open(filename, 'r') as f:
4327
settings = json.load(f)
4428
except (IOError, ValueError):
4529
settings = {}
4630

47-
settings.setdefault(self._section, {})
31+
settings.setdefault(self.section_name, {})
4832

4933
return settings
5034

jconfig/memory.py

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,12 @@
77
Copyright (C) 2017
88
"""
99

10+
from .base import BaseConfig
1011

11-
class MemoryConfig(object):
1212

13-
__slots__ = ('_section', '_settings')
14-
15-
def __init__(self, section, filename=None, settings=None):
16-
self._section = section
17-
18-
if settings is not None:
19-
self._settings = settings
20-
else:
21-
self._settings = {}
22-
23-
self._settings.setdefault(section, {})
24-
25-
def __getattr__(self, name):
26-
return self._settings[self._section].get(name)
27-
28-
def __getitem__(self, key):
29-
return self.__getattr__(key)
30-
31-
def __setattr__(self, name, value):
32-
if name.startswith('_'):
33-
return super(MemoryConfig, self).__setattr__(name, value)
34-
35-
self._settings[self._section][name] = value
36-
37-
def __setitem__(self, key, value):
38-
return self.__setattr__(key, value)
39-
40-
def clear_section(self):
41-
self._settings[self._section] = {}
13+
class MemoryConfig(BaseConfig):
14+
def load(self, settings=None, **kwargs):
15+
return {} if settings is None else settings
4216

4317
def save(self):
4418
pass

0 commit comments

Comments
 (0)