From 9012ba53fdc3ac129db9a48a4a2b0bca02471387 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Tue, 6 Oct 2015 23:18:24 -0400 Subject: [PATCH 01/12] add play_media service to tests --- tests/components/test_media_player.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/components/test_media_player.py b/tests/components/test_media_player.py index 28d39206c47..7c8dc60fff2 100644 --- a/tests/components/test_media_player.py +++ b/tests/components/test_media_player.py @@ -12,7 +12,8 @@ from homeassistant.const import ( STATE_OFF, SERVICE_TURN_ON, SERVICE_TURN_OFF, SERVICE_VOLUME_UP, SERVICE_VOLUME_DOWN, SERVICE_MEDIA_PLAY_PAUSE, SERVICE_MEDIA_PLAY, SERVICE_MEDIA_PAUSE, - SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PREVIOUS_TRACK, ATTR_ENTITY_ID) + SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PREVIOUS_TRACK, SERVICE_PLAY_MEDIA, + ATTR_ENTITY_ID) import homeassistant.components.media_player as media_player from tests.common import mock_service @@ -52,6 +53,7 @@ class TestMediaPlayer(unittest.TestCase): SERVICE_MEDIA_PAUSE: media_player.media_pause, SERVICE_MEDIA_NEXT_TRACK: media_player.media_next_track, SERVICE_MEDIA_PREVIOUS_TRACK: media_player.media_previous_track + SERVICE_PLAY_MEDIA: media_player.play_media } for service_name, service_method in services.items(): From ad549be353f43809a2d01be7eff69c1ba9c9c8f0 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 00:39:38 -0400 Subject: [PATCH 02/12] support play_media for state restoration (for scenes) --- homeassistant/helpers/state.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/homeassistant/helpers/state.py b/homeassistant/helpers/state.py index 909b86a67ed..db33eda960d 100644 --- a/homeassistant/helpers/state.py +++ b/homeassistant/helpers/state.py @@ -13,6 +13,8 @@ from homeassistant.const import ( SERVICE_MEDIA_PLAY, SERVICE_MEDIA_PAUSE, STATE_PLAYING, STATE_PAUSED, ATTR_ENTITY_ID) +from homeassistant.components.media_player import (SERVICE_PLAY_MEDIA) + _LOGGER = logging.getLogger(__name__) @@ -61,6 +63,8 @@ def reproduce_state(hass, states, blocking=False): service = SERVICE_MEDIA_PAUSE elif state.domain == 'media_player' and state.state == STATE_PLAYING: service = SERVICE_MEDIA_PLAY + elif state.domain == 'media_player' and state.attributes and state.attributes['media_type'] and state.attributes['media_id']: + service = SERVICE_PLAY_MEDIA elif state.state == STATE_ON: service = SERVICE_TURN_ON elif state.state == STATE_OFF: From 6afb846d04f8d7a43d495d8415ed4f8dc8ba3bbe Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 00:56:14 -0400 Subject: [PATCH 03/12] avoid key errors --- homeassistant/components/media_player/__init__.py | 4 ++-- homeassistant/helpers/state.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/media_player/__init__.py b/homeassistant/components/media_player/__init__.py index fec4515756c..1b65ce57912 100644 --- a/homeassistant/components/media_player/__init__.py +++ b/homeassistant/components/media_player/__init__.py @@ -287,8 +287,8 @@ def setup(hass, config): def play_media_service(service): """ Plays specified media_id on the media player. """ - media_type = service.data['media_type'] - media_id = service.data['media_id'] + media_type = service.data.get('media_type') + media_id = service.data.get('media_id') if media_type is None: return diff --git a/homeassistant/helpers/state.py b/homeassistant/helpers/state.py index db33eda960d..bf3c5f05d7a 100644 --- a/homeassistant/helpers/state.py +++ b/homeassistant/helpers/state.py @@ -63,7 +63,8 @@ def reproduce_state(hass, states, blocking=False): service = SERVICE_MEDIA_PAUSE elif state.domain == 'media_player' and state.state == STATE_PLAYING: service = SERVICE_MEDIA_PLAY - elif state.domain == 'media_player' and state.attributes and state.attributes['media_type'] and state.attributes['media_id']: + elif state.domain == 'media_player' and state.attributes and + 'media_type' in state.attributes and 'media_id' in state.attributes service = SERVICE_PLAY_MEDIA elif state.state == STATE_ON: service = SERVICE_TURN_ON From c4f8017a3fefac7999117947d5b5cb0d29249846 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 00:56:36 -0400 Subject: [PATCH 04/12] silence warning --- homeassistant/components/media_player/cast.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/media_player/cast.py b/homeassistant/components/media_player/cast.py index 61223446e5f..6f622c9e0cc 100644 --- a/homeassistant/components/media_player/cast.py +++ b/homeassistant/components/media_player/cast.py @@ -90,6 +90,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class CastDevice(MediaPlayerDevice): """ Represents a Cast device on the network. """ + # pylint: disable=abstract-method # pylint: disable=too-many-public-methods def __init__(self, host): From 6c4b2fd63854fa88a307aa24628b4fa54890951c Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:01:25 -0400 Subject: [PATCH 05/12] derp --- homeassistant/helpers/state.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/helpers/state.py b/homeassistant/helpers/state.py index bf3c5f05d7a..ac80da98555 100644 --- a/homeassistant/helpers/state.py +++ b/homeassistant/helpers/state.py @@ -63,8 +63,8 @@ def reproduce_state(hass, states, blocking=False): service = SERVICE_MEDIA_PAUSE elif state.domain == 'media_player' and state.state == STATE_PLAYING: service = SERVICE_MEDIA_PLAY - elif state.domain == 'media_player' and state.attributes and - 'media_type' in state.attributes and 'media_id' in state.attributes + elif state.domain == 'media_player' and state.attributes and \ + 'media_type' in state.attributes and 'media_id' in state.attributes: service = SERVICE_PLAY_MEDIA elif state.state == STATE_ON: service = SERVICE_TURN_ON From bb997deb85d5261fb07f46d2bf975db44a9d8499 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:06:27 -0400 Subject: [PATCH 06/12] COMMMMAAAAAAAAAAAA --- tests/components/test_media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/components/test_media_player.py b/tests/components/test_media_player.py index 7c8dc60fff2..5d7da542eee 100644 --- a/tests/components/test_media_player.py +++ b/tests/components/test_media_player.py @@ -52,7 +52,7 @@ class TestMediaPlayer(unittest.TestCase): SERVICE_MEDIA_PLAY: media_player.media_play, SERVICE_MEDIA_PAUSE: media_player.media_pause, SERVICE_MEDIA_NEXT_TRACK: media_player.media_next_track, - SERVICE_MEDIA_PREVIOUS_TRACK: media_player.media_previous_track + SERVICE_MEDIA_PREVIOUS_TRACK: media_player.media_previous_track, SERVICE_PLAY_MEDIA: media_player.play_media } From 25a690691bdd8c143eb80e232ca50482b4081420 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:11:19 -0400 Subject: [PATCH 07/12] import it from the right place --- tests/components/test_media_player.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/components/test_media_player.py b/tests/components/test_media_player.py index 5d7da542eee..f1c56e5a0b0 100644 --- a/tests/components/test_media_player.py +++ b/tests/components/test_media_player.py @@ -12,8 +12,8 @@ from homeassistant.const import ( STATE_OFF, SERVICE_TURN_ON, SERVICE_TURN_OFF, SERVICE_VOLUME_UP, SERVICE_VOLUME_DOWN, SERVICE_MEDIA_PLAY_PAUSE, SERVICE_MEDIA_PLAY, SERVICE_MEDIA_PAUSE, - SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PREVIOUS_TRACK, SERVICE_PLAY_MEDIA, - ATTR_ENTITY_ID) + SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PREVIOUS_TRACK, ATTR_ENTITY_ID) +from homeassistant.components.media_player import (SERVICE_PLAY_MEDIA) import homeassistant.components.media_player as media_player from tests.common import mock_service From 1c4ac6017dd06ee4194ce521f51c9ba35a64f1a9 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:21:41 -0400 Subject: [PATCH 08/12] fix typo while were in here --- tests/components/test_media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/components/test_media_player.py b/tests/components/test_media_player.py index f1c56e5a0b0..7d7ddb33ac0 100644 --- a/tests/components/test_media_player.py +++ b/tests/components/test_media_player.py @@ -41,7 +41,7 @@ class TestMediaPlayer(unittest.TestCase): def test_services(self): """ - Test if the call service methods conver to correct service calls. + Test if the call service methods convert to correct service calls. """ services = { SERVICE_TURN_ON: media_player.turn_on, From faa3e98921f6b2f1a04d3ffd83f128c4594bf3b3 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:28:58 -0400 Subject: [PATCH 09/12] module level play_media --- homeassistant/components/media_player/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/homeassistant/components/media_player/__init__.py b/homeassistant/components/media_player/__init__.py index 1b65ce57912..9fcb3d5523d 100644 --- a/homeassistant/components/media_player/__init__.py +++ b/homeassistant/components/media_player/__init__.py @@ -189,6 +189,15 @@ def media_previous_track(hass, entity_id=None): data = {ATTR_ENTITY_ID: entity_id} if entity_id else {} hass.services.call(DOMAIN, SERVICE_MEDIA_PREVIOUS_TRACK, data) +def play_media(hass, media_type, media_id, entity_id=None): + """ Send the media player the command for playing media. """ + data = {"media_type": media_type, "media_id": media_id} + + if entity_id: + data[ATTR_ENTITY_ID] = entity_id + + hass.services.call(DOMAIN, SERVICE_PLAY_MEDIA, data) + def setup(hass, config): """ Track states and offer events for media_players. """ From dbcc3a76ea58e345e896c9707d5a72db1a9cd9bb Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:29:55 -0400 Subject: [PATCH 10/12] style --- homeassistant/helpers/state.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/helpers/state.py b/homeassistant/helpers/state.py index ac80da98555..2f688647a5a 100644 --- a/homeassistant/helpers/state.py +++ b/homeassistant/helpers/state.py @@ -64,7 +64,8 @@ def reproduce_state(hass, states, blocking=False): elif state.domain == 'media_player' and state.state == STATE_PLAYING: service = SERVICE_MEDIA_PLAY elif state.domain == 'media_player' and state.attributes and \ - 'media_type' in state.attributes and 'media_id' in state.attributes: + 'media_type' in state.attributes and \ + 'media_id' in state.attributes: service = SERVICE_PLAY_MEDIA elif state.state == STATE_ON: service = SERVICE_TURN_ON From c83324d4cfa806fbe721c1fcb915702fe2fe3130 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:34:37 -0400 Subject: [PATCH 11/12] nope --- tests/components/test_media_player.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/components/test_media_player.py b/tests/components/test_media_player.py index 7d7ddb33ac0..211626ea3fb 100644 --- a/tests/components/test_media_player.py +++ b/tests/components/test_media_player.py @@ -13,7 +13,6 @@ from homeassistant.const import ( SERVICE_TURN_ON, SERVICE_TURN_OFF, SERVICE_VOLUME_UP, SERVICE_VOLUME_DOWN, SERVICE_MEDIA_PLAY_PAUSE, SERVICE_MEDIA_PLAY, SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PREVIOUS_TRACK, ATTR_ENTITY_ID) -from homeassistant.components.media_player import (SERVICE_PLAY_MEDIA) import homeassistant.components.media_player as media_player from tests.common import mock_service @@ -52,8 +51,7 @@ class TestMediaPlayer(unittest.TestCase): SERVICE_MEDIA_PLAY: media_player.media_play, SERVICE_MEDIA_PAUSE: media_player.media_pause, SERVICE_MEDIA_NEXT_TRACK: media_player.media_next_track, - SERVICE_MEDIA_PREVIOUS_TRACK: media_player.media_previous_track, - SERVICE_PLAY_MEDIA: media_player.play_media + SERVICE_MEDIA_PREVIOUS_TRACK: media_player.media_previous_track } for service_name, service_method in services.items(): From 26939ce554a270ddd4d15c630b67a60634f2e5b2 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:37:40 -0400 Subject: [PATCH 12/12] style --- homeassistant/components/media_player/__init__.py | 1 + homeassistant/helpers/state.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/__init__.py b/homeassistant/components/media_player/__init__.py index 9fcb3d5523d..294fccbb1f5 100644 --- a/homeassistant/components/media_player/__init__.py +++ b/homeassistant/components/media_player/__init__.py @@ -189,6 +189,7 @@ def media_previous_track(hass, entity_id=None): data = {ATTR_ENTITY_ID: entity_id} if entity_id else {} hass.services.call(DOMAIN, SERVICE_MEDIA_PREVIOUS_TRACK, data) + def play_media(hass, media_type, media_id, entity_id=None): """ Send the media player the command for playing media. """ data = {"media_type": media_type, "media_id": media_id} diff --git a/homeassistant/helpers/state.py b/homeassistant/helpers/state.py index 2f688647a5a..6526fe2d90b 100644 --- a/homeassistant/helpers/state.py +++ b/homeassistant/helpers/state.py @@ -65,7 +65,7 @@ def reproduce_state(hass, states, blocking=False): service = SERVICE_MEDIA_PLAY elif state.domain == 'media_player' and state.attributes and \ 'media_type' in state.attributes and \ - 'media_id' in state.attributes: + 'media_id' in state.attributes: service = SERVICE_PLAY_MEDIA elif state.state == STATE_ON: service = SERVICE_TURN_ON