[infrae.wsgi][Sylvain Viollon] Support rogue unicode in error me...

[email protected] Wed, 11 Sep 2013 16:59:45 +0200
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Wed Sep 11 16:59:41 2013 +0200
revision:  159:fd4bff1172fb in infrae.wsgi
branch:    2.0
details:   https://hg.infrae.com/infrae.wsgi?cmd=changeset;node=fd4bff1172fb
modified:  src/infrae/wsgi/log.py
added:     
removed:   
log:       Support rogue unicode in error messages.


diffstat:

 src/infrae/wsgi/log.py |  11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diffs (28 lines):

diff -r fd2bf802bac1 -r fd4bff1172fb src/infrae/wsgi/log.py
--- a/src/infrae/wsgi/log.py	Wed May 22 15:07:37 2013 +0200
+++ b/src/infrae/wsgi/log.py	Wed Sep 11 16:59:41 2013 +0200
@@ -35,6 +35,15 @@
     return 'n/a'
 
 
+def make_unicode(text):
+    """Ensure the given text is in unicode.
+    """
+    if not isinstance(text, unicode):
+        if isinstance(text, str):
+            return text.decode('utf-8', 'replace')
+        return unicode(text)
+    return text
+
 def log_invalid_response_data(data, environ):
     """Log an invalid response type from application. Data sent must
     always be a string (unicode strings are accepted), if it is not an
@@ -123,7 +132,7 @@
         log_entry.extend(full_traceback)
 
         # Save error.
-        report = ''.join(log_entry)
+        report = u''.join(map(make_unicode, log_entry))
         logger.error(report)
         self.__last_errors.append(
             {'url': request['URL'], 'report': report, 'time': datetime.now()})