# encoding: utf-8 """This is the official entry point to IPython's configuration system. """ __docformat__ = "restructuredtext en" #------------------------------------------------------------------------------- # Copyright (C) 2008 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Imports #------------------------------------------------------------------------------- import os from IPython.config.cutils import get_home_dir, get_ipython_dir from IPython.external.configobj import ConfigObj class ConfigObjManager(object): def __init__(self, configObj, filename): self.current = configObj self.current.indent_type = ' ' self.filename = filename # self.write_default_config_file() def get_config_obj(self): return self.current def update_config_obj(self, newConfig): self.current.merge(newConfig) def update_config_obj_from_file(self, filename): newConfig = ConfigObj(filename, file_error=False) self.current.merge(newConfig) def update_config_obj_from_default_file(self, ipythondir=None): fname = self.resolve_file_path(self.filename, ipythondir) self.update_config_obj_from_file(fname) def write_config_obj_to_file(self, filename): f = open(filename, 'w') self.current.write(f) f.close() def write_default_config_file(self): ipdir = get_ipython_dir() fname = ipdir + '/' + self.filename if not os.path.isfile(fname): print "Writing the configuration file to: " + fname self.write_config_obj_to_file(fname) def _import(self, key): package = '.'.join(key.split('.')[0:-1]) obj = key.split('.')[-1] execString = 'from %s import %s' % (package, obj) exec execString exec 'temp = %s' % obj return temp def resolve_file_path(self, filename, ipythondir = None): """Resolve filenames into absolute paths. This function looks in the following directories in order: 1. In the current working directory or by absolute path with ~ expanded 2. In ipythondir if that is set 3. In the IPYTHONDIR environment variable if it exists 4. In the ~/.ipython directory Note: The IPYTHONDIR is also used by the trunk version of IPython so changing it will also affect it was well. """ # In cwd or by absolute path with ~ expanded trythis = os.path.expanduser(filename) if os.path.isfile(trythis): return trythis # In ipythondir if it is set if ipythondir is not None: trythis = ipythondir + '/' + filename if os.path.isfile(trythis): return trythis trythis = get_ipython_dir() + '/' + filename if os.path.isfile(trythis): return trythis return None