##// END OF EJS Templates
Move crash handling to the application level and simplify class structure....
Move crash handling to the application level and simplify class structure. Starting to try to take real advantage of the refactoring, to have generic crash handling. This also lets us initialize the app without needing all the self.attempt() wrappers, since now there's a good system-wide crash handler at the app level (not inside the shell instance). I didn't yet remove the attempt() method because we may have occasional uses for it (we still do, but in one place only). I also removed some extra class layers that weren't quite needed. Creating classes solely for the purpose of passing parameters makes the code (IMO) harder to understand, I kept getting lost in parts of the class hierarchy. I think these changes provide the same flexibility but with easier to follow code (less things to remember, basically). What I tried to do was to use argument passing instead of inheritance for all cases I saw where the inheritance wasn't really adding new functionality. In some cases, this actually allowed me to remove methods that were effectively duplicated in the subclasses.

File last commit:

r2267:928c921b
r2403:08d6ac78
Show More
ipy_legacy.py
62 lines | 1.9 KiB | text/x-python | PythonLexer
""" Legacy stuff
Various stuff that are there for historical / familiarity reasons.
This is automatically imported by default profile, though not other profiles
(e.g. 'sh' profile).
Stuff that is considered obsolete / redundant is gradually moved here.
"""
from IPython.core import ipapi
ip = ipapi.get()
import os,sys
from IPython.utils.genutils import *
# use rehashx
def magic_rehash(self, parameter_s = ''):
"""Update the alias table with all entries in $PATH.
This version does no checks on execute permissions or whether the
contents of $PATH are truly files (instead of directories or something
else). For such a safer (but slower) version, use %rehashx."""
# This function (and rehashx) manipulate the alias_table directly
# rather than calling magic_alias, for speed reasons. A rehash on a
# typical Linux box involves several thousand entries, so efficiency
# here is a top concern.
path = filter(os.path.isdir,os.environ.get('PATH','').split(os.pathsep))
alias_table = self.shell.alias_table
for pdir in path:
for ff in os.listdir(pdir):
# each entry in the alias table must be (N,name), where
# N is the number of positional arguments of the alias.
alias_table[ff] = (0,ff)
# Make sure the alias table doesn't contain keywords or builtins
self.shell.alias_table_validate()
# Call again init_auto_alias() so we get 'rm -i' and other modified
# aliases since %rehash will probably clobber them
self.shell.init_auto_alias()
ip.define_magic("rehash", magic_rehash)
# Exit
def magic_Quit(self, parameter_s=''):
"""Exit IPython without confirmation (like %Exit)."""
self.shell.ask_exit()
ip.define_magic("Quit", magic_Quit)
# make it autocallable fn if you really need it
def magic_p(self, parameter_s=''):
"""Just a short alias for Python's 'print'."""
exec 'print ' + parameter_s in self.shell.user_ns
ip.define_magic("p", magic_p)