@@ -109,10 +109,11 @@ def load_csv(self, lines):
109109
110110class 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