|
7 | 7 |
|
8 | 8 | import warnings |
9 | 9 | from typing import Any, List |
| 10 | +from urllib.parse import quote |
10 | 11 |
|
11 | 12 | from ..common._base_service import BaseService |
12 | 13 | from ..common._bindings import resource_override |
@@ -183,7 +184,7 @@ def retrieve( |
183 | 184 | "remote_a2a.retrieve is experimental and subject to change.", |
184 | 185 | stacklevel=2, |
185 | 186 | ) |
186 | | - spec = self._retrieve_spec(slug=slug, folder_path=folder_path) |
| 187 | + spec = self._retrieve_spec(identifier=slug, folder_path=folder_path) |
187 | 188 | response = self.request( |
188 | 189 | spec.method, |
189 | 190 | url=spec.endpoint, |
@@ -229,7 +230,67 @@ async def main(): |
229 | 230 | "remote_a2a.retrieve_async is experimental and subject to change.", |
230 | 231 | stacklevel=2, |
231 | 232 | ) |
232 | | - spec = self._retrieve_spec(slug=slug, folder_path=folder_path) |
| 233 | + spec = self._retrieve_spec(identifier=slug, folder_path=folder_path) |
| 234 | + response = await self.request_async( |
| 235 | + spec.method, |
| 236 | + url=spec.endpoint, |
| 237 | + params=spec.params, |
| 238 | + headers=spec.headers, |
| 239 | + ) |
| 240 | + return RemoteA2aAgent.model_validate(response.json()) |
| 241 | + |
| 242 | + @resource_override( |
| 243 | + resource_type="remoteA2aAgent", |
| 244 | + resource_identifier="name", |
| 245 | + legacy_resource_identifier="legacy_slug", |
| 246 | + ) |
| 247 | + def retrieve_by_name( |
| 248 | + self, |
| 249 | + name: str, |
| 250 | + *, |
| 251 | + legacy_slug: str | None = None, |
| 252 | + folder_path: str | None = None, |
| 253 | + ) -> RemoteA2aAgent: |
| 254 | + """Retrieve a Remote A2A agent by its display name. |
| 255 | +
|
| 256 | + ``legacy_slug`` supports already-deployed slug-keyed bindings during |
| 257 | + the name-identity transition. |
| 258 | + """ |
| 259 | + warnings.warn( |
| 260 | + "remote_a2a.retrieve_by_name is experimental and subject to change.", |
| 261 | + stacklevel=2, |
| 262 | + ) |
| 263 | + spec = self._retrieve_spec(identifier=name, folder_path=folder_path) |
| 264 | + response = self.request( |
| 265 | + spec.method, |
| 266 | + url=spec.endpoint, |
| 267 | + params=spec.params, |
| 268 | + headers=spec.headers, |
| 269 | + ) |
| 270 | + return RemoteA2aAgent.model_validate(response.json()) |
| 271 | + |
| 272 | + @resource_override( |
| 273 | + resource_type="remoteA2aAgent", |
| 274 | + resource_identifier="name", |
| 275 | + legacy_resource_identifier="legacy_slug", |
| 276 | + ) |
| 277 | + async def retrieve_by_name_async( |
| 278 | + self, |
| 279 | + name: str, |
| 280 | + *, |
| 281 | + legacy_slug: str | None = None, |
| 282 | + folder_path: str | None = None, |
| 283 | + ) -> RemoteA2aAgent: |
| 284 | + """Retrieve a Remote A2A agent by its display name. |
| 285 | +
|
| 286 | + ``legacy_slug`` supports already-deployed slug-keyed bindings during |
| 287 | + the name-identity transition. |
| 288 | + """ |
| 289 | + warnings.warn( |
| 290 | + "remote_a2a.retrieve_by_name_async is experimental and subject to change.", |
| 291 | + stacklevel=2, |
| 292 | + ) |
| 293 | + spec = self._retrieve_spec(identifier=name, folder_path=folder_path) |
233 | 294 | response = await self.request_async( |
234 | 295 | spec.method, |
235 | 296 | url=spec.endpoint, |
@@ -279,14 +340,16 @@ def _list_spec( |
279 | 340 |
|
280 | 341 | def _retrieve_spec( |
281 | 342 | self, |
282 | | - slug: str, |
| 343 | + identifier: str, |
283 | 344 | *, |
284 | 345 | folder_path: str | None, |
285 | 346 | ) -> RequestSpec: |
286 | 347 | folder_key = self._resolve_folder_key(folder_path) |
287 | 348 | return RequestSpec( |
288 | 349 | method="GET", |
289 | | - endpoint=Endpoint(f"/agenthub_/api/remote-a2a-agents/{slug}"), |
| 350 | + endpoint=Endpoint( |
| 351 | + f"/agenthub_/api/remote-a2a-agents/{quote(identifier, safe='')}" |
| 352 | + ), |
290 | 353 | headers={ |
291 | 354 | **header_folder(folder_key, None), |
292 | 355 | }, |
|
0 commit comments