Package roswtf :: Module plugins
[frames] | no frames]

Source Code for Module roswtf.plugins

 1  # Software License Agreement (BSD License) 
 2  # 
 3  # Copyright (c) 2009, 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$ 
34   
35  """ 
36  Plugin loader for roswtf. 
37  """ 
38   
39  from __future__ import print_function 
40   
41  import os 
42  import sys 
43   
44  import roslib 
45  import rospkg 
46   
47 -def load_plugins():
48 """ 49 @return: list of static roswtf plugins, list of online 50 roswtf plugins 51 @rtype: [fn], [fn] 52 """ 53 rospack = rospkg.RosPack() 54 to_check = rospack.get_depends_on('roswtf', implicit=False) 55 static_plugins = [] 56 online_plugins = [] 57 for pkg in to_check: 58 m = rospack.get_manifest(pkg) 59 p_module = m.get_export('roswtf', 'plugin') 60 if not p_module: 61 continue 62 elif len(p_module) != 1: 63 print("Cannot load plugin [%s]: invalid 'plugin' attribute"%(pkg), file=sys.stderr) 64 continue 65 p_module = p_module[0] 66 try: 67 # load that packages namespace 68 roslib.load_manifest(pkg) 69 70 # import the specified plugin module 71 mod = __import__(p_module) 72 for sub_mod in p_module.split('.')[1:]: 73 mod = getattr(mod, sub_mod) 74 75 # retrieve the roswtf_plugin_static and roswtf_plugin_online functions 76 s_attr = o_attr = None 77 try: 78 s_attr = getattr(mod, 'roswtf_plugin_static') 79 except AttributeError: pass 80 try: 81 o_attr = getattr(mod, 'roswtf_plugin_online') 82 except AttributeError: pass 83 if s_attr: 84 static_plugins.append(s_attr) 85 if o_attr: 86 online_plugins.append(o_attr) 87 if s_attr is None and o_attr is None: 88 print("Cannot load plugin [%s]: no 'roswtf_plugin_static' or 'roswtf_plugin_online' attributes [%s]"%(p_module), file=sys.stderr) 89 else: 90 print("Loaded plugin", p_module) 91 92 except Exception: 93 print("Unable to load plugin [%s] from package [%s]"%(p_module, pkg), file=sys.stderr) 94 return static_plugins, online_plugins
95