Class: Mindee::V2::HTTP::MindeeApiV2
- Defined in:
- lib/mindee/v2/http/mindee_api_v2.rb,
sig/mindee/v2/http/mindee_api_v2.rbs
Overview
API client for version 2.
Instance Attribute Summary collapse
- #settings ⇒ ApiV2Settings readonly
Instance Method Summary collapse
- #enqueue(input_source, params) ⇒ Net::HTTPResponse?
-
#enqueue_form_options(form_data, params) ⇒ Array[Array[untyped]]
Handle parameters for the enqueue form.
-
#initialize(api_key: nil) ⇒ MindeeApiV2
constructor
A new instance of MindeeApiV2.
-
#poll(url) ⇒ Net::HTTPResponse
Polls a queue for either a result or a job.
-
#process_response(response) ⇒ Hash
Converts an HTTP response to a parsed response object.
-
#req_get_job(job_id) ⇒ Mindee::V2::Parsing::JobResponse
Retrieves a queued job.
-
#req_get_job_url(url) ⇒ Mindee::V2::Parsing::JobResponse
Retrieves a queued job.
-
#req_get_result(product, resource) ⇒ Mindee::V2::Parsing::BaseResponse
Retrieves a result from a given queue.
-
#req_get_result_url(result_class, url) ⇒ Mindee::V2::Parsing::BaseResponse
Retrieves a queued job.
-
#req_get_search(params) ⇒ Mindee::V2::Parsing::Search::BaseSearchResponse
Retrieves a list of resources with the given criteria.
-
#req_post_product_enqueue(input_source, params) ⇒ Mindee::V2::Parsing::JobResponse
Send a file to the asynchronous processing queue for inference processing.
-
#result_req_get(queue_id, product) ⇒ Net::HTTPResponse
Polls the API for the result of an inference.
- #uri?(resource) ⇒ Boolean
Constructor Details
#initialize(api_key: nil) ⇒ MindeeApiV2
Returns a new instance of MindeeApiV2.
16 17 18 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 16 def initialize(api_key: nil) @settings = ApiV2Settings.new(api_key: api_key) end |
Instance Attribute Details
#settings ⇒ ApiV2Settings (readonly)
13 14 15 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 13 def settings @settings end |
Instance Method Details
#enqueue(input_source, params) ⇒ Net::HTTPResponse?
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 189 def enqueue(input_source, params) uri = URI("#{@settings.base_url}/v2/products/#{params.slug}/enqueue") form_data = if input_source.is_a?(Mindee::Input::Source::URLInputSource) [['url', input_source.url]] # : Array[Array[untyped]] else file_data, = input_source.read_contents(close: params.close_file) [['file', file_data, ]] # : Array[Array[untyped]] end form_data.push(['model_id', params.model_id]) if params.is_a?(V2::Product::Extraction::Params::ExtractionParameters) form_data = (form_data, params) end form_data = params.append_form_data(form_data) headers = { 'Authorization' => @settings.api_key, 'User-Agent' => @settings.user_agent, } req = Net::HTTP::Post.new(uri, headers) req.set_form(form_data, 'multipart/form-data') req['Transfer-Encoding'] = 'chunked' Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, open_timeout: @settings.request_timeout, read_timeout: @settings.request_timeout) do |http| return http.request(req) end raise Mindee::Error::MindeeError, 'Could not resolve server response.' end |
#enqueue_form_options(form_data, params) ⇒ Array[Array[untyped]]
Handle parameters for the enqueue form
171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 171 def (form_data, params) form_data.push(['rag', params.rag.to_s]) unless params.rag.nil? form_data.push(['raw_text', params.raw_text.to_s]) unless params.raw_text.nil? form_data.push(['polygon', params.polygon.to_s]) unless params.polygon.nil? form_data.push(['confidence', params.confidence.to_s]) unless params.confidence.nil? form_data.push ['text_context', params.text_context] if params.text_context form_data.push ['data_schema', params.data_schema.to_s] if params.data_schema unless params.webhook_ids.nil? || params.webhook_ids.empty? params.webhook_ids.each do |webhook_id| form_data.push ['webhook_ids[]', webhook_id] end end form_data end |
#poll(url) ⇒ Net::HTTPResponse
Polls a queue for either a result or a job.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 142 def poll(url) uri = URI(url) headers = { 'Authorization' => @settings.api_key, 'User-Agent' => @settings.user_agent, } req = Net::HTTP::Get.new(uri, headers) Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, open_timeout: @settings.request_timeout, read_timeout: @settings.request_timeout) do |http| return http.request(req) end raise Mindee::Error::MindeeError, 'Could not resolve server response.' end |
#process_response(response) ⇒ Hash
Converts an HTTP response to a parsed response object.
124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 124 def process_response(response) if !response.nil? && response.respond_to?(:body) && Mindee::HTTP::ResponseValidation.valid_v2_response?(response) return JSON.parse(response.body, object_class: Hash) end response_body = if response.nil? || !response.respond_to?(:body) '{ "status": -1, "detail": "Empty server response." }' else response.body end raise Mindee::HTTP::ErrorHandler.generate_v2_error(JSON.parse(response_body).transform_keys(&:to_sym)) end |
#req_get_job(job_id) ⇒ Mindee::V2::Parsing::JobResponse
Retrieves a queued job.
54 55 56 57 58 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 54 def req_get_job(job_id) @settings.check_api_key response = poll("#{@settings.base_url}/v2/jobs/#{job_id}") Mindee::V2::Parsing::JobResponse.new(process_response(response)) end |
#req_get_job_url(url) ⇒ Mindee::V2::Parsing::JobResponse
Retrieves a queued job.
102 103 104 105 106 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 102 def req_get_job_url(url) @settings.check_api_key response = poll(url) Mindee::V2::Parsing::JobResponse.new(process_response(response)) end |
#req_get_result(product, resource) ⇒ Mindee::V2::Parsing::BaseResponse
Retrieves a result from a given queue.
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 39 def req_get_result(product, resource) return req_get_result_url(product.response_type, resource) if uri?(resource) @settings.check_api_key response = result_req_get( resource, product ) product.response_type.new(process_response(response)) end |
#req_get_result_url(result_class, url) ⇒ Mindee::V2::Parsing::BaseResponse
Retrieves a queued job.
113 114 115 116 117 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 113 def req_get_result_url(result_class, url) @settings.check_api_key response = poll(url) result_class.new(process_response(response)) end |
#req_get_search(params) ⇒ Mindee::V2::Parsing::Search::BaseSearchResponse
Retrieves a list of resources with the given criteria.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 64 def req_get_search(params) @settings.check_api_key uri = URI("#{@settings.base_url}/v2/search/#{params.slug}") query_params = params.request_parameters uri.query = URI.encode_www_form(query_params) unless query_params.empty? headers = { 'Authorization' => @settings.api_key, 'User-Agent' => @settings.user_agent, } req = Net::HTTP::Get.new(uri, headers) response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, open_timeout: @settings.request_timeout, read_timeout: @settings.request_timeout) do |http| http.request(req) end params.response_class.new(process_response(response)) end |
#req_post_product_enqueue(input_source, params) ⇒ Mindee::V2::Parsing::JobResponse
Send a file to the asynchronous processing queue for inference processing.
26 27 28 29 30 31 32 33 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 26 def req_post_product_enqueue(input_source, params) @settings.check_api_key response = enqueue( input_source, params ) Mindee::V2::Parsing::JobResponse.new(process_response(response)) end |
#result_req_get(queue_id, product) ⇒ Net::HTTPResponse
Polls the API for the result of an inference.
164 165 166 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 164 def result_req_get(queue_id, product) poll("#{@settings.base_url}/v2/products/#{product.slug}/results/#{queue_id}") end |
#uri?(resource) ⇒ Boolean
90 91 92 93 94 95 96 |
# File 'lib/mindee/v2/http/mindee_api_v2.rb', line 90 def uri?(resource) uri = URI.parse(resource) throw Mindee::Error::MindeeError, 'HTTP is not supported.' if uri.scheme == 'http' uri.scheme == 'https' rescue URI::BadURIError, URI::InvalidURIError false end |