Bump pylint from 2.5.3 to 2.6.0 (#1262)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Otto Winter <otto@otto-winter.com>
This commit is contained in:
dependabot[bot] 2020-09-16 12:12:40 +02:00 committed by GitHub
parent a401c71d3e
commit e7bd93b4b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 53 additions and 37 deletions

View file

@ -181,7 +181,7 @@ class APIClient(threading.Thread):
self._address) self._address)
_LOGGER.warning("(If this error persists, please set a static IP address: " _LOGGER.warning("(If this error persists, please set a static IP address: "
"https://esphome.io/components/wifi.html#manual-ips)") "https://esphome.io/components/wifi.html#manual-ips)")
raise APIConnectionError(err) raise APIConnectionError(err) from err
_LOGGER.info("Connecting to %s:%s (%s)", self._address, self._port, ip) _LOGGER.info("Connecting to %s:%s (%s)", self._address, self._port, ip)
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@ -346,12 +346,12 @@ class APIClient(threading.Thread):
raise APIConnectionError("No socket!") raise APIConnectionError("No socket!")
try: try:
val = self._socket.recv(amount - len(ret)) val = self._socket.recv(amount - len(ret))
except AttributeError: except AttributeError as err:
raise APIConnectionError("Socket was closed") raise APIConnectionError("Socket was closed") from err
except socket.timeout: except socket.timeout:
continue continue
except OSError as err: except OSError as err:
raise APIConnectionError(f"Error while receiving data: {err}") raise APIConnectionError(f"Error while receiving data: {err}") from err
ret += val ret += val
return ret return ret

View file

@ -84,6 +84,7 @@ def validate_automation(extra_schema=None, extra_validators=None, single=False):
return cv.Schema([schema])(value) return cv.Schema([schema])(value)
except cv.Invalid as err2: except cv.Invalid as err2:
if 'extra keys not allowed' in str(err2) and len(err2.path) == 2: if 'extra keys not allowed' in str(err2) and len(err2.path) == 2:
# pylint: disable=raise-missing-from
raise err raise err
if 'Unable to find action' in str(err): if 'Unable to find action' in str(err):
raise err2 raise err2

View file

@ -104,6 +104,7 @@ def parse_multi_click_timing_str(value):
try: try:
state = cv.boolean(parts[0]) state = cv.boolean(parts[0])
except cv.Invalid: except cv.Invalid:
# pylint: disable=raise-missing-from
raise cv.Invalid("First word must either be ON or OFF, not {}".format(parts[0])) raise cv.Invalid("First word must either be ON or OFF, not {}".format(parts[0]))
if parts[1] != 'for': if parts[1] != 'for':

View file

@ -42,9 +42,9 @@ def validate_glyphs(value):
def validate_pillow_installed(value): def validate_pillow_installed(value):
try: try:
import PIL import PIL
except ImportError: except ImportError as err:
raise cv.Invalid("Please install the pillow python package to use this feature. " raise cv.Invalid("Please install the pillow python package to use this feature. "
"(pip install pillow)") "(pip install pillow)") from err
if PIL.__version__[0] < '4': if PIL.__version__[0] < '4':
raise cv.Invalid("Please update your pillow installation to at least 4.0.x. " raise cv.Invalid("Please update your pillow installation to at least 4.0.x. "

View file

@ -43,8 +43,8 @@ def validate_url(value):
value = cv.string(value) value = cv.string(value)
try: try:
parsed = list(urlparse.urlparse(value)) parsed = list(urlparse.urlparse(value))
except Exception: except Exception as err:
raise cv.Invalid('Invalid URL') raise cv.Invalid('Invalid URL') from err
if not parsed[0] or not parsed[1]: if not parsed[0] or not parsed[1]:
raise cv.Invalid('URL must have a URL scheme and host') raise cv.Invalid('URL must have a URL scheme and host')

View file

@ -18,8 +18,8 @@ def validate_uid(value):
"long.") "long.")
try: try:
x = int(x, 16) x = int(x, 16)
except ValueError: except ValueError as err:
raise cv.Invalid("Valid characters for parts of a UID are 0123456789ABCDEF.") raise cv.Invalid("Valid characters for parts of a UID are 0123456789ABCDEF.") from err
if x < 0 or x > 255: if x < 0 or x > 255:
raise cv.Invalid("Valid values for UID parts (separated by '-') are 00 to FF") raise cv.Invalid("Valid values for UID parts (separated by '-') are 00 to FF")
return value return value

View file

