From 0eaf1886b3d67d37c03e165010b1f442bbb7638a Mon Sep 17 00:00:00 2001 From: seyyah Date: Sat, 6 Jul 2019 23:52:22 +0300 Subject: [PATCH 1/2] Improve DelayedCalculation Functions --- lib/opencpu/client.rb | 3 +- lib/opencpu/delayed_calculation.rb | 81 ++++++++++++++++++++++++++++++ lib/opencpu/version.rb | 2 +- 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/lib/opencpu/client.rb b/lib/opencpu/client.rb index 3e05f93..c93a567 100644 --- a/lib/opencpu/client.rb +++ b/lib/opencpu/client.rb @@ -107,7 +107,8 @@ def request_options(data, format) end def function_url(package, function, user = :system, github_remote = false, format = nil) - "#{package_url(package, user, github_remote)}/R/#{function}/#{format.to_s}" + "#{package_url(package, user, github_remote)}/#{function}/#{format.to_s}" + # "#{package_url(package, user, github_remote)}/R/#{function}/#{format.to_s}" end def package_url(package, user = :system, github_remote = false) diff --git a/lib/opencpu/delayed_calculation.rb b/lib/opencpu/delayed_calculation.rb index b585570..9928d52 100644 --- a/lib/opencpu/delayed_calculation.rb +++ b/lib/opencpu/delayed_calculation.rb @@ -3,6 +3,7 @@ class UnsupportedFormatError < StandardError; end class ResponseNotAvailableError < StandardError; end class DelayedCalculation + include Errors include HTTMultiParty attr_accessor :location @@ -50,8 +51,53 @@ def info process_resource @available_resources[:info].to_s end + def keys + @available_resources.keys + end + + # available_resources(:"R/foo") + def available_resources(key) + raise ResponseNotAvailableError unless @available_resources.has_key?(key) + process_resource @available_resources[key].to_s + end + + def process_resources(key, options = {}) + options = { + user: :system, + format: :json, + data: {} + # method: :post + }.merge(options) + + puts options + + raise ResponseNotAvailableError unless @available_resources.has_key?(key) + url = @available_resources[key].to_s + data = options[:data] + format = options[:format] + + process_query url, data, format do |response| + location = response.headers['location'] + resources = response.body.split(/\n/) + OpenCPU::DelayedCalculation.new(location, resources) + end + end + private + def process_query(url, data, format, &block) + return fake_response_for(url) if OpenCPU.test_mode? + + response = self.class.post(url, request_options(data, format)) + + case response.code + when 200..201 + return yield(response) + else + fail error_class_for(response.code), "#{response.code}:\n #{response.body}" + end + end + def process_resource(resource) response = self.class.get resource if response.ok? @@ -83,5 +129,40 @@ def key(uri, location) key = :graphics if key =~ /graphics\/\d/ key.to_sym end + + def request_options(data, format) + options = { + verify: OpenCPU.configuration.verify_ssl + } + + case format + when :json + options[:body] = data.to_json if data + options[:headers] = {"Content-Type" => 'application/json'} + when :urlencoded + options[:query] = data if data + end + + if OpenCPU.configuration.username && OpenCPU.configuration.password + options[:basic_auth] = { + username: OpenCPU.configuration.username, password: OpenCPU.configuration.password + } + end + options + end + + def error_class_for(response_code) + case response_code + when 403 + AccessDenied + when 400..499 + BadRequest + when 500..599 + InternalServerError + else + OpenCPUError + end + end end + end diff --git a/lib/opencpu/version.rb b/lib/opencpu/version.rb index 9b248db..5a1b744 100644 --- a/lib/opencpu/version.rb +++ b/lib/opencpu/version.rb @@ -1,6 +1,6 @@ module OpenCPU MAJOR = 0 - MINOR = 11 + MINOR = 12 TINY = 0 VERSION = [MAJOR, MINOR, TINY].join('.') end From 37694bbba9ec51638d24e2175a28322541dff5fe Mon Sep 17 00:00:00 2001 From: seyyah Date: Sun, 7 Jul 2019 19:32:45 +0300 Subject: [PATCH 2/2] Improve DelayedCalculation Functions: remove test codes --- lib/opencpu/delayed_calculation.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/opencpu/delayed_calculation.rb b/lib/opencpu/delayed_calculation.rb index 9928d52..1ac8ab1 100644 --- a/lib/opencpu/delayed_calculation.rb +++ b/lib/opencpu/delayed_calculation.rb @@ -66,11 +66,8 @@ def process_resources(key, options = {}) user: :system, format: :json, data: {} - # method: :post }.merge(options) - puts options - raise ResponseNotAvailableError unless @available_resources.has_key?(key) url = @available_resources[key].to_s data = options[:data]