##// END OF EJS Templates
More work on componentizing everything....
More work on componentizing everything. I have also done some work on component: * componenets whose __init__ method fails are now unregistered. * Added a masquerade_as function to enable components to masquerade as one another. This is really a cheap and informal way of doing parts of an interface system.

File last commit:

r2205:8ce57664
r2243:5b86c0c8
Show More
ipy_rehashdir.py
140 lines | 4.3 KiB | text/x-python | PythonLexer
fperez
Fix win32 line endings.
r281 # -*- coding: utf-8 -*-
""" IPython extension: add %rehashdir magic
Usage:
%rehashdir c:/bin c:/tools
- Add all executables under c:/bin and c:/tools to alias table, in
order to make them directly executable from any directory.
This also serves as an example on how to extend ipython
with new magic functions.
Unlike rest of ipython, this requires Python 2.4 (optional
extensions are allowed to do that).
"""
Brian Granger
ipapi.py => core/ipapi.py and imports updated.
r2027 from IPython.core import ipapi
ip = ipapi.get()
fperez
Fix win32 line endings.
r281
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801 import os,re,fnmatch,sys
fperez
Fix win32 line endings.
r281
vivainio
callable aliases now get _ip as first arg
r833 def selflaunch(ip,line):
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801 """ Launch python script with 'this' interpreter
vivainio
ipykit pylaunchers do .ipy now
r841 e.g. d:\foo\ipykit.exe a.py
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801
"""
vivainio
ipykit pylaunchers do .ipy now
r841
tup = line.split(None,1)
if len(tup) == 1:
print "Launching nested ipython session"
os.system(sys.executable)
return
cmd = sys.executable + ' ' + tup[1]
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801 print ">",cmd
os.system(cmd)
class PyLauncher:
""" Invoke selflanucher on the specified script
This is mostly useful for associating with scripts using::
Brian Granger
Continuing a massive refactor of everything.
r2205 _ip.define_alias('foo',PyLauncher('foo_script.py'))
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801
"""
def __init__(self,script):
self.script = os.path.abspath(script)
vivainio
callable aliases now get _ip as first arg
r833 def __call__(self, ip, line):
vivainio
ipykit pylaunchers do .ipy now
r841 if self.script.endswith('.ipy'):
ip.runlines(open(self.script).read())
else:
vivainio
ipykit: PyLauncher first arg strip
r861 # first word is the script/alias name itself, strip it
tup = line.split(None,1)
if len(tup) == 2:
tail = ' ' + tup[1]
else:
tail = ''
selflaunch(ip,"py " + self.script + tail)
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801 def __repr__(self):
return 'PyLauncher("%s")' % self.script
vivainio
ipykit pylaunchers do .ipy now
r841
fperez
Fix win32 line endings.
r281 def rehashdir_f(self,arg):
""" Add executables in all specified dirs to alias table
Usage:
%rehashdir c:/bin;c:/tools
- Add all executables under c:/bin and c:/tools to alias table, in
order to make them directly executable from any directory.
Without arguments, add all executables in current directory.
"""
# most of the code copied from Magic.magic_rehashx
def isjunk(fname):
junk = ['*~']
for j in junk:
if fnmatch.fnmatch(fname, j):
return True
return False
vivainio
add mglob
r687 created = []
fperez
Fix win32 line endings.
r281 if not arg:
arg = '.'
path = map(os.path.abspath,arg.split(';'))
alias_table = self.shell.alias_table
if os.name == 'posix':
isexec = lambda fname:os.path.isfile(fname) and \
os.access(fname,os.X_OK)
else:
try:
winext = os.environ['pathext'].replace(';','|').replace('.','')
except KeyError:
winext = 'exe|com|bat|py'
vivainio
.py is always executable for purposes of %rehashx and %rehashdir
r380 if 'py' not in winext:
winext += '|py'
fperez
Fix win32 line endings.
r281 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
savedir = os.getcwd()
try:
# write the whole loop for posix/Windows so we don't have an if in
# the innermost part
if os.name == 'posix':
for pdir in path:
os.chdir(pdir)
for ff in os.listdir(pdir):
if isexec(ff) and not isjunk(ff):
# each entry in the alias table must be (N,name),
# where N is the number of positional arguments of the
# alias.
vivainio
add mglob
r687 src,tgt = os.path.splitext(ff)[0], os.path.abspath(ff)
created.append(src)
fperez
Fix win32 line endings.
r281 alias_table[src] = (0,tgt)
else:
for pdir in path:
os.chdir(pdir)
for ff in os.listdir(pdir):
if isexec(ff) and not isjunk(ff):
src, tgt = execre.sub(r'\1',ff), os.path.abspath(ff)
vivainio
Aliases are now lowercase on win32
r649 src = src.lower()
vivainio
add mglob
r687 created.append(src)
fperez
Fix win32 line endings.
r281 alias_table[src] = (0,tgt)
# 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 %rehashx will probably clobber them
vivainio
no auto_alias in %redashdir...
r543 # self.shell.init_auto_alias()
fperez
Fix win32 line endings.
r281 finally:
os.chdir(savedir)
vivainio
add mglob
r687 return created
vivainio
ipython_firstrun(ip) entry point for _ip.load, ipykit enhancement: pylaunchers for launching python scripts
r801
Brian Granger
Continuing a massive refactor of everything.
r2205 ip.define_magic("rehashdir",rehashdir_f)