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 from __future__ import with_statement
36
37 import sys
38
39 import roslib.packages
40 import rospy
41
42 import rosmsg
43
44 from rosh.impl.namespace import Namespace, Concept
45 from rosh.impl.bagy import create
46
48
50 """
51 ctor.
52 @param config: Namespace configuration instance with additional 'listener' attribute.
53 @type config: L{NamespaceConfig}
54 """
55 super(MsgPackage, self).__init__(name, config)
56
57
58 if self._ns == '/':
59 self._ns = ''
60
61 self._msg_cache = {}
62
64 """
65 Override Namespace._list()
66 """
67 try:
68 if not self._ns:
69 return rosmsg.list_packages(mode=self._config.mode)
70 else:
71 return rosmsg.list_types(self._name, mode=self._config.mode)
72 except:
73 return []
74
76 return list(set([s[len(self._ns):].split('/')[0] for s in self._list()]))
77
80
83
85 if not self._ns:
86 return super(MsgPackage, self).__getitem__(key)
87 elif key in self._msg_cache:
88 return self._msg_cache[key]
89 else:
90 if self._config.mode == roslib.msgs.EXT:
91 v = self._type = get_message_class(self._ns + key)
92 else:
93 v = self._type = get_service_class(self._ns + key)
94 if v is not None:
95 self._msg_cache[key] = v
96 return v
97
99 val = roslib.message.get_message_class(type_name, reload_on_error=True)
100 if not val:
101 pkg, base_type = roslib.names.package_resource_name(type_name)
102 if '(' not in type_name:
103
104
105 print >> sys.stderr, """Cannot retrieve type [%s].
106 Please type 'rosmake %s'
107 """%(type_name, pkg)
108 return None
109 else:
110 return val
111
113 val = roslib.message.get_service_class(type_name, reload_on_error=True)
114 if not val:
115 pkg, base_type = roslib.names.package_resource_name(type_name)
116 if '(' not in type_name:
117
118
119 print >> sys.stderr, """Cannot retrieve type [%s].
120 Please type 'rosmake %s'
121 """%(type_name, pkg)
122 return None
123 else:
124 return val
125
126 -class Msgs(Concept):
127
131
133 """
134 Test if the key (package name) has msgs.
135 """
136
137 return key in self._root._list()
138
139 - def __call__(self, msg_repr, msg_class):
140 """
141 Instantiate msg from a dictionary or YAML representation.
142 """
143 return create(msg_repr, msg_class)
144
145 -class Srvs(Concept):
146
150
152 """
153 Test if the key (package name) has srvs.
154 """
155
156 return key in self._root._list()
157