##// END OF EJS Templates
protect IPython from bad custom exception handlers...
protect IPython from bad custom exception handlers Previously, errors in custom handlers would result in the custom exception handler's error being printed in lieu of the real exception, and certain cases could cause infinite loops. Now, if CustomTB fails it is unregistered immediately, and the original TB is also displayed. IPython's own BdbQuit_IPython_excepthook had an invalid signature, which revealed this issue, and has also been fixed. test included. closes #692

File last commit:

r0:6f629fcc
r4991:ed5078c9
Show More
install_data_ext.py
80 lines | 3.0 KiB | text/x-python | PythonLexer
# install_data_ext.py
#
# Subclass of normal distutils install_data command to allow more
# configurable installation of data files.
import os
from distutils.command.install_data import install_data
from distutils.util import change_root, convert_path
class install_data_ext(install_data):
def initialize_options(self):
self.install_base = None
self.install_platbase = None
self.install_purelib = None
self.install_headers = None
self.install_lib = None
self.install_scripts = None
self.install_data = None
self.outfiles = []
self.root = None
self.force = 0
self.data_files = self.distribution.data_files
self.warn_dir = 1
def finalize_options(self):
self.set_undefined_options('install',
('root', 'root'),
('force', 'force'),
('install_base', 'install_base'),
('install_platbase',
'install_platbase'),
('install_purelib',
'install_purelib'),
('install_headers',
'install_headers'),
('install_lib', 'install_lib'),
('install_scripts',
'install_scripts'),
('install_data', 'install_data'))
def run(self):
"""
This is where the meat is. Basically the data_files list must
now be a list of tuples of 3 entries. The first
entry is one of 'base', 'platbase', etc, which indicates which
base to install from. The second entry is the path to install
too. The third entry is a list of files to install.
"""
for lof in self.data_files:
if lof[0]:
base = getattr(self, 'install_' + lof[0])
else:
base = getattr(self, 'install_base')
dir = convert_path(lof[1])
if not os.path.isabs(dir):
dir = os.path.join(base, dir)
elif self.root:
dir = change_root(self.root, dir)
self.mkpath(dir)
files = lof[2]
if len(files) == 0:
# If there are no files listed, the user must be
# trying to create an empty directory, so add the the
# directory to the list of output files.
self.outfiles.append(dir)
else:
# Copy files, adding them to the list of output files.
for f in files:
f = convert_path(f)
(out, _) = self.copy_file(f, dir)
#print "DEBUG: ", out # dbg
self.outfiles.append(out)
return self.outfiles