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.package.Package.rviz_configs
rviz_configs
Definition: package.py:49
ros_introspection.package.Package.cmake
cmake
Definition: package.py:21
ros_introspection.package.Package.__init__
def __init__(self, root)
Definition: package.py:16
ros_introspection.setup_py.SetupPy
Definition: setup_py.py:144
ros_introspection.package.Package.manifest
manifest
Definition: package.py:18
ros_introspection.package.Package.get_dependencies_from_msgs
def get_dependencies_from_msgs(self)
Definition: package.py:95
ros_introspection.package.Package.name
name
Definition: package.py:19
ros_introspection.cmake_parser.parse_file
def parse_file(filename)
Definition: cmake_parser.py:218
ros_introspection.package.Package.misc_files
misc_files
Definition: package.py:53
ros_introspection.package.Package.launches
launches
Definition: package.py:28
ros_introspection.plugin_xml.PluginXML
Definition: plugin_xml.py:8
ros_introspection.rviz_config.RVizConfig
Definition: rviz_config.py:57
ros_introspection.package.Package.get_all_generators
def get_all_generators(self)
Definition: package.py:90
ros_introspection.package.Package.generators
generators
Definition: package.py:41
ros_introspection.package.Package.plugin_configs
plugin_configs
Definition: package.py:29
ros_introspection.package.Package.get_build_dependencies
def get_build_dependencies(self)
Definition: package.py:58
ros_introspection.package.Package.setup_py
setup_py
Definition: package.py:38
ros_introspection.package.Package.build_type
build_type
Definition: package.py:20
ros_introspection.package.Package
Definition: package.py:15
ros_introspection.package.Package.root
root
Definition: package.py:17
ros_introspection.package.Package.source_code
source_code
Definition: package.py:24
ros_introspection.package.Package.__repr__
def __repr__(self)
Definition: package.py:118
ros_introspection.package_structure.get_package_structure
def get_package_structure(pkg_root)
Definition: package_structure.py:25
ros_introspection.package.Package.is_metapackage
def is_metapackage(self)
Definition: package.py:55
ros_introspection.package.Package.get_test_dependencies
def get_test_dependencies(self)
Definition: package.py:78
ros_introspection.urdf.UrdfFile
Definition: urdf.py:7
ros_introspection.package.Package.get_run_dependencies
def get_run_dependencies(self)
Definition: package.py:61
ros_introspection.package.Package.dynamic_reconfigs
dynamic_reconfigs
Definition: package.py:45
ros_introspection.launch.LaunchXML
Definition: launch.py:22
ros_introspection.package.Package.write
def write(self)
Definition: package.py:103
ros_introspection.package_xml.PackageXML
Definition: package_xml.py:64
ros_introspection.source_code.SourceCode
Definition: source_code.py:6
ros_introspection.ros_generator.ROSGenerator
Definition: ros_generator.py:56
ros_introspection.package.Package.urdf_files
urdf_files
Definition: package.py:30


ros_introspection
Author(s):
autogenerated on Tue Jun 21 2022 03:01:38