Author: mtredinnick
Date: 2007-10-20 02:42:34 -0500 (Sat, 20 Oct 2007)
New Revision: 6550

Modified:
   django/trunk/django/core/handlers/modpython.py
   django/trunk/django/core/handlers/wsgi.py
Log:
Slightly changed the way we handle non-UTF-8 encoded URIs (see [6475]). Made it
easier to subclass the current behaviour, if needed. Fixed #5738.


Modified: django/trunk/django/core/handlers/modpython.py
===================================================================
--- django/trunk/django/core/handlers/modpython.py      2007-10-20 07:01:12 UTC 
(rev 6549)
+++ django/trunk/django/core/handlers/modpython.py      2007-10-20 07:42:34 UTC 
(rev 6550)
@@ -14,7 +14,7 @@
 class ModPythonRequest(http.HttpRequest):
     def __init__(self, req):
         self._req = req
-        self.path = force_unicode(req.uri, errors='ignore')
+        self.path = force_unicode(req.uri)
 
     def __repr__(self):
         # Since this is called as part of error handling, we need to be very
@@ -136,6 +136,8 @@
     method = property(_get_method)
 
 class ModPythonHandler(BaseHandler):
+    request_class = ModPythonRequest
+
     def __call__(self, req):
         # mod_python fakes the environ, and thus doesn't process SetEnv.  This 
fixes that
         os.environ.update(req.subprocess_env)
@@ -150,13 +152,16 @@
 
         dispatcher.send(signal=signals.request_started)
         try:
-            request = ModPythonRequest(req)
-            response = self.get_response(request)
+            try:
+                request = self.request_class(req)
+            except UnicodeDecodeError:
+                response = http.HttpResponseBadRequest()
+            else:
+                response = self.get_response(request)
 
-            # Apply response middleware
-            for middleware_method in self._response_middleware:
-                response = middleware_method(request, response)
-
+                # Apply response middleware
+                for middleware_method in self._response_middleware:
+                    response = middleware_method(request, response)
         finally:
             dispatcher.send(signal=signals.request_finished)
 

Modified: django/trunk/django/core/handlers/wsgi.py
===================================================================
--- django/trunk/django/core/handlers/wsgi.py   2007-10-20 07:01:12 UTC (rev 
6549)
+++ django/trunk/django/core/handlers/wsgi.py   2007-10-20 07:42:34 UTC (rev 
6550)
@@ -75,7 +75,7 @@
 class WSGIRequest(http.HttpRequest):
     def __init__(self, environ):
         self.environ = environ
-        self.path = force_unicode(environ['PATH_INFO'], errors='ignore')
+        self.path = force_unicode(environ['PATH_INFO'])
         self.META = environ
         self.method = environ['REQUEST_METHOD'].upper()
 
@@ -179,6 +179,7 @@
 
 class WSGIHandler(BaseHandler):
     initLock = Lock()
+    request_class = WSGIRequest
 
     def __call__(self, environ, start_response):
         from django.conf import settings
@@ -194,13 +195,16 @@
 
         dispatcher.send(signal=signals.request_started)
         try:
-            request = WSGIRequest(environ)
-            response = self.get_response(request)
+            try:
+                request = self.request_class(environ)
+            except UnicodeDecodeError:
+                response = http.HttpResponseBadRequest()
+            else:
+                response = self.get_response(request)
 
-            # Apply response middleware
-            for middleware_method in self._response_middleware:
-                response = middleware_method(request, response)
-
+                # Apply response middleware
+                for middleware_method in self._response_middleware:
+                    response = middleware_method(request, response)
         finally:
             dispatcher.send(signal=signals.request_finished)
 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to