From 58c90402c5e674ce2d62ae941f20548c5c85d150 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 19 Oct 2014 23:37:43 -0700 Subject: [PATCH] Even more simplified API --- README.md | 32 ++++++++++++++++++++++---------- homeassistant/remote.py | 5 ++++- homeassistant/test.py | 35 ++++++++++++++++++++++++++++------- 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 1d0b4238b5a..4b1f13e8d7f 100644 --- a/README.md +++ b/README.md @@ -241,25 +241,37 @@ Returns message if API is up and running. Returns a dict with as keys the events and as value the number of listeners. ```json -{ - "state_changed": 5, - "time_changed": 2 -} +[ + { + "event": "state_changed", + "listener_count": 5 + }, + { + "event": "time_changed", + "listener_count": 2 + } +] ``` **/api/services - GET**
Returns a dict with as keys the domain and as value a list of published services. ```json -{ - "browser": [ +[ + { + "domain": "browser", + "services": [ "browse_url" - ], - "keyboard": [ + ] + }, + { + "domain": "keyboard", + "services": [ "volume_up", "volume_down" - ] -} + ] + } +] ``` **/api/states - GET**
diff --git a/homeassistant/remote.py b/homeassistant/remote.py index 4989e34060d..2f66f0ae04a 100644 --- a/homeassistant/remote.py +++ b/homeassistant/remote.py @@ -402,7 +402,10 @@ def is_state(api, entity_id, state, logger=None): def get_services(api, logger=None): - """ Returns a dict with per domain the available services at API. """ + """ + Returns a list of dicts. Each dict has a string "domain" and + a list of strings "services". + """ try: req = api(METHOD_GET, URL_API_SERVICES) diff --git a/homeassistant/test.py b/homeassistant/test.py index 36d65f4838e..86623a98f9c 100644 --- a/homeassistant/test.py +++ b/homeassistant/test.py @@ -245,14 +245,25 @@ class TestHTTP(unittest.TestCase): req = requests.get(_url(remote.URL_API_EVENTS), headers=HA_HEADERS) - self.assertEqual(req.json(), self.hass.bus.listeners) + local = self.hass.bus.listeners + + for event in req.json(): + self.assertEqual(event["listener_count"], + local.pop(event["event"])) + + self.assertEqual(len(local), 0) def test_api_get_services(self): """ Test if we can get a dict describing current services. """ req = requests.get(_url(remote.URL_API_SERVICES), headers=HA_HEADERS) - self.assertEqual(req.json(), self.hass.services.services) + local_services = self.hass.services.services + + for serv_domain in req.json(): + local = local_services.pop(serv_domain["domain"]) + + self.assertEqual(serv_domain["services"], local) def test_api_call_service_no_data(self): """ Test if the API allows us to call a service. """ @@ -310,9 +321,13 @@ class TestRemoteMethods(unittest.TestCase): def test_get_event_listeners(self): """ Test Python API get_event_listeners. """ + local = self.hass.bus.listeners - self.assertEqual( - remote.get_event_listeners(self.api), self.hass.bus.listeners) + for event in remote.get_event_listeners(self.api): + self.assertEqual(event["listener_count"], + local.pop(event["event"])) + + self.assertEqual(len(local), 0) def test_fire_event(self): """ Test Python API fire_event. """ @@ -360,8 +375,12 @@ class TestRemoteMethods(unittest.TestCase): def test_get_services(self): """ Test Python API get_services. """ - self.assertEqual( - remote.get_services(self.api), self.hass.services.services) + local_services = self.hass.services.services + + for serv_domain in remote.get_services(self.api): + local = local_services.pop(serv_domain["domain"]) + + self.assertEqual(serv_domain["services"], local) def test_call_service(self): """ Test Python API call_service. """ @@ -392,7 +411,9 @@ class TestRemoteClasses(unittest.TestCase): def test_statemachine_init(self): """ Tests if remote.StateMachine copies all states on init. """ - self.assertEqual(self.hass.states.all(), self.slave.states.all()) + for state in self.hass.states.all(): + self.assertEqual( + self.slave.states.get(state.entity_id), state) def test_statemachine_set(self): """ Tests if setting the state on a slave is recorded. """