Improve error handling of bad config files

Related: #824
This commit is contained in:
pukkandan 2022-06-18 09:17:45 +05:30
parent bf1824b391
commit 44a6fcff39
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39
2 changed files with 12 additions and 6 deletions

View File

@ -95,13 +95,17 @@ def load_configs():
yield add_config('System', '/etc') yield add_config('System', '/etc')
opts = optparse.Values({'verbose': True, 'print_help': False}) opts = optparse.Values({'verbose': True, 'print_help': False})
try:
try: try:
if overrideArguments: if overrideArguments:
root.append_config(overrideArguments, label='Override') root.append_config(overrideArguments, label='Override')
else: else:
root.append_config(sys.argv[1:], label='Command-line') root.append_config(sys.argv[1:], label='Command-line')
loaded_all_configs = all(load_configs())
except ValueError as err:
raise root.parser.error(err)
if all(load_configs()): if loaded_all_configs:
# If ignoreconfig is found inside the system configuration file, # If ignoreconfig is found inside the system configuration file,
# the user configuration is removed # the user configuration is removed
if root.parse_known_args()[0].ignoreconfig: if root.parse_known_args()[0].ignoreconfig:
@ -183,7 +187,7 @@ def parse_known_args(self, args=None, values=None, strict=True):
return self.check_values(self.values, self.largs) return self.check_values(self.values, self.largs)
def error(self, msg): def error(self, msg):
msg = f'{self.get_prog_name()}: error: {msg.strip()}\n' msg = f'{self.get_prog_name()}: error: {str(msg).strip()}\n'
raise optparse.OptParseError(f'{self.get_usage()}\n{msg}' if self.usage else msg) raise optparse.OptParseError(f'{self.get_usage()}\n{msg}' if self.usage else msg)
def _get_args(self, args): def _get_args(self, args):

View File

@ -5420,6 +5420,8 @@ def read_file(filename, default=[]):
# FIXME: https://github.com/ytdl-org/youtube-dl/commit/dfe5fa49aed02cf36ba9f743b11b0903554b5e56 # FIXME: https://github.com/ytdl-org/youtube-dl/commit/dfe5fa49aed02cf36ba9f743b11b0903554b5e56
contents = optionf.read() contents = optionf.read()
res = shlex.split(contents, comments=True) res = shlex.split(contents, comments=True)
except Exception as err:
raise ValueError(f'Unable to parse "{filename}": {err}')
finally: finally:
optionf.close() optionf.close()
return res return res