@@ -331,20 +331,18 @@ def my_handler(data: dict):
331331 """
332332 _empty : _EventSocket = _EventSocket ()
333333 def __init__ (self , fget : Callable , doc : str | None = None ):
334- s = Signature .from_callable (fget )
335- # Remove 'self' from list of parameters
336- self ._sig : Signature = s .replace (parameters = [v for k ,v in s .parameters .items ()
337- if k .lower () != 'self' ])
334+ # Store callable for later signature inspection
335+ self ._callable = fget
338336 # Key: instance of class where this eventsocket instance is used to define a property
339337 # Value: _EventSocket
340338 self ._map = WeakKeyDictionary ()
341339 if doc is None and fget is not None :
342340 doc = fget .__doc__
343341 self .__doc__ = doc
344- def _kw_test (self , sig : Signature ) -> bool :
345- p = sig .parameters
342+ def _kw_test (self , given : Signature , expected : Signature ) -> bool :
343+ p = given .parameters
346344 result = False
347- for k in set (p ).difference (set (self . _sig .parameters )):
345+ for k in set (p ).difference (set (expected .parameters )):
348346 result = True
349347 if p [k ].default is Signature .empty :
350348 return False
@@ -361,10 +359,15 @@ def __set__(self, obj, value):
361359 if not callable (value ):
362360 raise ValueError (f"Connection to non-callable '{ value .__class__ .__name__ } ' object failed" )
363361 # Verify signatures
364- sig = Signature .from_callable (value )
365- if str (sig ) != str (self ._sig ):
362+ expected_sig : Signature = Signature .from_callable (self ._callable , eval_str = True )
363+ # Remove 'self' from list of parameters
364+ expected_sig = expected_sig .replace (parameters = [v for k ,v in expected_sig .parameters .items ()
365+ if k .lower () != 'self' ])
366+
367+ given_sig = Signature .from_callable (value , eval_str = True )
368+ if str (given_sig ) != str (expected_sig ):
366369 # Check if the difference is only in keyword arguments with defaults.
367- if not self ._kw_test (sig ):
370+ if not self ._kw_test (given_sig , expected_sig ):
368371 raise ValueError ("Callable signature does not match the event signature" )
369372 self ._map [obj ] = _EventSocket (value )
370373 def __delete__ (self , obj ):
0 commit comments