From 3ffc10be9210127cca6e10b2aabfff71effb8524 Mon Sep 17 00:00:00 2001 From: "qwen.ai[bot]" Date: Sat, 25 Apr 2026 12:28:01 +0000 Subject: [PATCH] update branch --- .gitignore | 79 +++++++++++++++--- oss/config/config.py | 2 +- oss/plugin/__pycache__/loader.cpython-312.pyc | Bin 5086 -> 5086 bytes store/@{FutureOSS}/auto-dependency/main.py | 9 +- store/@{FutureOSS}/dashboard/main.py | 12 ++- store/@{FutureOSS}/hot-reload/main.py | 2 +- store/@{FutureOSS}/http-api/events.py | 3 +- store/@{FutureOSS}/http-tcp/server.py | 3 +- store/@{FutureOSS}/log-terminal/main.py | 32 ++++--- store/@{FutureOSS}/pkg-manager/main.py | 10 ++- store/@{FutureOSS}/plugin-bridge/main.py | 3 +- .../plugin-loader-pro/core/enhancer.py | 4 +- .../plugin-loader-pro/core/manager.py | 10 +-- .../plugin-loader-pro/fallback/handler.py | 4 +- .../plugin-loader-pro/recovery/auto_fix.py | 2 +- .../plugin-loader-pro/recovery/health.py | 2 +- .../__pycache__/main.cpython-312.pyc | Bin 48216 -> 49372 bytes store/@{FutureOSS}/plugin-loader/main.py | 18 ++-- store/@{FutureOSS}/plugin-storage/main.py | 12 +-- 19 files changed, 147 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index 483ad90..de0c399 100644 --- a/.gitignore +++ b/.gitignore @@ -4,23 +4,82 @@ __pycache__/ *.pyc *.pyo *.pyd +.Python +env/ +venv/ +.venv/ +pip-log.txt +pip-delete-this-directory.txt +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.log +*.pot +*.mo +MoeMyanmar-* +!MoeMyanmar-*/**/*.py +!MoeMyanmar-*/**/*.txt +!MoeMyanmar-*/**/*.md +!MoeMyanmar-*/**/*.json +!MoeMyanmar-*/**/*.yml +!MoeMyanmar-*/**/*.yaml +julia-*/ +zig*/ # Dependencies -.venv/ -venv/ +node_modules/ +target/ +.gradle/ +.mypy_cache/ +.pytest_cache/ +.hypothesis/ + +# Distribution / packaging +.Python +_build/ +buck-out/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo + +# System +.DS_Store +Thumbs.db .env .env.local *.env.* -# Editors -.vscode/ -.idea/ - # Logs *.log -# Build artifacts -dist/ -build/ -target/ +# Coverage +coverage/ +htmlcov/ +.coverage + +# Temporary files +*.tmp +*.temp ``` \ No newline at end of file diff --git a/oss/config/config.py b/oss/config/config.py index 5d1df84..af88216 100644 --- a/oss/config/config.py +++ b/oss/config/config.py @@ -64,7 +64,7 @@ class Config: if key in self.DEFAULTS: self._config[key] = value except Exception as e: - print(f"[Config] 加载配置文件失败:{e}") + print(f"[Config] 加载配置文件失败:{type(e).__name__}: {e}") def _load_from_env(self): """从环境变量加载""" diff --git a/oss/plugin/__pycache__/loader.cpython-312.pyc b/oss/plugin/__pycache__/loader.cpython-312.pyc index 4c0616ddfead15e3207d8ba2288eaefc5aa08bde..88babbec7dae0acf7459c9bb140001694329e2cd 100644 GIT binary patch delta 19 Zcmcboeovk2G%qg~0}$k{-^g`E7yvwS1;PLT delta 19 Zcmcboeovk2G%qg~0}$lT+Q@Z97yvvK1+M@A diff --git a/store/@{FutureOSS}/auto-dependency/main.py b/store/@{FutureOSS}/auto-dependency/main.py index a9b7088..a618f47 100644 --- a/store/@{FutureOSS}/auto-dependency/main.py +++ b/store/@{FutureOSS}/auto-dependency/main.py @@ -86,7 +86,8 @@ class SystemDependencyChecker: timeout=30 ) return result.returncode == 0 - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return False @@ -144,7 +145,8 @@ class SystemDependencyChecker: timeout=300 ) return result.returncode == 0 - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return False @@ -249,7 +251,8 @@ class AutoDependencyPlugin(Plugin): "manifest": manifest, "system_dependencies": system_deps }) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() continue return results diff --git a/store/@{FutureOSS}/dashboard/main.py b/store/@{FutureOSS}/dashboard/main.py index 784884e..3511e92 100644 --- a/store/@{FutureOSS}/dashboard/main.py +++ b/store/@{FutureOSS}/dashboard/main.py @@ -89,7 +89,8 @@ class DashboardPlugin(Plugin): sent_rate = (net.bytes_sent - self._last_net[2]) / elapsed self._last_net = (now, net.bytes_recv, net.bytes_sent) return {'recv_rate': round(recv_rate, 1), 'sent_rate': round(sent_rate, 1), 'total_recv': net.bytes_recv, 'total_sent': net.bytes_sent} - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return {'recv_rate': 0, 'sent_rate': 0, 'total_recv': 0, 'total_sent': 0} def _get_disk_io_stats(self): @@ -107,7 +108,8 @@ class DashboardPlugin(Plugin): write_rate = (disk_io.write_bytes - self._last_disk[2]) / elapsed self._last_disk = (now, disk_io.read_bytes, disk_io.write_bytes) return {'read_rate': round(read_rate, 1), 'write_rate': round(write_rate, 1)} - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return {'read_rate': 0, 'write_rate': 0} def _get_network_latency(self) -> float: @@ -120,7 +122,8 @@ class DashboardPlugin(Plugin): elapsed = (time.time() - start) * 1000 # 毫秒 s.close() return round(elapsed, 1) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return 0.0 def _get_network_interfaces(self): @@ -142,7 +145,8 @@ class DashboardPlugin(Plugin): info['speed'] = stats[name].speed interfaces.append(info) return interfaces - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return [] def _get_load_info(self): diff --git a/store/@{FutureOSS}/hot-reload/main.py b/store/@{FutureOSS}/hot-reload/main.py index a0066d1..7ec6fef 100644 --- a/store/@{FutureOSS}/hot-reload/main.py +++ b/store/@{FutureOSS}/hot-reload/main.py @@ -139,7 +139,7 @@ class HotReloadPlugin(Plugin): elif change_type == "deleted": self.unload_plugin(plugin_name) except Exception as e: - Log.error("hot-reload", f"处理变化失败: {e}") + Log.error("hot-reload", f"处理变化失败: {type(e).__name__}: {e}") def load_plugin(self, plugin_dir: Path) -> bool: """运行时加载插件""" diff --git a/store/@{FutureOSS}/http-api/events.py b/store/@{FutureOSS}/http-api/events.py index 63ad4d3..f1e531e 100644 --- a/store/@{FutureOSS}/http-api/events.py +++ b/store/@{FutureOSS}/http-api/events.py @@ -39,7 +39,8 @@ class HttpEventBus: for handler in handlers: try: handler(event) - except Exception: + except Exception as e: + import traceback; print(f"[events.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass def clear(self): diff --git a/store/@{FutureOSS}/http-tcp/server.py b/store/@{FutureOSS}/http-tcp/server.py index f519520..b523713 100644 --- a/store/@{FutureOSS}/http-tcp/server.py +++ b/store/@{FutureOSS}/http-tcp/server.py @@ -192,8 +192,9 @@ class TcpHttpServer: return None except ValueError: return None - except Exception: + except Exception as e: # 其他解析错误 + import traceback; print(f"[http-tcp] HTTP 解析失败:{type(e).__name__}: {e}"); traceback.print_exc() return None def _format_response(self, response: dict) -> bytes: diff --git a/store/@{FutureOSS}/log-terminal/main.py b/store/@{FutureOSS}/log-terminal/main.py index 68a1759..a557fd5 100644 --- a/store/@{FutureOSS}/log-terminal/main.py +++ b/store/@{FutureOSS}/log-terminal/main.py @@ -151,7 +151,8 @@ class LogTerminalPlugin(Plugin): try: if 'process' in session: session['process'].terminate() - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass self._ssh_sessions.clear() @@ -192,13 +193,14 @@ class LogTerminalPlugin(Plugin): if line: self.add_log_entry("info", "system", line) except Exception as e: - pass + import traceback + traceback.print_exc() # 等待下一次同步 time.sleep(2) except Exception as e: - Log.error("log-terminal", f"日志同步线程异常: {e}") + Log.error("log-terminal", f"日志同步线程异常: {type(e).__name__}: {e}") def add_log_entry(self, level: str, tag: str, message: str): """向日志缓冲区添加日志条目""" @@ -226,7 +228,8 @@ class LogTerminalPlugin(Plugin): try: result = subprocess.run(['which', 'sshd'], capture_output=True, text=True, timeout=5) return result.returncode == 0 - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return False def _install_ssh(self): @@ -264,7 +267,7 @@ class LogTerminalPlugin(Plugin): Log.error("log-terminal", "未找到支持的包管理器") return False except Exception as e: - Log.error("log-terminal", f"安装 SSH 服务时出错: {e}") + Log.error("log-terminal", f"安装 SSH 服务时出错: {type(e).__name__}: {e}") return False def _start_ssh_server(self, port=8022): @@ -290,7 +293,7 @@ class LogTerminalPlugin(Plugin): Log.error("log-terminal", "SSH 服务器启动失败") return False except Exception as e: - Log.error("log-terminal", f"启动 SSH 服务器时出错: {e}") + Log.error("log-terminal", f"启动 SSH 服务器时出错: {type(e).__name__}: {e}") return False def _handle_connect_ssh(self, request): @@ -357,7 +360,7 @@ class LogTerminalPlugin(Plugin): }) ) except Exception as e: - Log.error("log-terminal", f"创建终端会话失败: {e}") + Log.error("log-terminal", f"创建终端会话失败: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -365,7 +368,7 @@ class LogTerminalPlugin(Plugin): ) except Exception as e: - Log.error("log-terminal", f"SSH 连接请求异常: {e}") + Log.error("log-terminal", f"SSH 连接请求异常: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -402,7 +405,8 @@ class LogTerminalPlugin(Plugin): if not line: break output += line - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return Response( @@ -414,7 +418,7 @@ class LogTerminalPlugin(Plugin): }) ) except Exception as e: - Log.error("log-terminal", f"发送命令时出错: {e}") + Log.error("log-terminal", f"发送命令时出错: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -431,7 +435,8 @@ class LogTerminalPlugin(Plugin): session = self._ssh_sessions[session_id] try: session['process'].terminate() - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass del self._ssh_sessions[session_id] Log.info("log-terminal", f"SSH 终端会话 #{session_id} 已断开") @@ -447,7 +452,7 @@ class LogTerminalPlugin(Plugin): body=json.dumps({'success': False, 'error': '会话不存在'}) ) except Exception as e: - Log.error("log-terminal", f"断开连接时出错: {e}") + Log.error("log-terminal", f"断开连接时出错: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -545,7 +550,8 @@ class LogTerminalPlugin(Plugin): 'tag': 'system', 'message': line }) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return logs[-limit:] diff --git a/store/@{FutureOSS}/pkg-manager/main.py b/store/@{FutureOSS}/pkg-manager/main.py index 167326a..70f3022 100644 --- a/store/@{FutureOSS}/pkg-manager/main.py +++ b/store/@{FutureOSS}/pkg-manager/main.py @@ -393,7 +393,8 @@ class PkgManagerPlugin(Plugin): with _gitee_request(author_url, timeout=15) as resp: plugin_dirs = json.loads(resp.read().decode("utf-8")) break - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() if attempt < 2: time.sleep(1 + attempt) continue @@ -413,7 +414,8 @@ class PkgManagerPlugin(Plugin): with _gitee_request(manifest_url, timeout=15) as resp: manifest = json.loads(resp.read().decode("utf-8")) break - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() if attempt < 2: time.sleep(1 + attempt) continue @@ -433,7 +435,7 @@ class PkgManagerPlugin(Plugin): self._remote_cache = plugins self._cache_time = now except Exception as e: - Log.error("pkg-manager", f"获取远程插件列表失败: {e}") + Log.error("pkg-manager", f"获取远程插件列表失败: {type(e).__name__}: {e}") return plugins @@ -472,7 +474,7 @@ class PkgManagerPlugin(Plugin): Log.info("pkg-manager", f"已安装: {author}/{plugin_name}") return True except Exception as e: - Log.error("pkg-manager", f"安装失败 {plugin_name}: {e}") + Log.error("pkg-manager", f"安装失败 {plugin_name}: {type(e).__name__}: {e}") if install_dir.exists(): shutil.rmtree(install_dir) return False diff --git a/store/@{FutureOSS}/plugin-bridge/main.py b/store/@{FutureOSS}/plugin-bridge/main.py index f20ae22..ec4d130 100644 --- a/store/@{FutureOSS}/plugin-bridge/main.py +++ b/store/@{FutureOSS}/plugin-bridge/main.py @@ -30,7 +30,8 @@ class EventBus: for handler in handlers + wildcard_handlers: try: handler(event) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass def on(self, event_type: str, handler: Callable): diff --git a/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py b/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py index 5ff45be..77d2fc2 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py +++ b/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py @@ -104,7 +104,7 @@ class PluginLoaderEnhancer: try: getattr(instance, method)() except Exception as e: - ProLogger.error("safe", f"{name} {action}失败: {e}") + ProLogger.error("safe", f"{name} {action}失败: {type(e).__name__}: {e}") self._on_plugin_error(name, info, str(e)) return @@ -117,7 +117,7 @@ class PluginLoaderEnhancer: info["info"].error_count = 0 ProLogger.info("safe", f"{name} {action}成功") except Exception as e: - ProLogger.error("safe", f"{name} {action}失败: {e}") + ProLogger.error("safe", f"{name} {action}失败: {type(e).__name__}: {e}") self._on_plugin_error(name, info, str(e)) def _on_plugin_error(self, name: str, info: dict, error: str): diff --git a/store/@{FutureOSS}/plugin-loader-pro/core/manager.py b/store/@{FutureOSS}/plugin-loader-pro/core/manager.py index c53c938..f9e5e2b 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/core/manager.py +++ b/store/@{FutureOSS}/plugin-loader-pro/core/manager.py @@ -128,7 +128,7 @@ class ProPluginManager: return instance except Exception as e: - ProLogger.error("loader", f"加载失败 {plugin_dir.name}: {e}") + ProLogger.error("loader", f"加载失败 {plugin_dir.name}: {type(e).__name__}: {e}") return None def init_and_start_all(self): @@ -160,7 +160,7 @@ class ProPluginManager: info["info"].status = "initialized" ProLogger.info("manager", f"已初始化: {name}") except Exception as e: - ProLogger.error("manager", f"初始化失败 {name}: {e}") + ProLogger.error("manager", f"初始化失败 {name}: {type(e).__name__}: {e}") info["info"].status = "error" info["info"].error_count += 1 info["info"].last_error = str(e) @@ -177,7 +177,7 @@ class ProPluginManager: self._health_checker.add_plugin(name, instance) ProLogger.info("manager", f"已启动: {name}") except Exception as e: - ProLogger.error("manager", f"启动失败 {name}: {e}") + ProLogger.error("manager", f"启动失败 {name}: {type(e).__name__}: {e}") info["info"].status = "error" info["info"].error_count += 1 info["info"].last_error = str(e) @@ -199,7 +199,7 @@ class ProPluginManager: info["info"].status = "stopped" ProLogger.info("manager", f"已停止: {name}") except Exception as e: - ProLogger.warn("manager", f"停止异常 {name}: {e}") + ProLogger.warn("manager", f"停止异常 {name}: {type(e).__name__}: {e}") def _on_plugin_failure(self, name: str): """插件失败回调""" @@ -249,7 +249,7 @@ class ProPluginManager: getattr(info["instance"], setter)(dep_instance) ProLogger.info("inject", f"{name} <- {actual_dep}") except Exception as e: - ProLogger.error("inject", f"注入失败 {name}.{setter}: {e}") + ProLogger.error("inject", f"注入失败 {name}.{setter}: {type(e).__name__}: {e}") def _get_ordered_plugins(self) -> list[str]: """获取插件顺序""" diff --git a/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py b/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py index eac6af8..92ddf57 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py +++ b/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py @@ -29,7 +29,7 @@ class FallbackHandler: self._cache[plugin_name] = result return result except Exception as e: - ProLogger.warn("fallback", f"插件 {plugin_name} 执行失败,触发降级: {e}") + ProLogger.warn("fallback", f"插件 {plugin_name} 执行失败,触发降级: {type(e).__name__}: {e}") return self._apply_fallback(plugin_name) def _apply_fallback(self, plugin_name: str) -> Any: @@ -45,5 +45,5 @@ class FallbackHandler: try: return self.alternative_func() except Exception as e: - ProLogger.error("fallback", f"备选方案也失败了: {e}") + ProLogger.error("fallback", f"备选方案也失败了: {type(e).__name__}: {e}") return None diff --git a/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py b/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py index 33fcff2..fbd25f5 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py +++ b/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py @@ -46,7 +46,7 @@ class AutoRecovery: return new_instance except Exception as e: - ProLogger.error("recovery", f"恢复插件 {name} 失败: {e}") + ProLogger.error("recovery", f"恢复插件 {name} 失败: {type(e).__name__}: {e}") self._recovery_attempts[name] = attempts + 1 return False diff --git a/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py b/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py index bd0e577..44b84bd 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py +++ b/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py @@ -55,7 +55,7 @@ class HealthChecker: else: self._failure_counts[name] = 0 except Exception as e: - ProLogger.error("health", f"插件 {name} 健康检查失败: {e}") + ProLogger.error("health", f"插件 {name} 健康检查失败: {type(e).__name__}: {e}") self._on_failure(name) def _on_failure(self, name: str): diff --git a/store/@{FutureOSS}/plugin-loader/__pycache__/main.cpython-312.pyc b/store/@{FutureOSS}/plugin-loader/__pycache__/main.cpython-312.pyc index ecd1293a4bb5eae543a8f816467cbf24d7975dea..d140b0562b32eb90edc2e389cfac74bb6e539b82 100644 GIT binary patch delta 4374 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 Optional[PluginInfo]: @@ -667,4 +675,4 @@ register_plugin_type("PLInjector", PLInjector) def New(): - return PluginLoaderPlugin() \ No newline at end of file + return PluginLoaderPlugin() diff --git a/store/@{FutureOSS}/plugin-storage/main.py b/store/@{FutureOSS}/plugin-storage/main.py index b05048a..c32e4eb 100644 --- a/store/@{FutureOSS}/plugin-storage/main.py +++ b/store/@{FutureOSS}/plugin-storage/main.py @@ -124,7 +124,7 @@ class PluginStorage: with open(file_path, mode, encoding="utf-8" if mode == "r" else None) as f: return f.read() except Exception as e: - Log.error("plugin-storage", f"读取文件失败 {self.plugin_name}/{path}: {e}") + Log.error("plugin-storage", f"读取文件失败 {self.plugin_name}/{path}: {type(e).__name__}: {e}") return None def write_file(self, path: str, content: str | bytes): @@ -144,7 +144,7 @@ class PluginStorage: with open(file_path, "w", encoding="utf-8") as f: f.write(content) except Exception as e: - Log.error("plugin-storage", f"写入文件失败 {self.plugin_name}/{path}: {e}") + Log.error("plugin-storage", f"写入文件失败 {self.plugin_name}/{path}: {type(e).__name__}: {e}") def delete_file(self, path: str) -> bool: """删除插件目录内的文件""" @@ -155,7 +155,7 @@ class PluginStorage: return True return False except Exception as e: - Log.error("plugin-storage", f"删除文件失败 {self.plugin_name}/{path}: {e}") + Log.error("plugin-storage", f"删除文件失败 {self.plugin_name}/{path}: {type(e).__name__}: {e}") return False def list_files(self, prefix: str = "") -> list[str]: @@ -176,7 +176,8 @@ class PluginStorage: if f.is_file(): files.append(str(f.relative_to(self.data_dir))) return sorted(files) - except Exception: + except Exception as e: + Log.error("plugin-storage", f"列出文件失败:{type(e).__name__}: {e}") return [] def file_exists(self, path: str) -> bool: @@ -184,7 +185,8 @@ class PluginStorage: try: file_path = self._resolve_path(path) return file_path.exists() and file_path.is_file() - except Exception: + except Exception as e: + Log.error("plugin-storage", f"检查文件存在性失败:{type(e).__name__}: {e}") return False def serve_file(self, path: str) -> Response: