fixed #4400 : distutils .pypirc default generated file was broken.
This commit is contained in:
parent
42d19e6a2c
commit
e4c75bb585
|
@ -141,12 +141,14 @@ class register(PyPIRCCommand):
|
|||
# get the user's login info
|
||||
choices = '1 2 3 4'.split()
|
||||
while choice not in choices:
|
||||
print '''We need to know who you are, so please choose either:
|
||||
self.announce('''\
|
||||
We need to know who you are, so please choose either:
|
||||
1. use your existing login,
|
||||
2. register as a new user,
|
||||
3. have the server generate a new password for you (and email it to you), or
|
||||
4. quit
|
||||
Your selection [default 1]: ''',
|
||||
Your selection [default 1]: ''', log.INFO)
|
||||
|
||||
choice = raw_input()
|
||||
if not choice:
|
||||
choice = '1'
|
||||
|
@ -167,12 +169,16 @@ Your selection [default 1]: ''',
|
|||
# send the info to the server and report the result
|
||||
code, result = self.post_to_server(self.build_post_data('submit'),
|
||||
auth)
|
||||
print 'Server response (%s): %s' % (code, result)
|
||||
self.announce('Server response (%s): %s' % (code, result),
|
||||
log.INFO)
|
||||
|
||||
# possibly save the login
|
||||
if not self.has_config and code == 200:
|
||||
print 'I can store your PyPI login so future submissions will be faster.'
|
||||
print '(the login will be stored in %s)' % self._get_rc_file()
|
||||
self.announce(('I can store your PyPI login so future '
|
||||
'submissions will be faster.'), log.INFO)
|
||||
self.announce('(the login will be stored in %s)' % \
|
||||
self._get_rc_file(), log.INFO)
|
||||
|
||||
choice = 'X'
|
||||
while choice.lower() not in 'yn':
|
||||
choice = raw_input('Save your login (y/N)?')
|
||||
|
|
|
@ -10,8 +10,8 @@ from ConfigParser import ConfigParser
|
|||
from distutils.cmd import Command
|
||||
|
||||
DEFAULT_PYPIRC = """\
|
||||
[pypirc]
|
||||
servers =
|
||||
[distutils]
|
||||
index-servers =
|
||||
pypi
|
||||
|
||||
[pypi]
|
||||
|
|
|
@ -5,6 +5,8 @@ import unittest
|
|||
|
||||
from distutils.core import PyPIRCCommand
|
||||
from distutils.core import Distribution
|
||||
from distutils.log import set_threshold
|
||||
from distutils.log import WARN
|
||||
|
||||
from distutils.tests import support
|
||||
|
||||
|
@ -32,6 +34,17 @@ username:tarek
|
|||
password:secret
|
||||
"""
|
||||
|
||||
WANTED = """\
|
||||
[distutils]
|
||||
index-servers =
|
||||
pypi
|
||||
|
||||
[pypi]
|
||||
username:tarek
|
||||
password:xxx
|
||||
"""
|
||||
|
||||
|
||||
class PyPIRCCommandTestCase(support.TempdirManager, unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
@ -53,6 +66,7 @@ class PyPIRCCommandTestCase(support.TempdirManager, unittest.TestCase):
|
|||
finalize_options = initialize_options
|
||||
|
||||
self._cmd = command
|
||||
self.old_threshold = set_threshold(WARN)
|
||||
|
||||
def tearDown(self):
|
||||
"""Removes the patch."""
|
||||
|
@ -62,6 +76,7 @@ class PyPIRCCommandTestCase(support.TempdirManager, unittest.TestCase):
|
|||
os.environ['HOME'] = self._old_home
|
||||
if os.path.exists(self.rc):
|
||||
os.remove(self.rc)
|
||||
set_threshold(self.old_threshold)
|
||||
|
||||
def test_server_registration(self):
|
||||
# This test makes sure PyPIRCCommand knows how to:
|
||||
|
@ -98,6 +113,20 @@ class PyPIRCCommandTestCase(support.TempdirManager, unittest.TestCase):
|
|||
('server', 'server-login'), ('username', 'tarek')]
|
||||
self.assertEquals(config, waited)
|
||||
|
||||
def test_server_empty_registration(self):
|
||||
|
||||
cmd = self._cmd(self.dist)
|
||||
rc = cmd._get_rc_file()
|
||||
self.assert_(not os.path.exists(rc))
|
||||
|
||||
cmd._store_pypirc('tarek', 'xxx')
|
||||
|
||||
self.assert_(os.path.exists(rc))
|
||||
content = open(rc).read()
|
||||
|
||||
self.assertEquals(content, WANTED)
|
||||
|
||||
|
||||
def test_suite():
|
||||
return unittest.makeSuite(PyPIRCCommandTestCase)
|
||||
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
"""Tests for distutils.command.register."""
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
|
||||
from distutils.command.register import register
|
||||
from distutils.core import Distribution
|
||||
|
||||
from distutils.tests import support
|
||||
from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase
|
||||
|
||||
class RawInputs(object):
|
||||
"""Fakes user inputs."""
|
||||
def __init__(self, *answers):
|
||||
self.answers = answers
|
||||
self.index = 0
|
||||
|
||||
def __call__(self, prompt=''):
|
||||
try:
|
||||
return self.answers[self.index]
|
||||
finally:
|
||||
self.index += 1
|
||||
|
||||
WANTED_PYPIRC = """\
|
||||
[distutils]
|
||||
index-servers =
|
||||
pypi
|
||||
|
||||
[pypi]
|
||||
username:tarek
|
||||
password:xxx
|
||||
"""
|
||||
|
||||
class registerTestCase(PyPIRCCommandTestCase):
|
||||
|
||||
def test_create_pypirc(self):
|
||||
# this test makes sure a .pypirc file
|
||||
# is created when requested.
|
||||
|
||||
# let's create a fake distribution
|
||||
# and a register instance
|
||||
dist = Distribution()
|
||||
dist.metadata.url = 'xxx'
|
||||
dist.metadata.author = 'xxx'
|
||||
dist.metadata.author_email = 'xxx'
|
||||
dist.metadata.name = 'xxx'
|
||||
dist.metadata.version = 'xxx'
|
||||
cmd = register(dist)
|
||||
|
||||
# we shouldn't have a .pypirc file yet
|
||||
self.assert_(not os.path.exists(self.rc))
|
||||
|
||||
# patching raw_input and getpass.getpass
|
||||
# so register gets happy
|
||||
#
|
||||
# Here's what we are faking :
|
||||
# use your existing login (choice 1.)
|
||||
# Username : 'tarek'
|
||||
# Password : 'xxx'
|
||||
# Save your login (y/N)? : 'y'
|
||||
inputs = RawInputs('1', 'tarek', 'y')
|
||||
from distutils.command import register as register_module
|
||||
register_module.raw_input = inputs.__call__
|
||||
def _getpass(prompt):
|
||||
return 'xxx'
|
||||
register_module.getpass.getpass = _getpass
|
||||
class FakeServer(object):
|
||||
def __init__(self):
|
||||
self.calls = []
|
||||
|
||||
def __call__(self, *args):
|
||||
# we want to compare them, so let's store
|
||||
# something comparable
|
||||
els = args[0].items()
|
||||
els.sort()
|
||||
self.calls.append(tuple(els))
|
||||
return 200, 'OK'
|
||||
|
||||
cmd.post_to_server = pypi_server = FakeServer()
|
||||
|
||||
# let's run the command
|
||||
cmd.run()
|
||||
|
||||
# we should have a brand new .pypirc file
|
||||
self.assert_(os.path.exists(self.rc))
|
||||
|
||||
# with the content similar to WANTED_PYPIRC
|
||||
content = open(self.rc).read()
|
||||
self.assertEquals(content, WANTED_PYPIRC)
|
||||
|
||||
# now let's make sure the .pypirc file generated
|
||||
# really works : we shouldn't be asked anything
|
||||
# if we run the command again
|
||||
def _no_way(prompt=''):
|
||||
raise AssertionError(prompt)
|
||||
register_module.raw_input = _no_way
|
||||
|
||||
cmd.run()
|
||||
|
||||
# let's see what the server received : we should
|
||||
# have 2 similar requests
|
||||
self.assert_(len(pypi_server.calls), 2)
|
||||
self.assert_(pypi_server.calls[0], pypi_server.calls[1])
|
||||
|
||||
def test_suite():
|
||||
return unittest.makeSuite(registerTestCase)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main(defaultTest="test_suite")
|
Loading…
Reference in New Issue