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