[Python-checkins] r77719 - in python/branches/release26-maint: Lib/distutils/command/register.py Lib/distutils/command/upload.py Lib/distutils/dist.py Lib/distutils/tests/test_upload.py Misc/NEWS
tarek.ziade
python-checkins at python.org
Sun Jan 24 01:57:21 CET 2010
Author: tarek.ziade
Date: Sun Jan 24 01:57:20 2010
New Revision: 77719
Log:
Merged revisions 77717 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r77717 | tarek.ziade | 2010-01-24 01:33:32 +0100 (Sun, 24 Jan 2010) | 1 line
Fixed #7748: now upload and register commands don't need to force the encoding anymore : DistributionMetada returns utf8 strings
........
Modified:
python/branches/release26-maint/ (props changed)
python/branches/release26-maint/Lib/distutils/command/register.py
python/branches/release26-maint/Lib/distutils/command/upload.py
python/branches/release26-maint/Lib/distutils/dist.py
python/branches/release26-maint/Lib/distutils/tests/test_upload.py
python/branches/release26-maint/Misc/NEWS
Modified: python/branches/release26-maint/Lib/distutils/command/register.py
==============================================================================
--- python/branches/release26-maint/Lib/distutils/command/register.py (original)
+++ python/branches/release26-maint/Lib/distutils/command/register.py Sun Jan 24 01:57:20 2010
@@ -261,7 +261,6 @@
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")
Modified: python/branches/release26-maint/Lib/distutils/command/upload.py
==============================================================================
--- python/branches/release26-maint/Lib/distutils/command/upload.py (original)
+++ python/branches/release26-maint/Lib/distutils/command/upload.py Sun Jan 24 01:57:20 2010
@@ -133,7 +133,7 @@
value = value[1]
else:
fn = ""
- value = str(value)
+
body.write(sep_boundary)
body.write('\nContent-Disposition: form-data; name="%s"'%key)
body.write(fn)
Modified: python/branches/release26-maint/Lib/distutils/dist.py
==============================================================================
--- python/branches/release26-maint/Lib/distutils/dist.py (original)
+++ python/branches/release26-maint/Lib/distutils/dist.py Sun Jan 24 01:57:20 2010
@@ -1114,18 +1114,20 @@
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):
@@ -1138,21 +1140,20 @@
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
@@ -1167,10 +1168,10 @@
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 []
Modified: python/branches/release26-maint/Lib/distutils/tests/test_upload.py
==============================================================================
--- python/branches/release26-maint/Lib/distutils/tests/test_upload.py (original)
+++ python/branches/release26-maint/Lib/distutils/tests/test_upload.py Sun Jan 24 01:57:20 2010
@@ -1,4 +1,5 @@
"""Tests for distutils.command.upload."""
+# -*- encoding: utf8 -*-
import sys
import os
import unittest
@@ -95,7 +96,7 @@
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()
@@ -104,7 +105,8 @@
res = _CONNECTIONS[-1]
headers = res.headers
- self.assertEquals(headers['Content-length'], '2086')
+ self.assert_('dédé' in res.body)
+ self.assertEquals(headers['Content-length'], '2085')
self.assertTrue(headers['Content-type'].startswith('multipart/form-data'))
method, request = res.requests[-1]
Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS (original)
+++ python/branches/release26-maint/Misc/NEWS Sun Jan 24 01:57:20 2010
@@ -53,6 +53,11 @@
Library
-------
+- Issue #7748: Since unicode values are supported for some metadata options
+ in Distutils, the DistributionMetadata get_* methods will now return an utf-8
+ encoded string for them. This ensure that the upload and register commands
+ send the right values to PyPI without any error.
+
- Issue #1670765: Prevent email.generator.Generator from re-wrapping
headers in multipart/signed MIME parts, which fixes one of the sources of
invalid modifications to such parts by Generator.
More information about the Python-checkins
mailing list