Lint config cleanups (#28864)
* Remove bunch of unneeded lint exclusions * Use symbolic names instead of identifiers in pylint disables * Tighten scope of some pylint disables
This commit is contained in:
parent
afaa464142
commit
99c7608fb4
77 changed files with 92 additions and 126 deletions
|
@ -272,7 +272,6 @@ def cmdline() -> List[str]:
|
||||||
|
|
||||||
async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int:
|
async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int:
|
||||||
"""Set up HASS and run."""
|
"""Set up HASS and run."""
|
||||||
# pylint: disable=redefined-outer-name
|
|
||||||
from homeassistant import bootstrap, core
|
from homeassistant import bootstrap, core
|
||||||
|
|
||||||
hass = core.HomeAssistant()
|
hass = core.HomeAssistant()
|
||||||
|
|
|
@ -42,7 +42,7 @@ class MultiFactorAuthModule:
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self) -> str: # pylint: disable=invalid-name
|
def id(self) -> str:
|
||||||
"""Return id of the auth module.
|
"""Return id of the auth module.
|
||||||
|
|
||||||
Default is same as type
|
Default is same as type
|
||||||
|
|
|
@ -58,15 +58,12 @@ class PolicyPermissions(AbstractPermissions):
|
||||||
|
|
||||||
def __eq__(self, other: Any) -> bool:
|
def __eq__(self, other: Any) -> bool:
|
||||||
"""Equals check."""
|
"""Equals check."""
|
||||||
# pylint: disable=protected-access
|
|
||||||
return isinstance(other, PolicyPermissions) and other._policy == self._policy
|
return isinstance(other, PolicyPermissions) and other._policy == self._policy
|
||||||
|
|
||||||
|
|
||||||
class _OwnerPermissions(AbstractPermissions):
|
class _OwnerPermissions(AbstractPermissions):
|
||||||
"""Owner permissions."""
|
"""Owner permissions."""
|
||||||
|
|
||||||
# pylint: disable=no-self-use
|
|
||||||
|
|
||||||
def access_all_entities(self, key: str) -> bool:
|
def access_all_entities(self, key: str) -> bool:
|
||||||
"""Check if we have a certain access to all entities."""
|
"""Check if we have a certain access to all entities."""
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -48,7 +48,7 @@ class AuthProvider:
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self) -> Optional[str]: # pylint: disable=invalid-name
|
def id(self) -> Optional[str]:
|
||||||
"""Return id of the auth provider.
|
"""Return id of the auth provider.
|
||||||
|
|
||||||
Optional, can be None.
|
Optional, can be None.
|
||||||
|
|
|
@ -10,7 +10,7 @@ from homeassistant import config_entries
|
||||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
|
||||||
from .const import DOMAIN, DEFAULT_CACHEDB # pylint: disable=W0611
|
from .const import DOMAIN, DEFAULT_CACHEDB # pylint: disable=unused-import
|
||||||
|
|
||||||
CONF_POLLING = "polling"
|
CONF_POLLING = "polling"
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,6 @@ async def async_unload_entry(hass, entry):
|
||||||
return await hass.data[DOMAIN].async_unload_entry(entry)
|
return await hass.data[DOMAIN].async_unload_entry(entry)
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=no-self-use
|
|
||||||
class AlarmControlPanel(Entity):
|
class AlarmControlPanel(Entity):
|
||||||
"""An abstract class for alarm control devices."""
|
"""An abstract class for alarm control devices."""
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ class DateTimeJSONEncoder(json.JSONEncoder):
|
||||||
Additionally add encoding for datetime objects as isoformat.
|
Additionally add encoding for datetime objects as isoformat.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def default(self, o): # pylint: disable=E0202
|
def default(self, o): # pylint: disable=method-hidden
|
||||||
"""Implement encoding logic."""
|
"""Implement encoding logic."""
|
||||||
if isinstance(o, datetime):
|
if isinstance(o, datetime):
|
||||||
return o.isoformat()
|
return o.isoformat()
|
||||||
|
|
|
@ -36,7 +36,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||||
|
|
||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||||
"""Set up the brunt platform."""
|
"""Set up the brunt platform."""
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
|
|
||||||
username = config[CONF_USERNAME]
|
username = config[CONF_USERNAME]
|
||||||
password = config[CONF_PASSWORD]
|
password = config[CONF_PASSWORD]
|
||||||
|
|
|
@ -150,7 +150,6 @@ class CastStatusListener:
|
||||||
chromecast.register_status_listener(self)
|
chromecast.register_status_listener(self)
|
||||||
chromecast.socket_client.media_controller.register_status_listener(self)
|
chromecast.socket_client.media_controller.register_status_listener(self)
|
||||||
chromecast.register_connection_listener(self)
|
chromecast.register_connection_listener(self)
|
||||||
# pylint: disable=protected-access
|
|
||||||
if cast_device._cast_info.is_audio_group:
|
if cast_device._cast_info.is_audio_group:
|
||||||
self._mz_mgr.add_multizone(chromecast)
|
self._mz_mgr.add_multizone(chromecast)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -306,7 +306,6 @@ class MarkerSensor(Entity):
|
||||||
self._attributes = self.data.attributes
|
self._attributes = self.data.attributes
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
class CupsData:
|
class CupsData:
|
||||||
"""Get the latest data from CUPS and update the state."""
|
"""Get the latest data from CUPS and update the state."""
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ NOTIFICATION_TITLE = "myLeviton Decora Setup"
|
||||||
|
|
||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||||
"""Set up the Decora WiFi platform."""
|
"""Set up the Decora WiFi platform."""
|
||||||
# pylint: disable=import-error, no-name-in-module
|
# pylint: disable=import-error
|
||||||
from decora_wifi import DecoraWiFiSession
|
from decora_wifi import DecoraWiFiSession
|
||||||
from decora_wifi.models.person import Person
|
from decora_wifi.models.person import Person
|
||||||
from decora_wifi.models.residential_account import ResidentialAccount
|
from decora_wifi.models.residential_account import ResidentialAccount
|
||||||
|
|
|
@ -264,7 +264,6 @@ class DoorBirdRequestView(HomeAssistantView):
|
||||||
name = API_URL[1:].replace("/", ":")
|
name = API_URL[1:].replace("/", ":")
|
||||||
extra_urls = [API_URL + "/{event}"]
|
extra_urls = [API_URL + "/{event}"]
|
||||||
|
|
||||||
# pylint: disable=no-self-use
|
|
||||||
async def get(self, request, event):
|
async def get(self, request, event):
|
||||||
"""Respond to requests from the device."""
|
"""Respond to requests from the device."""
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
|
|
|
@ -84,7 +84,6 @@ class EnOceanDevice(Entity):
|
||||||
def value_changed(self, packet):
|
def value_changed(self, packet):
|
||||||
"""Update the internal state of the device when a packet arrives."""
|
"""Update the internal state of the device when a packet arrives."""
|
||||||
|
|
||||||
# pylint: disable=no-self-use
|
|
||||||
def send_command(self, data, optional, packet_type):
|
def send_command(self, data, optional, packet_type):
|
||||||
"""Send a command via the EnOcean dongle."""
|
"""Send a command via the EnOcean dongle."""
|
||||||
from enocean.protocol.packet import Packet
|
from enocean.protocol.packet import Packet
|
||||||
|
|
|
@ -190,7 +190,7 @@ class EQ3BTSmartThermostat(ClimateDevice):
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update the data from the thermostat."""
|
"""Update the data from the thermostat."""
|
||||||
# pylint: disable=import-error,no-name-in-module
|
# pylint: disable=import-error
|
||||||
from bluepy.btle import BTLEException
|
from bluepy.btle import BTLEException
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -81,7 +81,6 @@ class EsphomeFan(EsphomeEntity, FanEntity):
|
||||||
data["speed"] = _fan_speeds.from_hass(speed)
|
data["speed"] = _fan_speeds.from_hass(speed)
|
||||||
await self._client.fan_command(**data)
|
await self._client.fan_command(**data)
|
||||||
|
|
||||||
# pylint: disable=arguments-differ
|
|
||||||
async def async_turn_off(self, **kwargs) -> None:
|
async def async_turn_off(self, **kwargs) -> None:
|
||||||
"""Turn off the fan."""
|
"""Turn off the fan."""
|
||||||
await self._client.fan_command(key=self._static_info.key, state=False)
|
await self._client.fan_command(key=self._static_info.key, state=False)
|
||||||
|
|
|
@ -237,11 +237,7 @@ class EvoBroker:
|
||||||
|
|
||||||
loc_idx = params[CONF_LOCATION_IDX]
|
loc_idx = params[CONF_LOCATION_IDX]
|
||||||
self.config = client.installation_info[loc_idx][GWS][0][TCS][0]
|
self.config = client.installation_info[loc_idx][GWS][0][TCS][0]
|
||||||
self.tcs = (
|
self.tcs = client.locations[loc_idx]._gateways[0]._control_systems[0]
|
||||||
client.locations[loc_idx] # pylint: disable=protected-access
|
|
||||||
._gateways[0]
|
|
||||||
._control_systems[0]
|
|
||||||
)
|
|
||||||
self.temps = None
|
self.temps = None
|
||||||
|
|
||||||
async def save_auth_tokens(self) -> None:
|
async def save_auth_tokens(self) -> None:
|
||||||
|
|
|
@ -77,7 +77,6 @@ class AbstractConfig:
|
||||||
@property
|
@property
|
||||||
def should_report_state(self):
|
def should_report_state(self):
|
||||||
"""Return if states should be proactively reported."""
|
"""Return if states should be proactively reported."""
|
||||||
# pylint: disable=no-self-use
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -102,7 +102,6 @@ class GoogleConfig(AbstractConfig):
|
||||||
@property
|
@property
|
||||||
def should_report_state(self):
|
def should_report_state(self):
|
||||||
"""Return if states should be proactively reported."""
|
"""Return if states should be proactively reported."""
|
||||||
# pylint: disable=no-self-use
|
|
||||||
return self._config.get(CONF_REPORT_STATE)
|
return self._config.get(CONF_REPORT_STATE)
|
||||||
|
|
||||||
def should_expose(self, state) -> bool:
|
def should_expose(self, state) -> bool:
|
||||||
|
|
|
@ -57,7 +57,9 @@ def setup(hass: HomeAssistant, yaml_config: Dict[str, Any]):
|
||||||
service_principal_path
|
service_principal_path
|
||||||
)
|
)
|
||||||
|
|
||||||
topic_path = publisher.topic_path(project_id, topic_name) # pylint: disable=E1101
|
topic_path = publisher.topic_path( # pylint: disable=no-member
|
||||||
|
project_id, topic_name
|
||||||
|
)
|
||||||
|
|
||||||
encoder = DateTimeJSONEncoder()
|
encoder = DateTimeJSONEncoder()
|
||||||
|
|
||||||
|
@ -87,7 +89,7 @@ class DateTimeJSONEncoder(json.JSONEncoder):
|
||||||
Additionally add encoding for datetime objects as isoformat.
|
Additionally add encoding for datetime objects as isoformat.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def default(self, o): # pylint: disable=E0202
|
def default(self, o): # pylint: disable=method-hidden
|
||||||
"""Implement encoding logic."""
|
"""Implement encoding logic."""
|
||||||
if isinstance(o, datetime.datetime):
|
if isinstance(o, datetime.datetime):
|
||||||
return o.isoformat()
|
return o.isoformat()
|
||||||
|
|
|
@ -656,7 +656,6 @@ class Group(Entity):
|
||||||
if gr_on is None:
|
if gr_on is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
# pylint: disable=too-many-boolean-expressions
|
|
||||||
if tr_state is None or (
|
if tr_state is None or (
|
||||||
(gr_state == gr_on and tr_state.state == gr_off)
|
(gr_state == gr_on and tr_state.state == gr_off)
|
||||||
or (gr_state == gr_off and tr_state.state == gr_on)
|
or (gr_state == gr_off and tr_state.state == gr_on)
|
||||||
|
|
|
@ -316,7 +316,6 @@ class HarmonyRemote(remote.RemoteDevice):
|
||||||
except aioexc.TimeOut:
|
except aioexc.TimeOut:
|
||||||
_LOGGER.error("%s: Powering off timed-out", self.name)
|
_LOGGER.error("%s: Powering off timed-out", self.name)
|
||||||
|
|
||||||
# pylint: disable=arguments-differ
|
|
||||||
async def async_send_command(self, command, **kwargs):
|
async def async_send_command(self, command, **kwargs):
|
||||||
"""Send a list of commands to one device."""
|
"""Send a list of commands to one device."""
|
||||||
_LOGGER.debug("%s: Send Command", self.name)
|
_LOGGER.debug("%s: Send Command", self.name)
|
||||||
|
|
|
@ -362,8 +362,7 @@ class HomeKit:
|
||||||
return
|
return
|
||||||
self.status = STATUS_WAIT
|
self.status = STATUS_WAIT
|
||||||
|
|
||||||
# pylint: disable=unused-import
|
from . import ( # noqa: F401 pylint: disable=unused-import
|
||||||
from . import ( # noqa: F401
|
|
||||||
type_covers,
|
type_covers,
|
||||||
type_fans,
|
type_fans,
|
||||||
type_lights,
|
type_lights,
|
||||||
|
|
|
@ -109,7 +109,6 @@ class HomeKitEntity(Entity):
|
||||||
setup_fn = getattr(self, f"_setup_{setup_fn_name}", None)
|
setup_fn = getattr(self, f"_setup_{setup_fn_name}", None)
|
||||||
if not setup_fn:
|
if not setup_fn:
|
||||||
return
|
return
|
||||||
# pylint: disable=not-callable
|
|
||||||
setup_fn(char)
|
setup_fn(char)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -132,7 +131,6 @@ class HomeKitEntity(Entity):
|
||||||
if not update_fn:
|
if not update_fn:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# pylint: disable=not-callable
|
|
||||||
update_fn(result["value"])
|
update_fn(result["value"])
|
||||||
|
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
|
@ -160,9 +160,7 @@ class HoneywellUSThermostat(ClimateDevice):
|
||||||
self._username = username
|
self._username = username
|
||||||
self._password = password
|
self._password = password
|
||||||
|
|
||||||
_LOGGER.debug(
|
_LOGGER.debug("latestData = %s ", device._data)
|
||||||
"latestData = %s ", device._data # pylint: disable=protected-access
|
|
||||||
)
|
|
||||||
|
|
||||||
# not all honeywell HVACs support all modes
|
# not all honeywell HVACs support all modes
|
||||||
mappings = [v for k, v in HVAC_MODE_TO_HW_MODE.items() if device.raw_ui_data[k]]
|
mappings = [v for k, v in HVAC_MODE_TO_HW_MODE.items() if device.raw_ui_data[k]]
|
||||||
|
@ -174,13 +172,13 @@ class HoneywellUSThermostat(ClimateDevice):
|
||||||
| SUPPORT_TARGET_TEMPERATURE_RANGE
|
| SUPPORT_TARGET_TEMPERATURE_RANGE
|
||||||
)
|
)
|
||||||
|
|
||||||
if device._data["canControlHumidification"]: # pylint: disable=protected-access
|
if device._data["canControlHumidification"]:
|
||||||
self._supported_features |= SUPPORT_TARGET_HUMIDITY
|
self._supported_features |= SUPPORT_TARGET_HUMIDITY
|
||||||
|
|
||||||
if device.raw_ui_data["SwitchEmergencyHeatAllowed"]:
|
if device.raw_ui_data["SwitchEmergencyHeatAllowed"]:
|
||||||
self._supported_features |= SUPPORT_AUX_HEAT
|
self._supported_features |= SUPPORT_AUX_HEAT
|
||||||
|
|
||||||
if not device._data["hasFan"]: # pylint: disable=protected-access
|
if not device._data["hasFan"]:
|
||||||
return
|
return
|
||||||
|
|
||||||
# not all honeywell fans support all modes
|
# not all honeywell fans support all modes
|
||||||
|
|
|
@ -13,8 +13,6 @@ CACHE_TIME = 31 * 86400 # = 1 month
|
||||||
CACHE_HEADERS = {hdrs.CACHE_CONTROL: f"public, max-age={CACHE_TIME}"}
|
CACHE_HEADERS = {hdrs.CACHE_CONTROL: f"public, max-age={CACHE_TIME}"}
|
||||||
|
|
||||||
|
|
||||||
# https://github.com/PyCQA/astroid/issues/633
|
|
||||||
# pylint: disable=duplicate-bases
|
|
||||||
class CachingStaticResource(StaticResource):
|
class CachingStaticResource(StaticResource):
|
||||||
"""Static Resource handler that will add cache headers."""
|
"""Static Resource handler that will add cache headers."""
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,6 @@ async def async_setup(hass, config):
|
||||||
time = call.data.get(ATTR_TIME)
|
time = call.data.get(ATTR_TIME)
|
||||||
date = call.data.get(ATTR_DATE)
|
date = call.data.get(ATTR_DATE)
|
||||||
dttm = call.data.get(ATTR_DATETIME)
|
dttm = call.data.get(ATTR_DATETIME)
|
||||||
# pylint: disable=too-many-boolean-expressions
|
|
||||||
if (
|
if (
|
||||||
dttm
|
dttm
|
||||||
and (date or time)
|
and (date or time)
|
||||||
|
|
|
@ -110,7 +110,6 @@ class ISYBinarySensorDevice(ISYDevice, BinarySensorDevice):
|
||||||
self._negative_node = None
|
self._negative_node = None
|
||||||
self._heartbeat_device = None
|
self._heartbeat_device = None
|
||||||
self._device_class_from_type = _detect_device_type(self._node)
|
self._device_class_from_type = _detect_device_type(self._node)
|
||||||
# pylint: disable=protected-access
|
|
||||||
if _is_val_unknown(self._node.status._val):
|
if _is_val_unknown(self._node.status._val):
|
||||||
self._computed_state = None
|
self._computed_state = None
|
||||||
self._status_was_unknown = True
|
self._status_was_unknown = True
|
||||||
|
|
|
@ -148,7 +148,6 @@ async def handle_webhook(
|
||||||
blocking=True,
|
blocking=True,
|
||||||
context=context,
|
context=context,
|
||||||
)
|
)
|
||||||
# noqa: E722 pylint: disable=broad-except
|
|
||||||
except (vol.Invalid, ServiceNotFound, Exception) as ex:
|
except (vol.Invalid, ServiceNotFound, Exception) as ex:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Error when calling service during mobile_app "
|
"Error when calling service during mobile_app "
|
||||||
|
@ -174,7 +173,6 @@ async def handle_webhook(
|
||||||
tpl = item[ATTR_TEMPLATE]
|
tpl = item[ATTR_TEMPLATE]
|
||||||
attach(hass, tpl)
|
attach(hass, tpl)
|
||||||
resp[key] = tpl.async_render(item.get(ATTR_TEMPLATE_VARIABLES))
|
resp[key] = tpl.async_render(item.get(ATTR_TEMPLATE_VARIABLES))
|
||||||
# noqa: E722 pylint: disable=broad-except
|
|
||||||
except TemplateError as ex:
|
except TemplateError as ex:
|
||||||
resp[key] = {"error": str(ex)}
|
resp[key] = {"error": str(ex)}
|
||||||
|
|
||||||
|
|
|
@ -335,7 +335,6 @@ MQTT_PUBLISH_SCHEMA = vol.Schema(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
|
||||||
SubscribePayloadType = Union[str, bytes] # Only bytes if encoding is None
|
SubscribePayloadType = Union[str, bytes] # Only bytes if encoding is None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ from typing import Union, Callable
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
|
||||||
PublishPayloadType = Union[str, bytes, int, float, None]
|
PublishPayloadType = Union[str, bytes, int, float, None]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ class PlexServer:
|
||||||
@property
|
@property
|
||||||
def url_in_use(self):
|
def url_in_use(self):
|
||||||
"""Return URL used for connected Plex server."""
|
"""Return URL used for connected Plex server."""
|
||||||
return self._plex_server._baseurl # pylint: disable=W0212
|
return self._plex_server._baseurl # pylint: disable=protected-access
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def use_episode_art(self):
|
def use_episode_art(self):
|
||||||
|
|
|
@ -147,7 +147,6 @@ def execute(hass, filename, source, data=None):
|
||||||
|
|
||||||
def protected_getattr(obj, name, default=None):
|
def protected_getattr(obj, name, default=None):
|
||||||
"""Restricted method to get attributes."""
|
"""Restricted method to get attributes."""
|
||||||
# pylint: disable=too-many-boolean-expressions
|
|
||||||
if name.startswith("async_"):
|
if name.startswith("async_"):
|
||||||
raise ScriptError("Not allowed to access async methods")
|
raise ScriptError("Not allowed to access async methods")
|
||||||
if (
|
if (
|
||||||
|
|
|
@ -284,7 +284,6 @@ class RachioWebhookView(HomeAssistantView):
|
||||||
url = WEBHOOK_PATH
|
url = WEBHOOK_PATH
|
||||||
name = url[1:].replace("/", ":")
|
name = url[1:].replace("/", ":")
|
||||||
|
|
||||||
# pylint: disable=no-self-use
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
async def post(self, request) -> web.Response:
|
async def post(self, request) -> web.Response:
|
||||||
"""Handle webhook calls from the server."""
|
"""Handle webhook calls from the server."""
|
||||||
|
|
|
@ -75,7 +75,7 @@ def _setup_controller(hass, controller_config, config):
|
||||||
position = len(hass.data[DATA_RAINBIRD])
|
position = len(hass.data[DATA_RAINBIRD])
|
||||||
try:
|
try:
|
||||||
controller.get_serial_number()
|
controller.get_serial_number()
|
||||||
except Exception as exc: # pylint: disable=W0703
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
_LOGGER.error("Unable to setup controller: %s", exc)
|
_LOGGER.error("Unable to setup controller: %s", exc)
|
||||||
return False
|
return False
|
||||||
hass.data[DATA_RAINBIRD].append(controller)
|
hass.data[DATA_RAINBIRD].append(controller)
|
||||||
|
|
|
@ -28,7 +28,7 @@ def session_scope(*, hass=None, session=None):
|
||||||
if session.transaction:
|
if session.transaction:
|
||||||
need_rollback = True
|
need_rollback = True
|
||||||
session.commit()
|
session.commit()
|
||||||
except Exception as err: # pylint: disable=broad-except
|
except Exception as err:
|
||||||
_LOGGER.error("Error executing query: %s", err)
|
_LOGGER.error("Error executing query: %s", err)
|
||||||
if need_rollback:
|
if need_rollback:
|
||||||
session.rollback()
|
session.rollback()
|
||||||
|
|
|
@ -207,7 +207,7 @@ class ScriptEntity(ToggleEntity):
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
await self.script.async_run(kwargs.get(ATTR_VARIABLES), context)
|
await self.script.async_run(kwargs.get(ATTR_VARIABLES), context)
|
||||||
except Exception as err: # pylint: disable=broad-except
|
except Exception as err:
|
||||||
self.script.async_log_exception(
|
self.script.async_log_exception(
|
||||||
_LOGGER, f"Error executing script {self.entity_id}", err
|
_LOGGER, f"Error executing script {self.entity_id}", err
|
||||||
)
|
)
|
||||||
|
|
|
@ -43,7 +43,6 @@ SUPPORTED_FEATURES = (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=unused-argument
|
|
||||||
async def async_setup_platform(hass, config, add_entities, discovery_info=None):
|
async def async_setup_platform(hass, config, add_entities, discovery_info=None):
|
||||||
"""Set up a media player entity for a Sisyphus table."""
|
"""Set up a media player entity for a Sisyphus table."""
|
||||||
host = discovery_info[CONF_HOST]
|
host = discovery_info[CONF_HOST]
|
||||||
|
|
|
@ -1056,7 +1056,6 @@ class SonosEntity(MediaPlayerDevice):
|
||||||
def restore(self):
|
def restore(self):
|
||||||
"""Restore a snapshotted state to a player."""
|
"""Restore a snapshotted state to a player."""
|
||||||
try:
|
try:
|
||||||
# pylint: disable=protected-access
|
|
||||||
self._soco_snapshot.restore()
|
self._soco_snapshot.restore()
|
||||||
except (TypeError, AttributeError, SoCoException) as ex:
|
except (TypeError, AttributeError, SoCoException) as ex:
|
||||||
# Can happen if restoring a coordinator onto a current slave
|
# Can happen if restoring a coordinator onto a current slave
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
# pylint: disable=import-error, no-member, no-value-for-parameter
|
# pylint: disable=import-error, no-member
|
||||||
import switchmate
|
import switchmate
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ async def _info_wrapper(hass, info_callback):
|
||||||
return await info_callback(hass)
|
return await info_callback(hass)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
return {"error": "Fetching info timed out"}
|
return {"error": "Fetching info timed out"}
|
||||||
except Exception as err: # pylint: disable=W0703
|
except Exception as err: # pylint: disable=broad-except
|
||||||
_LOGGER.exception("Error fetching info")
|
_LOGGER.exception("Error fetching info")
|
||||||
return {"error": str(err)}
|
return {"error": str(err)}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ def message_handler(handler):
|
||||||
"""Initialize the messages handler instance."""
|
"""Initialize the messages handler instance."""
|
||||||
super().__init__(handler)
|
super().__init__(handler)
|
||||||
|
|
||||||
def check_update(self, update): # pylint: disable=no-self-use
|
def check_update(self, update):
|
||||||
"""Check is update valid."""
|
"""Check is update valid."""
|
||||||
return isinstance(update, Update)
|
return isinstance(update, Update)
|
||||||
|
|
||||||
|
|
|
@ -104,8 +104,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Display warning that PIL will be used if no OpenCV is found.
|
# Display warning that PIL will be used if no OpenCV is found.
|
||||||
# pylint: disable=unused-import,unused-variable
|
import cv2 # noqa: F401 pylint: disable=unused-import
|
||||||
import cv2 # noqa: F401
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"No OpenCV library found. TensorFlow will process image with "
|
"No OpenCV library found. TensorFlow will process image with "
|
||||||
|
|
|
@ -162,7 +162,6 @@ class Timer(RestoreEntity):
|
||||||
event = EVENT_TIMER_RESTARTED
|
event = EVENT_TIMER_RESTARTED
|
||||||
|
|
||||||
self._state = STATUS_ACTIVE
|
self._state = STATUS_ACTIVE
|
||||||
# pylint: disable=redefined-outer-name
|
|
||||||
start = dt_util.utcnow()
|
start = dt_util.utcnow()
|
||||||
if self._remaining and newduration is None:
|
if self._remaining and newduration is None:
|
||||||
self._end = start + self._remaining
|
self._end = start + self._remaining
|
||||||
|
|
|
@ -139,7 +139,7 @@ class ToonData:
|
||||||
"""Update all Toon data and notify entities."""
|
"""Update all Toon data and notify entities."""
|
||||||
# Ignore the TTL meganism from client library
|
# Ignore the TTL meganism from client library
|
||||||
# It causes a lots of issues, hence we take control over caching
|
# It causes a lots of issues, hence we take control over caching
|
||||||
self._toon._clear_cache() # pylint: disable=W0212
|
self._toon._clear_cache() # pylint: disable=protected-access
|
||||||
|
|
||||||
# Gather data from client library (single API call)
|
# Gather data from client library (single API call)
|
||||||
self.gas = self._toon.gas
|
self.gas = self._toon.gas
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
# pylint: disable=import-error,no-name-in-module
|
# pylint: disable=import-error
|
||||||
from distutils.version import StrictVersion
|
from distutils.version import StrictVersion
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
|
@ -150,7 +150,6 @@ class Device:
|
||||||
|
|
||||||
async def async_get_total_packets_received(self):
|
async def async_get_total_packets_received(self):
|
||||||
"""Get total packets received."""
|
"""Get total packets received."""
|
||||||
# pylint: disable=invalid-name
|
|
||||||
return await self._igd_device.async_get_total_packets_received()
|
return await self._igd_device.async_get_total_packets_received()
|
||||||
|
|
||||||
async def async_get_total_packets_sent(self):
|
async def async_get_total_packets_sent(self):
|
||||||
|
|
|
@ -37,7 +37,6 @@ def set_arm_state(state, code=None):
|
||||||
while "result" not in transaction:
|
while "result" not in transaction:
|
||||||
sleep(0.5)
|
sleep(0.5)
|
||||||
transaction = hub.session.get_arm_state_transaction(transaction_id)
|
transaction = hub.session.get_arm_state_transaction(transaction_id)
|
||||||
# pylint: disable=unexpected-keyword-arg
|
|
||||||
hub.update_overview(no_throttle=True)
|
hub.update_overview(no_throttle=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,7 @@ class WithingsDataManager:
|
||||||
WithingsDataManager.print_service_available()
|
WithingsDataManager.print_service_available()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
except Exception as ex: # pylint: disable=broad-except
|
except Exception as ex:
|
||||||
# Withings api encountered error.
|
# Withings api encountered error.
|
||||||
if isinstance(ex, (UnauthorizedException, AuthFailedException)):
|
if isinstance(ex, (UnauthorizedException, AuthFailedException)):
|
||||||
raise NotAuthenticatedError(ex)
|
raise NotAuthenticatedError(ex)
|
||||||
|
|
|
@ -14,7 +14,7 @@ from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME
|
||||||
from homeassistant.helpers import ConfigType
|
from homeassistant.helpers import ConfigType
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
|
|
||||||
from .const import DOMAIN # pylint: disable=W0611
|
from .const import DOMAIN # pylint: disable=unused-import
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -190,7 +190,6 @@ async def async_send_message(
|
||||||
message = self.Message(sto=recipient, stype="chat")
|
message = self.Message(sto=recipient, stype="chat")
|
||||||
|
|
||||||
message["body"] = url
|
message["body"] = url
|
||||||
# pylint: disable=invalid-sequence-index
|
|
||||||
message["oob"]["url"] = url
|
message["oob"]["url"] = url
|
||||||
try:
|
try:
|
||||||
message.send()
|
message.send()
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
"""Support for exposing Home Assistant via Zeroconf."""
|
"""Support for exposing Home Assistant via Zeroconf."""
|
||||||
# PyLint bug confuses absolute/relative imports
|
|
||||||
# https://github.com/PyCQA/pylint/issues/1931
|
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
import logging
|
import logging
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
|
|
@ -100,8 +100,7 @@ async def async_setup_entry(hass, config_entry):
|
||||||
if config.get(CONF_ENABLE_QUIRKS, True):
|
if config.get(CONF_ENABLE_QUIRKS, True):
|
||||||
# needs to be done here so that the ZHA module is finished loading
|
# needs to be done here so that the ZHA module is finished loading
|
||||||
# before zhaquirks is imported
|
# before zhaquirks is imported
|
||||||
# pylint: disable=W0611, W0612
|
import zhaquirks # noqa: F401 pylint: disable=unused-import
|
||||||
import zhaquirks # noqa: F401
|
|
||||||
|
|
||||||
zha_gateway = ZHAGateway(hass, config, config_entry)
|
zha_gateway = ZHAGateway(hass, config, config_entry)
|
||||||
await zha_gateway.async_initialize()
|
await zha_gateway.async_initialize()
|
||||||
|
|
|
@ -27,7 +27,7 @@ from homeassistant.components.sensor import DOMAIN as SENSOR
|
||||||
from homeassistant.components.switch import DOMAIN as SWITCH
|
from homeassistant.components.switch import DOMAIN as SWITCH
|
||||||
|
|
||||||
# importing channels updates registries
|
# importing channels updates registries
|
||||||
from . import channels # noqa: F401 pylint: disable=wrong-import-position,unused-import
|
from . import channels # noqa: F401 pylint: disable=unused-import
|
||||||
from .const import (
|
from .const import (
|
||||||
CONTROLLER,
|
CONTROLLER,
|
||||||
SENSOR_ACCELERATION,
|
SENSOR_ACCELERATION,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
"""Data storage helper for ZHA."""
|
"""Data storage helper for ZHA."""
|
||||||
# pylint: disable=W0611
|
# pylint: disable=unused-import
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
import logging
|
import logging
|
||||||
from typing import MutableMapping
|
from typing import MutableMapping
|
||||||
|
|
|
@ -48,8 +48,7 @@ class ZwaveFlowHandler(config_entries.ConfigFlow):
|
||||||
try:
|
try:
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
# pylint: disable=unused-variable
|
option = await self.hass.async_add_executor_job( # noqa: F841 pylint: disable=unused-variable
|
||||||
option = await self.hass.async_add_executor_job( # noqa: F841
|
|
||||||
partial(
|
partial(
|
||||||
ZWaveOption,
|
ZWaveOption,
|
||||||
user_input[CONF_USB_STICK_PATH],
|
user_input[CONF_USB_STICK_PATH],
|
||||||
|
|
|
@ -627,7 +627,6 @@ async def merge_packages_config(
|
||||||
_log_pkg_error: Callable = _log_pkg_error,
|
_log_pkg_error: Callable = _log_pkg_error,
|
||||||
) -> Dict:
|
) -> Dict:
|
||||||
"""Merge packages into the top-level configuration. Mutate config."""
|
"""Merge packages into the top-level configuration. Mutate config."""
|
||||||
# pylint: disable=too-many-nested-blocks
|
|
||||||
PACKAGES_CONFIG_SCHEMA(packages)
|
PACKAGES_CONFIG_SCHEMA(packages)
|
||||||
for pack_name, pack_conf in packages.items():
|
for pack_name, pack_conf in packages.items():
|
||||||
for comp_name, comp_conf in pack_conf.items():
|
for comp_name, comp_conf in pack_conf.items():
|
||||||
|
@ -766,7 +765,6 @@ async def async_process_component_config(
|
||||||
|
|
||||||
# Validate platform specific schema
|
# Validate platform specific schema
|
||||||
if hasattr(platform, "PLATFORM_SCHEMA"):
|
if hasattr(platform, "PLATFORM_SCHEMA"):
|
||||||
# pylint: disable=no-member
|
|
||||||
try:
|
try:
|
||||||
p_validated = platform.PLATFORM_SCHEMA( # type: ignore
|
p_validated = platform.PLATFORM_SCHEMA( # type: ignore
|
||||||
p_config
|
p_config
|
||||||
|
|
|
@ -75,7 +75,6 @@ from homeassistant.util.unit_system import (
|
||||||
)
|
)
|
||||||
|
|
||||||
# Typing imports that create a circular dependency
|
# Typing imports that create a circular dependency
|
||||||
# pylint: disable=using-constant-test
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from homeassistant.config_entries import ConfigEntries
|
from homeassistant.config_entries import ConfigEntries
|
||||||
from homeassistant.components.http import HomeAssistantHTTP
|
from homeassistant.components.http import HomeAssistantHTTP
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
from typing import Optional, Tuple, TYPE_CHECKING
|
from typing import Optional, Tuple, TYPE_CHECKING
|
||||||
import jinja2
|
import jinja2
|
||||||
|
|
||||||
# pylint: disable=using-constant-test
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
# pylint: disable=unused-import
|
from .core import Context # noqa: F401 pylint: disable=unused-import
|
||||||
from .core import Context # noqa: F401
|
|
||||||
|
|
||||||
|
|
||||||
class HomeAssistantError(Exception):
|
class HomeAssistantError(Exception):
|
||||||
|
|
|
@ -4,7 +4,6 @@ from typing import Any, Iterable, Tuple, Sequence, Dict
|
||||||
|
|
||||||
from homeassistant.const import CONF_PLATFORM
|
from homeassistant.const import CONF_PLATFORM
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
|
||||||
ConfigType = Dict[str, Any]
|
ConfigType = Dict[str, Any]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ class DiscoveryFlowHandler(config_entries.ConfigFlow):
|
||||||
self._domain = domain
|
self._domain = domain
|
||||||
self._title = title
|
self._title = title
|
||||||
self._discovery_function = discovery_function
|
self._discovery_function = discovery_function
|
||||||
self.CONNECTION_CLASS = connection_class # pylint: disable=C0103
|
self.CONNECTION_CLASS = connection_class # pylint: disable=invalid-name
|
||||||
|
|
||||||
async def async_step_user(self, user_input=None):
|
async def async_step_user(self, user_input=None):
|
||||||
"""Handle a flow initialized by the user."""
|
"""Handle a flow initialized by the user."""
|
||||||
|
|
|
@ -231,7 +231,6 @@ class Script:
|
||||||
|
|
||||||
Should only be called on exceptions raised by this scripts async_run.
|
Should only be called on exceptions raised by this scripts async_run.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=protected-access
|
|
||||||
step = self._exception_step
|
step = self._exception_step
|
||||||
action = self.sequence[step]
|
action = self.sequence[step]
|
||||||
action_type = _determine_action(action)
|
action_type = _determine_action(action)
|
||||||
|
@ -281,7 +280,6 @@ class Script:
|
||||||
@callback
|
@callback
|
||||||
def async_script_delay(now):
|
def async_script_delay(now):
|
||||||
"""Handle delay."""
|
"""Handle delay."""
|
||||||
# pylint: disable=cell-var-from-loop
|
|
||||||
with suppress(ValueError):
|
with suppress(ValueError):
|
||||||
self._async_listener.remove(unsub)
|
self._async_listener.remove(unsub)
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,7 @@ class RenderInfo:
|
||||||
def result(self) -> str:
|
def result(self) -> str:
|
||||||
"""Results of the template computation."""
|
"""Results of the template computation."""
|
||||||
if self._exception is not None:
|
if self._exception is not None:
|
||||||
raise self._exception # pylint: disable=raising-bad-type
|
raise self._exception
|
||||||
return self._result
|
return self._result
|
||||||
|
|
||||||
def _freeze(self) -> None:
|
def _freeze(self) -> None:
|
||||||
|
|
|
@ -26,7 +26,7 @@ from typing import (
|
||||||
)
|
)
|
||||||
|
|
||||||
# Typing imports that create a circular dependency
|
# Typing imports that create a circular dependency
|
||||||
# pylint: disable=using-constant-test,unused-import
|
# pylint: disable=unused-import
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,6 @@ def load_yaml(fname: str) -> JSON_TYPE:
|
||||||
raise HomeAssistantError(exc)
|
raise HomeAssistantError(exc)
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=pointless-statement
|
|
||||||
@overload
|
@overload
|
||||||
def _add_reference(
|
def _add_reference(
|
||||||
obj: Union[list, NodeListClass], loader: yaml.SafeLoader, node: yaml.nodes.Node
|
obj: Union[list, NodeListClass], loader: yaml.SafeLoader, node: yaml.nodes.Node
|
||||||
|
|
2
pylintrc
2
pylintrc
|
@ -50,6 +50,8 @@ disable=
|
||||||
too-many-boolean-expressions,
|
too-many-boolean-expressions,
|
||||||
unnecessary-pass,
|
unnecessary-pass,
|
||||||
unused-argument
|
unused-argument
|
||||||
|
enable=
|
||||||
|
use-symbolic-message-instead
|
||||||
|
|
||||||
[REPORTS]
|
[REPORTS]
|
||||||
score=no
|
score=no
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# pylint: disable=W0621
|
# pylint: disable=redefined-outer-name
|
||||||
"""Tests for the Daikin config flow."""
|
"""Tests for the Daikin config flow."""
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,9 @@ def mock_connection_fixture() -> AsyncConnection:
|
||||||
def _rest_call_side_effect(path, body=None):
|
def _rest_call_side_effect(path, body=None):
|
||||||
return path, body
|
return path, body
|
||||||
|
|
||||||
connection._restCall.side_effect = _rest_call_side_effect # pylint: disable=W0212
|
connection._restCall.side_effect = ( # pylint: disable=protected-access
|
||||||
|
_rest_call_side_effect
|
||||||
|
)
|
||||||
connection.api_call.return_value = mock_coro(True)
|
connection.api_call.return_value = mock_coro(True)
|
||||||
connection.init.side_effect = mock_coro(True)
|
connection.init.side_effect = mock_coro(True)
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,9 @@ async def async_manipulate_test_data(
|
||||||
fire_target = hmip_device if fire_device is None else fire_device
|
fire_target = hmip_device if fire_device is None else fire_device
|
||||||
|
|
||||||
if isinstance(fire_target, AsyncHome):
|
if isinstance(fire_target, AsyncHome):
|
||||||
fire_target.fire_update_event(fire_target._rawJSONData) # pylint: disable=W0212
|
fire_target.fire_update_event(
|
||||||
|
fire_target._rawJSONData # pylint: disable=protected-access
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
fire_target.fire_update_event()
|
fire_target.fire_update_event()
|
||||||
|
|
||||||
|
@ -136,7 +138,9 @@ class HomeTemplate(Home):
|
||||||
def _get_mock(instance):
|
def _get_mock(instance):
|
||||||
"""Create a mock and copy instance attributes over mock."""
|
"""Create a mock and copy instance attributes over mock."""
|
||||||
if isinstance(instance, Mock):
|
if isinstance(instance, Mock):
|
||||||
instance.__dict__.update(instance._mock_wraps.__dict__) # pylint: disable=W0212
|
instance.__dict__.update(
|
||||||
|
instance._mock_wraps.__dict__ # pylint: disable=protected-access
|
||||||
|
)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
mock = Mock(spec=instance, wraps=instance)
|
mock = Mock(spec=instance, wraps=instance)
|
||||||
|
|
|
@ -18,7 +18,7 @@ async def _async_manipulate_security_zones(
|
||||||
hass, home, internal_active=False, external_active=False, alarm_triggered=False
|
hass, home, internal_active=False, external_active=False, alarm_triggered=False
|
||||||
):
|
):
|
||||||
"""Set new values on hmip security zones."""
|
"""Set new values on hmip security zones."""
|
||||||
json = home._rawJSONData # pylint: disable=W0212
|
json = home._rawJSONData # pylint: disable=protected-access
|
||||||
json["functionalHomes"]["SECURITY_AND_ALARM"]["alarmActive"] = alarm_triggered
|
json["functionalHomes"]["SECURITY_AND_ALARM"]["alarmActive"] = alarm_triggered
|
||||||
external_zone_id = json["functionalHomes"]["SECURITY_AND_ALARM"]["securityZones"][
|
external_zone_id = json["functionalHomes"]["SECURITY_AND_ALARM"]["securityZones"][
|
||||||
"EXTERNAL"
|
"EXTERNAL"
|
||||||
|
|
|
@ -367,7 +367,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "activate_absence_with_duration"
|
assert home.mock_calls[-1][0] == "activate_absence_with_duration"
|
||||||
assert home.mock_calls[-1][1] == (60,)
|
assert home.mock_calls[-1][1] == (60,)
|
||||||
assert len(home._connection.mock_calls) == 1 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 1 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -377,7 +377,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "activate_absence_with_duration"
|
assert home.mock_calls[-1][0] == "activate_absence_with_duration"
|
||||||
assert home.mock_calls[-1][1] == (60,)
|
assert home.mock_calls[-1][1] == (60,)
|
||||||
assert len(home._connection.mock_calls) == 2 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 2 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -387,7 +387,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "activate_absence_with_period"
|
assert home.mock_calls[-1][0] == "activate_absence_with_period"
|
||||||
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0),)
|
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0),)
|
||||||
assert len(home._connection.mock_calls) == 3 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 3 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -397,7 +397,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "activate_absence_with_period"
|
assert home.mock_calls[-1][0] == "activate_absence_with_period"
|
||||||
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0),)
|
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0),)
|
||||||
assert len(home._connection.mock_calls) == 4 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 4 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -407,7 +407,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "activate_vacation"
|
assert home.mock_calls[-1][0] == "activate_vacation"
|
||||||
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0), 18.5)
|
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0), 18.5)
|
||||||
assert len(home._connection.mock_calls) == 5 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 5 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -417,7 +417,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "activate_vacation"
|
assert home.mock_calls[-1][0] == "activate_vacation"
|
||||||
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0), 18.5)
|
assert home.mock_calls[-1][1] == (datetime.datetime(2019, 2, 17, 14, 0), 18.5)
|
||||||
assert len(home._connection.mock_calls) == 6 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 6 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -427,14 +427,14 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "deactivate_absence"
|
assert home.mock_calls[-1][0] == "deactivate_absence"
|
||||||
assert home.mock_calls[-1][1] == ()
|
assert home.mock_calls[-1][1] == ()
|
||||||
assert len(home._connection.mock_calls) == 7 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 7 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud", "deactivate_eco_mode", blocking=True
|
"homematicip_cloud", "deactivate_eco_mode", blocking=True
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "deactivate_absence"
|
assert home.mock_calls[-1][0] == "deactivate_absence"
|
||||||
assert home.mock_calls[-1][1] == ()
|
assert home.mock_calls[-1][1] == ()
|
||||||
assert len(home._connection.mock_calls) == 8 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 8 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -444,14 +444,14 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "deactivate_vacation"
|
assert home.mock_calls[-1][0] == "deactivate_vacation"
|
||||||
assert home.mock_calls[-1][1] == ()
|
assert home.mock_calls[-1][1] == ()
|
||||||
assert len(home._connection.mock_calls) == 9 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 9 # pylint: disable=protected-access
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud", "deactivate_vacation", blocking=True
|
"homematicip_cloud", "deactivate_vacation", blocking=True
|
||||||
)
|
)
|
||||||
assert home.mock_calls[-1][0] == "deactivate_vacation"
|
assert home.mock_calls[-1][0] == "deactivate_vacation"
|
||||||
assert home.mock_calls[-1][1] == ()
|
assert home.mock_calls[-1][1] == ()
|
||||||
assert len(home._connection.mock_calls) == 10 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 10 # pylint: disable=protected-access
|
||||||
|
|
||||||
not_existing_hap_id = "5555F7110000000000000001"
|
not_existing_hap_id = "5555F7110000000000000001"
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
|
@ -463,7 +463,7 @@ async def test_hmip_climate_services(hass, mock_hap_with_service):
|
||||||
assert home.mock_calls[-1][0] == "deactivate_vacation"
|
assert home.mock_calls[-1][0] == "deactivate_vacation"
|
||||||
assert home.mock_calls[-1][1] == ()
|
assert home.mock_calls[-1][1] == ()
|
||||||
# There is no further call on connection.
|
# There is no further call on connection.
|
||||||
assert len(home._connection.mock_calls) == 10 # pylint: disable=W0212
|
assert len(home._connection.mock_calls) == 10 # pylint: disable=protected-access
|
||||||
|
|
||||||
|
|
||||||
async def test_hmip_heating_group_services(hass, mock_hap_with_service):
|
async def test_hmip_heating_group_services(hass, mock_hap_with_service):
|
||||||
|
@ -485,7 +485,9 @@ async def test_hmip_heating_group_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert hmip_device.mock_calls[-1][0] == "set_active_profile"
|
assert hmip_device.mock_calls[-1][0] == "set_active_profile"
|
||||||
assert hmip_device.mock_calls[-1][1] == (1,)
|
assert hmip_device.mock_calls[-1][1] == (1,)
|
||||||
assert len(hmip_device._connection.mock_calls) == 2 # pylint: disable=W0212
|
assert (
|
||||||
|
len(hmip_device._connection.mock_calls) == 2 # pylint: disable=protected-access
|
||||||
|
)
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.services.async_call(
|
||||||
"homematicip_cloud",
|
"homematicip_cloud",
|
||||||
|
@ -495,4 +497,7 @@ async def test_hmip_heating_group_services(hass, mock_hap_with_service):
|
||||||
)
|
)
|
||||||
assert hmip_device.mock_calls[-1][0] == "set_active_profile"
|
assert hmip_device.mock_calls[-1][0] == "set_active_profile"
|
||||||
assert hmip_device.mock_calls[-1][1] == (1,)
|
assert hmip_device.mock_calls[-1][1] == (1,)
|
||||||
assert len(hmip_device._connection.mock_calls) == 12 # pylint: disable=W0212
|
assert (
|
||||||
|
len(hmip_device._connection.mock_calls) # pylint: disable=protected-access
|
||||||
|
== 12
|
||||||
|
)
|
||||||
|
|
|
@ -105,7 +105,7 @@ async def test_hap_reconnected(hass, default_mock_hap):
|
||||||
ha_state = hass.states.get(entity_id)
|
ha_state = hass.states.get(entity_id)
|
||||||
assert ha_state.state == STATE_UNAVAILABLE
|
assert ha_state.state == STATE_UNAVAILABLE
|
||||||
|
|
||||||
default_mock_hap._accesspoint_connected = False # pylint: disable=W0212
|
default_mock_hap._accesspoint_connected = False # pylint: disable=protected-access
|
||||||
await async_manipulate_test_data(hass, default_mock_hap.home, "connected", True)
|
await async_manipulate_test_data(hass, default_mock_hap.home, "connected", True)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
ha_state = hass.states.get(entity_id)
|
ha_state = hass.states.get(entity_id)
|
||||||
|
|
|
@ -40,7 +40,7 @@ def init_config_flow(hass):
|
||||||
sensors=None,
|
sensors=None,
|
||||||
)
|
)
|
||||||
flow = config_flow.LogiCircleFlowHandler()
|
flow = config_flow.LogiCircleFlowHandler()
|
||||||
flow._get_authorization_url = Mock( # pylint: disable=W0212
|
flow._get_authorization_url = Mock( # pylint: disable=protected-access
|
||||||
return_value="http://example.com"
|
return_value="http://example.com"
|
||||||
)
|
)
|
||||||
flow.hass = hass
|
flow.hass = hass
|
||||||
|
@ -65,7 +65,9 @@ def mock_logi_circle():
|
||||||
yield mock_logi_circle_
|
yield mock_logi_circle_
|
||||||
|
|
||||||
|
|
||||||
async def test_step_import(hass, mock_logi_circle): # pylint: disable=W0621
|
async def test_step_import(
|
||||||
|
hass, mock_logi_circle # pylint: disable=redefined-outer-name
|
||||||
|
):
|
||||||
"""Test that we trigger import when configuring with client."""
|
"""Test that we trigger import when configuring with client."""
|
||||||
flow = init_config_flow(hass)
|
flow = init_config_flow(hass)
|
||||||
|
|
||||||
|
@ -75,8 +77,8 @@ async def test_step_import(hass, mock_logi_circle): # pylint: disable=W0621
|
||||||
|
|
||||||
|
|
||||||
async def test_full_flow_implementation(
|
async def test_full_flow_implementation(
|
||||||
hass, mock_logi_circle
|
hass, mock_logi_circle # pylint: disable=redefined-outer-name
|
||||||
): # pylint: disable=W0621
|
):
|
||||||
"""Test registering an implementation and finishing flow works."""
|
"""Test registering an implementation and finishing flow works."""
|
||||||
config_flow.register_flow_implementation(
|
config_flow.register_flow_implementation(
|
||||||
hass,
|
hass,
|
||||||
|
@ -154,7 +156,7 @@ async def test_abort_if_already_setup(hass):
|
||||||
)
|
)
|
||||||
async def test_abort_if_authorize_fails(
|
async def test_abort_if_authorize_fails(
|
||||||
hass, mock_logi_circle, side_effect, error
|
hass, mock_logi_circle, side_effect, error
|
||||||
): # pylint: disable=W0621
|
): # pylint: disable=redefined-outer-name
|
||||||
"""Test we abort if authorizing fails."""
|
"""Test we abort if authorizing fails."""
|
||||||
flow = init_config_flow(hass)
|
flow = init_config_flow(hass)
|
||||||
mock_logi_circle.LogiCircle().authorize.side_effect = side_effect
|
mock_logi_circle.LogiCircle().authorize.side_effect = side_effect
|
||||||
|
@ -176,7 +178,9 @@ async def test_not_pick_implementation_if_only_one(hass):
|
||||||
assert result["step_id"] == "auth"
|
assert result["step_id"] == "auth"
|
||||||
|
|
||||||
|
|
||||||
async def test_gen_auth_url(hass, mock_logi_circle): # pylint: disable=W0621
|
async def test_gen_auth_url(
|
||||||
|
hass, mock_logi_circle
|
||||||
|
): # pylint: disable=redefined-outer-name
|
||||||
"""Test generating authorize URL from Logi Circle API."""
|
"""Test generating authorize URL from Logi Circle API."""
|
||||||
config_flow.register_flow_implementation(
|
config_flow.register_flow_implementation(
|
||||||
hass,
|
hass,
|
||||||
|
@ -192,7 +196,7 @@ async def test_gen_auth_url(hass, mock_logi_circle): # pylint: disable=W0621
|
||||||
flow.flow_impl = "test-auth-url"
|
flow.flow_impl = "test-auth-url"
|
||||||
await async_setup_component(hass, "http", {})
|
await async_setup_component(hass, "http", {})
|
||||||
|
|
||||||
result = flow._get_authorization_url() # pylint: disable=W0212
|
result = flow._get_authorization_url() # pylint: disable=protected-access
|
||||||
assert result == "http://authorize.url"
|
assert result == "http://authorize.url"
|
||||||
|
|
||||||
|
|
||||||
|
@ -206,7 +210,7 @@ async def test_callback_view_rejects_missing_code(hass):
|
||||||
|
|
||||||
async def test_callback_view_accepts_code(
|
async def test_callback_view_accepts_code(
|
||||||
hass, mock_logi_circle
|
hass, mock_logi_circle
|
||||||
): # pylint: disable=W0621
|
): # pylint: disable=redefined-outer-name
|
||||||
"""Test the auth callback view handles requests with auth code."""
|
"""Test the auth callback view handles requests with auth code."""
|
||||||
init_config_flow(hass)
|
init_config_flow(hass)
|
||||||
view = LogiCircleAuthCallbackView()
|
view = LogiCircleAuthCallbackView()
|
||||||
|
|
|
@ -1495,8 +1495,7 @@ async def test_encrypted_payload_no_topic_key(hass, setup_comp):
|
||||||
async def test_encrypted_payload_libsodium(hass, setup_comp):
|
async def test_encrypted_payload_libsodium(hass, setup_comp):
|
||||||
"""Test sending encrypted message payload."""
|
"""Test sending encrypted message payload."""
|
||||||
try:
|
try:
|
||||||
# pylint: disable=unused-import
|
import nacl # noqa: F401 pylint: disable=unused-import
|
||||||
import nacl # noqa: F401
|
|
||||||
except (ImportError, OSError):
|
except (ImportError, OSError):
|
||||||
pytest.skip("PyNaCl/libsodium is not installed")
|
pytest.skip("PyNaCl/libsodium is not installed")
|
||||||
return
|
return
|
||||||
|
|
|
@ -14,7 +14,7 @@ def init_config_flow(hass, side_effect=None):
|
||||||
"""Init a configuration flow."""
|
"""Init a configuration flow."""
|
||||||
config_flow.register_flow_implementation(hass, DOMAIN, "id", "secret")
|
config_flow.register_flow_implementation(hass, DOMAIN, "id", "secret")
|
||||||
flow = config_flow.PointFlowHandler()
|
flow = config_flow.PointFlowHandler()
|
||||||
flow._get_authorization_url = Mock( # pylint: disable=W0212
|
flow._get_authorization_url = Mock( # pylint: disable=protected-access
|
||||||
return_value=mock_coro("https://example.com"), side_effect=side_effect
|
return_value=mock_coro("https://example.com"), side_effect=side_effect
|
||||||
)
|
)
|
||||||
flow.hass = hass
|
flow.hass = hass
|
||||||
|
@ -28,7 +28,7 @@ def is_authorized():
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_pypoint(is_authorized): # pylint: disable=W0621
|
def mock_pypoint(is_authorized): # pylint: disable=redefined-outer-name
|
||||||
"""Mock pypoint."""
|
"""Mock pypoint."""
|
||||||
with MockDependency("pypoint") as mock_pypoint_:
|
with MockDependency("pypoint") as mock_pypoint_:
|
||||||
mock_pypoint_.PointSession().get_access_token.return_value = {
|
mock_pypoint_.PointSession().get_access_token.return_value = {
|
||||||
|
@ -66,7 +66,9 @@ async def test_abort_if_already_setup(hass):
|
||||||
assert result["reason"] == "already_setup"
|
assert result["reason"] == "already_setup"
|
||||||
|
|
||||||
|
|
||||||
async def test_full_flow_implementation(hass, mock_pypoint): # pylint: disable=W0621
|
async def test_full_flow_implementation(
|
||||||
|
hass, mock_pypoint # pylint: disable=redefined-outer-name
|
||||||
|
):
|
||||||
"""Test registering an implementation and finishing flow works."""
|
"""Test registering an implementation and finishing flow works."""
|
||||||
config_flow.register_flow_implementation(hass, "test-other", None, None)
|
config_flow.register_flow_implementation(hass, "test-other", None, None)
|
||||||
flow = init_config_flow(hass)
|
flow = init_config_flow(hass)
|
||||||
|
@ -92,7 +94,7 @@ async def test_full_flow_implementation(hass, mock_pypoint): # pylint: disable=
|
||||||
assert result["data"]["token"] == {"access_token": "boo"}
|
assert result["data"]["token"] == {"access_token": "boo"}
|
||||||
|
|
||||||
|
|
||||||
async def test_step_import(hass, mock_pypoint): # pylint: disable=W0621
|
async def test_step_import(hass, mock_pypoint): # pylint: disable=redefined-outer-name
|
||||||
"""Test that we trigger import when configuring with client."""
|
"""Test that we trigger import when configuring with client."""
|
||||||
flow = init_config_flow(hass)
|
flow = init_config_flow(hass)
|
||||||
|
|
||||||
|
@ -104,7 +106,7 @@ async def test_step_import(hass, mock_pypoint): # pylint: disable=W0621
|
||||||
@pytest.mark.parametrize("is_authorized", [False])
|
@pytest.mark.parametrize("is_authorized", [False])
|
||||||
async def test_wrong_code_flow_implementation(
|
async def test_wrong_code_flow_implementation(
|
||||||
hass, mock_pypoint
|
hass, mock_pypoint
|
||||||
): # pylint: disable=W0621
|
): # pylint: disable=redefined-outer-name
|
||||||
"""Test wrong code."""
|
"""Test wrong code."""
|
||||||
flow = init_config_flow(hass)
|
flow = init_config_flow(hass)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ from unittest.mock import Mock
|
||||||
class AsyncMock(Mock):
|
class AsyncMock(Mock):
|
||||||
"""Implements Mock async."""
|
"""Implements Mock async."""
|
||||||
|
|
||||||
# pylint: disable=W0235
|
# pylint: disable=useless-super-delegation
|
||||||
async def __call__(self, *args, **kwargs):
|
async def __call__(self, *args, **kwargs):
|
||||||
"""Hack for async support for Mock."""
|
"""Hack for async support for Mock."""
|
||||||
return super().__call__(*args, **kwargs)
|
return super().__call__(*args, **kwargs)
|
||||||
|
|
|
@ -9,7 +9,7 @@ from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE
|
||||||
from homeassistant.components.smhi import config_flow
|
from homeassistant.components.smhi import config_flow
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=W0212
|
# pylint: disable=protected-access
|
||||||
async def test_homeassistant_location_exists() -> None:
|
async def test_homeassistant_location_exists() -> None:
|
||||||
"""Test if homeassistant location exists it should return True."""
|
"""Test if homeassistant location exists it should return True."""
|
||||||
hass = Mock()
|
hass = Mock()
|
||||||
|
|
|
@ -99,7 +99,7 @@ def test_properties_no_data(hass: HomeAssistant) -> None:
|
||||||
assert weather.temperature_unit == TEMP_CELSIUS
|
assert weather.temperature_unit == TEMP_CELSIUS
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=W0212
|
# pylint: disable=protected-access
|
||||||
def test_properties_unknown_symbol() -> None:
|
def test_properties_unknown_symbol() -> None:
|
||||||
"""Test behaviour when unknown symbol from API."""
|
"""Test behaviour when unknown symbol from API."""
|
||||||
hass = Mock()
|
hass = Mock()
|
||||||
|
@ -152,7 +152,7 @@ def test_properties_unknown_symbol() -> None:
|
||||||
assert forecast[ATTR_FORECAST_CONDITION] is None
|
assert forecast[ATTR_FORECAST_CONDITION] is None
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=W0212
|
# pylint: disable=protected-access
|
||||||
async def test_refresh_weather_forecast_exceeds_retries(hass) -> None:
|
async def test_refresh_weather_forecast_exceeds_retries(hass) -> None:
|
||||||
"""Test the refresh weather forecast function."""
|
"""Test the refresh weather forecast function."""
|
||||||
from smhi.smhi_lib import SmhiForecastException
|
from smhi.smhi_lib import SmhiForecastException
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue