From 725b9a1fcf6d7dae597526e064bbbcada2365e85 2012-02-06 18:51:39
From: Brian E. Granger <ellisonbg@gmail.com>
Date: 2012-02-06 18:51:39
Subject: [PATCH] Merge pull request #1368 from minrk/asciipatterns

Ensure handler patterns are str, not unicode
---

diff --git a/IPython/frontend/html/notebook/notebookapp.py b/IPython/frontend/html/notebook/notebookapp.py
index ee39dbe..ff46bc5 100644
--- a/IPython/frontend/html/notebook/notebookapp.py
+++ b/IPython/frontend/html/notebook/notebookapp.py
@@ -1,10 +1,10 @@
+# coding: utf-8
 """A tornado based IPython notebook server.
 
 Authors:
 
 * Brian Granger
 """
-
 #-----------------------------------------------------------------------------
 #  Copyright (C) 2008-2011  The IPython Development Team
 #
@@ -65,6 +65,7 @@ from IPython.zmq.ipkernel import (
     IPKernelApp
 )
 from IPython.utils.traitlets import Dict, Unicode, Integer, List, Enum, Bool
+from IPython.utils import py3compat
 
 #-----------------------------------------------------------------------------
 # Module globals
@@ -130,6 +131,16 @@ class NotebookWebApplication(web.Application):
         # allow custom overrides for the tornado web app.
         settings.update(settings_overrides)
 
+        # Python < 2.6.5 doesn't accept unicode keys in f(**kwargs), and
+        # base_project_url will always be unicode, which will in turn
+        # make the patterns unicode, and ultimately result in unicode
+        # keys in kwargs to handler._execute(**kwargs) in tornado.
+        # This enforces that base_project_url be ascii in that situation.
+        # 
+        # Note that the URLs these patterns check against are escaped,
+        # and thus guaranteed to be ASCII: 'héllo' is really 'h%C3%A9llo'.
+        base_project_url = py3compat.unicode_to_str(base_project_url, 'ascii')
+        
         # prepend base_project_url onto the patterns that we match
         new_handlers = []
         for handler in handlers: