Index: Lib/distutils/tests/test_register.py =================================================================== --- Lib/distutils/tests/test_register.py (revision 0) +++ Lib/distutils/tests/test_register.py (revision 0) @@ -0,0 +1,87 @@ +"""Tests for distutils.command.register.""" +# -*- coding: utf-8 -*- + +import sys +import os +from os.path import join +import unittest +from cStringIO import StringIO + +from distutils.command.register import register +from distutils.core import Distribution + +from distutils.tests import support + +import urllib2 + +data_sent = {} + +class Opener(object): + def open(self, req, data=None, timeout=None): + if isinstance(req, str): + return StringIO('OK') + else: + data_sent[req.get_host()] = (req.headers, req.data) + +def build_opener(*auth): + return Opener() + + +PYPIRC = """\ +[server-login] +username:tarek +password:ask_the_rabbit +""" + +class registerTestCase(unittest.TestCase): + + def setUp(self): + """Creating a fake .pypirc file, and + patching urllib""" + self._old_build_opener = urllib2.build_opener + urllib2.build_opener = build_opener + + if os.environ.has_key('HOME'): + self._old_home = os.environ['HOME'] + else: + self._old_home = None + curdir = os.path.dirname(__file__) + os.environ['HOME'] = curdir + self.rc = join(curdir, '.pypirc') + f = open(self.rc, 'w') + f.write(PYPIRC) + f.close() + self.dist = Distribution() + self.cmd = register(self.dist) + self.cmd.repository = 'http://example.com' + + def tearDown(self): + """Removes the patches.""" + urllib2.build_opener = self._old_build_opener + if self._old_home is None: + del os.environ['HOME'] + else: + os.environ['HOME'] = self._old_home + if os.path.exists(self.rc): + os.remove(self.rc) + + def test_post_to_server(self): + # make sure register handles unicode + # and make a warning when a string is used + data = {'author': u'Mister Café', 'other': 'again'} + + # turn warning into error to catch it here + import warnings + warnings.simplefilter('error', DeprecationWarning) + try: + self.assertRaises(DeprecationWarning, + self.cmd.post_to_server, data) + finally: + warnings.resetwarnings() + +def test_suite(): + return unittest.makeSuite(registerTestCase) + +if __name__ == "__main__": + unittest.main(defaultTest="test_suite") + Property changes on: Lib/distutils/tests/test_register.py ___________________________________________________________________ Name: svn:keywords + Id Name: svn:eol-style + native Index: Lib/distutils/command/register.py =================================================================== --- Lib/distutils/command/register.py (revision 62180) +++ Lib/distutils/command/register.py (working copy) @@ -9,6 +9,7 @@ import os, string, urllib2, getpass, urlparse import StringIO, ConfigParser +import warnings from distutils.core import Command from distutils.errors import * @@ -254,7 +255,12 @@ if type(value) not in (type([]), type( () )): value = [value] for value in value: - value = unicode(value).encode("utf-8") + if isinstance(value, str): + warnings.warn(('Unicode should be used for ' + '"%s" meta-data' % value), + DeprecationWarning) + value = unicode(value) + value = value.encode("utf-8") body.write(sep_boundary) body.write('\nContent-Disposition: form-data; name="%s"'%key) body.write("\n\n")