Show ANSI color codes in logs in Hass.io (#18834)

* Hass.io: Show ANSI color codes in logs

* Lint

* Fix test

* Lint
This commit is contained in:
Otto Winter 2018-12-02 15:46:14 +01:00 committed by Paulus Schoutsen
parent b7e2522083
commit eec4564c71
2 changed files with 4 additions and 19 deletions

View File

@ -15,7 +15,6 @@ from aiohttp import web
from aiohttp.hdrs import CONTENT_TYPE
from aiohttp.web_exceptions import HTTPBadGateway
from homeassistant.const import CONTENT_TYPE_TEXT_PLAIN
from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
from .const import X_HASSIO
@ -63,8 +62,6 @@ class HassIOView(HomeAssistantView):
client = await self._command_proxy(path, request)
data = await client.read()
if path.endswith('/logs'):
return _create_response_log(client, data)
return _create_response(client, data)
get = _handle
@ -114,18 +111,6 @@ def _create_response(client, data):
)
def _create_response_log(client, data):
"""Convert a response from client request."""
# Remove color codes
log = re.sub(r"\x1b(\[.*?[@-~]|\].*?(\x07|\x1b\\))", "", data.decode())
return web.Response(
text=log,
status=client.status,
content_type=CONTENT_TYPE_TEXT_PLAIN,
)
def _get_timeout(path):
"""Return timeout for a URL path."""
if NO_TIMEOUT.match(path):

View File

@ -102,15 +102,15 @@ def test_forward_request_no_auth_for_logo(hassio_client):
@asyncio.coroutine
def test_forward_log_request(hassio_client):
"""Test fetching normal log path."""
"""Test fetching normal log path doesn't remove ANSI color escape codes."""
response = MagicMock()
response.read.return_value = mock_coro('data')
with patch('homeassistant.components.hassio.HassIOView._command_proxy',
Mock(return_value=mock_coro(response))), \
patch('homeassistant.components.hassio.http.'
'_create_response_log') as mresp:
mresp.return_value = 'response'
'_create_response') as mresp:
mresp.return_value = '\033[32mresponse\033[0m'
resp = yield from hassio_client.get('/api/hassio/beer/logs', headers={
HTTP_HEADER_HA_AUTH: API_PASSWORD
})
@ -118,7 +118,7 @@ def test_forward_log_request(hassio_client):
# Check we got right response
assert resp.status == 200
body = yield from resp.text()
assert body == 'response'
assert body == '\033[32mresponse\033[0m'
# Check we forwarded command
assert len(mresp.mock_calls) == 1