class Turbopuffer::Internal::Transport::BaseClient

def request(req)

Returns:
  • (Object) -

Raises:
  • (Turbopuffer::Errors::APIError) -

Options Hash: (**options)
  • :timeout (Float, nil) --
  • :max_retries (Integer, nil) --
  • :extra_body (Object, nil) --
  • :extra_headers (Hash{String=>String, nil}, nil) --
  • :extra_query (Hash{String=>Array, String, nil}, nil) --
  • :idempotency_key (String, nil) --

Parameters:
  • options (Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil) -- .
  • model (Turbopuffer::Internal::Type::Converter, Class, nil) --
  • stream (Class, nil) --
  • page (Class, nil) --
  • unwrap (Symbol, Integer, Array, Proc, nil) --
  • body (Object, nil) --
  • headers (Hash{String=>String, Integer, Array, nil}, nil) --
  • query (Hash{String=>Array, String, nil}, nil) --
  • path (String, Array) --
  • method (Symbol) --

Overloads:
  • request(method, path, query: {}, headers: {}, body: nil, unwrap: nil, page: nil, stream: nil, model: Turbopuffer::Internal::Type::Unknown, options: {})
def request(req)
  self.class.validate!(req)
  model = req.fetch(:model) { Turbopuffer::Internal::Type::Unknown }
  opts = req[:options].to_h
  unwrap = req[:unwrap]
  Turbopuffer::RequestOptions.validate!(opts)
  request = build_request(req.except(:options), opts)
  url = request.fetch(:url)
  # Don't send the current retry count in the headers if the caller modified the header defaults.
  send_retry_header = request.fetch(:headers)["x-stainless-retry-count"] == "0"
  status, response, stream = send_request(
    request,
    redirect_count: 0,
    retry_count: 0,
    send_retry_header: send_retry_header
  )
  decoded = Turbopuffer::Internal::Util.decode_content(response, stream: stream)
  case req
  in {stream: Class => st}
    st.new(
      model: model,
      url: url,
      status: status,
      response: response,
      unwrap: unwrap,
      stream: decoded
    )
  in {page: Class => page}
    page.new(client: self, req: req, headers: response, page_data: decoded)
  else
    unwrapped = Turbopuffer::Internal::Util.dig(decoded, unwrap)
    Turbopuffer::Internal::Type::Converter.coerce(model, unwrapped)
  end
end