]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #20045: Fix "setup.py register --list-classifiers".
authorAntoine Pitrou <solipsis@pitrou.net>
Sat, 21 Dec 2013 21:57:56 +0000 (22:57 +0100)
committerAntoine Pitrou <solipsis@pitrou.net>
Sat, 21 Dec 2013 21:57:56 +0000 (22:57 +0100)
Lib/distutils/command/register.py
Lib/distutils/tests/support.py
Lib/distutils/tests/test_register.py
Misc/NEWS

index 99545affa4a8ce470444d5ab9f757bab25c71c7a..9b39ed36aa4642494e471bc9873664fbd8ea3a84 100644 (file)
@@ -5,6 +5,7 @@ Implements the Distutils 'register' command (register with the repository).
 
 # created 2002/10/21, Richard Jones
 
+import cgi
 import os, string, getpass
 import io
 import urllib.parse, urllib.request
@@ -87,7 +88,9 @@ class register(PyPIRCCommand):
         '''
         url = self.repository+'?:action=list_classifiers'
         response = urllib.request.urlopen(url)
-        log.info(response.read())
+        content_type = response.getheader('content-type', 'text/plain')
+        encoding = cgi.parse_header(content_type)[1].get('charset', 'ascii')
+        log.info(response.read().decode(encoding))
 
     def verify_metadata(self):
         ''' Send the metadata to the package index server to be checked.
index 84d92323284f7a9685a16c673bda75b918382da1..71ad4f42b2caccfe183c41222586339022b50fc4 100644 (file)
@@ -32,14 +32,15 @@ class LoggingSilencer(object):
     def _log(self, level, msg, args):
         if level not in (DEBUG, INFO, WARN, ERROR, FATAL):
             raise ValueError('%s wrong log level' % str(level))
+        if not isinstance(msg, str):
+            raise TypeError("msg should be str, not '%.200s'"
+                            % (type(msg).__name__))
         self.logs.append((level, msg, args))
 
     def get_logs(self, *levels):
         def _format(msg, args):
-            if len(args) == 0:
-                return msg
             return msg % args
-        return [_format(msg, args) for level, msg, args
+        return [msg % args for level, msg, args
                 in self.logs if level in levels]
 
     def clear_logs(self):
index f4efa13d789dc891fa8c66d13fae1f8f4c729cc3..8bcc85851a78cac33859f9b661065104ec244fb5 100644 (file)
@@ -10,6 +10,7 @@ from test.support import check_warnings, run_unittest
 from distutils.command import register as register_module
 from distutils.command.register import register
 from distutils.errors import DistutilsSetupError
+from distutils.log import INFO
 
 from distutils.tests.test_config import PyPIRCCommandTestCase
 
@@ -58,12 +59,18 @@ class FakeOpener(object):
     def __call__(self, *args):
         return self
 
-    def open(self, req):
+    def open(self, req, data=None, timeout=None):
         self.reqs.append(req)
         return self
 
     def read(self):
-        return 'xxx'
+        return b'xxx'
+
+    def getheader(self, name, default=None):
+        return {
+            'content-type': 'text/plain; charset=utf-8',
+            }.get(name.lower(), default)
+
 
 class RegisterTestCase(PyPIRCCommandTestCase):
 
@@ -285,6 +292,14 @@ class RegisterTestCase(PyPIRCCommandTestCase):
             cmd.check_metadata()
             self.assertEqual(len(w.warnings), 1)
 
+    def test_list_classifiers(self):
+        cmd = self._get_cmd()
+        cmd.list_classifiers = 1
+        cmd.run()
+        results = self.get_logs(INFO)
+        self.assertEqual(results, ['running check', 'xxx'])
+
+
 def test_suite():
     return unittest.makeSuite(RegisterTestCase)
 
index 61c4482490d10fd3673ca13543e2a8670b4efea0..57c1c05f372d22579af4f273230bb7b73190b243 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -29,6 +29,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #20045: Fix "setup.py register --list-classifiers".
+
 - Issue #18879: When a method is looked up on a temporary file, avoid closing
   the file before the method is possibly called.