From 79336ca10810696fb3fbff2d896223ffb51bd17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 30 Mar 2015 13:15:52 +0200 Subject: [PATCH] Fix: Improved handling of data coming in from the printer Hopefully closes #829 --- src/octoprint/util/__init__.py | 6 +++++- src/octoprint/util/comm.py | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/octoprint/util/__init__.py b/src/octoprint/util/__init__.py index c16dbeef..ea4012a3 100644 --- a/src/octoprint/util/__init__.py +++ b/src/octoprint/util/__init__.py @@ -389,7 +389,11 @@ def silent_remove(file): def sanitize_ascii(line): - return unicode(line, 'ascii', 'replace').encode('ascii', 'replace').rstrip() + if not isinstance(line, basestring): + raise ValueError("Expected either str or unicode but got {} instead".format(line.__class__.__name__ if line is not None else None)) + if isinstance(line, str): + line = unicode(line, 'ascii', 'replace') + return line.encode('ascii', 'replace').rstrip() def filter_non_ascii(line): diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index ab8cbea4..4062e743 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -1250,7 +1250,13 @@ class MachineCom(object): if ret == '': #self._log("Recv: TIMEOUT") return '' - self._log("Recv: %s" % sanitize_ascii(ret)) + + try: + self._log("Recv: %s" % sanitize_ascii(ret)) + except ValueError as e: + self._log("WARN: While reading last line: %s" % e) + self._log("Recv: %r" % ret) + return ret def _getNext(self):