35 Top-level library routines we expose to the end-user
43 import roslib.packages
47 _NATIVE_YAML_TYPES = {int, float, str, bool}
48 if sys.version_info < (3, 0):
49 _NATIVE_YAML_TYPES.add(long)
54 Find ROS resource inside of a package.
56 @param pkg: ROS package name
58 @param resource: resource filename
61 val = roslib.packages.find_resource(pkg, resource)
65 raise rospy.ROSException(
"cannot find resource")
69 def __init__(self, filename):
70 self.filename = filename
71 self._fp = open(filename,
'w')
73 def append(self, msg):
77 if self._fp
is not None:
83 if isinstance(obj, roslib.message.Message):
92 Load single message from YAML dictionary representation.
94 @param type_: Message class
95 @type type_: class (Message subclass)
96 @param filename: Name of YAML file
100 if yaml_str.strip() ==
'':
103 msg_dict = yaml.safe_load(yaml_str)
104 if not isinstance(msg_dict, dict):
106 raise ValueError(
"yaml file [%s] does not contain a dictionary" % filename)
108 raise ValueError(
"yaml string does not contain a dictionary")
110 roslib.message.fill_message_args(m, [msg_dict])
116 Load single message from YAML dictionary representation.
118 @param type_: Message class
119 @type type_: class (Message subclass)
120 @param filename: Name of YAML file
123 with open(filename,
'r')
as f:
129 Load messages from YAML list-of-dictionaries representation.
131 @param type_: Message class
132 @type type_: class (Message subclass)
133 @param filename: Name of YAML file
137 yaml_doc = yaml.safe_load(yaml_str)
139 for msg_dict
in yaml_doc:
140 if not isinstance(msg_dict, dict):
142 raise ValueError(
"yaml file [%s] does not contain a list of dictionaries" % filename)
144 raise ValueError(
"yaml string does not contain a list of dictionaries")
146 roslib.message.fill_message_args(m, msg_dict)
153 Load messages from YAML list-of-dictionaries representation.
155 @param type_: Message class
156 @type type_: class (Message subclass)
157 @param filename: Name of YAML file
160 with open(filename,
'r')
as f:
166 convert value to YAML representation
167 @param val: to convert to string representation. Most likely a Message.
169 @param indent: indentation
171 @param time_offset: if not None, time fields will be displayed
172 as deltas from time_offset
173 @type time_offset: Time
175 if type(msg)
in _NATIVE_YAML_TYPES:
178 elif isinstance(msg, rospy.Time)
or isinstance(msg, rospy.Duration):
179 if time_offset
is not None and isinstance(msg, rospy.Time):
180 msg = msg-time_offset
182 return '\n%ssecs: %s\n%snsecs: %s' % (indent, msg.secs, indent, msg.nsecs)
184 elif type(msg)
in [list, tuple]:
187 return str(list(msg))
189 if type(msg0)
in [int, float, str, bool]
or \
190 isinstance(msg0, rospy.Time)
or isinstance(msg0, rospy.Duration)
or \
191 isinstance(msg0, list)
or isinstance(msg0, tuple):
193 return str(list(msg))
195 indent = indent +
' '
196 return "["+
','.join([roslib.message.strify_message(v, indent, time_offset)
for v
in msg])+
"]"
197 elif isinstance(msg, rospy.Message):
200 '\n'.join([
'%s%s: %s' % (
201 indent, f, roslib.message.strify_message(getattr(msg, f),
' ' + indent, time_offset))
for f
in msg.__slots__])
202 return '\n'.join([
'%s%s: %s' % (indent, f, roslib.message.strify_message(getattr(msg, f),
' ' + indent, time_offset))
for f
in msg.__slots__])