def main(options): if not options.topological_order: package_paths = find_package_paths(options.basepath) for package_path in sorted(package_paths): package = None package_abs_path = os.path.join(options.basepath, package_path) if options.depends_on is not None: package = parse_package(package_abs_path) if options.depends_on not in get_unique_depend_names(package): continue if options.names_only: package = package or parse_package(package_abs_path) print(package.name) else: print(package_path) else: packages = find_unique_packages(options.basepath) packages = topological_order_packages(packages) for package_path, package, _ in packages: if options.depends_on is not None: if options.depends_on not in get_unique_depend_names(package): continue if options.names_only: print(package.name) else: print(package_path)
def get_ros2_services(): pkgs = [] srvs = [] rules = [] resource_type = 'rosidl_interfaces' resources = ament_index_python.get_resources(resource_type) for package_name, prefix_path in resources.items(): pkgs.append(package_name) resource, _ = ament_index_python.get_resource(resource_type, package_name) interfaces = resource.splitlines() service_names = [i[:-4] for i in interfaces if i.endswith('.srv')] for service_name in service_names: srvs.append(Message(package_name, service_name, prefix_path)) # check package manifest for mapping rules package_path = os.path.join(prefix_path, 'share', package_name) pkg = parse_package(package_path) for export in pkg.exports: if export.tagname != 'ros1_bridge': continue if 'mapping_rules' not in export.attributes: continue rule_file = os.path.join(package_path, export.attributes['mapping_rules']) with open(rule_file, 'r') as h: for data in yaml.load(h): if all(n not in data for n in ('ros1_message_name', 'ros2_message_name')): try: rules.append(ServiceMappingRule( data, package_name)) except Exception as e: print('%s' % str(e), file=sys.stderr) return pkgs, srvs, rules
def get_ros2_services(): pkgs = [] srvs = [] rules = [] resource_type = 'rosidl_interfaces' resources = ament_index_python.get_resources(resource_type) for package_name, prefix_path in resources.items(): pkgs.append(package_name) resource, _ = ament_index_python.get_resource(resource_type, package_name) interfaces = resource.splitlines() service_names = [i[:-4] for i in interfaces if i.endswith('.srv')] for service_name in service_names: srvs.append(Message(package_name, service_name, prefix_path)) # check package manifest for mapping rules package_path = os.path.join(prefix_path, 'share', package_name) pkg = parse_package(package_path) for export in pkg.exports: if export.tagname != 'ros1_bridge': continue if 'mapping_rules' not in export.attributes: continue rule_file = os.path.join(package_path, export.attributes['mapping_rules']) with open(rule_file, 'r') as h: for data in yaml.load(h): if all(n not in data for n in ('ros1_message_name', 'ros2_message_name')): try: rules.append(ServiceMappingRule(data, package_name)) except Exception as e: print('%s' % str(e), file=sys.stderr) return pkgs, srvs, rules
def main(options): path = os.curdir if options.path is None else options.path try: path = argparse_existing_package(path) except argparse.ArgumentTypeError as exc: sys.exit("Error: {0}".format(exc)) package = parse_package(path) print(package.version)
def find_packages(basepath, exclude_paths=None): """ Crawl the filesystem to find package manifest files and parses them. :param str basepath: The path to search in :param list exclude_paths: A list of paths which should not be searched :returns: A dict mapping relative paths to :py:class:`ament_package.package.Package` objects :rtype: dict """ packages = {} package_paths = find_package_paths(basepath, exclude_paths=exclude_paths) for path in package_paths: packages[path] = parse_package(os.path.join(basepath, path)) return packages
def get_ros2_messages(): pkgs = [] msgs = [] rules = [] # get messages from packages resource_type = 'rosidl_interfaces' resources = ament_index_python.get_resources(resource_type) for package_name, prefix_path in resources.items(): pkgs.append(package_name) resource, _ = ament_index_python.get_resource(resource_type, package_name) interfaces = resource.splitlines() message_names = [i[:-4] for i in interfaces if i.endswith('.msg')] for message_name in message_names: msgs.append(Message(package_name, message_name, prefix_path)) # check package manifest for mapping rules package_path = os.path.join(prefix_path, 'share', package_name) pkg = parse_package(package_path) for export in pkg.exports: if export.tagname != 'ros1_bridge': continue if 'mapping_rules' not in export.attributes: continue rule_file = os.path.join(package_path, export.attributes['mapping_rules']) with open(rule_file, 'r') as h: content = yaml.load(h) if not isinstance(content, list): print( "The content of the mapping rules in '%s' is not a list" % rule_file, file=sys.stderr) continue for data in content: if all(n not in data for n in ('ros1_service_name', 'ros2_service_name')): try: rules.append(MessageMappingRule(data, package_name)) except Exception as e: print('%s' % str(e), file=sys.stderr) return pkgs, msgs, rules
def get_ros2_messages(): msgs = [] rules = [] # get messages from packages resource_type = 'rosidl_interfaces' resources = ament_index_python.get_resources(resource_type) for package_name, prefix_path in resources.items(): resource = ament_index_python.get_resource(resource_type, package_name) interfaces = resource.splitlines() message_names = [i[:-4] for i in interfaces if i.endswith('.msg')] for message_name in message_names: msgs.append(Message(package_name, message_name, prefix_path)) # check package manifest for mapping rules package_path = os.path.join(prefix_path, 'share', package_name) pkg = parse_package(package_path) for export in pkg.exports: if export.tagname != 'ros1_bridge': continue if 'mapping_rules' not in export.attributes: continue rule_file = os.path.join(package_path, export.attributes['mapping_rules']) rules += read_mapping_rules(rule_file, package_name) return msgs, rules
def __get_cached_package_manifest(path): global package_manifest_cache_ if path not in package_manifest_cache_: package_manifest_cache_[path] = parse_package(path) return package_manifest_cache_[path]