predicsis_ml_sdk 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/predicsis_ml_sdk.rb +7 -8
- data/lib/predicsis_ml_sdk/configuration.rb +1 -0
- data/lib/predicsis_ml_sdk/data_file.rb +0 -5
- data/lib/predicsis_ml_sdk/requests.rb +44 -45
- data/lib/predicsis_ml_sdk/upload.rb +70 -0
- data/lib/predicsis_ml_sdk/upload_helper.rb +32 -0
- data/lib/predicsis_ml_sdk/version.rb +1 -1
- metadata +27 -12
- data/lib/predicsis_ml_sdk/credentials.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b87641f7e72fc46a71a5de47b8af15c5b99b77fd
|
4
|
+
data.tar.gz: 95af5340f3616ea52d27fc6a3ffb49d256a65d98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e710b701347f0705c8fe52c38f593a3c0e88f844c0487a1701a9c93b8ccbc3b7f959e4c5d27d70a011a379ff97faf194f22aea8343c0f16698a65fe576b816b
|
7
|
+
data.tar.gz: dc432ea91885fdd1a67f86899591b789c25133ce15902fa6084f5d2d570ade11b74d649791608eaf12870d9deaca9f78a59f25fd47a369fe29da8de1c50a909b
|
data/lib/predicsis_ml_sdk.rb
CHANGED
@@ -6,27 +6,25 @@ require 'predicsis_ml_sdk/configuration'
|
|
6
6
|
require 'predicsis_ml_sdk/core_ext'
|
7
7
|
require 'predicsis_ml_sdk/errors'
|
8
8
|
require 'predicsis_ml_sdk/util'
|
9
|
-
require 'predicsis_ml_sdk/requests'
|
10
9
|
|
11
10
|
module PredicsisMlSdk
|
12
|
-
|
13
|
-
|
14
|
-
end
|
11
|
+
module_function
|
12
|
+
attr_accessor :config
|
15
13
|
|
16
|
-
def
|
14
|
+
def config
|
17
15
|
@config ||= Configuration.new
|
18
16
|
end
|
19
17
|
|
20
|
-
def
|
18
|
+
def configure
|
21
19
|
yield config
|
22
20
|
end
|
23
21
|
|
24
|
-
def
|
22
|
+
def logger
|
25
23
|
config.logger
|
26
24
|
end
|
27
25
|
|
28
26
|
autoload :AccessToken, 'predicsis_ml_sdk/access_token'
|
29
|
-
autoload :
|
27
|
+
autoload :Upload, 'predicsis_ml_sdk/upload'
|
30
28
|
autoload :DataFile, 'predicsis_ml_sdk/data_file'
|
31
29
|
autoload :Dataset, 'predicsis_ml_sdk/dataset'
|
32
30
|
autoload :Dictionary, 'predicsis_ml_sdk/dictionary'
|
@@ -38,4 +36,5 @@ module PredicsisMlSdk
|
|
38
36
|
autoload :Report, 'predicsis_ml_sdk/report'
|
39
37
|
autoload :Source, 'predicsis_ml_sdk/source'
|
40
38
|
autoload :Variable, 'predicsis_ml_sdk/variable'
|
39
|
+
autoload :Requests, 'predicsis_ml_sdk/requests'
|
41
40
|
end
|
@@ -1,26 +1,29 @@
|
|
1
|
-
require '
|
1
|
+
require 'rest-client'
|
2
2
|
require 'nokogiri'
|
3
3
|
|
4
4
|
module PredicsisMlSdk
|
5
5
|
class Requests
|
6
6
|
extend Util
|
7
|
-
HTTParty::Basement.default_options.update(verify: false)
|
8
7
|
|
9
8
|
MODELS = %w(source dataset dictionary preparation_rules_set modalities_set report model data_file)
|
10
9
|
|
11
10
|
class << self
|
12
11
|
%w(get post patch delete).each do |method|
|
13
12
|
define_method("#{method}") do |url, params, headers = {}|
|
14
|
-
options = { body: params, headers: headers }
|
15
13
|
with_captured_console do
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
uri = URI(PredicsisMlSdk.config.predicsis_api_host + url)
|
15
|
+
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
16
|
+
request = Net::HTTP.const_get(method.capitalize).new(uri, headers)
|
17
|
+
request.body = params if params
|
18
|
+
|
19
|
+
http.request(request)
|
20
|
+
end
|
21
|
+
|
22
|
+
case res
|
23
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
24
|
+
return JSON.parse(res.body) unless res.body.empty?
|
25
|
+
else
|
26
|
+
fail RequestError.new(res['message'], res.body.empty? ? res.body : JSON.parse(res.body))
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
@@ -29,108 +32,108 @@ module PredicsisMlSdk
|
|
29
32
|
def post_token(token, params)
|
30
33
|
PredicsisMlSdk.logger.debug 'POST settings/tokens'
|
31
34
|
params = { token: params }.to_json
|
32
|
-
response = post(
|
35
|
+
response = post('/settings/tokens', params, headers(token))
|
33
36
|
PredicsisMlSdk.logger.debug "Personal Access Token: #{response['token']['token']}"
|
34
37
|
response['token']
|
35
38
|
end
|
36
39
|
|
37
40
|
def get_token(token, id)
|
38
41
|
PredicsisMlSdk.logger.debug "GET settings/tokens/#{id}"
|
39
|
-
get("
|
42
|
+
get("/settings/tokens/#{id}", nil, headers(token))['token']
|
40
43
|
end
|
41
44
|
|
42
45
|
def get_tokens(token)
|
43
46
|
PredicsisMlSdk.logger.debug 'GET settings/tokens'
|
44
|
-
get(
|
47
|
+
get('/settings/tokens', nil, headers(token))['tokens']
|
45
48
|
end
|
46
49
|
|
47
50
|
def delete_token(token, id)
|
48
51
|
PredicsisMlSdk.logger.debug "DELETE settings/tokens/#{id}"
|
49
|
-
delete("
|
52
|
+
delete("/settings/tokens/#{id}", nil, headers(token))
|
50
53
|
end
|
51
54
|
|
52
|
-
def
|
53
|
-
PredicsisMlSdk.logger.debug '
|
54
|
-
|
55
|
+
def initiate_upload(token)
|
56
|
+
PredicsisMlSdk.logger.debug 'INIT upload'
|
57
|
+
post('/uploads', nil, headers(token))['upload']
|
55
58
|
end
|
56
59
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
60
|
+
def get_part_url(token, id, part_number, path)
|
61
|
+
get("/uploads/#{id}?part_number=#{part_number}&path=#{path}", nil, headers(token))['upload']
|
62
|
+
end
|
63
|
+
|
64
|
+
def complete_upload(token, id, path)
|
65
|
+
PredicsisMlSdk.logger.debug 'COMPLETE upload'
|
66
|
+
patch("/uploads/#{id}?path=#{path}", nil, headers(token))
|
67
|
+
end
|
68
|
+
|
69
|
+
def upload(endpoint, path, part)
|
70
|
+
RestClient.put(endpoint, File.open(path), { 'Content-Length' => File.size(path).to_s })
|
68
71
|
end
|
69
72
|
|
70
73
|
def get_job(token, id)
|
71
|
-
get("
|
74
|
+
get("/jobs/#{id}", nil, headers(token))['job']
|
72
75
|
end
|
73
76
|
|
74
77
|
def get_jobs(token)
|
75
78
|
PredicsisMlSdk.logger.debug 'GET jobs'
|
76
|
-
get(
|
79
|
+
get('/jobs', nil, headers(token))['jobs']
|
77
80
|
end
|
78
81
|
|
79
82
|
def delete_job(token, id)
|
80
83
|
PredicsisMlSdk.logger.debug "DELETE job/#{id}"
|
81
|
-
delete("
|
84
|
+
delete("/jobs/#{id}", nil, headers(token))
|
82
85
|
end
|
83
86
|
|
84
87
|
def get_variables(token, parent_id)
|
85
88
|
PredicsisMlSdk.logger.debug "GET dictionaries/#{parent_id}/variables"
|
86
|
-
get("
|
89
|
+
get("/dictionaries/#{parent_id}/variables", nil, headers(token))['variables']
|
87
90
|
end
|
88
91
|
|
89
92
|
def get_variable(token, id, parent_id)
|
90
93
|
PredicsisMlSdk.logger.debug "GET dictionaries/#{parent_id}/variables/#{id}"
|
91
|
-
get("
|
94
|
+
get("/dictionaries/#{parent_id}/variables/#{id}", nil, headers(token))['variable']
|
92
95
|
end
|
93
96
|
|
94
97
|
def patch_variable(token, id, parent_id, params = {})
|
95
98
|
PredicsisMlSdk.logger.debug "PATCH dictionaries/#{parent_id}/variables/#{id}"
|
96
99
|
params = { variable: params }.to_json
|
97
|
-
patch("
|
100
|
+
patch("/dictionaries/#{parent_id}/variables/#{id}",
|
98
101
|
params, headers(token))['variable']
|
99
102
|
end
|
100
103
|
|
101
104
|
def get_signed_url(token, id)
|
102
105
|
PredicsisMlSdk.logger.debug "GET data_files/#{id}/signed_url"
|
103
|
-
get("
|
106
|
+
get("/data_files/#{id}/signed_url", nil, headers(token))['data_file']
|
104
107
|
end
|
105
108
|
|
106
109
|
MODELS.each do |model|
|
107
110
|
define_method("post_#{model}") do |token, params = {}, other_params = {}|
|
108
111
|
PredicsisMlSdk.logger.debug "POST #{model.pluralize}"
|
109
112
|
params = { :"#{model}" => params }.merge(other_params)
|
110
|
-
response = post("
|
113
|
+
response = post("/#{model.pluralize}", params.to_json, headers(token))
|
111
114
|
PredicsisMlSdk.logger.info("#{model}_id: #{response[model]['id']}")
|
112
115
|
response[model]
|
113
116
|
end
|
114
117
|
|
115
118
|
define_method("delete_#{model}") do |token, id|
|
116
119
|
PredicsisMlSdk.logger.debug "DELETE #{model.pluralize}/#{id}"
|
117
|
-
delete("
|
120
|
+
delete("/#{model.pluralize}/#{id}", nil, headers(token))
|
118
121
|
end
|
119
122
|
|
120
123
|
define_method("get_#{model}") do |token, id|
|
121
124
|
PredicsisMlSdk.logger.debug "GET #{model.pluralize}/#{id}"
|
122
|
-
get("
|
125
|
+
get("/#{model.pluralize}/#{id}", nil, headers(token))[model]
|
123
126
|
end
|
124
127
|
|
125
128
|
define_method("get_#{model.pluralize}") do |token|
|
126
129
|
PredicsisMlSdk.logger.debug "GET #{model.pluralize}"
|
127
|
-
get("
|
130
|
+
get("/#{model.pluralize}", nil, headers(token))[model.pluralize]
|
128
131
|
end
|
129
132
|
|
130
133
|
define_method("patch_#{model}") do |token, id, params = {}|
|
131
134
|
params = { :"#{model}" => params }.to_json
|
132
135
|
PredicsisMlSdk.logger.debug "PATCH #{model.pluralize}/#{id}"
|
133
|
-
patch("
|
136
|
+
patch("/#{model.pluralize}/#{id}", params, headers(token))[model]
|
134
137
|
end
|
135
138
|
end
|
136
139
|
|
@@ -143,10 +146,6 @@ module PredicsisMlSdk
|
|
143
146
|
'Authorization' => "Bearer #{token}"
|
144
147
|
}
|
145
148
|
end
|
146
|
-
|
147
|
-
def api_host
|
148
|
-
PredicsisMlSdk.config.predicsis_api_host
|
149
|
-
end
|
150
149
|
end
|
151
150
|
end
|
152
151
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'predicsis_ml_sdk/upload_helper'
|
2
|
+
require 'ruby-progressbar'
|
3
|
+
|
4
|
+
module PredicsisMlSdk
|
5
|
+
class Upload
|
6
|
+
include Util
|
7
|
+
include UploadHelper
|
8
|
+
|
9
|
+
def self.start(file, token = bearer_token)
|
10
|
+
Upload.initiate.tap do |u|
|
11
|
+
u.upload(file)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.initiate(token = bearer_token)
|
16
|
+
data = Requests.initiate_upload(token)
|
17
|
+
new(data['id'], data['path'], token).tap do |upload|
|
18
|
+
upload.define_attributes(data)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.get_part_url(id, path, part_number, token = bearer_token)
|
23
|
+
new(id, path, token).get_part_url(part_number)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.complete(id, path, token = bearer_token)
|
27
|
+
new(id, path, token).complete
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(id, path, token = bearer_token)
|
31
|
+
@id = id
|
32
|
+
@path = path
|
33
|
+
@token = token
|
34
|
+
end
|
35
|
+
|
36
|
+
def upload(file)
|
37
|
+
path = split_into_files(file)
|
38
|
+
nb_of_parts(file).times do |i|
|
39
|
+
tmp_path = path + i.to_s.rjust(5, '0')
|
40
|
+
sleep(1) until exists?(tmp_path, i, file)
|
41
|
+
Requests.upload(get_part_url(i + 1), tmp_path, i + 1)
|
42
|
+
progressbar.increment
|
43
|
+
end
|
44
|
+
Thread.new { FileUtils.rm_rf Dir.glob(path.gsub('part_', '')) }
|
45
|
+
complete
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_part_url(part_number)
|
49
|
+
Requests.get_part_url(token, id, part_number, path)['part_url']
|
50
|
+
end
|
51
|
+
|
52
|
+
def complete
|
53
|
+
Requests.complete_upload(token, id, path)
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_h
|
57
|
+
instance_variables.each_with_object({}) do |var, hash|
|
58
|
+
hash[var.to_s.delete("@")] = instance_variable_get(var) unless var.to_s == '@token'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def path
|
63
|
+
@path ||= defined?(key) ? key : object
|
64
|
+
end
|
65
|
+
|
66
|
+
def progressbar
|
67
|
+
@progressbar ||= ProgressBar.create(format: '|%b>%i| %p%% %t', starting_at: 0, :total => @nb_of_parts)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module PredicsisMlSdk
|
2
|
+
module UploadHelper
|
3
|
+
OFFSET = 52_428_800
|
4
|
+
|
5
|
+
def nb_of_parts(file)
|
6
|
+
@nb_of_parts ||= (File.size(file).to_f / OFFSET).ceil
|
7
|
+
end
|
8
|
+
|
9
|
+
def split_into_files(file_path, offset = OFFSET)
|
10
|
+
dir = "tmp/multiparts/#{Time.now.to_i}"
|
11
|
+
FileUtils.mkdir_p(dir)
|
12
|
+
path = dir + '/part_'
|
13
|
+
Thread.new(abort_on_exception: true) do
|
14
|
+
nb_of_parts(file_path).times do |i|
|
15
|
+
File.open(path + i.to_s.rjust(5, '0'), 'wb') do |tmp_file|
|
16
|
+
tmp_file.write(IO.binread(file_path, offset, offset * i))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
path
|
21
|
+
end
|
22
|
+
|
23
|
+
def exists?(part_path, part_number, file_path)
|
24
|
+
if @nb_of_parts == part_number + 1
|
25
|
+
File.exist?(part_path) &&
|
26
|
+
File.size(part_path) == File.size(file_path).to_f - ((@nb_of_parts - 1) * OFFSET)
|
27
|
+
else
|
28
|
+
File.exist?(part_path) && File.size(part_path) == OFFSET
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: predicsis_ml_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Armand
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -51,25 +51,19 @@ dependencies:
|
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 2.7.1
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
54
|
+
name: rest-client
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.3.16
|
59
|
+
version: '1.8'
|
63
60
|
type: :runtime
|
64
61
|
prerelease: false
|
65
62
|
version_requirements: !ruby/object:Gem::Requirement
|
66
63
|
requirements:
|
67
64
|
- - "~>"
|
68
65
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 0.3.16
|
66
|
+
version: '1.8'
|
73
67
|
- !ruby/object:Gem::Dependency
|
74
68
|
name: nokogiri
|
75
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,6 +84,26 @@ dependencies:
|
|
90
84
|
- - ">="
|
91
85
|
- !ruby/object:Gem::Version
|
92
86
|
version: 1.6.3
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: ruby-progressbar
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.7'
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.7.3
|
97
|
+
type: :runtime
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.7'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.7.3
|
93
107
|
description: 'PredicSis ML SDK is the official SDK for PredicSis API: http://launch.predicsis.com/'
|
94
108
|
email:
|
95
109
|
- armand.bourquin@predicsis.com
|
@@ -102,7 +116,6 @@ files:
|
|
102
116
|
- lib/predicsis_ml_sdk/configuration.rb
|
103
117
|
- lib/predicsis_ml_sdk/core_ext.rb
|
104
118
|
- lib/predicsis_ml_sdk/core_ext/string.rb
|
105
|
-
- lib/predicsis_ml_sdk/credentials.rb
|
106
119
|
- lib/predicsis_ml_sdk/data_file.rb
|
107
120
|
- lib/predicsis_ml_sdk/dataset.rb
|
108
121
|
- lib/predicsis_ml_sdk/dictionary.rb
|
@@ -115,6 +128,8 @@ files:
|
|
115
128
|
- lib/predicsis_ml_sdk/report.rb
|
116
129
|
- lib/predicsis_ml_sdk/requests.rb
|
117
130
|
- lib/predicsis_ml_sdk/source.rb
|
131
|
+
- lib/predicsis_ml_sdk/upload.rb
|
132
|
+
- lib/predicsis_ml_sdk/upload_helper.rb
|
118
133
|
- lib/predicsis_ml_sdk/util.rb
|
119
134
|
- lib/predicsis_ml_sdk/variable.rb
|
120
135
|
- lib/predicsis_ml_sdk/version.rb
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module PredicsisMlSdk
|
2
|
-
class Credentials
|
3
|
-
include Util
|
4
|
-
|
5
|
-
def self.get(type = 's3', token = bearer_token)
|
6
|
-
new(token).get(type)
|
7
|
-
end
|
8
|
-
|
9
|
-
def initialize(token = bearer_token)
|
10
|
-
@token = token
|
11
|
-
end
|
12
|
-
|
13
|
-
def get(type = 's3')
|
14
|
-
data = Requests.get_credentials(type, token)
|
15
|
-
define_attributes(data)
|
16
|
-
self
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_h
|
20
|
-
instance_variables.each_with_object({}) do |var, hash|
|
21
|
-
hash[var.to_s.delete("@")] = instance_variable_get(var) unless var.to_s == '@token'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|