Fix init of TransmissionData (#20817)

* Fix init of TransmissionData

 Fix in order to avoid null object on first update of Turtle Mode Switch

* Using async functionality

* Various fix

* HoundBot fix

* Removed some async calls

* Fix compilation Error

* Fix

* PEP fix
This commit is contained in:
MatteGary 2019-02-08 18:15:14 +01:00 committed by Martin Hjelmare
parent 6a78ad8ab6
commit faf7ae29b1
3 changed files with 59 additions and 16 deletions

View file

@ -19,6 +19,7 @@ from homeassistant.const import (
CONF_SCAN_INTERVAL
)
from homeassistant.helpers import discovery, config_validation as cv
from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.event import track_time_interval
@ -26,6 +27,7 @@ REQUIREMENTS = ['transmissionrpc==0.11']
_LOGGER = logging.getLogger(__name__)
DOMAIN = 'transmission'
DATA_UPDATED = 'transmission_data_updated'
DATA_TRANSMISSION = 'data_transmission'
DEFAULT_NAME = 'Transmission'
@ -83,6 +85,8 @@ def setup(hass, config):
tm_data = hass.data[DATA_TRANSMISSION] = TransmissionData(
hass, config, api)
tm_data.update()
tm_data.init_torrent_list()
def refresh(event_time):
@ -94,10 +98,12 @@ def setup(hass, config):
sensorconfig = {
'sensors': config[DOMAIN][CONF_MONITORED_CONDITIONS],
'client_name': config[DOMAIN][CONF_NAME]}
discovery.load_platform(hass, 'sensor', DOMAIN, sensorconfig, config)
if config[DOMAIN][TURTLE_MODE]:
discovery.load_platform(hass, 'switch', DOMAIN, sensorconfig, config)
return True
@ -127,6 +133,8 @@ class TransmissionData:
self.check_completed_torrent()
self.check_started_torrent()
dispatcher_send(self.hass, DATA_UPDATED)
_LOGGER.debug("Torrent Data updated")
self.available = True
except TransmissionError:
@ -189,4 +197,7 @@ class TransmissionData:
def get_alt_speed_enabled(self):
"""Get the alternative speed flag."""
if self.session is None:
return None
return self.session.alt_speed_enabled

View file

@ -9,10 +9,11 @@ from datetime import timedelta
import logging
from homeassistant.components.transmission import (
DATA_TRANSMISSION, SENSOR_TYPES)
DATA_TRANSMISSION, SENSOR_TYPES, DATA_UPDATED)
from homeassistant.const import STATE_IDLE
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
DEPENDENCIES = ['transmission']
@ -23,7 +24,11 @@ DEFAULT_NAME = 'Transmission'
SCAN_INTERVAL = timedelta(seconds=120)
def setup_platform(hass, config, add_entities, discovery_info=None):
async def async_setup_platform(
hass,
config,
async_add_entities,
discovery_info=None):
"""Set up the Transmission sensors."""
if discovery_info is None:
return
@ -41,7 +46,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
SENSOR_TYPES[sensor_type][0],
SENSOR_TYPES[sensor_type][1]))
add_entities(dev, True)
async_add_entities(dev, True)
class TransmissionSensor(Entity):
@ -73,6 +78,11 @@ class TransmissionSensor(Entity):
"""Return the state of the sensor."""
return self._state
@property
def should_poll(self):
"""Return the polling requirement for this sensor."""
return False
@property
def unit_of_measurement(self):
"""Return the unit of measurement of this entity, if any."""
@ -83,10 +93,18 @@ class TransmissionSensor(Entity):
"""Could the device be accessed during the last update call."""
return self._transmission_api.available
@Throttle(SCAN_INTERVAL)
async def async_added_to_hass(self):
"""Handle entity which will be added."""
async_dispatcher_connect(
self.hass, DATA_UPDATED, self._schedule_immediate_update
)
@callback
def _schedule_immediate_update(self):
self.async_schedule_update_ha_state(True)
def update(self):
"""Get the latest data from Transmission and updates the state."""
self._transmission_api.update()
self._data = self._transmission_api.data
if self.type == 'completed_torrents':

View file

@ -4,16 +4,15 @@ Support for setting the Transmission BitTorrent client Turtle Mode.
For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/switch.transmission/
"""
from datetime import timedelta
import logging
from homeassistant.components.transmission import (
DATA_TRANSMISSION)
DATA_TRANSMISSION, DATA_UPDATED)
from homeassistant.const import (
STATE_OFF, STATE_ON)
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import ToggleEntity
from homeassistant.util import Throttle
DEPENDENCIES = ['transmission']
@ -21,10 +20,12 @@ _LOGGING = logging.getLogger(__name__)
DEFAULT_NAME = 'Transmission Turtle Mode'
SCAN_INTERVAL = timedelta(seconds=120)
def setup_platform(hass, config, add_entities, discovery_info=None):
async def async_setup_platform(
hass,
config,
async_add_entities,
discovery_info=None):
"""Set up the Transmission switch."""
if discovery_info is None:
return
@ -33,7 +34,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
transmission_api = hass.data[component_name]
name = discovery_info['client_name']
add_entities([TransmissionSwitch(transmission_api, name)], True)
async_add_entities([TransmissionSwitch(transmission_api, name)], True)
class TransmissionSwitch(ToggleEntity):
@ -58,7 +59,7 @@ class TransmissionSwitch(ToggleEntity):
@property
def should_poll(self):
"""Poll for status regularly."""
return True
return False
@property
def is_on(self):
@ -75,8 +76,21 @@ class TransmissionSwitch(ToggleEntity):
_LOGGING.debug("Turning Turtle Mode of Transmission off")
self.transmission_client.set_alt_speed_enabled(False)
@Throttle(SCAN_INTERVAL)
async def async_added_to_hass(self):
"""Handle entity which will be added."""
async_dispatcher_connect(
self.hass, DATA_UPDATED, self._schedule_immediate_update
)
@callback
def _schedule_immediate_update(self):
self.async_schedule_update_ha_state(True)
def update(self):
"""Get the latest data from Transmission and updates the state."""
active = self.transmission_client.get_alt_speed_enabled()
if active is None:
return
self._state = STATE_ON if active else STATE_OFF