@@ -363,12 +363,17 @@ async def trigger_init(self):
363363 "time_trigger" : {"arg_cnt" : {0 , "*" }, "rep_ok" : True },
364364 }
365365 kwarg_check = {
366- "event_trigger" : {"kwargs" },
367- "mqtt_trigger" : {"kwargs" },
368- "time_trigger" : {"kwargs" },
369- "task_unique" : {"kill_me" },
370- "time_active" : {"hold_off" },
371- "state_trigger" : {"kwargs" , "state_hold" , "state_check_now" , "state_hold_false" },
366+ "event_trigger" : {"kwargs" : {dict }},
367+ "mqtt_trigger" : {"kwargs" : {dict }},
368+ "time_trigger" : {"kwargs" : {dict }},
369+ "task_unique" : {"kill_me" : {bool , int }},
370+ "time_active" : {"hold_off" : {int , float }},
371+ "state_trigger" : {
372+ "kwargs" : {dict },
373+ "state_hold" : {int , float },
374+ "state_check_now" : {bool , int },
375+ "state_hold_false" : {int , float },
376+ },
372377 }
373378
374379 for dec in self .decorators :
@@ -414,16 +419,21 @@ async def trigger_init(self):
414419
415420 if dec_name not in kwarg_check and dec_kwargs is not None :
416421 raise TypeError (f"{ exc_mesg } : decorator @{ dec_name } doesn't take keyword arguments" )
422+ if dec_kwargs is None :
423+ dec_kwargs = {}
417424 if dec_name in kwarg_check :
418- if dec_kwargs is not None :
419- used_kw = set ( dec_kwargs .keys ())
420- if not used_kw . issubset ( kwarg_check [ dec_name ]) :
425+ allowed = kwarg_check [ dec_name ]
426+ for arg , value in dec_kwargs .items ():
427+ if arg not in allowed :
421428 raise TypeError (
422- f"{ exc_mesg } : decorator @{ dec_name } valid keyword arguments are: "
423- + ", " .join (sorted (kwarg_check [dec_name ]))
429+ f"{ exc_mesg } : decorator @{ dec_name } invalid keyword argument '{ arg } '"
424430 )
425- if dec_kwargs is None :
426- dec_kwargs = {}
431+ if value is None or type (value ) in allowed [arg ]:
432+ continue
433+ ok_types = " or " .join (sorted ([t .__name__ for t in allowed [arg ]]))
434+ raise TypeError (
435+ f"{ exc_mesg } : decorator @{ dec_name } keyword '{ arg } ' should be type { ok_types } "
436+ )
427437 if dec_name == "service" :
428438 desc = self .doc_string
429439 if desc is None or desc == "" :
0 commit comments