@@ -53,11 +53,16 @@ def add_signal_receiver(self, interface, signal, obj, func, args, kwargs):
5353 def handle_signal (self , * args , ** kwargs ):
5454 key = (kwargs ['interface' ], kwargs ['signal' ])
5555 skwargs = {}
56+ sargs = []
5657 if key not in self .handlers :
5758 return
5859 sender = fixups .base_to_python (kwargs ['path' ])
5960 for arg , (name , signature ) in zip (args , self .args [key ]):
60- skwargs [name ] = fixups .to_python (type (sender ).__name__ , kwargs ['signal' ], name , arg , signature )
61+ if name :
62+ skwargs [name ] = fixups .to_python (type (sender ).__name__ , kwargs ['signal' ], name , arg , signature )
63+ else :
64+ # Older NetworkManager versions don't supply attribute names. Hope for the best.
65+ sargs .append (fixups .to_python (type (sender ).__name__ , kwargs ['signal' ], None , arg , signature ))
6166 to_delete = []
6267 for pos , (match , receiver , rargs , rkwargs ) in enumerate (self .handlers [key ]):
6368 try :
@@ -69,7 +74,7 @@ def handle_signal(self, *args, **kwargs):
6974 rkwargs ['interface' ] = kwargs ['interface' ]
7075 rkwargs ['signal' ] = kwargs ['signal' ]
7176 rkwargs .update (skwargs )
72- receiver (sender , * rargs , ** rkwargs )
77+ receiver (sender , * ( sargs + rargs ) , ** rkwargs )
7378 for pos in reversed (to_delete ):
7479 self .handlers [key ].pop (pos )
7580
@@ -139,7 +144,7 @@ def __new__(type_, name, bases, attrs):
139144 aname = '_' + aname
140145 attrs [aname ] = type_ .make_method (name , element .attrib ['name' ], item .attrib , list (item ))
141146 elif item .tag == 'signal' :
142- SignalDispatcher .args [(element .attrib ['name' ], item .attrib ['name' ])] = [(arg .attrib [ 'name' ] , arg .attrib ['type' ]) for arg in item ]
147+ SignalDispatcher .args [(element .attrib ['name' ], item .attrib ['name' ])] = [(arg .attrib . get ( 'name' , None ) , arg .attrib ['type' ]) for arg in item ]
143148 attrs ['On' + item .attrib ['name' ]] = type_ .make_signal (name , element .attrib ['name' ], item .attrib )
144149 attrs ['signals' ].append (item .attrib ['name' ])
145150
@@ -229,7 +234,7 @@ def __new__(klass, object_path=None):
229234 aname = '_' + aname
230235 setattr (klass , aname , type (klass ).make_method (klass .__name__ , element .attrib ['name' ], item .attrib , list (item )))
231236 elif item .tag == 'signal' :
232- SignalDispatcher .args [(element .attrib ['name' ], item .attrib ['name' ])] = [(arg .attrib [ 'name' ] , arg .attrib ['type' ]) for arg in item ]
237+ SignalDispatcher .args [(element .attrib ['name' ], item .attrib ['name' ])] = [(arg .attrib . get ( 'name' , None ) , arg .attrib ['type' ]) for arg in item ]
233238 setattr (klass , 'On' + item .attrib ['name' ], type (klass ).make_signal (klass .__name__ , element .attrib ['name' ], item .attrib ))
234239 klass .signals .append (item .attrib ['name' ])
235240
0 commit comments