mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Issue #21776: distutils.upload now correctly handles HTTPError
Initial patch by Claudiu Popa.
This commit is contained in:
parent
947ff38725
commit
6a8e626a60
3 changed files with 40 additions and 8 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue