def async_cast_discovered(discover: ChromecastInfo): """Handle discovery of new Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if _is_matching_dynamic_group(self._cast_info, discover): _LOGGER.debug("Discovered matching dynamic group: %s", discover) self.hass.async_create_task( async_create_catching_coro( self.async_set_dynamic_group(discover))) return if self._cast_info.uuid != discover.uuid: # Discovered is not our device. return if self.services is None: _LOGGER.warning( "[%s %s (%s:%s)] Received update for manually added Cast", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port, ) return _LOGGER.debug("Discovered chromecast with same UUID: %s", discover) self.hass.async_create_task( async_create_catching_coro(self.async_set_cast_info(discover)))
async def async_added_to_hass(self): """Create chromecast object when added to hass.""" self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, self._async_cast_discovered ) self._del_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_REMOVED, self._async_cast_removed ) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_stop) self.hass.async_create_task( async_create_catching_coro(self.async_set_cast_info(self._cast_info)) ) for info in self.hass.data[KNOWN_CHROMECAST_INFO_KEY]: if self._cast_info.same_dynamic_group(info): _LOGGER.debug( "[%s %s (%s:%s)] Found dynamic group: %s", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port, info, ) self.hass.async_create_task( async_create_catching_coro(self.async_set_dynamic_group(info)) ) break self._cast_view_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_HASS_CAST_SHOW_VIEW, self._handle_signal_show_view )
async def _save_prefs(self, prefs): """Save preferences to disk.""" self._prefs = prefs await self._store.async_save(self._prefs) for listener in self._listeners: self._hass.async_create_task(async_create_catching_coro(listener(self)))
def async_cast_removed(discover: ChromecastInfo): """Handle removal of Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if (self._dynamic_group_cast_info is not None and self._dynamic_group_cast_info.uuid == discover.uuid): _LOGGER.debug("Removed matching dynamic group: %s", discover) self.hass.async_create_task( async_create_catching_coro(self.async_del_dynamic_group())) return if self._cast_info.uuid != discover.uuid: # Removed is not our device. return _LOGGER.debug("Removed chromecast with same UUID: %s", discover) self.hass.async_create_task( async_create_catching_coro(self.async_del_cast_info(discover)))
def async_cast_removed(discover: ChromecastInfo): """Handle removal of Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if (self._dynamic_group_cast_info is not None and self._dynamic_group_cast_info.uuid == discover.uuid): _LOGGER.debug("Removed matching dynamic group: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_del_dynamic_group())) return if self._cast_info.uuid != discover.uuid: # Removed is not our device. return _LOGGER.debug("Removed chromecast with same UUID: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_del_cast_info(discover)))
async def test_async_create_catching_coro(hass, caplog): """Test exception logging of wrapped coroutine.""" async def job(): raise Exception("This is a bad coroutine") hass.async_create_task(logging_util.async_create_catching_coro(job())) await hass.async_block_till_done() assert "This is a bad coroutine" in caplog.text assert "in test_async_create_catching_coro" in caplog.text
async def _save_prefs(self, prefs): """Save preferences to disk.""" self.last_updated = { key for key, value in prefs.items() if value != self._prefs.get(key) } self._prefs = prefs await self._store.async_save(self._prefs) for listener in self._listeners: self._hass.async_create_task(async_create_catching_coro(listener(self)))
def async_setup(self): """Create chromecast object.""" self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, self._async_cast_discovered) self._del_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_REMOVED, self._async_cast_removed) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_stop) self.async_set_cast_info(self._cast_info) self.hass.async_create_task( async_create_catching_coro(self.async_connect_to_chromecast()))
async def async_added_to_hass(self): """Create chromecast object when added to hass.""" self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, self._async_cast_discovered ) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_stop) self.hass.async_create_task( async_create_catching_coro(self.async_set_cast_info(self._cast_info)) ) self._cast_view_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_HASS_CAST_SHOW_VIEW, self._handle_signal_show_view )
def _async_setup(self, name: str) -> None: """Create chromecast object.""" self._name = name self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, self._async_cast_discovered) self._del_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_REMOVED, self._async_cast_removed) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_stop) # asyncio.create_task is used to avoid delaying startup wrapup if the device # is discovered already during startup but then fails to respond asyncio.create_task( async_create_catching_coro(self._async_connect_to_chromecast()))
async def async_added_to_hass(self): """Create chromecast object when added to hass.""" self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, self._async_cast_discovered) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_stop) self.async_set_cast_info(self._cast_info) # asyncio.create_task is used to avoid delaying startup wrapup if the device # is discovered already during startup but then fails to respond asyncio.create_task( async_create_catching_coro(self.async_connect_to_chromecast())) self._cast_view_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_HASS_CAST_SHOW_VIEW, self._handle_signal_show_view)
def async_cast_discovered(discover: ChromecastInfo): """Handle discovery of new Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if _is_matching_dynamic_group(self._cast_info, discover): _LOGGER.debug("Discovered matching dynamic group: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_set_dynamic_group(discover))) return if self._cast_info.uuid != discover.uuid: # Discovered is not our device. return if self.services is None: _LOGGER.warning( "[%s %s (%s:%s)] Received update for manually added Cast", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port) return _LOGGER.debug("Discovered chromecast with same UUID: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_set_cast_info(discover)))
async def async_update( self, *, google_enabled=_UNDEF, alexa_enabled=_UNDEF, remote_enabled=_UNDEF, google_secure_devices_pin=_UNDEF, cloudhooks=_UNDEF, cloud_user=_UNDEF, google_entity_configs=_UNDEF, alexa_entity_configs=_UNDEF, alexa_report_state=_UNDEF, google_report_state=_UNDEF, ): """Update user preferences.""" for key, value in ( (PREF_ENABLE_GOOGLE, google_enabled), (PREF_ENABLE_ALEXA, alexa_enabled), (PREF_ENABLE_REMOTE, remote_enabled), (PREF_GOOGLE_SECURE_DEVICES_PIN, google_secure_devices_pin), (PREF_CLOUDHOOKS, cloudhooks), (PREF_CLOUD_USER, cloud_user), (PREF_GOOGLE_ENTITY_CONFIGS, google_entity_configs), (PREF_ALEXA_ENTITY_CONFIGS, alexa_entity_configs), (PREF_ALEXA_REPORT_STATE, alexa_report_state), (PREF_GOOGLE_REPORT_STATE, google_report_state), ): if value is not _UNDEF: self._prefs[key] = value if remote_enabled is True and self._has_local_trusted_network: self._prefs[PREF_ENABLE_REMOTE] = False raise InvalidTrustedNetworks if remote_enabled is True and self._has_local_trusted_proxies: self._prefs[PREF_ENABLE_REMOTE] = False raise InvalidTrustedProxies await self._store.async_save(self._prefs) for listener in self._listeners: self._hass.async_create_task( async_create_catching_coro(listener(self)))
async def async_added_to_hass(self): """Create chromecast object when added to hass.""" @callback def async_cast_discovered(discover: ChromecastInfo): """Handle discovery of new Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if _is_matching_dynamic_group(self._cast_info, discover): _LOGGER.debug("Discovered matching dynamic group: %s", discover) self.hass.async_create_task( async_create_catching_coro( self.async_set_dynamic_group(discover))) return if self._cast_info.uuid != discover.uuid: # Discovered is not our device. return if self.services is None: _LOGGER.warning( "[%s %s (%s:%s)] Received update for manually added Cast", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port, ) return _LOGGER.debug("Discovered chromecast with same UUID: %s", discover) self.hass.async_create_task( async_create_catching_coro(self.async_set_cast_info(discover))) def async_cast_removed(discover: ChromecastInfo): """Handle removal of Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if (self._dynamic_group_cast_info is not None and self._dynamic_group_cast_info.uuid == discover.uuid): _LOGGER.debug("Removed matching dynamic group: %s", discover) self.hass.async_create_task( async_create_catching_coro(self.async_del_dynamic_group())) return if self._cast_info.uuid != discover.uuid: # Removed is not our device. return _LOGGER.debug("Removed chromecast with same UUID: %s", discover) self.hass.async_create_task( async_create_catching_coro(self.async_del_cast_info(discover))) async def async_stop(event): """Disconnect socket on Home Assistant stop.""" await self._async_disconnect() self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, async_cast_discovered) self._del_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_REMOVED, async_cast_removed) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_stop) self.hass.async_create_task( async_create_catching_coro( self.async_set_cast_info(self._cast_info))) for info in self.hass.data[KNOWN_CHROMECAST_INFO_KEY]: if _is_matching_dynamic_group(self._cast_info, info): _LOGGER.debug( "[%s %s (%s:%s)] Found dynamic group: %s", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port, info, ) self.hass.async_create_task( async_create_catching_coro( self.async_set_dynamic_group(info))) break
async def async_added_to_hass(self): """Create chromecast object when added to hass.""" @callback def async_cast_discovered(discover: ChromecastInfo): """Handle discovery of new Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if _is_matching_dynamic_group(self._cast_info, discover): _LOGGER.debug("Discovered matching dynamic group: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_set_dynamic_group(discover))) return if self._cast_info.uuid != discover.uuid: # Discovered is not our device. return if self.services is None: _LOGGER.warning( "[%s %s (%s:%s)] Received update for manually added Cast", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port) return _LOGGER.debug("Discovered chromecast with same UUID: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_set_cast_info(discover))) def async_cast_removed(discover: ChromecastInfo): """Handle removal of Chromecast.""" if self._cast_info.uuid is None: # We can't handle empty UUIDs return if (self._dynamic_group_cast_info is not None and self._dynamic_group_cast_info.uuid == discover.uuid): _LOGGER.debug("Removed matching dynamic group: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_del_dynamic_group())) return if self._cast_info.uuid != discover.uuid: # Removed is not our device. return _LOGGER.debug("Removed chromecast with same UUID: %s", discover) self.hass.async_create_task(async_create_catching_coro( self.async_del_cast_info(discover))) async def async_stop(event): """Disconnect socket on Home Assistant stop.""" await self._async_disconnect() self._add_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_DISCOVERED, async_cast_discovered) self._del_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_CAST_REMOVED, async_cast_removed) self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_stop) self.hass.async_create_task(async_create_catching_coro( self.async_set_cast_info(self._cast_info))) for info in self.hass.data[KNOWN_CHROMECAST_INFO_KEY]: if _is_matching_dynamic_group(self._cast_info, info): _LOGGER.debug("[%s %s (%s:%s)] Found dynamic group: %s", self.entity_id, self._cast_info.friendly_name, self._cast_info.host, self._cast_info.port, info) self.hass.async_create_task(async_create_catching_coro( self.async_set_dynamic_group(info))) break