Package rosh :: Package impl :: Module ipy
[frames] | no frames]

Source Code for Module rosh.impl.ipy

  1  # Software License Agreement (BSD License) 
  2  # 
  3  # Copyright (c) 2010, Willow Garage, Inc. 
  4  # All rights reserved. 
  5  # 
  6  # Redistribution and use in source and binary forms, with or without 
  7  # modification, are permitted provided that the following conditions 
  8  # are met: 
  9  # 
 10  #  * Redistributions of source code must retain the above copyright 
 11  #    notice, this list of conditions and the following disclaimer. 
 12  #  * Redistributions in binary form must reproduce the above 
 13  #    copyright notice, this list of conditions and the following 
 14  #    disclaimer in the documentation and/or other materials provided 
 15  #    with the distribution. 
 16  #  * Neither the name of Willow Garage, Inc. nor the names of its 
 17  #    contributors may be used to endorse or promote products derived 
 18  #    from this software without specific prior written permission. 
 19  # 
 20  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 21  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 22  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 23  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 24  # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
 25  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
 26  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 27  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 28  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
 29  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
 30  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 31  # POSSIBILITY OF SUCH DAMAGE. 
 32  # 
 33  # Revision $Id: ipy.py 11344 2010-09-29 21:58:07Z kwc $ 
 34  """ 
 35  IPython extensions. 
 36  """ 
 37   
 38  import os 
 39  import sys 
 40   
 41  import roslib.packages 
 42  import roslib.stacks 
 43  import roslib.rosenv 
 44   
45 -def pkg_stack_completers(self, event):
46 return roslib.packages.list_pkgs() + roslib.stacks.list_stacks()
47
48 -def ipy_magic_init():
49 # Add some magic 50 try: 51 import IPython.Magic 52 IPython.Magic.Magic.magic_roscd = ipy_roscd 53 IPython.Magic.Magic.magic_rosmake = ipy_rosmake 54 55 # setup completers 56 import IPython.ipapi 57 ip = IPython.ipapi.get() 58 if ip is not None: 59 # #3043 ip is not available in roshlets 60 ip.set_hook('complete_command', pkg_stack_completers, str_key='roscd') 61 ip.set_hook('complete_command', pkg_stack_completers, str_key='rosmake') 62 except ImportError: 63 pass
64
65 -def ipy_roscd(magic, target):
66 if not target: 67 magic.magic_cd(roslib.rosenv.get_ros_root()) 68 else: 69 splits = target.split(os.sep) 70 target = splits[0] 71 base = None 72 try: 73 base = roslib.packages.get_pkg_dir(target) 74 except roslib.packages.InvalidROSPkgException: 75 try: 76 base = roslib.stacks.get_stack_dir(target) 77 except roslib.stacks.InvalidROSStackException: 78 pass 79 if base is None: 80 print >> sys.stderr, "No such package or stack '%s'"%(target) 81 else: 82 magic.magic_cd(os.sep.join( [base] + splits[1:]))
83
84 -def ipy_rosmake(magic, target):
85 if not target: 86 if os.path.isfile(os.path.join(os.getcwd(), roslib.manifest.MANIFEST_FILE)): 87 import subprocess 88 print "starting rosmake in %s, this may take awhile"%(os.getcwd()) 89 subprocess.Popen(['rosmake']) 90 else: 91 print >> sys.stderr, "no package present in cwd" 92 elif type(target) != str: 93 print >> sys.stderr, "argument must be a package name", type(target) 94 else: 95 if os.sep in target: 96 print >> sys.stderr, "invalid argument: %s"%target 97 else: 98 #TODO: use python rosmake library instead 99 100 import subprocess 101 print "starting rosmake %s, this may take awhile"%target 102 subprocess.Popen(['rosmake', target])
103