mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-03 11:56:52 +00:00
Merge branch 'catch_decode_error' into 'master'
Catch UnicodeDecodeError while parsing config files See merge request pycqa/flake8!208
This commit is contained in:
commit
7146aff813
2 changed files with 27 additions and 8 deletions
|
|
@ -60,13 +60,21 @@ class ConfigFileFinder(object):
|
|||
@staticmethod
|
||||
def _read_config(files):
|
||||
config = configparser.RawConfigParser()
|
||||
try:
|
||||
found_files = config.read(files)
|
||||
except configparser.ParsingError:
|
||||
LOG.exception("There was an error trying to parse a config "
|
||||
"file. The files we were attempting to parse "
|
||||
"were: %r", files)
|
||||
found_files = []
|
||||
if isinstance(files, (str, type(u''))):
|
||||
files = [files]
|
||||
|
||||
found_files = []
|
||||
for filename in files:
|
||||
try:
|
||||
found_files.extend(config.read(filename))
|
||||
except UnicodeDecodeError:
|
||||
LOG.exception("There was an error decoding a config file."
|
||||
"The file with a problem was %s.",
|
||||
filename)
|
||||
except configparser.ParsingError:
|
||||
LOG.exception("There was an error trying to parse a config "
|
||||
"file. The file with a problem was %s.",
|
||||
filename)
|
||||
return (config, found_files)
|
||||
|
||||
def cli_config(self, files):
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Tests for the ConfigFileFinder."""
|
||||
import configparser
|
||||
import os
|
||||
|
|
@ -135,4 +136,14 @@ def test_local_configs_double_read():
|
|||
])
|
||||
def test_read_config_catches_broken_config_files(files):
|
||||
"""Verify that we do not allow the exception to bubble up."""
|
||||
assert config.ConfigFileFinder._read_config(files)[1] == []
|
||||
_, parsed = config.ConfigFileFinder._read_config(files)
|
||||
assert BROKEN_CONFIG_PATH not in parsed
|
||||
|
||||
|
||||
def test_read_config_catches_decoding_errors(tmpdir):
|
||||
"""Verify that we do not allow the exception to bubble up."""
|
||||
setup_cfg = tmpdir.join('setup.cfg')
|
||||
# pick an encoding that's unlikely to be a default
|
||||
setup_cfg.write_binary(u'[x]\ny = €'.encode('cp1252'))
|
||||
_, parsed = config.ConfigFileFinder._read_config(setup_cfg.strpath)
|
||||
assert parsed == []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue