|
|
# encoding: utf-8
|
|
|
|
|
|
"""Configuration-related utilities for all IPython."""
|
|
|
|
|
|
__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
|
|
|
import sys
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
# Normal code begins
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
class HomeDirError(Exception):
|
|
|
pass
|
|
|
|
|
|
def get_home_dir():
|
|
|
"""Return the closest possible equivalent to a 'home' directory.
|
|
|
|
|
|
We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
|
|
|
|
|
|
Currently only Posix and NT are implemented, a HomeDirError exception is
|
|
|
raised for all other OSes. """
|
|
|
|
|
|
isdir = os.path.isdir
|
|
|
env = os.environ
|
|
|
try:
|
|
|
homedir = env['HOME']
|
|
|
if not isdir(homedir):
|
|
|
# in case a user stuck some string which does NOT resolve to a
|
|
|
# valid path, it's as good as if we hadn't foud it
|
|
|
raise KeyError
|
|
|
return homedir
|
|
|
except KeyError:
|
|
|
if os.name == 'posix':
|
|
|
raise HomeDirError,'undefined $HOME, IPython can not proceed.'
|
|
|
elif os.name == 'nt':
|
|
|
# For some strange reason, win9x returns 'nt' for os.name.
|
|
|
try:
|
|
|
homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
|
|
|
if not isdir(homedir):
|
|
|
homedir = os.path.join(env['USERPROFILE'])
|
|
|
if not isdir(homedir):
|
|
|
raise HomeDirError
|
|
|
return homedir
|
|
|
except:
|
|
|
try:
|
|
|
# Use the registry to get the 'My Documents' folder.
|
|
|
import _winreg as wreg
|
|
|
key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
|
|
|
"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
|
|
|
homedir = wreg.QueryValueEx(key,'Personal')[0]
|
|
|
key.Close()
|
|
|
if not isdir(homedir):
|
|
|
e = ('Invalid "Personal" folder registry key '
|
|
|
'typically "My Documents".\n'
|
|
|
'Value: %s\n'
|
|
|
'This is not a valid directory on your system.' %
|
|
|
homedir)
|
|
|
raise HomeDirError(e)
|
|
|
return homedir
|
|
|
except HomeDirError:
|
|
|
raise
|
|
|
except:
|
|
|
return 'C:\\'
|
|
|
elif os.name == 'dos':
|
|
|
# Desperate, may do absurd things in classic MacOS. May work under DOS.
|
|
|
return 'C:\\'
|
|
|
else:
|
|
|
raise HomeDirError,'support for your operating system not implemented.'
|
|
|
|
|
|
def get_ipython_dir():
|
|
|
ipdir_def = '.ipython'
|
|
|
home_dir = get_home_dir()
|
|
|
ipdir = os.path.abspath(os.environ.get('IPYTHONDIR',
|
|
|
os.path.join(home_dir,ipdir_def)))
|
|
|
return ipdir
|
|
|
|
|
|
def import_item(key):
|
|
|
"""
|
|
|
Import and return bar given the string foo.bar.
|
|
|
"""
|
|
|
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
|
|
|
|