From f170c80bea70c939c098b5c88320a1c789858958 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 4 Jun 2020 20:32:00 +0200 Subject: [PATCH] Bump pychromecast to 6.0.0 (#36414) * Revert "Prevent race in pychromecast.start_discovery (#36350)" This reverts commit 391983a0cf56a226120057390ddd33586019b827. * Adapt to pychromecast 6.0.0 --- homeassistant/components/cast/discovery.py | 13 +++---- homeassistant/components/cast/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/cast/test_media_player.py | 38 +++++++++------------ 5 files changed, 24 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/cast/discovery.py b/homeassistant/components/cast/discovery.py index 4d58fc3383a..e7d13ea0a18 100644 --- a/homeassistant/components/cast/discovery.py +++ b/homeassistant/components/cast/discovery.py @@ -3,7 +3,6 @@ import logging import threading import pychromecast -import zeroconf from homeassistant.const import EVENT_HOMEASSISTANT_STOP from homeassistant.core import HomeAssistant @@ -85,14 +84,12 @@ def setup_internal_discovery(hass: HomeAssistant) -> None: ) _LOGGER.debug("Starting internal pychromecast discovery.") - listener = pychromecast.discovery.CastListener( - internal_add_callback, internal_remove_callback - ) - browser = zeroconf.ServiceBrowser( - ChromeCastZeroconf.get_zeroconf() or zeroconf.Zeroconf(), - "_googlecast._tcp.local.", - listener, + listener = pychromecast.CastListener( + internal_add_callback, + internal_remove_callback, + internal_add_callback, # Use internal_add_callback also for updates ) + browser = pychromecast.start_discovery(listener, ChromeCastZeroconf.get_zeroconf()) def stop_discovery(event): """Stop discovery of new chromecasts.""" diff --git a/homeassistant/components/cast/manifest.json b/homeassistant/components/cast/manifest.json index 0be595de549..edf0373dd5d 100644 --- a/homeassistant/components/cast/manifest.json +++ b/homeassistant/components/cast/manifest.json @@ -3,7 +3,7 @@ "name": "Google Cast", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/cast", - "requirements": ["pychromecast==5.3.0"], + "requirements": ["pychromecast==6.0.0"], "after_dependencies": ["cloud","zeroconf"], "zeroconf": ["_googlecast._tcp.local."], "codeowners": ["@emontnemery"] diff --git a/requirements_all.txt b/requirements_all.txt index dfdabeb35a6..613c6151629 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1245,7 +1245,7 @@ pycfdns==0.0.1 pychannels==1.0.0 # homeassistant.components.cast -pychromecast==5.3.0 +pychromecast==6.0.0 # homeassistant.components.cmus pycmus==0.1.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 8789dc34c3b..bc53c8869ec 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -539,7 +539,7 @@ pyblackbird==0.5 pybotvac==0.0.17 # homeassistant.components.cast -pychromecast==5.3.0 +pychromecast==6.0.0 # homeassistant.components.coolmaster pycoolmasternet==0.0.4 diff --git a/tests/components/cast/test_media_player.py b/tests/components/cast/test_media_player.py index ce9e4ad7bf8..90b3896396c 100644 --- a/tests/components/cast/test_media_player.py +++ b/tests/components/cast/test_media_player.py @@ -80,17 +80,17 @@ async def async_setup_cast_internal_discovery(hass, config=None, discovery_info= browser = MagicMock(zc={}) with patch( - "homeassistant.components.cast.discovery.pychromecast.discovery.CastListener", + "homeassistant.components.cast.discovery.pychromecast.CastListener", return_value=listener, ) as cast_listener, patch( - "homeassistant.components.cast.discovery.zeroconf.ServiceBrowser", + "homeassistant.components.cast.discovery.pychromecast.start_discovery", return_value=browser, - ): + ) as start_discovery: add_entities = await async_setup_cast(hass, config, discovery_info) await hass.async_block_till_done() await hass.async_block_till_done() - assert cast_listener.call_count == 1 + assert start_discovery.call_count == 1 discovery_callback = cast_listener.call_args[0][0] @@ -120,10 +120,10 @@ async def async_setup_media_player_cast(hass: HomeAssistantType, info: Chromecas "homeassistant.components.cast.discovery.pychromecast.get_chromecast_from_service", return_value=chromecast, ) as get_chromecast, patch( - "homeassistant.components.cast.discovery.pychromecast.discovery.CastListener", + "homeassistant.components.cast.discovery.pychromecast.CastListener", return_value=listener, ) as cast_listener, patch( - "homeassistant.components.cast.discovery.zeroconf.ServiceBrowser", + "homeassistant.components.cast.discovery.pychromecast.start_discovery", return_value=browser, ): await async_setup_component( @@ -159,17 +159,15 @@ async def async_setup_media_player_cast(hass: HomeAssistantType, info: Chromecas async def test_start_discovery_called_once(hass): """Test pychromecast.start_discovery called exactly once.""" with patch( - "homeassistant.components.cast.discovery.pychromecast.discovery.CastListener", - ) as cast_listener, patch( - "homeassistant.components.cast.discovery.zeroconf.ServiceBrowser", + "homeassistant.components.cast.discovery.pychromecast.start_discovery", return_value=Mock(), - ): + ) as start_discovery: await async_setup_cast(hass) - assert cast_listener.call_count == 1 + assert start_discovery.call_count == 1 await async_setup_cast(hass) - assert cast_listener.call_count == 1 + assert start_discovery.call_count == 1 async def test_stop_discovery_called_on_stop(hass): @@ -177,15 +175,13 @@ async def test_stop_discovery_called_on_stop(hass): browser = MagicMock(zc={}) with patch( - "homeassistant.components.cast.discovery.pychromecast.discovery.CastListener", - ) as cast_listener, patch( - "homeassistant.components.cast.discovery.zeroconf.ServiceBrowser", + "homeassistant.components.cast.discovery.pychromecast.start_discovery", return_value=browser, - ): + ) as start_discovery: # start_discovery should be called with empty config await async_setup_cast(hass, {}) - assert cast_listener.call_count == 1 + assert start_discovery.call_count == 1 with patch( "homeassistant.components.cast.discovery.pychromecast.stop_discovery" @@ -197,15 +193,13 @@ async def test_stop_discovery_called_on_stop(hass): stop_discovery.assert_called_once_with(browser) with patch( - "homeassistant.components.cast.discovery.pychromecast.discovery.CastListener", - ) as cast_listener, patch( - "homeassistant.components.cast.discovery.zeroconf.ServiceBrowser", + "homeassistant.components.cast.discovery.pychromecast.start_discovery", return_value=browser, - ): + ) as start_discovery: # start_discovery should be called again on re-startup await async_setup_cast(hass) - assert cast_listener.call_count == 1 + assert start_discovery.call_count == 1 async def test_create_cast_device_without_uuid(hass):