1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 """
35 Warning: do not use this library. It is unstable and most of the routines
36 here have been superceded by other libraries (e.g. rospkg). These
37 routines will likely be *deleted* in future releases.
38 """
39
40 import os
41
42 import roslib.manifest
43 import roslib.names
44 import roslib.packages
45
46
48 """
49 Helper routine for loading Manifest instances
50 @param package_dir: package directory location
51 @type package_dir: str
52 @return: manifest for package
53 @rtype: Manifest
54 """
55 f = os.path.join(package_dir, roslib.manifest.MANIFEST_FILE)
56 if f:
57 return roslib.manifest.parse_file(f)
58 else:
59 return None
60
61
63 """
64 List resources in a package directory within a particular
65 subdirectory. This is useful for listing messages, services, etc...
66 @param package_dir: package directory location
67 @type package_dir: str
68 @param subdir: name of subdirectory
69 @type subdir: str
70 @param include_depends: if True, include resources in dependencies as well
71 @type include_depends: bool
72 @param rfilter: resource filter function that returns true if filename is the desired resource type
73 @type rfilter: fn(filename)->bool
74 """
75 package = os.path.basename(package_dir)
76 resources = []
77 dir = roslib.packages._get_pkg_subdir_by_dir(package_dir, subdir, False)
78 if os.path.isdir(dir):
79 resources = [roslib.names.resource_name(package, f, my_pkg=package)
80 for f in os.listdir(dir) if rfilter(os.path.join(dir, f))]
81 else:
82 resources = []
83 if include_depends:
84 depends = _get_manifest_by_dir(package_dir).depends
85 dirs = [roslib.packages.get_pkg_subdir(d.package, subdir, False) for d in depends]
86 for (dep, dir_) in zip(depends, dirs):
87 if not dir_ or not os.path.isdir(dir_):
88 continue
89 resources.extend(
90 [roslib.names.resource_name(dep.package, f, my_pkg=package)
91 for f in os.listdir(dir_) if rfilter(os.path.join(dir_, f))])
92 return resources
93
94
96 """
97 List resources in a package within a particular subdirectory. This is useful for listing
98 messages, services, etc...
99 @param package: package name
100 @type package: str
101 @param subdir: name of subdirectory
102 @type subdir: str
103 @param include_depends: if True, include resources in dependencies as well
104 @type include_depends: bool
105 @param rfilter: resource filter function that returns true if filename is the desired resource type
106 @type rfilter: fn(filename)->bool
107 """
108 package_dir = roslib.packages.get_pkg_dir(package)
109 return list_package_resources_by_dir(package_dir, include_depends, subdir, rfilter)
110