api.py
104 lines
| 3.3 KiB
| text/x-python
|
PythonLexer
Brian E Granger
|
r1234 | # 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 | ||||
Stefan van der Walt
|
r1253 | # Traitlets config imports | ||
from IPython.config import traitlets | ||||
from IPython.config.config import * | ||||
from traitlets import * | ||||
Brian E Granger
|
r1234 | 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 | ||||