summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2010-01-24 00:33:32 +0000
committerTarek Ziadé <ziade.tarek@gmail.com>2010-01-24 00:33:32 +0000
commitf14c7fc33da8ba3aa28bbb7b0305ea12ab30be09 (patch)
treec3a88b29baa9ee925ad8181c4853afe0ed582987 /Lib
parentaa98058cc44ba20f35c106d20918c6196b737561 (diff)
downloadcpython-git-f14c7fc33da8ba3aa28bbb7b0305ea12ab30be09.tar.gz
Fixed #7748: now upload and register commands don't need to force the encoding anymore : DistributionMetada returns utf8 strings
Diffstat (limited to 'Lib')
-rw-r--r--Lib/distutils/command/register.py1
-rw-r--r--Lib/distutils/command/upload.py2
-rw-r--r--Lib/distutils/dist.py24
-rw-r--r--Lib/distutils/tests/test_register.py7
-rw-r--r--Lib/distutils/tests/test_upload.py6
5 files changed, 22 insertions, 18 deletions
diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py
index fb547c93a8..dc089902f1 100644
--- a/Lib/distutils/command/register.py
+++ b/Lib/distutils/command/register.py
@@ -266,7 +266,6 @@ Your selection [default 1]: ''', log.INFO)
if type(value) not in (type([]), type( () )):
value = [value]
for value in value:
- value = unicode(value).encode("utf-8")
body.write(sep_boundary)
body.write('\nContent-Disposition: form-data; name="%s"'%key)
body.write("\n\n")
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index 3e18aeaad6..18a10a0b7f 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -145,7 +145,7 @@ class upload(PyPIRCCommand):
value = value[1]
else:
fn = ""
- value = str(value)
+
body.write(sep_boundary)
body.write('\nContent-Disposition: form-data; name="%s"'%key)
body.write(fn)
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index f20a92a21d..5dbdaef19c 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -1139,16 +1139,19 @@ class DistributionMetadata:
self._write_list(file, 'Obsoletes', self.get_obsoletes())
def _write_field(self, file, name, value):
- if isinstance(value, unicode):
- value = value.encode(PKG_INFO_ENCODING)
- else:
- value = str(value)
- file.write('%s: %s\n' % (name, value))
+ file.write('%s: %s\n' % (name, self._encode_field(value)))
def _write_list (self, file, name, values):
for value in values:
self._write_field(file, name, value)
+ def _encode_field(self, value):
+ if value is None:
+ return None
+ if isinstance(value, unicode):
+ return value.encode(PKG_INFO_ENCODING)
+ return str(value)
+
# -- Metadata query methods ----------------------------------------
def get_name(self):
@@ -1161,19 +1164,20 @@ class DistributionMetadata:
return "%s-%s" % (self.get_name(), self.get_version())
def get_author(self):
- return self.author or "UNKNOWN"
+ return self._encode_field(self.author) or "UNKNOWN"
def get_author_email(self):
return self.author_email or "UNKNOWN"
def get_maintainer(self):
- return self.maintainer or "UNKNOWN"
+ return self._encode_field(self.maintainer) or "UNKNOWN"
def get_maintainer_email(self):
return self.maintainer_email or "UNKNOWN"
def get_contact(self):
- return self.maintainer or self.author or "UNKNOWN"
+ return (self._encode_field(self.maintainer) or
+ self._encode_field(self.author) or "UNKNOWN")
def get_contact_email(self):
return self.maintainer_email or self.author_email or "UNKNOWN"
@@ -1186,10 +1190,10 @@ class DistributionMetadata:
get_licence = get_license
def get_description(self):
- return self.description or "UNKNOWN"
+ return self._encode_field(self.description) or "UNKNOWN"
def get_long_description(self):
- return self.long_description or "UNKNOWN"
+ return self._encode_field(self.long_description) or "UNKNOWN"
def get_keywords(self):
return self.keywords or []
diff --git a/Lib/distutils/tests/test_register.py b/Lib/distutils/tests/test_register.py
index ada77a015a..370d659893 100644
--- a/Lib/distutils/tests/test_register.py
+++ b/Lib/distutils/tests/test_register.py
@@ -1,4 +1,5 @@
"""Tests for distutils.command.register."""
+# -*- encoding: utf8 -*-
import sys
import os
import unittest
@@ -136,9 +137,7 @@ class RegisterTestCase(PyPIRCCommandTestCase):
self.assertTrue(self.conn.reqs, 2)
req1 = dict(self.conn.reqs[0].headers)
req2 = dict(self.conn.reqs[1].headers)
-
- self.assertEquals(req1['Content-length'], '1374')
- self.assertEquals(req2['Content-length'], '1374')
+ self.assertEquals(req2['Content-length'], req1['Content-length'])
self.assertTrue('xxx' in self.conn.reqs[1].data)
def test_password_not_in_file(self):
@@ -210,7 +209,7 @@ class RegisterTestCase(PyPIRCCommandTestCase):
# metadata are OK but long_description is broken
metadata = {'url': 'xxx', 'author': 'xxx',
- 'author_email': 'xxx',
+ 'author_email': u'éxéxé',
'name': 'xxx', 'version': 'xxx',
'long_description': 'title\n==\n\ntext'}
diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py
index 8f6701cc9b..3ae89498a1 100644
--- a/Lib/distutils/tests/test_upload.py
+++ b/Lib/distutils/tests/test_upload.py
@@ -1,4 +1,5 @@
"""Tests for distutils.command.upload."""
+# -*- encoding: utf8 -*-
import sys
import os
import unittest
@@ -107,14 +108,15 @@ class uploadTestCase(PyPIRCCommandTestCase):
self.write_file(self.rc, PYPIRC_LONG_PASSWORD)
# lets run it
- pkg_dir, dist = self.create_dist(dist_files=dist_files)
+ pkg_dir, dist = self.create_dist(dist_files=dist_files, author=u'dédé')
cmd = upload(dist)
cmd.ensure_finalized()
cmd.run()
# what did we send ?
+ self.assertIn('dédé', self.last_open.req.data)
headers = dict(self.last_open.req.headers)
- self.assertEquals(headers['Content-length'], '2086')
+ self.assertEquals(headers['Content-length'], '2085')
self.assertTrue(headers['Content-type'].startswith('multipart/form-data'))
self.assertEquals(self.last_open.req.get_method(), 'POST')
self.assertEquals(self.last_open.req.get_full_url(),