Exemple #1
0
        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)))
Exemple #2
0
    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
        )
Exemple #3
0
    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)))
Exemple #4
0
 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
Exemple #7
0
    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)))
Exemple #8
0
 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
        )
Exemple #10
0
 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()))
Exemple #11
0
    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)))
Exemple #13
0
    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)))
Exemple #14
0
    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