mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 f3f283a1cb
			
		
	
	
		f3f283a1cb
		
	
	
	
	
		
			
			- 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")
 |