diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2013-12-22 17:13:51 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2013-12-22 17:13:51 (GMT) |
commit | 335a5128e54809b789cb82f05a913df1198fe40e (patch) | |
tree | ce11198fa8b74db7dfc864c66a8cb5944e2b84ba /Lib/distutils | |
parent | f20ea1399638d72f8d99df7960cdb31f37a31f81 (diff) | |
download | cpython-335a5128e54809b789cb82f05a913df1198fe40e.zip cpython-335a5128e54809b789cb82f05a913df1198fe40e.tar.gz cpython-335a5128e54809b789cb82f05a913df1198fe40e.tar.bz2 |
Fix TypeError on "setup.py upload --show-response".
Diffstat (limited to 'Lib/distutils')
-rw-r--r-- | Lib/distutils/command/register.py | 5 | ||||
-rw-r--r-- | Lib/distutils/command/upload.py | 3 | ||||
-rw-r--r-- | Lib/distutils/config.py | 7 | ||||
-rw-r--r-- | Lib/distutils/tests/test_upload.py | 17 |
4 files changed, 26 insertions, 6 deletions
diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py index 9b39ed3..55656c2 100644 --- a/Lib/distutils/command/register.py +++ b/Lib/distutils/command/register.py @@ -5,7 +5,6 @@ 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 @@ -88,9 +87,7 @@ class register(PyPIRCCommand): ''' url = self.repository+'?:action=list_classifiers' response = urllib.request.urlopen(url) - content_type = response.getheader('content-type', 'text/plain') - encoding = cgi.parse_header(content_type)[1].get('charset', 'ascii') - log.info(response.read().decode(encoding)) + log.info(self._read_pypi_response(response)) def verify_metadata(self): ''' Send the metadata to the package index server to be checked. diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py index d2bc82c..e30c189 100644 --- a/Lib/distutils/command/upload.py +++ b/Lib/distutils/command/upload.py @@ -196,5 +196,6 @@ class upload(PyPIRCCommand): self.announce('Upload failed (%s): %s' % (status, reason), log.ERROR) if self.show_response: - msg = '\n'.join(('-' * 75, result.read(), '-' * 75)) + text = self._read_pypi_response(result) + msg = '\n'.join(('-' * 75, text, '-' * 75)) self.announce(msg, log.INFO) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py index a97635f..7e10fff 100644 --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -3,6 +3,7 @@ Provides the PyPIRCCommand class, the base class for the command classes that uses .pypirc in the distutils.command package. """ +import cgi import os from configparser import ConfigParser @@ -101,6 +102,12 @@ class PyPIRCCommand(Command): return {} + def _read_pypi_response(self, response): + """Read and decode a PyPI HTTP response.""" + content_type = response.getheader('content-type', 'text/plain') + encoding = cgi.parse_header(content_type)[1].get('charset', 'ascii') + return response.read().decode(encoding) + def initialize_options(self): """Initialize options.""" self.repository = None diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py index fbf80e3..8532369 100644 --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -6,6 +6,7 @@ from test.support import run_unittest from distutils.command import upload as upload_mod from distutils.command.upload import upload from distutils.core import Distribution +from distutils.log import INFO from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase @@ -48,6 +49,14 @@ class FakeOpen(object): self.req = None self.msg = 'OK' + def getheader(self, name, default=None): + return { + 'content-type': 'text/plain; charset=utf-8', + }.get(name.lower(), default) + + def read(self): + return b'xyzzy' + def getcode(self): return 200 @@ -108,10 +117,11 @@ class uploadTestCase(PyPIRCCommandTestCase): # lets run it pkg_dir, dist = self.create_dist(dist_files=dist_files) cmd = upload(dist) + cmd.show_response = 1 cmd.ensure_finalized() cmd.run() - # what did we send ? + # what did we send ? headers = dict(self.last_open.req.headers) self.assertEqual(headers['Content-length'], '2087') self.assertTrue(headers['Content-type'].startswith('multipart/form-data')) @@ -120,6 +130,11 @@ class uploadTestCase(PyPIRCCommandTestCase): 'https://pypi.python.org/pypi') self.assertIn(b'xxx', self.last_open.req.data) + # The PyPI response body was echoed + results = self.get_logs(INFO) + self.assertIn('xyzzy\n', results[-1]) + + def test_suite(): return unittest.makeSuite(uploadTestCase) |