config & rights: use open() for better error messages
ConfigParser().read() doesn't differentiate between different types of failure to read files, causing eg. "No such file" to be logged in all cases, for example if permissions are insufficient. fix that by using open() and ConfigParser().read_file() instead.
This commit is contained in:
parent
8fa4345b6f
commit
4c44940ec1
@ -276,17 +276,18 @@ def load(paths: Optional[Iterable[Tuple[str, bool]]] = None
|
||||
for path, ignore_if_missing in paths:
|
||||
parser = RawConfigParser()
|
||||
config_source = "config file %r" % path
|
||||
config: types.CONFIG
|
||||
try:
|
||||
if not parser.read(path):
|
||||
config = Configuration.SOURCE_MISSING
|
||||
if not ignore_if_missing:
|
||||
raise RuntimeError("No such file: %r" % path)
|
||||
else:
|
||||
with open(path, "r") as f:
|
||||
parser.read_file(f)
|
||||
config = {s: {o: parser[s][o] for o in parser.options(s)}
|
||||
for s in parser.sections()}
|
||||
except Exception as e:
|
||||
raise RuntimeError("Failed to load %s: %s" % (config_source, e)
|
||||
) from e
|
||||
if isinstance(e, FileNotFoundError) and ignore_if_missing:
|
||||
config = Configuration.SOURCE_MISSING
|
||||
else:
|
||||
raise RuntimeError("Failed to load %s: %s" % (config_source, e)
|
||||
) from e
|
||||
configuration.update(config, config_source)
|
||||
return configuration
|
||||
|
||||
|
@ -56,8 +56,8 @@ class Rights(rights.BaseRights):
|
||||
escaped_user = re.escape(user)
|
||||
rights_config = configparser.ConfigParser()
|
||||
try:
|
||||
if not rights_config.read(self._filename):
|
||||
raise RuntimeError("No such file: %r" % self._filename)
|
||||
with open(self._filename, "r") as f:
|
||||
rights_config.read_file(f)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Failed to load rights file %r: %s" %
|
||||
(self._filename, e)) from e
|
||||
|
Loading…
Reference in New Issue
Block a user