@@ -95,19 +95,23 @@ class DeviceFactory(Generic[Args, V2]):
9595 connected.
9696 """
9797
98- factory : Callable [Args , V2 ]
99- use_factory_name : bool
100- timeout : float
101- mock : bool
102- _skip : SkipType
103- _manager : "DeviceManager"
104-
105- def __init__ (self , factory , use_factory_name , timeout , mock , skip , manager ):
106- if any (
107- p .kind == Parameter .POSITIONAL_ONLY
108- for p in inspect .signature (factory ).parameters .values ()
109- ):
110- raise ValueError (f"{ factory .__name__ } has positional only arguments" )
98+ def __init__ (
99+ self ,
100+ factory : Callable [Args , V2 ],
101+ use_factory_name : bool ,
102+ timeout : float ,
103+ mock : bool ,
104+ skip : SkipType ,
105+ manager : "DeviceManager" ,
106+ ):
107+ for name , param in inspect .signature (factory ).parameters .items ():
108+ if param .kind == Parameter .POSITIONAL_ONLY :
109+ raise ValueError (
110+ f"{ factory .__name__ } has positional only argument '{ name } '"
111+ )
112+ elif param .kind == Parameter .VAR_POSITIONAL :
113+ raise ValueError (f"{ factory .__name__ } has variadic argument '{ name } '" )
114+
111115 self .factory = factory
112116 self .use_factory_name = use_factory_name
113117 self .timeout = timeout
@@ -125,7 +129,11 @@ def name(self) -> str:
125129 def dependencies (self ) -> set [str ]:
126130 """Names of all parameters"""
127131 sig = inspect .signature (self .factory )
128- return {para .name for para in sig .parameters .values ()}
132+ return {
133+ para .name
134+ for para in sig .parameters .values ()
135+ if para .kind is not Parameter .VAR_KEYWORD
136+ }
129137
130138 @cached_property
131139 def optional_dependencies (self ) -> set [str ]:
@@ -135,6 +143,7 @@ def optional_dependencies(self) -> set[str]:
135143 para .name
136144 for para in sig .parameters .values ()
137145 if para .default is not Parameter .empty
146+ and para .kind is not Parameter .VAR_KEYWORD
138147 }
139148
140149 @property
@@ -222,7 +231,7 @@ def dependencies(self) -> set[str]:
222231 sig = inspect .signature (self .post_create )
223232 # first parameter should be the device we've just built
224233 _ , * params = sig .parameters .values ()
225- return {para .name for para in params }
234+ return {para .name for para in params if para . kind is not Parameter . VAR_KEYWORD }
226235
227236 @cached_property
228237 def optional_dependencies (self ) -> set [str ]:
0 commit comments