summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-12-22 17:14:56 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-12-22 17:14:56 (GMT)
commit20d5adea6a9dd5a752f2d8bb2b0cef0ee7cf386e (patch)
treedcbd9ab66d76647d49e94e1521d72ed4254428e2 /Lib
parenta936c40ede4583f8ac94362eced17325ae780abc (diff)
parent335a5128e54809b789cb82f05a913df1198fe40e (diff)
downloadcpython-20d5adea6a9dd5a752f2d8bb2b0cef0ee7cf386e.zip
cpython-20d5adea6a9dd5a752f2d8bb2b0cef0ee7cf386e.tar.gz
cpython-20d5adea6a9dd5a752f2d8bb2b0cef0ee7cf386e.tar.bz2
Fix TypeError on "setup.py upload --show-response".
Diffstat (limited to 'Lib')
-rw-r--r--Lib/distutils/command/register.py5
-rw-r--r--Lib/distutils/command/upload.py3
-rw-r--r--Lib/distutils/config.py7
-rw-r--r--Lib/distutils/tests/test_upload.py17
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 2871583..d6762e4 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 7439a83..9440190 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
@@ -110,6 +111,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 1fcba88..f53eb26 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')
content_type = headers['Content-type']
@@ -121,6 +131,11 @@ class uploadTestCase(PyPIRCCommandTestCase):
self.assertEqual(self.last_open.req.get_full_url(), expected_url)
self.assertTrue(b'xxx' in 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)