@@ -190,13 +190,18 @@ def service_has_service(cls, domain, name):
190190 async def service_call (cls , domain , name , ** kwargs ):
191191 """Implement service.call()."""
192192 curr_task = asyncio .current_task ()
193- if "context" in kwargs and isinstance (kwargs ["context" ], Context ):
194- context = kwargs ["context" ]
195- del kwargs ["context" ]
196- else :
197- context = cls .task2context .get (curr_task , None )
198-
199- await cls .hass .services .async_call (domain , name , kwargs , context = context )
193+ hass_args = {}
194+ for keyword , typ , default in [
195+ ("context" , [Context ], cls .task2context .get (curr_task , None )),
196+ ("blocking" , [bool ], None ),
197+ ("limit" , [float , int ], None ),
198+ ]:
199+ if keyword in kwargs and type (kwargs [keyword ]) in typ :
200+ hass_args [keyword ] = kwargs .pop (keyword )
201+ elif default :
202+ hass_args [keyword ] = default
203+
204+ await cls .hass .services .async_call (domain , name , kwargs , ** hass_args )
200205
201206 @classmethod
202207 async def service_completions (cls , root ):
@@ -255,15 +260,21 @@ def get(cls, name):
255260 def service_call_factory (domain , service ):
256261 async def service_call (* args , ** kwargs ):
257262 curr_task = asyncio .current_task ()
258- if "context" in kwargs and isinstance (kwargs ["context" ], Context ):
259- context = kwargs ["context" ]
260- del kwargs ["context" ]
261- else :
262- context = cls .task2context .get (curr_task , None )
263+ hass_args = {}
264+ for keyword , typ , default in [
265+ ("context" , [Context ], cls .task2context .get (curr_task , None )),
266+ ("blocking" , [bool ], None ),
267+ ("limit" , [float , int ], None ),
268+ ]:
269+ if keyword in kwargs and type (kwargs [keyword ]) in typ :
270+ hass_args [keyword ] = kwargs .pop (keyword )
271+ elif default :
272+ hass_args [keyword ] = default
263273
264274 if len (args ) != 0 :
265275 raise (TypeError , f"service { domain } .{ service } takes no positional arguments" )
266- await cls .hass .services .async_call (domain , service , kwargs , context = context )
276+
277+ await cls .hass .services .async_call (domain , service , kwargs , ** hass_args )
267278
268279 return service_call
269280
0 commit comments