Skip to content

Commit

Permalink
Show ANSI color codes in logs in Hass.io (#18834)
Browse files Browse the repository at this point in the history
* Hass.io: Show ANSI color codes in logs

* Lint

* Fix test

* Lint
  • Loading branch information
OttoWinter authored and balloob committed Dec 2, 2018
1 parent b7e2522 commit eec4564
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 19 deletions.
15 changes: 0 additions & 15 deletions homeassistant/components/hassio/http.py
Expand Up @@ -15,7 +15,6 @@
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
Expand Down Expand Up @@ -63,8 +62,6 @@ async def _handle(self, request, path):
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
Expand Down Expand Up @@ -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):
Expand Down
8 changes: 4 additions & 4 deletions tests/components/hassio/test_http.py
Expand Up @@ -102,23 +102,23 @@ 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
})

# 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
Expand Down

0 comments on commit eec4564

Please sign in to comment.