package.py
Go to the documentation of this file.
1 import collections
2 
3 from .cmake_parser import parse_file
4 from .launch import LaunchXML
5 from .package_structure import get_package_structure
6 from .package_xml import PackageXML
7 from .plugin_xml import PluginXML
8 from .ros_generator import ROSGenerator
9 from .rviz_config import RVizConfig
10 from .setup_py import SetupPy
11 from .source_code import SourceCode
12 from .urdf import UrdfFile
13 
14 
15 class Package:
16  def __init__(self, root):
17  self.root = root
18  self.manifest = PackageXML(self.root + '/package.xml')
19  self.name = self.manifest.name
20  self.build_type = self.manifest.build_type
21  self.cmake = parse_file(self.root + '/CMakeLists.txt')
22 
23  package_structure = get_package_structure(root)
24  self.source_code = SourceCode(package_structure['source'], self.name)
25  if self.cmake:
26  self.source_code.setup_tags(self.cmake)
27 
28  self.launches = []
29  self.plugin_configs = []
30  self.urdf_files = []
31  for rel_fn, file_path in package_structure['launch'].items():
32  self.launches.append(LaunchXML(rel_fn, file_path))
33  for rel_fn, file_path in package_structure['plugin_config'].items():
34  self.plugin_configs.append(PluginXML(rel_fn, file_path))
35  for rel_fn, file_path in package_structure['urdf'].items():
36  self.urdf_files.append(UrdfFile(rel_fn, file_path))
37 
38  self.setup_py = None
39  if 'setup.py' in package_structure['key']:
40  self.setup_py = SetupPy(self.name, package_structure['key']['setup.py'])
41  self.generators = collections.defaultdict(list)
42  for rel_fn, path in package_structure['generators'].items():
43  gen = ROSGenerator(rel_fn, path)
44  self.generators[gen.type].append(gen)
45  self.dynamic_reconfigs = package_structure['cfg'].keys()
46  self.urdf_files = []
47  for rel_fn, path in package_structure['urdf'].items():
48  self.urdf_files.append(UrdfFile(rel_fn, path))
49  self.rviz_configs = []
50  for rel_fn, path in package_structure[None].items():
51  if path.endswith('.rviz'):
52  self.rviz_configs.append(RVizConfig(rel_fn, path))
53  self.misc_files = list(package_structure[None].keys())
54 
55  def is_metapackage(self):
56  return self.manifest.is_metapackage() or (self.cmake and self.cmake.is_metapackage())
57 
60 
62  packages = set()
63  for launch in self.launches:
64  if launch.test:
65  continue
66  packages.update(launch.get_dependencies())
67 
68  for urdf in self.urdf_files:
69  packages.update(urdf.get_dependencies())
70 
71  for rviz_config in self.rviz_configs:
72  packages.update(rviz_config.get_dependencies())
73 
74  if self.name in packages:
75  packages.remove(self.name)
76  return packages
77 
79  packages = set()
80  packages.update(self.source_code.get_test_dependencies())
81  for launch in self.launches:
82  if not launch.test:
83  continue
84  packages.add('rostest')
85  packages.update(launch.get_dependencies())
86  if self.name in packages:
87  packages.remove(self.name)
88  return packages
89 
90  def get_all_generators(self):
91  for gens in self.generators.values():
92  for gen in gens:
93  yield gen
94 
96  packages = set()
97  for gen in self.get_all_generators():
98  packages.update(gen.dependencies)
99  if self.name in packages:
100  packages.remove(self.name)
101  return packages
102 
103  def write(self):
104  self.manifest.write()
105  if self.cmake:
106  self.cmake.write()
107  for plugin_config in self.plugin_configs:
108  plugin_config.write()
109  if self.setup_py:
110  self.setup_py.write()
111  for gen in self.get_all_generators():
112  gen.write()
113  for src in self.source_code.sources.values():
114  src.write()
115  for config in self.rviz_configs:
116  config.write()
117 
118  def __repr__(self):
119  s = '== {} ({})========\n'.format(self.name, self.build_type)
120  s += ' package.xml\n'
121  s += ' CMakeLists.txt\n'
122  if self.setup_py:
123  s += ' setup.py\n'
124  components = {'source': str(self.source_code),
125  'launch': '\n'.join(map(str, self.launches)),
126  'dynamic reconfigure configs': '\n'.join(self.dynamic_reconfigs),
127  'plugin configs': '\n'.join([cfg.rel_fn for cfg in self.plugin_configs]),
128  'urdf models': '\n'.join(map(str, self.urdf_files)),
129  '{misc}': '\n'.join(self.misc_files)
130  }
131  for ext in self.generators:
132  components[ext] = '\n'.join(map(str, self.generators[ext]))
133  for name, c_str in sorted(components.items()):
134  if len(c_str) == 0:
135  continue
136  s += ' {}\n'.format(name)
137  for line in c_str.split('\n'):
138  s += ' ' + line + '\n'
139  return s


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