##// END OF EJS Templates
oops
oops

File last commit:

r861:22534c70
r1276:10c38e4d
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).
"""
import IPython.ipapi
ip = IPython.ipapi.get()
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::
_ip.defalias('foo',PyLauncher('foo_script.py'))
"""
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
fperez
Fix win32 line endings.
r281 ip.expose_magic("rehashdir",rehashdir_f)