Skip to content

Sandbox.delete_by_id 与 DataAPI 在拼数据面 URL 时未合并调用方传入的 config;__get_client() 仍返回无参 SandboxClient #81

@Aqua-Dream

Description

@Aqua-Dream

环境: agentrun-sdk 0.0.30(Python),Linux。

现象

在仅通过代码传入完整 Config(例如 account_idregion、API key相关字段),而在进程环境里设置 AGENTRUN_ACCOUNT_ID 时,对沙箱执行 delete() / delete_by_id 仍会在构造数据面请求 URL 阶段失败,报错类似:

ValueError: account id is not set, please add AGENTRUN_ACCOUNT_ID env variable or set it in code.

原因分析

  1. Sandbox.__get_client() 仍返回无参的 SandboxClient(),其内部的 SandboxDataAPI 实例在构造时 self.config 为空
  2. Sandbox.delete_by_id 的实现为:cls.__get_client().delete_sandbox(sandbox_id, config=config)
  3. agentrun.utils.data_api.DataAPI 中,delete(以及 getpost 等)在组装请求 URL 时调用 self.with_path(path, query=query)把本方法的 config 参数传给 with_path。因此 get_base_url 实际只依赖 API 实例上的 self.config,调用时传入的 config 不参与数据面 base URL 的解析。
  4. 对默认的 SandboxClient() 而言,数据面 API 实例的 self.config 为空,合并后仍无法得到 account_id,从而在 get_data_endpoint()get_account_id() 处抛错。也就是说:delete_sandbox(..., config=...) 里的 config 没有作用到「拼 URL」这一步。

期望行为

凡通过 SandboxClient.delete_sandbox / SandboxDataAPI.delete_sandbox / DataAPI.delete 等方法传入的 config,在解析数据面 base URL 时都应参与合并(与鉴权侧对 config 的使用一致);或 Sandbox.delete_by_id 等入口改为使用 SandboxClient(config=config),而不是依赖无参 __get_client()

建议修复方向(任选其一即可)

  • DataAPI 各 HTTP 封装中把 config 下传,例如:self.with_path(path, query=query, config=config),使 URL 构造使用 Config.with_configs(self.config, config)
  • 或修改 Sandbox.delete_by_id / stop_by_id 等:return SandboxClient(config=config).delete_sandbox(...),避免使用无配置的 __get_client()

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions