(raw: Mapping[str, Any])
| 200 | |
| 201 | |
| 202 | def _build_tools(raw: Mapping[str, Any]) -> ToolsConfig: |
| 203 | tools_data = _as_mapping(raw.get("tools")) |
| 204 | scanner_data = _as_mapping(tools_data.get("scanner")) |
| 205 | scanner_runtime_data = scanner_data |
| 206 | |
| 207 | # Accept the old provider/providers layout for compatibility, but prefer |
| 208 | # the flat scanner config in public-facing docs and templates. |
| 209 | if "providers" in scanner_data or "provider" in scanner_data: |
| 210 | scanner_provider_name = str(scanner_data.get("provider", "xray")).strip() or "xray" |
| 211 | scanner_runtime_data = _as_mapping(_as_mapping(scanner_data.get("providers")).get(scanner_provider_name)) |
| 212 | if not scanner_runtime_data: |
| 213 | scanner_runtime_data = scanner_data |
| 214 | |
| 215 | scanner_provider_config = _build_command_tool_provider( |
| 216 | scanner_runtime_data, |
| 217 | default_executable="xray", |
| 218 | ) |
| 219 | |
| 220 | return ToolsConfig( |
| 221 | terminal=TerminalToolConfig(provider=str(_as_mapping(tools_data.get("terminal")).get("provider", "ssh"))), |
| 222 | web=WebToolConfig(provider=str(_as_mapping(tools_data.get("web")).get("provider", "urllib"))), |
| 223 | scanner=ScannerToolConfig( |
| 224 | executable=scanner_provider_config.executable, |
| 225 | extra_args=scanner_provider_config.extra_args, |
| 226 | env=scanner_provider_config.env, |
| 227 | working_directory=scanner_provider_config.working_directory, |
| 228 | ), |
| 229 | ) |
| 230 | |
| 231 | |
| 232 | def _build_paths(data: Mapping[str, Any]) -> PathsConfig: |
no test coverage detected