@ -28,6 +28,7 @@ def validate_acceleration(value):
try: try:
value = float(value) value = float(value)
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise cv.Invalid(f"Expected acceleration as floating point number, got {value}") raise cv.Invalid(f"Expected acceleration as floating point number, got {value}")
if value <= 0: if value <= 0:
@ -48,6 +49,7 @@ def validate_speed(value):
try: try:
value = float(value) value = float(value)
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise cv.Invalid(f"Expected speed as floating point number, got {value}") raise cv.Invalid(f"Expected speed as floating point number, got {value}")
if value <= 0: if value <= 0:

View file

@ -138,6 +138,7 @@ def _parse_cron_int(value, special_mapping, message):
try: try:
return int(value) return int(value)
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise cv.Invalid(message.format(value)) raise cv.Invalid(message.format(value))
@ -158,6 +159,7 @@ def _parse_cron_part(part, min_value, max_value, special_mapping):
try: try:
repeat_n = int(repeat) repeat_n = int(repeat)
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise cv.Invalid("Repeat for '/' time expression must be an integer, got {}" raise cv.Invalid("Repeat for '/' time expression must be an integer, got {}"
.format(repeat)) .format(repeat))
return set(range(offset_n, max_value + 1, repeat_n)) return set(range(offset_n, max_value + 1, repeat_n))

View file

