diff --git a/homeassistant/components/http/__init__.py b/homeassistant/components/http/__init__.py index cf61da9c41a..d8dd382d41e 100644 --- a/homeassistant/components/http/__init__.py +++ b/homeassistant/components/http/__init__.py @@ -263,7 +263,7 @@ class RequestHandler(BaseHTTPRequestHandler): api_password = data['api_password'] if '_METHOD' in data: - method = data['_METHOD'] + method = data.pop('_METHOD') if url.path.startswith('/api/'): self.use_json = True @@ -382,10 +382,8 @@ class RequestHandler(BaseHTTPRequestHandler): "" "" - "" - "" + "" "" "" "
" @@ -684,13 +682,8 @@ class RequestHandler(BaseHTTPRequestHandler): """ domain = path_match.group('domain') service = path_match.group('service') - service_data = data.get('service_data') - if service_data is not None and not isinstance(service_data, dict): - self._message("service_data should be an object", - HTTP_UNPROCESSABLE_ENTITY) - - self.server.hass.call_service(domain, service, service_data) + self.server.hass.call_service(domain, service, data) self._message("Service {}/{} called.".format(domain, service)) @@ -749,7 +742,9 @@ class RequestHandler(BaseHTTPRequestHandler): def _handle_get_static(self, path_match, data): """ Returns a static file. """ - req_file = util.sanitize_filename(path_match.group('file')) + # req_file = util.sanitize_filename(path_match.group('file')) + # TODO make safe + req_file = path_match.group('file') path = os.path.join(os.path.dirname(__file__), 'www_static', req_file) diff --git a/homeassistant/remote.py b/homeassistant/remote.py index 492f9ae6f46..4989e34060d 100644 --- a/homeassistant/remote.py +++ b/homeassistant/remote.py @@ -418,8 +418,16 @@ def get_services(api, logger=None): def call_service(api, domain, service, service_data=None, logger=None): """ Calls a service at the remote API. """ - event_data = service_data or {} - event_data[ha.ATTR_DOMAIN] = domain - event_data[ha.ATTR_SERVICE] = service + try: + req = api(METHOD_POST, + URL_API_SERVICES_SERVICE.format(domain, service), + service_data) - fire_event(api, ha.EVENT_CALL_SERVICE, event_data, logger) + if req.status_code != 200 and logger: + logger.error( + "Error calling service: {} - {}".format( + req.status_code, req.text)) + + except ha.HomeAssistantError: + if logger: + logger.exception("Error setting state to server") diff --git a/homeassistant/test.py b/homeassistant/test.py index 38be01c0b87..36d65f4838e 100644 --- a/homeassistant/test.py +++ b/homeassistant/test.py @@ -289,7 +289,7 @@ class TestHTTP(unittest.TestCase): requests.post( _url(remote.URL_API_SERVICES_SERVICE.format( "test_domain", "test_service")), - data=json.dumps({"service_data": {"test": 1}}), + data=json.dumps({"test": 1}), headers=HA_HEADERS) # Allow the event to take place