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)
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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)
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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]
Beispiel #11
0
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]