MCPcopy Create free account
hub / github.com/SeleniumHQ/selenium / CddlCommand

Class CddlCommand

py/generate_bidi.py:184–412  ·  view source on GitHub ↗

Represents a CDDL command definition.

Source from the content-addressed store, hash-verified

182
183@dataclass
184class CddlCommand:
185 """Represents a CDDL command definition."""
186
187 module: str
188 name: str
189 params: dict[str, str] = field(default_factory=dict)
190 required_params: set[str] = field(default_factory=set)
191 result: str | None = None
192 description: str = ""
193
194 def to_python_method(self, enhancements: dict[str, Any] | None = None) -> str:
195 """Generate Python method code for this command.
196
197 Args:
198 enhancements: Dictionary with enhancement rules for this method
199 """
200 enhancements = enhancements or {}
201 method_name = self._camel_to_snake(self.name)
202
203 # Build parameter list with type hints
204 # Check if there's a params_override for user-friendly named arguments
205 params_to_use = self.params
206 if "params_override" in enhancements:
207 params_to_use = enhancements["params_override"]
208
209 param_strs = []
210 param_names = [] # Keep track of parameter names for later use
211 for param_name, param_type in params_to_use.items():
212 if param_type in ["bool", "str", "int"]:
213 python_type = param_type
214 else:
215 python_type = CddlType.get_annotation(param_type)
216 snake_param = self._camel_to_snake(param_name)
217 param_names.append((param_name, snake_param))
218 param_strs.append(f"{snake_param}: {python_type} | None = None")
219
220 if param_strs:
221 # Check if full signature would exceed line length limit (120 chars)
222 single_line_signature = f" def {method_name}(self, {', '.join(param_strs)}):"
223 if len(single_line_signature) > 120:
224 # Format parameters on multiple lines
225 body = f" def {method_name}(\n"
226 body += " self,\n"
227 for i, param_str in enumerate(param_strs):
228 if i < len(param_strs) - 1:
229 body += f" {param_str},\n"
230 else:
231 body += f" {param_str},\n"
232 body += " ):\n"
233 else:
234 param_list = "self, " + ", ".join(param_strs)
235 body = f" def {method_name}({param_list}):\n"
236 else:
237 body = f" def {method_name}(self):\n"
238 docstring = enhancements.get("docstring") or self.description or f"Execute {self.module}.{self.name}."
239 body += _emit_docstring(docstring, 8)
240
241 # Add automatic validation for required parameters

Callers 1

_extract_commandsMethod · 0.85

Calls 1

fieldFunction · 0.50

Tested by

no test coverage detected