Commits

Lennart Regebro committed 49f2149

Issue #310: Non-ascii characters in a namespace __init__.py causes errors.

Comments (0)

Files changed (3)

 * Issue #307: Prints the full path when .svn/entries is broken.
 * Issue #313: Support for sdist subcommands (Python 2.7)
 * Issue #314: test_local_index() would fail an OS X.
+* Issue #310: Non-ascii characters in a namespace __init__.py causes errors.
 
 ------
 0.6.28

setuptools/command/build_py.py

         else:
             return init_py
 
-        f = open(init_py,'rU')
-        if 'declare_namespace' not in f.read():
+        f = open(init_py,'rbU')
+        if 'declare_namespace'.encode() not in f.read():
             from distutils import log
             log.warn(
                "WARNING: %s is a namespace package, but its __init__.py does\n"

setuptools/tests/test_test.py

+# -*- coding: UTF-8 -*- 
+
 """develop tests
 """
 import sys
 )
 """
 
-NS_INIT = """
+NS_INIT = """# -*- coding: Latin-1 -*- 
+# Söme Arbiträry Ünicode to test Issüé 310
 try:
     __import__('pkg_resources').declare_namespace(__name__)
 except ImportError:
     from pkgutil import extend_path
     __path__ = extend_path(__path__, __name__)
 """
+# Make sure this is Latin-1 binary, before writing:
+if sys.version_info < (3,):
+    NS_INIT = NS_INIT.decode('UTF-8')
+NS_INIT = NS_INIT.encode('Latin-1')
+
 TEST_PY = """import unittest
 
 class TestTest(unittest.TestCase):
         os.mkdir(os.path.join(self.dir, 'name', 'space', 'tests'))
         # setup.py
         setup = os.path.join(self.dir, 'setup.py')
-        f = open(setup, 'w')
+        f = open(setup, 'wt')
         f.write(SETUP_PY)
         f.close()
         self.old_cwd = os.getcwd()
         # name/__init__.py
         init = os.path.join(self.dir, 'name', '__init__.py')
-        f = open(init, 'w')
+        f = open(init, 'wb')
         f.write(NS_INIT)
         f.close()
         # name/space/__init__.py
         init = os.path.join(self.dir, 'name', 'space', '__init__.py')
-        f = open(init, 'w')
+        f = open(init, 'wt')
         f.write('#empty\n')
         f.close()
         # name/space/tests/__init__.py
         init = os.path.join(self.dir, 'name', 'space', 'tests', '__init__.py')
-        f = open(init, 'w')
+        f = open(init, 'wt')
         f.write(TEST_PY)
         f.close()
         
         cmd.install_dir = site.USER_SITE
         cmd.user = 1
         old_stdout = sys.stdout
-        sys.stdout = StringIO()
+        #sys.stdout = StringIO()
         try:
             try: # try/except/finally doesn't work in Python 2.4, so we need nested try-statements.
                 cmd.run()
                 pass
         finally:
             sys.stdout = old_stdout
+