@@ -101,36 +101,59 @@ def get_keyword_arguments(self, name):
101101 kw_method = self .__get_keyword (name )
102102 if kw_method is None :
103103 return None
104- args , defaults , varargs , kwargs = self .__get_arg_spec (kw_method )
105- if robot_version >= '3.2' :
106- args += self .__new_default_spec (defaults )
107- else :
104+ args , defaults , varargs , kwargs , kwonlydefaults = self .__get_arg_spec (kw_method )
105+ if self .__rf_31 :
108106 args += self .__old_default_spec (defaults )
107+ else :
108+ args += self .__new_default_spec (defaults )
109109 if varargs :
110110 args .append ('*%s' % varargs )
111111 if kwargs :
112112 args .append ('**%s' % kwargs )
113+ if kwonlydefaults :
114+ args += self .__kwonlydefaults_spec (kwonlydefaults )
113115 return args
114116
117+ @property
118+ def __rf_31 (self ):
119+ return robot_version < '3.2'
120+
115121 def __new_default_spec (self , defaults ):
116122 return [(name , value ) for name , value in defaults ]
117123
118124 def __old_default_spec (self , defaults ):
119125 return ['{}={}' .format (name , value ) for name , value in defaults ]
120126
127+ def __kwonlydefaults_spec (self , kwonlydefaults ):
128+ args = []
129+ for argument , default_value in kwonlydefaults .items ():
130+ if self .__rf_31 :
131+ args .append (self .__old_kwonlydefaults_spec (argument , default_value ))
132+ else :
133+ args .append (self .__new_kwonlydefaults_spec (argument , default_value ))
134+ return args
135+
136+ def __new_kwonlydefaults_spec (self , argument , default_value ):
137+ return (argument , default_value )
138+
139+ def __old_kwonlydefaults_spec (self , argument , default_value ):
140+ return '%s=%s' % (argument , default_value )
141+
121142 def __get_arg_spec (self , kw ):
122143 if PY2 :
123144 spec = inspect .getargspec (kw )
124145 keywords = spec .keywords
146+ kwonlydefaults = {}
125147 else :
126148 spec = inspect .getfullargspec (kw )
127149 keywords = spec .varkw
150+ kwonlydefaults = spec .kwonlydefaults
128151 args = spec .args [1 :] if inspect .ismethod (kw ) else spec .args # drop self
129152 defaults = spec .defaults or ()
130153 nargs = len (args ) - len (defaults )
131154 mandatory = args [:nargs ]
132155 defaults = zip (args [nargs :], defaults )
133- return mandatory , defaults , spec .varargs , keywords
156+ return mandatory , defaults , spec .varargs , keywords , kwonlydefaults
134157
135158 def get_keyword_tags (self , name ):
136159 self .__get_keyword_tags_supported = True
@@ -181,7 +204,7 @@ def __get_typing_hints(self, method):
181204 return hints
182205
183206 def __join_defaults_with_types (self , method , types ):
184- _ , defaults , _ , _ = self .__get_arg_spec (method )
207+ _ , defaults , _ , _ , _ = self .__get_arg_spec (method )
185208 for name , value in defaults :
186209 if name not in types and isinstance (value , (bool , type (None ))):
187210 types [name ] = type (value )
0 commit comments