Class: Exa::Internal::Transport::BaseClient

Inherits:
Object
  • Object
show all
Defined in:
lib/exa/internal/transport/base_client.rb

Direct Known Subclasses

Client

Constant Summary collapse

PLATFORM_HEADERS =
{
  "x-stainless-lang" => "ruby",
  "x-stainless-runtime" => RUBY_ENGINE,
  "x-stainless-runtime-version" => RUBY_ENGINE_VERSION
}.freeze
DEFAULT_MAX_RETRIES =
2
DEFAULT_TIMEOUT =
120.0
DEFAULT_INITIAL_RETRY_DELAY =
0.5
DEFAULT_MAX_RETRY_DELAY =
8.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url:, timeout: DEFAULT_TIMEOUT, max_retries: DEFAULT_MAX_RETRIES, initial_retry_delay: DEFAULT_INITIAL_RETRY_DELAY, max_retry_delay: DEFAULT_MAX_RETRY_DELAY, headers: {}, requester: Exa::Internal::Transport::PooledNetRequester.new) ⇒ BaseClient

Returns a new instance of BaseClient.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/exa/internal/transport/base_client.rb', line 29

def initialize(
  base_url:,
  timeout: DEFAULT_TIMEOUT,
  max_retries: DEFAULT_MAX_RETRIES,
  initial_retry_delay: DEFAULT_INITIAL_RETRY_DELAY,
  max_retry_delay: DEFAULT_MAX_RETRY_DELAY,
  headers: {},
  requester: Exa::Internal::Transport::PooledNetRequester.new
)
  @base_url = URI(base_url)
  @timeout = timeout
  @max_retries = max_retries
  @initial_retry_delay = initial_retry_delay
  @max_retry_delay = max_retry_delay
  @headers = headers || {}
  @requester = requester
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def base_url
  @base_url
end

#headersObject (readonly)

Returns the value of attribute headers.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def headers
  @headers
end

#initial_retry_delayObject (readonly)

Returns the value of attribute initial_retry_delay.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def initial_retry_delay
  @initial_retry_delay
end

#max_retriesObject (readonly)

Returns the value of attribute max_retries.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def max_retries
  @max_retries
end

#max_retry_delayObject (readonly)

Returns the value of attribute max_retry_delay.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def max_retry_delay
  @max_retry_delay
end

#requesterObject (readonly)

Returns the value of attribute requester.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def requester
  @requester
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



27
28
29
# File 'lib/exa/internal/transport/base_client.rb', line 27

def timeout
  @timeout
end

Instance Method Details

#request(method:, path:, query: nil, headers: nil, body: nil, unwrap: nil, stream: false, response_model: nil, request_options: nil) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/exa/internal/transport/base_client.rb', line 47

def request(method:, path:, query: nil, headers: nil, body: nil, unwrap: nil, stream: false, response_model: nil, request_options: nil)
  options = normalize_request_options(request_options)
  req = build_request(
    method: method,
    path: Array(path).join("/"),
    query: query,
    headers: headers,
    body: body,
    request_timeout: options[:timeout],
    idempotency_key: options[:idempotency_key]
  )

  _, response, stream_enum = send_request(req, max_retries: options[:max_retries] || max_retries)
  parsed_headers = Exa::Internal::Util.normalized_headers(response.each_header.to_h)

  if stream
    Exa::Internal::Transport::Stream.new(headers: parsed_headers, stream: stream_enum)
  else
    decoded = Exa::Internal::Util.decode_content(parsed_headers, stream: stream_enum)
    coerced = coerce_response(response_model, decoded)
    unwrap ? dig(coerced, unwrap) : coerced
  end
end