eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.2 KiB
6.2 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | |||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| build_hoppscotch_collection | function | py | infra | 1.0.0 | pure | def build_hoppscotch_collection(calls: list[dict], *, name: str = "Collection", request_names: list[str] | None = None) -> dict | Helper interno de serializacion del grupo hoppscotch: convierte call specs (method/url/headers/body/body_type) en el formato HoppRESTRequest/coleccion Hoppscotch (request v:2). Lo usan hoppscotch_create_request y hoppscotch_update_request para construir el campo request de las mutations GraphQL del self-host. NO uses el dict resultante para escribir un .json e importarlo a mano: el flujo canonico es operar el self-host por la API (ver docs/capabilities/hoppscotch.md). Pura: solo stdlib, sin red. |
|
false |
|
dict de coleccion Hoppscotch JSON-serializable: {"v": 1, "name", "folders": [], "requests": [...]}. Cada request lleva v:'2', endpoint, name, method (upper), headers (lista key/value/active con header Cookie inyectado si habia cookies), body (contentType+body segun body_type), auth none, params/requestVariables vacios. | true |
|
python/functions/infra/build_hoppscotch_collection_test.py | python/functions/infra/build_hoppscotch_collection.py |
Ejemplo
import json
from build_hoppscotch_collection import build_hoppscotch_collection
# Call specs tal cual salen de har_extract_calls.
calls = [
{
"method": "GET",
"url": "https://api.example.com/api/search?q=foo",
"headers": {"Accept": "application/json"},
},
{
"method": "POST",
"url": "https://api.example.com/login",
"headers": {"Content-Type": "application/json"},
"cookies": {"session": "abc", "csrf": "xyz"},
"body": '{"user":"neo","pass":"<<password>>"}',
"body_type": "json",
},
]
collection = build_hoppscotch_collection(calls, name="Example flow")
# {
# "v": 1,
# "name": "Example flow",
# "folders": [],
# "requests": [
# {
# "v": "2",
# "endpoint": "https://api.example.com/api/search?q=foo",
# "name": "GET /api/search",
# "params": [],
# "headers": [{"key": "Accept", "value": "application/json", "active": True}],
# "method": "GET",
# "auth": {"authType": "none", "authActive": True},
# "preRequestScript": "",
# "testScript": "",
# "body": {"contentType": None, "body": None},
# "requestVariables": [],
# },
# {
# "v": "2",
# "endpoint": "https://api.example.com/login",
# "name": "POST /login",
# "params": [],
# "headers": [
# {"key": "Content-Type", "value": "application/json", "active": True},
# {"key": "Cookie", "value": "session=abc; csrf=xyz", "active": True},
# ],
# "method": "POST",
# "auth": {"authType": "none", "authActive": True},
# "preRequestScript": "",
# "testScript": "",
# "body": {"contentType": "application/json", "body": '{"user":"neo","pass":"<<password>>"}'},
# "requestVariables": [],
# },
# ],
# }
# Listo para escribir a disco e importar en la app Desktop / hopp CLI.
with open("flow.collection.json", "w") as f:
json.dump(collection, f, indent=2)
Cuando usarla
Usala cuando quieras abrir en la GUI de Hoppscotch unas peticiones que ya grabaste y destilaste con el patron grabar->destilar->reproducir (HAR -> har_filter_flows -> har_extract_calls). Pasas las call specs por esta funcion, guardas el dict resultante como .json y lo importas en la app Desktop o con el CLI hopp. Es la salida amigable para humanos del flujo de replay: cuando prefieras inspeccionar/tocar las peticiones a mano en el GUI antes de promoverlas a una funcion-accion del registry con http_replay_sequence. La funcion inversa, parse_hoppscotch_collection, reimporta una coleccion editada en el GUI de vuelta a call specs.
Gotchas
- Genera el formato canonico estable v1/v2. La coleccion sale como
v:1y cada request comov:"2"— la forma de los fixtures oficiales de Hoppscotch, garantizada importable. Hoppscotch la migra automaticamente a su ultima version interna al importar; no intentes emitir la version "ultima" a mano. - Las cookies se inyectan como header Cookie. Si un call spec trae
cookiesno vacio, se anade un unico headerCookieal final con formatok1=v1; k2=v2. Hoppscotch no tiene un slot de cookies separado en el request, asi que viajan en headers; al reimportar con parse_hoppscotch_collection se vuelven a separar. - Los secretos NO se sustituyen. La funcion copia headers, cookies y body tal cual. Tokens de sesion,
Authorizationy contrasenas viajan en claro en el dict resultante. Si quieres parametrizar, es el caller quien debe marcar los valores con<<var>>(referencia a variable de environment de Hoppscotch) antes de llamar a esta funcion. NO commitear el.jsonresultante sin redactar. - Claves extra del call spec se ignoran.
status,sets_cookiesy cualquier otra clave que no sea method/url/headers/cookies/body/body_type no aparecen en la coleccion (son metadata de la captura, no del request a reproducir).