Issue #21776: Merge from 3.5
This commit is contained in:
commit
fddf12198f
|
@ -181,21 +181,21 @@ class upload(PyPIRCCommand):
|
|||
result = urlopen(request)
|
||||
status = result.getcode()
|
||||
reason = result.msg
|
||||
except OSError as e:
|
||||
self.announce(str(e), log.ERROR)
|
||||
raise
|
||||
except HTTPError as e:
|
||||
status = e.code
|
||||
reason = e.msg
|
||||
except OSError as e:
|
||||
self.announce(str(e), log.ERROR)
|
||||
raise
|
||||
|
||||
if status == 200:
|
||||
self.announce('Server response (%s): %s' % (status, reason),
|
||||
log.INFO)
|
||||
if self.show_response:
|
||||
text = self._read_pypi_response(result)
|
||||
msg = '\n'.join(('-' * 75, text, '-' * 75))
|
||||
self.announce(msg, log.INFO)
|
||||
else:
|
||||
msg = 'Upload failed (%s): %s' % (status, reason)
|
||||
self.announce(msg, log.ERROR)
|
||||
raise DistutilsError(msg)
|
||||
if self.show_response:
|
||||
text = self._read_pypi_response(result)
|
||||
msg = '\n'.join(('-' * 75, text, '-' * 75))
|
||||
self.announce(msg, log.INFO)
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
"""Tests for distutils.command.upload."""
|
||||
import os
|
||||
import unittest
|
||||
import unittest.mock as mock
|
||||
from urllib.request import HTTPError
|
||||
|
||||
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.errors import DistutilsError
|
||||
from distutils.log import INFO
|
||||
from distutils.log import ERROR, INFO
|
||||
|
||||
from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase
|
||||
|
||||
|
@ -144,6 +147,32 @@ class uploadTestCase(PyPIRCCommandTestCase):
|
|||
self.next_code = 404
|
||||
self.assertRaises(DistutilsError, self.test_upload)
|
||||
|
||||
def test_wrong_exception_order(self):
|
||||
tmp = self.mkdtemp()
|
||||
path = os.path.join(tmp, 'xxx')
|
||||
self.write_file(path)
|
||||
dist_files = [('xxx', '2.6', path)] # command, pyversion, filename
|
||||
self.write_file(self.rc, PYPIRC_LONG_PASSWORD)
|
||||
|
||||
pkg_dir, dist = self.create_dist(dist_files=dist_files)
|
||||
tests = [
|
||||
(OSError('oserror'), 'oserror', OSError),
|
||||
(HTTPError('url', 400, 'httperror', {}, None),
|
||||
'Upload failed (400): httperror', DistutilsError),
|
||||
]
|
||||
for exception, expected, raised_exception in tests:
|
||||
with self.subTest(exception=type(exception).__name__):
|
||||
with mock.patch('distutils.command.upload.urlopen',
|
||||
new=mock.Mock(side_effect=exception)):
|
||||
with self.assertRaises(raised_exception):
|
||||
cmd = upload(dist)
|
||||
cmd.ensure_finalized()
|
||||
cmd.run()
|
||||
results = self.get_logs(ERROR)
|
||||
self.assertIn(expected, results[-1])
|
||||
self.clear_logs()
|
||||
|
||||
|
||||
def test_suite():
|
||||
return unittest.makeSuite(uploadTestCase)
|
||||
|
||||
|
|
Loading…
Reference in New Issue