Issue #20045: Fix "setup.py register --list-classifiers".

This commit is contained in:
Antoine Pitrou 2013-12-21 22:57:56 +01:00
parent 492b9893e1
commit 716b7222e9
4 changed files with 27 additions and 6 deletions

View File

@ -5,6 +5,7 @@ Implements the Distutils 'register' command (register with the repository).
# created 2002/10/21, Richard Jones # created 2002/10/21, Richard Jones
import cgi
import os, string, getpass import os, string, getpass
import io import io
import urllib.parse, urllib.request import urllib.parse, urllib.request
@ -87,7 +88,9 @@ class register(PyPIRCCommand):
''' '''
url = self.repository+'?:action=list_classifiers' url = self.repository+'?:action=list_classifiers'
response = urllib.request.urlopen(url) 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): def verify_metadata(self):
''' Send the metadata to the package index server to be checked. ''' Send the metadata to the package index server to be checked.

View File

@ -32,14 +32,15 @@ class LoggingSilencer(object):
def _log(self, level, msg, args): def _log(self, level, msg, args):
if level not in (DEBUG, INFO, WARN, ERROR, FATAL): if level not in (DEBUG, INFO, WARN, ERROR, FATAL):
raise ValueError('%s wrong log level' % str(level)) 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)) self.logs.append((level, msg, args))
def get_logs(self, *levels): def get_logs(self, *levels):
def _format(msg, args): def _format(msg, args):
if len(args) == 0:
return msg
return msg % args 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] in self.logs if level in levels]
def clear_logs(self): def clear_logs(self):

View File

@ -10,6 +10,7 @@ from test.support import check_warnings, run_unittest
from distutils.command import register as register_module from distutils.command import register as register_module
from distutils.command.register import register from distutils.command.register import register
from distutils.errors import DistutilsSetupError from distutils.errors import DistutilsSetupError
from distutils.log import INFO
from distutils.tests.test_config import PyPIRCCommandTestCase from distutils.tests.test_config import PyPIRCCommandTestCase
@ -58,12 +59,18 @@ class FakeOpener(object):
def __call__(self, *args): def __call__(self, *args):
return self return self
def open(self, req): def open(self, req, data=None, timeout=None):
self.reqs.append(req) self.reqs.append(req)
return self return self
def read(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): class RegisterTestCase(PyPIRCCommandTestCase):
@ -285,6 +292,14 @@ class RegisterTestCase(PyPIRCCommandTestCase):
cmd.check_metadata() cmd.check_metadata()
self.assertEqual(len(w.warnings), 1) 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(): def test_suite():
return unittest.makeSuite(RegisterTestCase) return unittest.makeSuite(RegisterTestCase)

View File

@ -29,6 +29,8 @@ Core and Builtins
Library Library
------- -------
- Issue #20045: Fix "setup.py register --list-classifiers".
- Issue #18879: When a method is looked up on a temporary file, avoid closing - Issue #18879: When a method is looked up on a temporary file, avoid closing
the file before the method is possibly called. the file before the method is possibly called.