(ctx ExecutionContext, writer output.OutputWriter, logger log.Logger)
| 289 | } |
| 290 | |
| 291 | func (e HttpExecutor) Call(ctx ExecutionContext, writer output.OutputWriter, logger log.Logger) error { |
| 292 | uri, err := e.formatUri(ctx.BaseUri, ctx.Route, e.pathParameters(ctx), ctx.Parameters.Query()) |
| 293 | if err != nil { |
| 294 | return err |
| 295 | } |
| 296 | context, cancel := context.WithCancelCause(context.Background()) |
| 297 | bodyReader, contentType, contentLength, size := e.writeBody(ctx, cancel) |
| 298 | uploadBar := visualization.NewProgressBar(logger) |
| 299 | uploadReader := e.progressReader("uploading...", "completing ", bodyReader, size, uploadBar) |
| 300 | defer uploadBar.Remove() |
| 301 | |
| 302 | auth, err := e.executeAuthenticators(ctx, logger, uri.String()) |
| 303 | if err != nil { |
| 304 | return err |
| 305 | } |
| 306 | |
| 307 | header := http.Header{} |
| 308 | if contentType != "" { |
| 309 | header.Set("Content-Type", contentType) |
| 310 | } |
| 311 | e.addHeaders(header, ctx.Parameters.Header()) |
| 312 | request := network.NewHttpRequest(ctx.Method, uri.String(), e.toAuthorization(auth.Token), header, uploadReader, contentLength) |
| 313 | |
| 314 | client := network.NewHttpClient(logger, e.httpClientSettings(ctx)) |
| 315 | response, err := client.SendWithContext(request, context) |
| 316 | if err != nil { |
| 317 | return err |
| 318 | } |
| 319 | defer func() { _ = response.Body.Close() }() |
| 320 | downloadBar := visualization.NewProgressBar(logger) |
| 321 | downloadReader := e.progressReader("downloading...", "completing ", response.Body, response.ContentLength, downloadBar) |
| 322 | defer downloadBar.Remove() |
| 323 | body, err := io.ReadAll(downloadReader) |
| 324 | if err != nil { |
| 325 | return fmt.Errorf("Error reading response body: %w", err) |
| 326 | } |
| 327 | err = writer.WriteResponse(*output.NewResponseInfo(response.StatusCode, response.Status, response.Proto, response.Header, bytes.NewReader(body))) |
| 328 | if err != nil { |
| 329 | return err |
| 330 | } |
| 331 | return nil |
| 332 | } |
| 333 | |
| 334 | func NewHttpExecutor(authenticators []auth.Authenticator) *HttpExecutor { |
| 335 | return &HttpExecutor{authenticators} |
nothing calls this directly
no test coverage detected