Commit 25d5cb65 authored by Berker Peksag's avatar Berker Peksag

Issue #21776: Merge from 3.5

parents 4f2cc60a 29389166
...@@ -181,21 +181,21 @@ class upload(PyPIRCCommand): ...@@ -181,21 +181,21 @@ class upload(PyPIRCCommand):
result = urlopen(request) result = urlopen(request)
status = result.getcode() status = result.getcode()
reason = result.msg reason = result.msg
except OSError as e:
self.announce(str(e), log.ERROR)
raise
except HTTPError as e: except HTTPError as e:
status = e.code status = e.code
reason = e.msg reason = e.msg
except OSError as e:
self.announce(str(e), log.ERROR)
raise
if status == 200: if status == 200:
self.announce('Server response (%s): %s' % (status, reason), self.announce('Server response (%s): %s' % (status, reason),
log.INFO) log.INFO)
else:
msg = 'Upload failed (%s): %s' % (status, reason)
self.announce(msg, log.ERROR)
raise DistutilsError(msg)
if self.show_response: if self.show_response:
text = self._read_pypi_response(result) text = self._read_pypi_response(result)
msg = '\n'.join(('-' * 75, text, '-' * 75)) msg = '\n'.join(('-' * 75, text, '-' * 75))
self.announce(msg, log.INFO) self.announce(msg, log.INFO)
else:
msg = 'Upload failed (%s): %s' % (status, reason)
self.announce(msg, log.ERROR)
raise DistutilsError(msg)
"""Tests for distutils.command.upload.""" """Tests for distutils.command.upload."""
import os import os
import unittest import unittest
import unittest.mock as mock
from urllib.request import HTTPError
from test.support import run_unittest from test.support import run_unittest
from distutils.command import upload as upload_mod from distutils.command import upload as upload_mod
from distutils.command.upload import upload from distutils.command.upload import upload
from distutils.core import Distribution from distutils.core import Distribution
from distutils.errors import DistutilsError from distutils.errors import DistutilsError
from distutils.log import INFO from distutils.log import ERROR, INFO
from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase
...@@ -144,6 +147,32 @@ class uploadTestCase(PyPIRCCommandTestCase): ...@@ -144,6 +147,32 @@ class uploadTestCase(PyPIRCCommandTestCase):
self.next_code = 404 self.next_code = 404
self.assertRaises(DistutilsError, self.test_upload) 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(): def test_suite():
return unittest.makeSuite(uploadTestCase) return unittest.makeSuite(uploadTestCase)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment