From 6b21f595dc3c2fe308e678779a81e13fe88412c4 2011-03-24 19:37:03 From: Thomas Kluyver Date: 2011-03-24 19:37:03 Subject: [PATCH] Fix for non-ascii characters in IPYTHONDIR, + unit test. --- diff --git a/IPython/config/loader.py b/IPython/config/loader.py index aba060f..cd56705 100644 --- a/IPython/config/loader.py +++ b/IPython/config/loader.py @@ -285,7 +285,8 @@ class PyFileConfigLoader(FileConfigLoader): return self.config namespace = dict(load_subconfig=load_subconfig, get_config=get_config) - execfile(self.full_filename, namespace) + conf_filename = self.full_filename.encode(sys.getfilesystemencoding()) + execfile(conf_filename, namespace) def _convert_to_config(self): if self.data is None: diff --git a/IPython/core/tests/test_application.py b/IPython/core/tests/test_application.py index 21da4d6..376507d 100644 --- a/IPython/core/tests/test_application.py +++ b/IPython/core/tests/test_application.py @@ -6,7 +6,7 @@ import tempfile from IPython.core.application import Application def test_unicode_cwd(): - """Check that IPython can start with unicode characters in the path.""" + """Check that IPython starts with non-ascii characters in the path.""" wd = tempfile.mkdtemp(suffix="€") old_wd = os.getcwdu() @@ -31,3 +31,37 @@ def test_unicode_cwd(): app.load_file_config(suppress_errors=False) finally: os.chdir(old_wd) + +def test_unicode_ipdir(): + """Check that IPython starts with non-ascii characters in the IP dir.""" + ipdir = tempfile.mkdtemp(suffix="€") + + # Create the config file, so it tries to load it. + with open(os.path.join(ipdir, 'ipython_config.py'), "w") as f: + pass + + old_ipdir1 = os.environ.pop("IPYTHONDIR", None) + old_ipdir2 = os.environ.pop("IPYTHON_DIR", None) + os.environ["IPYTHONDIR"] = ipdir + try: + app = Application() + # The lines below are copied from Application.initialize() + app.create_default_config() + app.log_default_config() + app.set_default_config_log_level() + + # Find resources needed for filesystem access, using information from + # the above two + app.find_ipython_dir() + app.find_resources() + app.find_config_file_name() + app.find_config_file_paths() + + # File-based config + app.pre_load_file_config() + app.load_file_config(suppress_errors=False) + finally: + if old_ipdir1: + os.environ["IPYTHONDIR"] = old_ipdir1 + if old_ipdir2: + os.environ["IPYTHONDIR"] = old_ipdir2