Skip to content

Commit b680723

Browse files
committed
message: support option fields.
These are (probably) going away soon, but just tag them for now. Signed-off-by: Rusty Russell <[email protected]>
1 parent e72bd5d commit b680723

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

contrib/pyln-proto/pyln/proto/message/message.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,11 @@ def load_csv(self, lines):
109109

110110
class MessageTypeField(object):
111111
"""A field within a particular message type or subtype"""
112-
def __init__(self, ownername, name, fieldtype):
112+
def __init__(self, ownername, name, fieldtype, option=None):
113113
self.full_name = "{}.{}".format(ownername, name)
114114
self.name = name
115115
self.fieldtype = fieldtype
116+
self.option = option
116117

117118
def missing_fields(self, fields):
118119
"""Return this field if it's not in fields"""
@@ -171,7 +172,7 @@ def type_from_csv(parts):
171172
.format(parts))
172173
return SubtypeType(parts[0])
173174

174-
def _field_from_csv(self, namespace, parts, ellipsisok=False):
175+
def _field_from_csv(self, namespace, parts, ellipsisok=False, option=None):
175176
"""Takes msgdata/subtypedata after first two fields
176177
e.g. [...]timestamp_node_id_1,u32,
177178
@@ -191,19 +192,22 @@ def _field_from_csv(self, namespace, parts, ellipsisok=False):
191192
DynamicArrayType(self,
192193
parts[0],
193194
basetype,
194-
lenfield))
195+
lenfield),
196+
option)
195197
lenfield.fieldtype.add_length_for(field)
196198
elif ellipsisok and parts[2] == '...':
197199
field = MessageTypeField(self.name, parts[0],
198200
EllipsisArrayType(self,
199-
parts[0], basetype))
201+
parts[0], basetype),
202+
option)
200203
else:
201204
field = MessageTypeField(self.name, parts[0],
202205
SizedArrayType(self,
203206
parts[0], basetype,
204-
int(parts[2])))
207+
int(parts[2])),
208+
option)
205209
else:
206-
field = MessageTypeField(self.name, parts[0], basetype)
210+
field = MessageTypeField(self.name, parts[0], basetype, option)
207211

208212
return field
209213

@@ -302,9 +306,10 @@ class MessageType(SubtypeType):
302306
'NODE': 0x2000,
303307
'UPDATE': 0x1000}
304308

305-
def __init__(self, name, value):
309+
def __init__(self, name, value, option=None):
306310
super().__init__(name)
307311
self.number = self.parse_value(value)
312+
self.option = option
308313

309314
def parse_value(self, value):
310315
result = 0
@@ -321,23 +326,30 @@ def __str__(self):
321326

322327
@staticmethod
323328
def type_from_csv(parts):
324-
"""e.g msgtype,open_channel,32"""
325-
if len(parts) != 2:
329+
"""e.g msgtype,open_channel,32,option_foo"""
330+
option = None
331+
if len(parts) == 3:
332+
option = parts[2]
333+
elif len(parts) < 2 or len(parts) > 3:
326334
raise ValueError("msgtype expected 3 CSV parts, not {}"
327335
.format(parts))
328-
return MessageType(parts[0], parts[1])
336+
return MessageType(parts[0], parts[1], option)
329337

330338
@staticmethod
331339
def field_from_csv(namespace, parts):
332-
"""e.g msgdata,open_channel,temporary_channel_id,byte,32"""
333-
if len(parts) != 4:
340+
"""e.g msgdata,open_channel,temporary_channel_id,byte,32[,opt]"""
341+
option = None
342+
if len(parts) == 5:
343+
option = parts[4]
344+
elif len(parts) != 4:
334345
raise ValueError("msgdata expected 4 CSV parts, not {}"
335346
.format(parts))
336347
messagetype = namespace.get_msgtype(parts[0])
337348
if not messagetype:
338349
raise ValueError("unknown subtype {}".format(parts[0]))
339350

340-
field = messagetype._field_from_csv(namespace, parts[1:])
351+
field = messagetype._field_from_csv(namespace, parts[1:4],
352+
option=option)
341353
messagetype.add_field(field)
342354

343355

0 commit comments

Comments
 (0)