From 32f8622bba3480fcd3984e787d3d3c21d163e3b5 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 1 Feb 2017 16:53:02 +0100 Subject: [PATCH] Bugfix sonos group coordinator (#5691) * Bugfix sonos group coordinator * Fix tests --- homeassistant/components/media_player/sonos.py | 18 ++++++++++-------- tests/components/media_player/test_sonos.py | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/media_player/sonos.py b/homeassistant/components/media_player/sonos.py index 38408914448..14b32260ca0 100644 --- a/homeassistant/components/media_player/sonos.py +++ b/homeassistant/components/media_player/sonos.py @@ -342,18 +342,20 @@ class SonosDevice(MediaPlayerDevice): if is_available: - if self._player.group.coordinator != self._player: + # set group coordinator + if self._player.is_coordinator: + self._coordinator = None + else: try: self._coordinator = _get_entity_from_soco( self.hass, self._player.group.coordinator) + + # protect for loop + if not self._coordinator.is_coordinator: + # pylint: disable=protected-access + self._coordinator._coordinator = None except ValueError: self._coordinator = None - else: - self._coordinator = None - - if self._coordinator == self: - _LOGGER.warning("Coordinator loop on: %s", self.unique_id) - self._coordinator = None track_info = None if self._last_avtransport_event: @@ -957,7 +959,7 @@ class SonosDevice(MediaPlayerDevice): try: # need catch exception if a coordinator is going to slave. # this state will recover with group part. - self.soco_snapshot.restore(True) + self.soco_snapshot.restore(False) except (TypeError, SoCoException): _LOGGER.debug("Error on restore %s", self.entity_id) diff --git a/tests/components/media_player/test_sonos.py b/tests/components/media_player/test_sonos.py index 3d80536fb82..bcbee544f81 100644 --- a/tests/components/media_player/test_sonos.py +++ b/tests/components/media_player/test_sonos.py @@ -314,4 +314,4 @@ class TestSonosMediaPlayer(unittest.TestCase): device._snapshot_coordinator.soco_device = SoCoMock('192.0.2.17') device.restore() self.assertEqual(restoreMock.call_count, 1) - self.assertEqual(restoreMock.call_args, mock.call(True)) + self.assertEqual(restoreMock.call_args, mock.call(False))