Class: Mindee::V1::Client
- Inherits:
-
Object
- Object
- Mindee::V1::Client
- Defined in:
- lib/mindee/v1/client.rb
Overview
Mindee API Client. See: https://developers.mindee.com/docs
Instance Method Summary collapse
-
#create_endpoint(endpoint_name: '', account_name: '', version: '') ⇒ Mindee::V1::HTTP::Endpoint
Creates a custom endpoint with the given values.
-
#enqueue(input_source, product_class, endpoint: nil, options: {}) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Enqueue a document for async parsing.
-
#enqueue_and_parse(input_source, product_class, endpoint, options, cancellation_token = nil) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Enqueue a document for async parsing and automatically try to retrieve it.
-
#initialize(api_key: '') ⇒ Client
constructor
A new instance of Client.
-
#load_prediction(product_class, local_response) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Load a prediction.
-
#parse(input_source, product_class, endpoint: nil, options: {}, enqueue: true) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Enqueue a document for parsing and automatically try to retrieve it if needed.
-
#parse_queued(job_id, product_class, endpoint: nil) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Parses a queued document.
-
#source_from_b64string(base64_string, filename, repair_pdf: false) ⇒ Mindee::Input::Source::Base64InputSource
Load a document from a base64 encoded string.
-
#source_from_bytes(input_bytes, filename, repair_pdf: false) ⇒ Mindee::Input::Source::BytesInputSource
Load a document from raw bytes.
-
#source_from_file(input_file, filename, repair_pdf: false) ⇒ Mindee::Input::Source::FileInputSource
Load a document from a normal Ruby
File. -
#source_from_path(input_path, repair_pdf: false) ⇒ Mindee::Input::Source::PathInputSource
Load a document from an absolute path, as a string.
-
#source_from_url(url) ⇒ Mindee::Input::Source::URLInputSource
Load a document from a secure remote source (HTTPS).
Constructor Details
#initialize(api_key: '') ⇒ Client
Returns a new instance of Client.
61 62 63 |
# File 'lib/mindee/v1/client.rb', line 61 def initialize(api_key: '') @api_key = api_key end |
Instance Method Details
#create_endpoint(endpoint_name: '', account_name: '', version: '') ⇒ Mindee::V1::HTTP::Endpoint
Creates a custom endpoint with the given values. Do not set for standard (off the shelf) endpoints.
332 333 334 335 336 337 338 339 |
# File 'lib/mindee/v1/client.rb', line 332 def create_endpoint(endpoint_name: '', account_name: '', version: '') initialize_endpoint( Mindee::V1::Product::Universal::Universal, endpoint_name: endpoint_name, account_name: account_name, version: version ) end |
#enqueue(input_source, product_class, endpoint: nil, options: {}) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Enqueue a document for async parsing
162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/mindee/v1/client.rb', line 162 def enqueue(input_source, product_class, endpoint: nil, options: {}) opts = () endpoint ||= initialize_endpoint(product_class) logger.debug("Enqueueing document as '#{endpoint.url_root}'") prediction, raw_http = endpoint.predict_async( input_source, opts ) Mindee::V1::Parsing::Common::ApiResponse.new(product_class, prediction, raw_http) end |
#enqueue_and_parse(input_source, product_class, endpoint, options, cancellation_token = nil) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Enqueue a document for async parsing and automatically try to retrieve it
rubocop:disable-next Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/mindee/v1/client.rb', line 220 def enqueue_and_parse( input_source, product_class, endpoint, , cancellation_token = nil ) validate_async_params(.initial_delay_sec, .delay_sec, .max_retries) enqueue_res = enqueue(input_source, product_class, endpoint: endpoint, options: ) job = enqueue_res.job or raise Error::MindeeAPIError, 'Expected job to be present' job_id = job.id raise Mindee::Error::MindeeError, 'Enqueueing of the document was canceled.' if cancellation_token&.canceled? sleep(.initial_delay_sec) polling_attempts = 1 logger.debug("Successfully enqueued document with job id: '#{job_id}'") queue_res = parse_queued(job_id, product_class, endpoint: endpoint) queue_res_job = queue_res.job or raise Error::MindeeAPIError, 'Expected job to be present' valid_statuses = [ Mindee::V1::Parsing::Common::JobStatus::WAITING, Mindee::V1::Parsing::Common::JobStatus::PROCESSING, ] # @type var valid_statuses: Array[(:waiting | :processing | :completed | :failed)] while valid_statuses.include?(queue_res_job.status) && polling_attempts < .max_retries logger.debug("Polling server for parsing result with job id: '#{job_id}'. Attempt #{polling_attempts}") raise Mindee::Error::MindeeError, 'Enqueueing of the document was canceled.' if cancellation_token&.canceled? sleep(.delay_sec) queue_res = parse_queued(job_id, product_class, endpoint: endpoint) queue_res_job = queue_res.job or raise Error::MindeeAPIError, 'Expected job to be present' polling_attempts += 1 end if queue_res_job.status != Mindee::V1::Parsing::Common::JobStatus::COMPLETED elapsed = .initial_delay_sec + (polling_attempts * .delay_sec.to_f) raise Error::MindeeAPIError, "Asynchronous parsing request timed out after #{elapsed} seconds (#{polling_attempts} tries)" end queue_res end |
#load_prediction(product_class, local_response) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Load a prediction.
268 269 270 271 272 273 274 275 276 277 |
# File 'lib/mindee/v1/client.rb', line 268 def load_prediction(product_class, local_response) raise Error::MindeeAPIError, 'Expected LocalResponse to not be nil.' if local_response.nil? response_hash = local_response.as_hash || {} raise Error::MindeeAPIError, 'Expected LocalResponse#as_hash to return a hash.' if response_hash.nil? Mindee::V1::Parsing::Common::ApiResponse.new(product_class, response_hash, response_hash.to_json) rescue KeyError, Error::MindeeAPIError raise Error::MindeeInputError, 'No prediction found in local response.' end |
#parse(input_source, product_class, endpoint: nil, options: {}, enqueue: true) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Enqueue a document for parsing and automatically try to retrieve it if needed.
Accepts options either as a Hash or as a ParseOptions struct.
92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/mindee/v1/client.rb', line 92 def parse(input_source, product_class, endpoint: nil, options: {}, enqueue: true) opts = () process_pdf_if_required(input_source, opts) if input_source.is_a?(Input::Source::LocalInputSource) endpoint ||= initialize_endpoint(product_class) if enqueue && product_class.has_async enqueue_and_parse(input_source, product_class, endpoint, opts) else parse_sync(input_source, product_class, endpoint, opts) end end |
#parse_queued(job_id, product_class, endpoint: nil) ⇒ Mindee::V1::Parsing::Common::ApiResponse
Parses a queued document
Doesn't need to be set in the case of OTS APIs.
182 183 184 185 186 187 |
# File 'lib/mindee/v1/client.rb', line 182 def parse_queued(job_id, product_class, endpoint: nil) endpoint = initialize_endpoint(product_class) if endpoint.nil? logger.debug("Fetching queued document as '#{endpoint.url_root}'") prediction, raw_http = endpoint.parse_async(job_id) Mindee::V1::Parsing::Common::ApiResponse.new(product_class, prediction, raw_http) end |
#source_from_b64string(base64_string, filename, repair_pdf: false) ⇒ Mindee::Input::Source::Base64InputSource
Load a document from a base64 encoded string.
301 302 303 |
# File 'lib/mindee/v1/client.rb', line 301 def source_from_b64string(base64_string, filename, repair_pdf: false) Input::Source::Base64InputSource.new(base64_string, filename, repair_pdf: repair_pdf) end |
#source_from_bytes(input_bytes, filename, repair_pdf: false) ⇒ Mindee::Input::Source::BytesInputSource
Load a document from raw bytes.
292 293 294 |
# File 'lib/mindee/v1/client.rb', line 292 def source_from_bytes(input_bytes, filename, repair_pdf: false) Input::Source::BytesInputSource.new(input_bytes, filename, repair_pdf: repair_pdf) end |
#source_from_file(input_file, filename, repair_pdf: false) ⇒ Mindee::Input::Source::FileInputSource
Load a document from a normal Ruby File.
310 311 312 |
# File 'lib/mindee/v1/client.rb', line 310 def source_from_file(input_file, filename, repair_pdf: false) Input::Source::FileInputSource.new(input_file, filename, repair_pdf: repair_pdf) end |
#source_from_path(input_path, repair_pdf: false) ⇒ Mindee::Input::Source::PathInputSource
Load a document from an absolute path, as a string.
283 284 285 |
# File 'lib/mindee/v1/client.rb', line 283 def source_from_path(input_path, repair_pdf: false) Input::Source::PathInputSource.new(input_path, repair_pdf: repair_pdf) end |
#source_from_url(url) ⇒ Mindee::Input::Source::URLInputSource
Load a document from a secure remote source (HTTPS).
317 318 319 |
# File 'lib/mindee/v1/client.rb', line 317 def source_from_url(url) Input::Source::URLInputSource.new(url) end |