@ -18,9 +18,9 @@ _LOGGER = logging.getLogger(__name__)
def validate_cryptography_installed(): def validate_cryptography_installed():
try: try:
import cryptography import cryptography
except ImportError: except ImportError as err:
raise cv.Invalid("This settings requires the cryptography python package. " raise cv.Invalid("This settings requires the cryptography python package. "
"Please install it with `pip install cryptography`") "Please install it with `pip install cryptography`") from err
if cryptography.__version__[0] < '2': if cryptography.__version__[0] < '2':
raise cv.Invalid("Please update your python cryptography installation to least 2.x " raise cv.Invalid("Please update your python cryptography installation to least 2.x "

View file

@ -675,7 +675,7 @@ def _load_config(command_line_substitutions):
try: try:
config = yaml_util.load_yaml(CORE.config_path) config = yaml_util.load_yaml(CORE.config_path)
except EsphomeError as e: except EsphomeError as e:
raise InvalidYAMLError(e) raise InvalidYAMLError(e) from e
CORE.raw_config = config CORE.raw_config = config
try: try:
@ -693,7 +693,7 @@ def load_config(command_line_substitutions):
try: try:
return _load_config(command_line_substitutions) return _load_config(command_line_substitutions)
except vol.Invalid as err: except vol.Invalid as err:
raise EsphomeError(f"Error while parsing config: {err}") raise EsphomeError(f"Error while parsing config: {err}") from err
def line_info(obj, highlight=True): def line_info(obj, highlight=True):

View file

@ -224,6 +224,7 @@ def int_(value):
try: try:
return int(value, base) return int(value, base)
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid(f"Expected integer, but cannot parse {value} as an integer") raise Invalid(f"Expected integer, but cannot parse {value} as an integer")
@ -423,6 +424,7 @@ def time_period_str_colon(value):
try: try:
parsed = [int(x) for x in value.split(':')] parsed = [int(x) for x in value.split(':')]
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid(TIME_PERIOD_ERROR.format(value)) raise Invalid(TIME_PERIOD_ERROR.format(value))
if len(parsed) == 2: if len(parsed) == 2:
@ -527,6 +529,7 @@ def time_of_day(value):
try: try:
date = datetime.strptime(value, '%H:%M:%S %p') date = datetime.strptime(value, '%H:%M:%S %p')
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid(f"Invalid time of day: {err}") raise Invalid(f"Invalid time of day: {err}")
return { return {
@ -548,6 +551,7 @@ def mac_address(value):
try: try:
parts_int.append(int(part, 16)) parts_int.append(int(part, 16))
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid("MAC Address parts must be hexadecimal values from 00 to FF") raise Invalid("MAC Address parts must be hexadecimal values from 00 to FF")
return core.MACAddress(*parts_int) return core.MACAddress(*parts_int)
@ -565,6 +569,7 @@ def bind_key(value):
try: try:
parts_int.append(int(part, 16)) parts_int.append(int(part, 16))
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid("Bind key must be hex values from 00 to FF") raise Invalid("Bind key must be hex values from 00 to FF")
return ''.join(f'{part:02X}' for part in parts_int) return ''.join(f'{part:02X}' for part in parts_int)
@ -686,8 +691,8 @@ def domain(value):
return value return value
try: try:
return str(ipv4(value)) return str(ipv4(value))
except Invalid: except Invalid as err:
raise Invalid(f"Invalid domain: {value}") raise Invalid(f"Invalid domain: {value}") from err
def domain_name(value): def domain_name(value):
@ -739,8 +744,8 @@ def _valid_topic(value):
value = string(value) value = string(value)
try: try:
raw_value = value.encode('utf-8') raw_value = value.encode('utf-8')
except UnicodeError: except UnicodeError as err:
raise Invalid("MQTT topic name/filter must be valid UTF-8 string.") raise Invalid("MQTT topic name/filter must be valid UTF-8 string.") from err
if not raw_value: if not raw_value:
raise Invalid("MQTT topic name/filter must not be empty.") raise Invalid("MQTT topic name/filter must not be empty.")
if len(raw_value) > 65535: if len(raw_value) > 65535:
@ -792,6 +797,7 @@ def mqtt_qos(value):
try: try:
value = int(value) value = int(value)
except (TypeError, ValueError): except (TypeError, ValueError):
# pylint: disable=raise-missing-from
raise Invalid(f"MQTT Quality of Service must be integer, got {value}") raise Invalid(f"MQTT Quality of Service must be integer, got {value}")
return one_of(0, 1, 2)(value) return one_of(0, 1, 2)(value)
@ -836,6 +842,7 @@ def possibly_negative_percentage(value):
else: else:
value = float(value) value = float(value)
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid("invalid number") raise Invalid("invalid number")
if value > 1: if value > 1:
msg = "Percentage must not be higher than 100%." msg = "Percentage must not be higher than 100%."
@ -1006,6 +1013,7 @@ def dimensions(value):
try: try:
width, height = int(value[0]), int(value[1]) width, height = int(value[0]), int(value[1])
except ValueError: except ValueError:
# pylint: disable=raise-missing-from
raise Invalid("Width and height dimensions must be integers") raise Invalid("Width and height dimensions must be integers")
if width <= 0 or height <= 0: if width <= 0 or height <= 0:
raise Invalid("Width and height must at least be 1") raise Invalid("Width and height must at least be 1")

View file

@ -83,19 +83,19 @@ def receive_exactly(sock, amount, msg, expect, decode=True):
try: try:
data += recv_decode(sock, 1, decode=decode) data += recv_decode(sock, 1, decode=decode)
except OSError as err: except OSError as err:
raise OTAError(f"Error receiving acknowledge {msg}: {err}") raise OTAError(f"Error receiving acknowledge {msg}: {err}") from err
try: try:
check_error(data, expect) check_error(data, expect)
except OTAError as err: except OTAError as err:
sock.close() sock.close()
raise OTAError(f"Error {msg}: {err}") raise OTAError(f"Error {msg}: {err}") from err
while len(data) < amount: while len(data) < amount:
try: try:
data += recv_decode(sock, amount - len(data), decode=decode) data += recv_decode(sock, amount - len(data), decode=decode)
except OSError as err: except OSError as err:
raise OTAError(f"Error receiving {msg}: {err}") raise OTAError(f"Error receiving {msg}: {err}") from err
return data return data
@ -151,7 +151,7 @@ def send_check(sock, data, msg):
sock.sendall(data) sock.sendall(data)
except OSError as err: except OSError as err:
raise OTAError(f"Error sending {msg}: {err}") raise OTAError(f"Error sending {msg}: {err}") from err
def perform_ota(sock, password, file_handle, filename): def perform_ota(sock, password, file_handle, filename):
@ -226,7 +226,7 @@ def perform_ota(sock, password, file_handle, filename):
sock.sendall(chunk) sock.sendall(chunk)
except OSError as err: except OSError as err:
sys.stderr.write('\n') sys.stderr.write('\n')
raise OTAError(f"Error sending data: {err}") raise OTAError(f"Error sending data: {err}") from err
progress.update(offset / float(file_size)) progress.update(offset / float(file_size))
progress.done() progress.done()
@ -259,7 +259,7 @@ def run_ota_impl_(remote_host, remote_port, password, filename):
remote_host) remote_host)
_LOGGER.error("(If this error persists, please set a static IP address: " _LOGGER.error("(If this error persists, please set a static IP address: "
"https://esphome.io/components/wifi.html#manual-ips)") "https://esphome.io/components/wifi.html#manual-ips)")
raise OTAError(err) raise OTAError(err) from err
_LOGGER.info(" -> %s", ip) _LOGGER.info(" -> %s", ip)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

View file

@ -89,7 +89,7 @@ def mkdir_p(path):
pass pass
else: else:
from esphome.core import EsphomeError from esphome.core import EsphomeError
raise EsphomeError(f"Error creating directories {path}: {err}") raise EsphomeError(f"Error creating directories {path}: {err}") from err
def is_ip_address(host): def is_ip_address(host):
@ -110,13 +110,13 @@ def _resolve_with_zeroconf(host):
try: try:
zc = Zeroconf() zc = Zeroconf()
except Exception: except Exception as err:
raise EsphomeError("Cannot start mDNS sockets, is this a docker container without " raise EsphomeError("Cannot start mDNS sockets, is this a docker container without "
"host network mode?") "host network mode?") from err
try: try:
info = zc.resolve_host(host + '.') info = zc.resolve_host(host + '.')
except Exception as err: except Exception as err:
raise EsphomeError(f"Error resolving mDNS hostname: {err}") raise EsphomeError(f"Error resolving mDNS hostname: {err}") from err
finally: finally:
zc.close() zc.close()
if info is None: if info is None:
@ -142,7 +142,7 @@ def resolve_ip_address(host):
except OSError as err: except OSError as err:
errs.append(str(err)) errs.append(str(err))
raise EsphomeError("Error resolving IP address: {}" raise EsphomeError("Error resolving IP address: {}"
"".format(', '.join(errs))) "".format(', '.join(errs))) from err
def get_bool_env(var, default=False): def get_bool_env(var, default=False):
@ -165,10 +165,10 @@ def read_file(path):
return f_handle.read() return f_handle.read()
except OSError as err: except OSError as err:
from esphome.core import EsphomeError from esphome.core import EsphomeError
raise EsphomeError(f"Error reading file {path}: {err}") raise EsphomeError(f"Error reading file {path}: {err}") from err
except UnicodeDecodeError as err: except UnicodeDecodeError as err:
from esphome.core import EsphomeError from esphome.core import EsphomeError
raise EsphomeError(f"Error reading file {path}: {err}") raise EsphomeError(f"Error reading file {path}: {err}") from err
def _write_file(path: Union[Path, str], text: Union[str, bytes]): def _write_file(path: Union[Path, str], text: Union[str, bytes]):
@ -205,9 +205,9 @@ def _write_file(path: Union[Path, str], text: Union[str, bytes]):
def write_file(path: Union[Path, str], text: str): def write_file(path: Union[Path, str], text: str):
try: try:
_write_file(path, text) _write_file(path, text)
except OSError: except OSError as err:
from esphome.core import EsphomeError from esphome.core import EsphomeError
raise EsphomeError(f"Could not write file at {path}") raise EsphomeError(f"Could not write file at {path}") from err
def write_file_if_changed(path: Union[Path, str], text: str): def write_file_if_changed(path: Union[Path, str], text: str):
@ -230,7 +230,7 @@ def copy_file_if_changed(src, dst):
shutil.copy(src, dst) shutil.copy(src, dst)
except OSError as err: except OSError as err:
from esphome.core import EsphomeError from esphome.core import EsphomeError
raise EsphomeError(f"Error copying file {src} to {dst}: {err}") raise EsphomeError(f"Error copying file {src} to {dst}: {err}") from err
def list_starts_with(list_, sub): def list_starts_with(list_, sub):

View file

@ -67,7 +67,7 @@ def initialize(config, subscriptions, on_message, username, password, client_id)
port = int(config[CONF_MQTT][CONF_PORT]) port = int(config[CONF_MQTT][CONF_PORT])
client.connect(host, port) client.connect(host, port)
except OSError as err: except OSError as err:
raise EsphomeError(f"Cannot connect to MQTT broker: {err}") raise EsphomeError(f"Cannot connect to MQTT broker: {err}") from err
try: try:
client.loop_forever() client.loop_forever()

View file

@ -32,6 +32,7 @@ class _Schema(vol.Schema):
try: try:
res = extra(res) res = extra(res)
except vol.Invalid as err: except vol.Invalid as err:
# pylint: disable=raise-missing-from
raise ensure_multiple_invalid(err) raise ensure_multiple_invalid(err)
return res return res

View file

@ -126,6 +126,7 @@ class ESPHomeLoader(yaml.SafeLoader): # pylint: disable=too-many-ancestors
try: try:
hash(key) hash(key)
except TypeError: except TypeError:
# pylint: disable=raise-missing-from
raise yaml.constructor.ConstructorError( raise yaml.constructor.ConstructorError(
f'Invalid key "{key}" (not hashable)', key_node.start_mark) f'Invalid key "{key}" (not hashable)', key_node.start_mark)
@ -297,7 +298,7 @@ def _load_yaml_internal(fname):
try: try:
return loader.get_single_data() or OrderedDict() return loader.get_single_data() or OrderedDict()
except yaml.YAMLError as exc: except yaml.YAMLError as exc:
raise EsphomeError(exc) raise EsphomeError(exc) from exc
finally: finally:
loader.dispose() loader.dispose()

View file

@ -1,4 +1,4 @@
pylint==2.5.3 pylint==2.6.0
flake8==3.8.3 flake8==3.8.3
pillow>4.0.0 pillow>4.0.0
cryptography>=2.0.0,<4 cryptography>=2.0.0,<4