mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	- Use os.makedirs (I had forgotten about it!) - Let TempdirManager.write_file call os.path.join for us - Remove custom command added by test_dist - Use a skip instead of hiding a method with an underscore - Address pyflakes warnings
		
			
				
	
	
		
			159 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Tests for packaging.command.upload."""
 | 
						|
import os
 | 
						|
 | 
						|
from packaging.command.upload import upload
 | 
						|
from packaging.dist import Distribution
 | 
						|
from packaging.errors import PackagingOptionError
 | 
						|
 | 
						|
from packaging.tests import unittest, support
 | 
						|
try:
 | 
						|
    import threading
 | 
						|
    from packaging.tests.pypi_server import PyPIServerTestCase
 | 
						|
except ImportError:
 | 
						|
    threading = None
 | 
						|
    PyPIServerTestCase = unittest.TestCase
 | 
						|
 | 
						|
 | 
						|
PYPIRC_NOPASSWORD = """\
 | 
						|
[distutils]
 | 
						|
 | 
						|
index-servers =
 | 
						|
    server1
 | 
						|
 | 
						|
[server1]
 | 
						|
username:me
 | 
						|
"""
 | 
						|
 | 
						|
PYPIRC = """\
 | 
						|
[distutils]
 | 
						|
 | 
						|
index-servers =
 | 
						|
    server1
 | 
						|
    server2
 | 
						|
 | 
						|
[server1]
 | 
						|
username:me
 | 
						|
password:secret
 | 
						|
 | 
						|
[server2]
 | 
						|
username:meagain
 | 
						|
password: secret
 | 
						|
realm:acme
 | 
						|
repository:http://another.pypi/
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
@unittest.skipIf(threading is None, 'needs threading')
 | 
						|
class UploadTestCase(support.TempdirManager, support.EnvironRestorer,
 | 
						|
                     support.LoggingCatcher, PyPIServerTestCase):
 | 
						|
 | 
						|
    restore_environ = ['HOME']
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        super(UploadTestCase, self).setUp()
 | 
						|
        self.tmp_dir = self.mkdtemp()
 | 
						|
        self.rc = os.path.join(self.tmp_dir, '.pypirc')
 | 
						|
        os.environ['HOME'] = self.tmp_dir
 | 
						|
 | 
						|
    def test_finalize_options(self):
 | 
						|
        # new format
 | 
						|
        self.write_file(self.rc, PYPIRC)
 | 
						|
        dist = Distribution()
 | 
						|
        cmd = upload(dist)
 | 
						|
        cmd.finalize_options()
 | 
						|
        for attr, expected in (('username', 'me'), ('password', 'secret'),
 | 
						|
                               ('realm', 'pypi'),
 | 
						|
                               ('repository', 'http://pypi.python.org/pypi')):
 | 
						|
            self.assertEqual(getattr(cmd, attr), expected)
 | 
						|
 | 
						|
    def test_finalize_options_unsigned_identity_raises_exception(self):
 | 
						|
        self.write_file(self.rc, PYPIRC)
 | 
						|
        dist = Distribution()
 | 
						|
        cmd = upload(dist)
 | 
						|
        cmd.identity = True
 | 
						|
        cmd.sign = False
 | 
						|
        self.assertRaises(PackagingOptionError, cmd.finalize_options)
 | 
						|
 | 
						|
    def test_saved_password(self):
 | 
						|
        # file with no password
 | 
						|
        self.write_file(self.rc, PYPIRC_NOPASSWORD)
 | 
						|
 | 
						|
        # make sure it passes
 | 
						|
        dist = Distribution()
 | 
						|
        cmd = upload(dist)
 | 
						|
        cmd.ensure_finalized()
 | 
						|
        self.assertEqual(cmd.password, None)
 | 
						|
 | 
						|
        # make sure we get it as well, if another command
 | 
						|
        # initialized it at the dist level
 | 
						|
        dist.password = 'xxx'
 | 
						|
        cmd = upload(dist)
 | 
						|
        cmd.finalize_options()
 | 
						|
        self.assertEqual(cmd.password, 'xxx')
 | 
						|
 | 
						|
    def test_upload_without_files_raises_exception(self):
 | 
						|
        dist = Distribution()
 | 
						|
        cmd = upload(dist)
 | 
						|
        self.assertRaises(PackagingOptionError, cmd.run)
 | 
						|
 | 
						|
    def test_upload(self):
 | 
						|
        path = os.path.join(self.tmp_dir, 'xxx')
 | 
						|
        self.write_file(path)
 | 
						|
        command, pyversion, filename = 'xxx', '3.3', path
 | 
						|
        dist_files = [(command, pyversion, filename)]
 | 
						|
 | 
						|
        # let's run it
 | 
						|
        dist = self.create_dist(dist_files=dist_files, author='dédé')[1]
 | 
						|
        cmd = upload(dist)
 | 
						|
        cmd.ensure_finalized()
 | 
						|
        cmd.repository = self.pypi.full_address
 | 
						|
        cmd.run()
 | 
						|
 | 
						|
        # what did we send?
 | 
						|
        handler, request_data = self.pypi.requests[-1]
 | 
						|
        headers = handler.headers
 | 
						|
        self.assertIn('dédé'.encode('utf-8'), request_data)
 | 
						|
        self.assertIn(b'xxx', request_data)
 | 
						|
 | 
						|
        self.assertEqual(int(headers['content-length']), len(request_data))
 | 
						|
        self.assertLess(int(headers['content-length']), 2500)
 | 
						|
        self.assertTrue(headers['content-type'].startswith(
 | 
						|
            'multipart/form-data'))
 | 
						|
        self.assertEqual(handler.command, 'POST')
 | 
						|
        self.assertNotIn('\n', headers['authorization'])
 | 
						|
 | 
						|
    def test_upload_docs(self):
 | 
						|
        path = os.path.join(self.tmp_dir, 'xxx')
 | 
						|
        self.write_file(path)
 | 
						|
        command, pyversion, filename = 'xxx', '3.3', path
 | 
						|
        dist_files = [(command, pyversion, filename)]
 | 
						|
        docs_path = os.path.join(self.tmp_dir, "build", "docs")
 | 
						|
        os.makedirs(docs_path)
 | 
						|
        self.write_file((docs_path, "index.html"), "yellow")
 | 
						|
        self.write_file(self.rc, PYPIRC)
 | 
						|
 | 
						|
        # let's run it
 | 
						|
        dist = self.create_dist(dist_files=dist_files, author='dédé')[1]
 | 
						|
 | 
						|
        cmd = upload(dist)
 | 
						|
        cmd.get_finalized_command("build").run()
 | 
						|
        cmd.upload_docs = True
 | 
						|
        cmd.ensure_finalized()
 | 
						|
        cmd.repository = self.pypi.full_address
 | 
						|
        os.chdir(self.tmp_dir)
 | 
						|
        cmd.run()
 | 
						|
 | 
						|
        handler, request_data = self.pypi.requests[-1]
 | 
						|
        action, name, content = request_data.split(
 | 
						|
            "----------------GHSKFJDLGDS7543FJKLFHRE75642756743254"
 | 
						|
            .encode())[1:4]
 | 
						|
 | 
						|
        self.assertIn(b'name=":action"', action)
 | 
						|
        self.assertIn(b'doc_upload', action)
 | 
						|
 | 
						|
 | 
						|
def test_suite():
 | 
						|
    return unittest.makeSuite(UploadTestCase)
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    unittest.main(defaultTest="test_suite")
 |