fix(agent): expose network context
Server CI/CD / docker-image (push) Successful in 16s
Server CI/CD / deploy-fallback-log (push) Has been skipped

This commit is contained in:
2026-07-08 18:41:56 +08:00
parent 5a91da0904
commit 76cf6c32bc
4 changed files with 22 additions and 2 deletions
+2
View File
@@ -20,6 +20,7 @@ class AgentAuthContextResponse(BaseModel):
role: str role: str
is_superuser: bool is_superuser: bool
project_id: str project_id: str
network: str
project_role: str project_role: str
token_expires_at: str | None = None token_expires_at: str | None = None
@@ -43,6 +44,7 @@ async def get_agent_auth_context(
role=current_user.role, role=current_user.role,
is_superuser=current_user.is_superuser, is_superuser=current_user.is_superuser,
project_id=str(ctx.project_id), project_id=str(ctx.project_id),
network=ctx.project_code,
project_role=ctx.project_role, project_role=ctx.project_role,
token_expires_at=token_expires_at, token_expires_at=token_expires_at,
) )
+2
View File
@@ -25,6 +25,7 @@ logger = logging.getLogger(__name__)
@dataclass(frozen=True) @dataclass(frozen=True)
class ProjectContext: class ProjectContext:
project_id: UUID project_id: UUID
project_code: str
user_id: UUID user_id: UUID
project_role: str project_role: str
@@ -85,6 +86,7 @@ async def get_project_context(
return ProjectContext( return ProjectContext(
project_id=project.id, project_id=project.id,
project_code=project.code,
user_id=user.id, user_id=user.id,
project_role=membership_role, project_role=membership_role,
) )
+16 -2
View File
@@ -404,6 +404,14 @@ def _parse_response_body(response: requests.Response) -> Any:
return {} return {}
def _with_network_param(params: dict[str, Any] | None, network: str) -> dict[str, Any]:
params = dict(params or {})
if "network" in params or "network_name" in params or "name" in params:
return params
params["network"] = network
return params
def request_json( def request_json(
ctx: RuntimeContext, ctx: RuntimeContext,
*, *,
@@ -417,10 +425,13 @@ def request_json(
require_username_ctx: bool = False, require_username_ctx: bool = False,
) -> tuple[Any, int]: ) -> tuple[Any, int]:
require_server(ctx) require_server(ctx)
network = None
if require_network_ctx: if require_network_ctx:
require_network(ctx) network = require_network(ctx)
if require_username_ctx: if require_username_ctx:
require_username(ctx) require_username(ctx)
if network and (params is not None or json_body is None):
params = _with_network_param(params, network)
url = f"{require_server(ctx)}/api/v1{path}" url = f"{require_server(ctx)}/api/v1{path}"
headers = build_headers(ctx, require_auth=require_auth, require_project=require_project) headers = build_headers(ctx, require_auth=require_auth, require_project=require_project)
@@ -474,8 +485,11 @@ def request_bytes(
require_network_ctx: bool = False, require_network_ctx: bool = False,
) -> tuple[bytes, int]: ) -> tuple[bytes, int]:
require_server(ctx) require_server(ctx)
network = None
if require_network_ctx: if require_network_ctx:
require_network(ctx) network = require_network(ctx)
if network:
params = _with_network_param(params, network)
url = f"{require_server(ctx)}/api/v1{path}" url = f"{require_server(ctx)}/api/v1{path}"
headers = build_headers(ctx, require_auth=require_auth, require_project=require_project) headers = build_headers(ctx, require_auth=require_auth, require_project=require_project)
+2
View File
@@ -28,6 +28,7 @@ def test_agent_auth_context_returns_metadata_user_and_project_context():
client = _build_client( client = _build_client(
project_context=ProjectContext( project_context=ProjectContext(
project_id=project_id, project_id=project_id,
project_code="fengyang",
user_id=user_id, user_id=user_id,
project_role="editor", project_role="editor",
), ),
@@ -50,6 +51,7 @@ def test_agent_auth_context_returns_metadata_user_and_project_context():
"role": "user", "role": "user",
"is_superuser": False, "is_superuser": False,
"project_id": str(project_id), "project_id": str(project_id),
"network": "fengyang",
"project_role": "editor", "project_role": "editor",
"token_expires_at": "2026-06-11T13:10:00+00:00", "token_expires_at": "2026-06-11T13:10:00+00:00",
} }