1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

unicode: Fixed handling of unicode data passed to test client. Refs #3432.

git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5242 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-05-14 21:50:38 +00:00
parent 57ced25606
commit cd3d40ec91

View File

@ -13,6 +13,7 @@ from django.dispatch import dispatcher
from django.http import urlencode, SimpleCookie, HttpRequest from django.http import urlencode, SimpleCookie, HttpRequest
from django.test import signals from django.test import signals
from django.utils.functional import curry from django.utils.functional import curry
from django.utils.encoding import smart_str
BOUNDARY = 'BoUnDaRyStRiNg' BOUNDARY = 'BoUnDaRyStRiNg'
MULTIPART_CONTENT = 'multipart/form-data; boundary=%s' % BOUNDARY MULTIPART_CONTENT = 'multipart/form-data; boundary=%s' % BOUNDARY
@ -61,32 +62,33 @@ def encode_multipart(boundary, data):
as an application/octet-stream; otherwise, str(value) will be sent. as an application/octet-stream; otherwise, str(value) will be sent.
""" """
lines = [] lines = []
to_str = lambda s: smart_str(s, settings.DEFAULT_CHARSET)
for (key, value) in data.items(): for (key, value) in data.items():
if isinstance(value, file): if isinstance(value, file):
lines.extend([ lines.extend([
'--' + boundary, '--' + boundary,
'Content-Disposition: form-data; name="%s"' % key, 'Content-Disposition: form-data; name="%s"' % to_str(key),
'', '',
'--' + boundary, '--' + boundary,
'Content-Disposition: form-data; name="%s_file"; filename="%s"' % (key, value.name), 'Content-Disposition: form-data; name="%s_file"; filename="%s"' % (to_str(key), to_str(value.name)),
'Content-Type: application/octet-stream', 'Content-Type: application/octet-stream',
'', '',
value.read() value.read()
]) ])
elif hasattr(value, '__iter__'): elif hasattr(value, '__iter__'):
for item in value: for item in value:
lines.extend([ lines.extend([
'--' + boundary, '--' + boundary,
'Content-Disposition: form-data; name="%s"' % key, 'Content-Disposition: form-data; name="%s"' % to_str(key),
'', '',
str(item) to_str(item)
]) ])
else: else:
lines.extend([ lines.extend([
'--' + boundary, '--' + boundary,
'Content-Disposition: form-data; name="%s"' % key, 'Content-Disposition: form-data; name="%s"' % to_str(key),
'', '',
str(value) to_str(value)
]) ])
lines.extend([ lines.extend([
@ -118,7 +120,7 @@ class Client:
self.defaults = defaults self.defaults = defaults
self.cookies = SimpleCookie() self.cookies = SimpleCookie()
self.exc_info = None self.exc_info = None
def store_exc_info(self, *args, **kwargs): def store_exc_info(self, *args, **kwargs):
""" """
Utility method that can be used to store exceptions when they are Utility method that can be used to store exceptions when they are
@ -134,7 +136,7 @@ class Client:
return SessionWrapper(cookie.value) return SessionWrapper(cookie.value)
return {} return {}
session = property(_session) session = property(_session)
def request(self, **request): def request(self, **request):
""" """
The master request method. Composes the environment dictionary The master request method. Composes the environment dictionary
@ -182,7 +184,7 @@ class Client:
# Look for a signalled exception and reraise it # Look for a signalled exception and reraise it
if self.exc_info: if self.exc_info:
raise self.exc_info[1], None, self.exc_info[2] raise self.exc_info[1], None, self.exc_info[2]
# Update persistent cookie data # Update persistent cookie data
if response.cookies: if response.cookies:
self.cookies.update(response.cookies) self.cookies.update(response.cookies)
@ -246,9 +248,9 @@ class Client:
# Set the session values # Set the session values
Session.objects.save(obj.session_key, request.session._session, Session.objects.save(obj.session_key, request.session._session,
datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)) datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
return True return True
else: else:
return False return False