Add some configparser-foo
This commit is contained in:
parent
8b0eb8e808
commit
f4d363082d
@ -15,13 +15,20 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
|
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
"""Configuration storage and config-related utilities."""
|
"""Configuration storage and config-related utilities.
|
||||||
|
|
||||||
|
This borrows a lot of ideas from configparser, but also has some things that
|
||||||
|
are fundamentally different. This is why nothing inherts from configparser, but
|
||||||
|
we borrow some methods and classes from there where it makes sense.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import logging
|
import logging
|
||||||
import textwrap
|
import textwrap
|
||||||
from configparser import ConfigParser
|
import configparser
|
||||||
|
from configparser import ConfigParser, ExtendedInterpolation
|
||||||
|
|
||||||
#from qutebrowser.utils.misc import read_file
|
#from qutebrowser.utils.misc import read_file
|
||||||
import qutebrowser.config.configdata as configdata
|
import qutebrowser.config.configdata as configdata
|
||||||
@ -59,6 +66,8 @@ class Config:
|
|||||||
_wrapper_args: A dict with the default kwargs for the config wrappers.
|
_wrapper_args: A dict with the default kwargs for the config wrappers.
|
||||||
_configdir: The dictionary to read the config from and save it in.
|
_configdir: The dictionary to read the config from and save it in.
|
||||||
_configfile: The config file path.
|
_configfile: The config file path.
|
||||||
|
_interpolation: An configparser.Interpolation object
|
||||||
|
_proxies: configparser.SectionProxy objects for sections.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -73,7 +82,10 @@ class Config:
|
|||||||
'break_on_hyphens': False,
|
'break_on_hyphens': False,
|
||||||
}
|
}
|
||||||
self._configdir = configdir
|
self._configdir = configdir
|
||||||
|
self._interpolation = ExtendedInterpolation()
|
||||||
|
self._proxies = {}
|
||||||
for secname, section in self.config.items():
|
for secname, section in self.config.items():
|
||||||
|
self._proxies[secname] = SectionProxy(self, secname)
|
||||||
try:
|
try:
|
||||||
section.from_cp(self._configparser[secname])
|
section.from_cp(self._configparser[secname])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -221,3 +233,52 @@ class ReadWriteConfigParser(ReadConfigParser):
|
|||||||
logging.debug("Saving config to {}".format(self._configfile))
|
logging.debug("Saving config to {}".format(self._configfile))
|
||||||
with open(self._configfile, 'w') as f:
|
with open(self._configfile, 'w') as f:
|
||||||
self.write(f)
|
self.write(f)
|
||||||
|
|
||||||
|
|
||||||
|
class SectionProxy(configparser.SectionProxy):
|
||||||
|
"""A proxy for a single section from a parser."""
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
return self._parser.get(self._name, key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
return self._parser.set(self._name, key, value)
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
# TODO
|
||||||
|
#if not (self._parser.has_option(self._name, key) and
|
||||||
|
# self._parser.remove_option(self._name, key)):
|
||||||
|
# raise KeyError(key)
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
# TODO
|
||||||
|
#return self._parser.has_option(self._name, key)
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def _options(self):
|
||||||
|
# TODO
|
||||||
|
return self._parser.options(self._name)
|
||||||
|
|
||||||
|
def get(self, option, fallback=None, *, raw=False, vars=None):
|
||||||
|
return self._parser.get(self._name, option, raw=raw, vars=vars,
|
||||||
|
fallback=fallback)
|
||||||
|
|
||||||
|
def getint(self, option, fallback=None, *, raw=False, vars=None):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def getfloat(self, option, fallback=None, *, raw=False, vars=None):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def getboolean(self, option, fallback=None, *, raw=False, vars=None):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parser(self):
|
||||||
|
# The parser object of the proxy is read-only.
|
||||||
|
return self._parser
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
# The name of the section on a proxy is read-only.
|
||||||
|
return self._name
|
||||||
|
Loading…
Reference in New Issue
Block a user