Class: Mindee::HTTP::Endpoint

Inherits:
Object
  • Object
show all
Defined in:
lib/mindee/http/endpoint.rb

Overview

Generic API endpoint for a product.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(owner, url_name, version, api_key: '') ⇒ Endpoint

Returns a new instance of Endpoint.



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/mindee/http/endpoint.rb', line 41

def initialize(owner, url_name, version, api_key: '')
  @owner = owner
  @url_name = url_name
  @version = version
  @request_timeout = ENV.fetch(REQUEST_TIMEOUT_ENV_NAME, TIMEOUT_DEFAULT).to_i
  if api_key.nil? && !ENV.fetch(API_KEY_ENV_NAME, API_KEY_DEFAULT).to_s.empty?
    logger.debug('API key set from environment')
  end
  @api_key = api_key.nil? || api_key.empty? ? ENV.fetch(API_KEY_ENV_NAME, API_KEY_DEFAULT) : api_key
  @base_url = ENV.fetch(BASE_URL_ENV_NAME, BASE_URL_DEFAULT).chomp('/')
  @url_root = "#{@base_url}/products/#{@owner}/#{@url_name}/v#{@version}"
end

Instance Attribute Details

#api_keyString (readonly)

Returns:

  • (String)


33
34
35
# File 'lib/mindee/http/endpoint.rb', line 33

def api_key
  @api_key
end

#base_urlString (readonly)

Returns:

  • (String)


39
40
41
# File 'lib/mindee/http/endpoint.rb', line 39

def base_url
  @base_url
end

#request_timeoutInteger (readonly)

Returns:

  • (Integer)


35
36
37
# File 'lib/mindee/http/endpoint.rb', line 35

def request_timeout
  @request_timeout
end

#url_rootString (readonly)

Returns:

  • (String)


37
38
39
# File 'lib/mindee/http/endpoint.rb', line 37

def url_root
  @url_root
end

Instance Method Details

#parse_async(job_id) ⇒ Array

Calls the parsed async doc.

Parameters:

  • job_id (String)

Returns:

  • (Array)


99
100
101
102
103
104
105
106
107
108
# File 'lib/mindee/http/endpoint.rb', line 99

def parse_async(job_id)
  check_api_key
  response = document_queue_req_get(job_id)
  hashed_response = JSON.parse(response.body, object_class: Hash)
  return [hashed_response, response.body] if ResponseValidation.valid_async_response?(response)

  ResponseValidation.clean_request!(response)
  error = ErrorHandler.handle_error(@url_name, response)
  raise error
end

#predict(input_source, opts) ⇒ Array

Call the prediction API.

Parameters:

Returns:

  • (Array)

Raises:



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mindee/http/endpoint.rb', line 58

def predict(input_source, opts)
  check_api_key
  response = predict_req_post(
    input_source,
    opts
  )
  if !response.nil? && response.respond_to?(:body)
    hashed_response = JSON.parse(response.body, object_class: Hash)
    return [hashed_response, response.body] if ResponseValidation.valid_sync_response?(response)

    ResponseValidation.clean_request!(response)
  end

  raise Errors::MindeeError, 'Could not resolve server response.' if response.nil?

  error = ErrorHandler.handle_error(@url_name, response)
  raise error
end

#predict_async(input_source, opts) ⇒ Array

Call the prediction API.

Parameters:

Returns:

  • (Array)

Raises:



81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/mindee/http/endpoint.rb', line 81

def predict_async(input_source, opts)
  check_api_key
  response = document_queue_req_post(input_source, opts)
  if !response.nil? && response.respond_to?(:body)
    hashed_response = JSON.parse(response.body, object_class: Hash)
    return [hashed_response, response.body] if ResponseValidation.valid_async_response?(response)

    ResponseValidation.clean_request!(response)
  end

  raise Errors::MindeeError, 'Could not resolve server response.' if response.nil?

  raise ErrorHandler.handle_error(@url_name, response)
end