]> granicus.if.org Git - python/commitdiff
Merged revisions 77717 via svnmerge from
authorTarek Ziadé <ziade.tarek@gmail.com>
Sun, 24 Jan 2010 00:57:20 +0000 (00:57 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Sun, 24 Jan 2010 00:57:20 +0000 (00:57 +0000)
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
........

Lib/distutils/command/register.py
Lib/distutils/command/upload.py
Lib/distutils/dist.py
Lib/distutils/tests/test_upload.py
Misc/NEWS

index bf7be9609667cd4309d4b272c3f30014dd2a94a5..f531d0fc793f071154a1abe890943e93011c7bda 100644 (file)
@@ -261,7 +261,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")
index 9f1aae6aa44e59c98f08d7bb49e0dd78465eaf49..93727aed62fef3f0a8c10fccce7561d24724cfb8 100644 (file)
@@ -133,7 +133,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)
index c15ca9770da75f93988601a41066d779e01c5e75..30260f393b68afc62f3634c40deb61e1012a71a5 100644 (file)
@@ -1114,18 +1114,20 @@ 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):
@@ -1138,21 +1140,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
@@ -1167,10 +1168,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 []
index 322beb778ce75d5e0dd665a3a01d488d2c66eb81..382697fb746dd07d5763f2905905c17eef2d141e 100644 (file)
@@ -1,4 +1,5 @@
 """Tests for distutils.command.upload."""
+# -*- encoding: utf8 -*-
 import sys
 import os
 import unittest
@@ -95,7 +96,7 @@ 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()
@@ -104,7 +105,8 @@ class uploadTestCase(PyPIRCCommandTestCase):
         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]
index 530e6a72d44bdec7baff29175c844232b927ab24..b1a5ff54f005295d2689dc29a1f54db14a3fee1f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -53,6 +53,11 @@ Core and Builtins
 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.