@@ -363,12 +363,17 @@ async def trigger_init(self):
363
363
"time_trigger" : {"arg_cnt" : {0 , "*" }, "rep_ok" : True },
364
364
}
365
365
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
+ },
372
377
}
373
378
374
379
for dec in self .decorators :
@@ -414,16 +419,21 @@ async def trigger_init(self):
414
419
415
420
if dec_name not in kwarg_check and dec_kwargs is not None :
416
421
raise TypeError (f"{ exc_mesg } : decorator @{ dec_name } doesn't take keyword arguments" )
422
+ if dec_kwargs is None :
423
+ dec_kwargs = {}
417
424
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 :
421
428
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 } '"
424
430
)
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
+ )
427
437
if dec_name == "service" :
428
438
desc = self .doc_string
429
439
if desc is None or desc == "" :
0 commit comments