launch.py
Go to the documentation of this file.
1 import re
2 from xml.dom.minidom import parse
3 from xml.parsers.expat import ExpatError
4 
5 
6 class Launch:
7  def __init__(self, rel_fn, file_path):
8  self.rel_fn = rel_fn
9  self.file_path = file_path
10 
11  def get_dependencies(self):
12  d = set()
13  d.update(self.get_node_pkgs())
14  d.update(self.get_include_pkgs())
15  d.update(self.get_misc_pkgs())
16  return sorted(d)
17 
18  def __repr__(self):
19  return self.rel_fn
20 
21 
23  def __init__(self, rel_fn, file_path):
24  Launch.__init__(self, rel_fn, file_path)
25  try:
26  self.tree = parse(self.file_path)
27  self.test = len(self.tree.getElementsByTagName('test')) > 0
28  except ExpatError: # this is an invalid xml file
29  self.test = False
30 
31  def get_node_pkgs(self):
32  s = set()
33  for node in self.tree.getElementsByTagName('node'):
34  s.add(str(node.getAttribute('pkg')))
35  return sorted(s)
36 
37  def get_include_pkgs(self):
38  s = set()
39  for node in self.tree.getElementsByTagName('include'):
40  el = node.getAttribute('file')
41  if 'find' in el:
42  i = el.index('find')
43  i2 = el.index(')', i)
44  s.add(el[i + 5:i2])
45  return sorted(s)
46 
47  def get_misc_pkgs(self):
48  s = set()
49  xml_str = self.tree.toxml()
50  for x in re.finditer(r'\$\(find ([^\)]*)\)', xml_str):
51  s.add(x.group(1))
52  # rosrun PKG (e.g. <param command="rosrun xacro xacro.py xacrofile.xacro" />
53  for x in re.finditer(r'rosrun\s+(\w+)\s', xml_str):
54  s.add(x.group(1))
55  return s
def __init__(self, rel_fn, file_path)
Definition: launch.py:7
def __init__(self, rel_fn, file_path)
Definition: launch.py:23


ros_introspection
Author(s):
autogenerated on Wed Jun 22 2022 02:45:33