cnvrg 0.0.1422 → 0.0.1424
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/cnvrg.gemspec +2 -0
- data/lib/cnvrg/cli.rb +73 -93
- data/lib/cnvrg/datafiles.rb +17 -14
- data/lib/cnvrg/dataset.rb +4 -6
- data/lib/cnvrg/experiment.rb +4 -4
- data/lib/cnvrg/files.rb +281 -244
- data/lib/cnvrg/project.rb +2 -4
- data/lib/cnvrg/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 175af4d0c0a0bb3bf60b921c412da5de3254927c
|
4
|
+
data.tar.gz: 97c6df1be57c4e17a5aeac38e1e0407eb9a1bdfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8d9944d378b24808d49cd366e8e4d58ef31ea834b186d12774c369f793ecaf8fdff1b10e197121be2ec274cbde93447f9bcef60c5a9586837a907e5f88e3655
|
7
|
+
data.tar.gz: 8c36084a0068b92e58b777e2c080c132aa5df4440d7337ece94185718d4e18f0ceef2de0ab6b2edb7808d4c6fef08a31a8ce088c702e19db2030152dbcef1a3e
|
data/cnvrg.gemspec
CHANGED
@@ -39,6 +39,8 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_runtime_dependency 'docker-api', '~> 1.33'
|
40
40
|
spec.add_runtime_dependency 'rubyzip', '~> 1.2'
|
41
41
|
spec.add_runtime_dependency 'activesupport', '~> 5.0'
|
42
|
+
spec.add_runtime_dependency 'ruby-progressbar'
|
43
|
+
|
42
44
|
|
43
45
|
|
44
46
|
end
|
data/lib/cnvrg/cli.rb
CHANGED
@@ -33,6 +33,7 @@ require 'zip'
|
|
33
33
|
require 'active_support/all'
|
34
34
|
require 'thor'
|
35
35
|
require 'pathname'
|
36
|
+
require 'enumerator'
|
36
37
|
|
37
38
|
|
38
39
|
class Thor
|
@@ -94,7 +95,7 @@ class Thor
|
|
94
95
|
if !args.empty? and local_options.is_a? Array and !local_options.empty?
|
95
96
|
args = args + local_options
|
96
97
|
else
|
97
|
-
|
98
|
+
args = args.flatten()
|
98
99
|
end
|
99
100
|
|
100
101
|
end
|
@@ -210,7 +211,7 @@ module Cnvrg
|
|
210
211
|
config = {owner: config.to_h[:owner], username: config.to_h[:username], version_last_check: config.to_h[:version_last_check], api: url}
|
211
212
|
end
|
212
213
|
res = Cnvrg::API.request("/users/#{owner}/custom_api", 'POST', {custom_api: url})
|
213
|
-
if Cnvrg::CLI.is_response_success(res)
|
214
|
+
if Cnvrg::CLI.is_response_success(res,false)
|
214
215
|
|
215
216
|
checks = Helpers.checkmark
|
216
217
|
|
@@ -1195,8 +1196,12 @@ module Cnvrg
|
|
1195
1196
|
exit(1)
|
1196
1197
|
end
|
1197
1198
|
say "Uploading data", Thor::Shell::Color::BLUE
|
1198
|
-
|
1199
|
-
|
1199
|
+
eta = Time.now + 600
|
1200
|
+
start = Time.now
|
1201
|
+
res = false
|
1202
|
+
with_progress_bar do
|
1203
|
+
res = @files.upload_tar_file(tar_path, tar_path, commit_sha1)
|
1204
|
+
end
|
1200
1205
|
|
1201
1206
|
if res
|
1202
1207
|
cur_idx = @dataset.get_idx.to_h
|
@@ -1447,7 +1452,7 @@ module Cnvrg
|
|
1447
1452
|
else
|
1448
1453
|
# blob
|
1449
1454
|
|
1450
|
-
if @files.download_file_s3(f[0], relative_path, project_home,commit_sha1=current_commit)
|
1455
|
+
if @files.download_file_s3(f[0], relative_path, project_home, commit_sha1=current_commit)
|
1451
1456
|
successful_changes << relative_path
|
1452
1457
|
end
|
1453
1458
|
end
|
@@ -1846,7 +1851,7 @@ module Cnvrg
|
|
1846
1851
|
|
1847
1852
|
result["conflicts"].each do |f|
|
1848
1853
|
relative_path = f.gsub(/^#{@project.local_path}/, "")
|
1849
|
-
if @files.download_file_s3(f, relative_path, project_home,commit_sha1=nil, conflict=true)
|
1854
|
+
if @files.download_file_s3(f, relative_path, project_home, commit_sha1=nil, conflict=true)
|
1850
1855
|
successful_changes << relative_path
|
1851
1856
|
end
|
1852
1857
|
|
@@ -1971,7 +1976,7 @@ module Cnvrg
|
|
1971
1976
|
end
|
1972
1977
|
else
|
1973
1978
|
# blob
|
1974
|
-
if @files.download_file_s3(f[0], relative_path, project_home,commit_sha1=commit_sha1)
|
1979
|
+
if @files.download_file_s3(f[0], relative_path, project_home, commit_sha1=commit_sha1)
|
1975
1980
|
current_tree.delete(relative_path)
|
1976
1981
|
|
1977
1982
|
successful_changes << relative_path
|
@@ -2063,26 +2068,26 @@ module Cnvrg
|
|
2063
2068
|
|
2064
2069
|
|
2065
2070
|
desc 'run cmd', 'Runs an experiment'
|
2066
|
-
method_option :local, :type => :boolean, :aliases => ["-l","--local"], :default => false
|
2071
|
+
method_option :local, :type => :boolean, :aliases => ["-l", "--local"], :default => false
|
2067
2072
|
method_option :small, :type => :boolean, :aliases => ["-sm", "--small"], :default => false
|
2068
2073
|
method_option :medium, :type => :boolean, :aliases => ["-md", "--medium"], :default => false
|
2069
2074
|
method_option :large, :type => :boolean, :aliases => ["-lg", "--large"], :default => false
|
2070
2075
|
method_option :gpu, :type => :boolean, :aliases => ["--gpu"], :default => false
|
2071
2076
|
method_option :gpuxl, :type => :boolean, :aliases => ["--gpuxl"], :default => false
|
2072
2077
|
method_option :gpuxxl, :type => :boolean, :aliases => ["--gpuxxl"], :default => false
|
2073
|
-
method_option :sync_before, :type => :boolean, :aliases => ["-sb","--sync_before"], :default => true
|
2074
|
-
method_option :sync_after, :type => :boolean, :aliases => ["-sa","--sync_after"], :default => true
|
2078
|
+
method_option :sync_before, :type => :boolean, :aliases => ["-sb", "--sync_before"], :default => true
|
2079
|
+
method_option :sync_after, :type => :boolean, :aliases => ["-sa", "--sync_after"], :default => true
|
2075
2080
|
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
2076
2081
|
method_option :log, :type => :boolean, :aliases => ["--log"], :default => false
|
2077
|
-
method_option :email_notification, :type => :boolean, :aliases => ["-en","--email_notification"], :default => false
|
2078
|
-
method_option :upload_output, :type => :string, :aliases => ["-uo","--upload_output"], :default => ""
|
2079
|
-
method_option :commit, :type => :string, :aliases => ["-c","--commit"], :default => ""
|
2080
|
-
method_option :schedule, :type => :string, :aliases => ["-s","--schedule"], :default => ""
|
2081
|
-
method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
|
2082
|
+
method_option :email_notification, :type => :boolean, :aliases => ["-en", "--email_notification"], :default => false
|
2083
|
+
method_option :upload_output, :type => :string, :aliases => ["-uo", "--upload_output"], :default => ""
|
2084
|
+
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
|
2085
|
+
method_option :schedule, :type => :string, :aliases => ["-s", "--schedule"], :default => ""
|
2086
|
+
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
2082
2087
|
method_option :grid, :type => :string, :aliases => ["-g", "--grid"], :default => ""
|
2083
2088
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2084
2089
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
2085
|
-
method_option :ignore, :type => :string, :aliases => ["-i","--ignore"], :desc => "ignore following files", :default => ""
|
2090
|
+
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2086
2091
|
|
2087
2092
|
def run(*cmd)
|
2088
2093
|
sync_before = options["sync_before"]
|
@@ -2119,7 +2124,7 @@ module Cnvrg
|
|
2119
2124
|
end
|
2120
2125
|
exec_options = real_options.map { |x| "--#{x[0]}=#{x[1]}" }.flatten.join(" ")
|
2121
2126
|
cmd_to_exec = "#{exec_options} #{cmd.join(" ")}"
|
2122
|
-
invoke :exec_remote, [cmd]
|
2127
|
+
invoke :exec_remote, [cmd], :sync_before => sync_before, :sync_after => sync_after, :title => title, :machine_type => instance_type,
|
2123
2128
|
:schedule => schedule, :log => log, :email_notification => email_notification, :upload_output => upload_output, :commit => commit,
|
2124
2129
|
:image => image, :grid => grid, :data => data, :data_commit => data_commit, :ignore => ignore
|
2125
2130
|
return
|
@@ -2141,19 +2146,19 @@ module Cnvrg
|
|
2141
2146
|
desc '', '', :hide => true
|
2142
2147
|
method_option :sync_before, :type => :boolean, :aliases => ["-sb,--sync_before"], :default => true
|
2143
2148
|
method_option :sync_after, :type => :boolean, :aliases => ["-sa,--sync_after"], :default => true
|
2144
|
-
method_option :title, :type => :string, :aliases => ["-t","--title"], :default => ""
|
2145
|
-
method_option :log, :type => :boolean, :aliases => [
|
2149
|
+
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
2150
|
+
method_option :log, :type => :boolean, :aliases => ["--log"], :default => false
|
2146
2151
|
method_option :email_notification, :type => :boolean, :aliases => ["-en,--email_notification"], :default => false
|
2147
2152
|
method_option :upload_output, :type => :string, :aliases => ["-uo,--upload_output"], :default => ""
|
2148
|
-
method_option :commit, :type => :string, :aliases => ["-c","--commit"], :default => ""
|
2149
|
-
method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
|
2153
|
+
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
|
2154
|
+
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
2150
2155
|
method_option :indocker, :type => :boolean, :aliases => ["--indocker"], :default => false
|
2151
2156
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2152
2157
|
method_option :data_commit, :type => :string, :aliases => ["-dc", "--data_commit"], :default => ""
|
2153
|
-
method_option :ignore, :type => :string, :aliases => ["-i","--ignore"], :desc => "ignore following files", :default => ""
|
2154
|
-
|
2158
|
+
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2155
2159
|
|
2156
2160
|
def exec(*cmd)
|
2161
|
+
|
2157
2162
|
log = []
|
2158
2163
|
cpu_average =0
|
2159
2164
|
memory_average = 0
|
@@ -2564,20 +2569,20 @@ module Cnvrg
|
|
2564
2569
|
end
|
2565
2570
|
|
2566
2571
|
desc '', '', :hide => true
|
2567
|
-
method_option :sync_before, :type => :boolean, :aliases => ["-sb","--sync_before"], :default => true
|
2568
|
-
method_option :sync_after, :type => :boolean, :aliases => ["-sa","--sync_after"], :default => true
|
2569
|
-
method_option :title, :type => :string, :aliases => ["-t","--title"], :default => ""
|
2570
|
-
method_option :log, :type => :boolean, :aliases => [
|
2571
|
-
method_option :email_notification, :type => :boolean, :aliases => ["-en","--email_notification"], :default => false
|
2572
|
-
method_option :upload_output, :type => :string, :aliases => ["-uo","--upload_output"], :default => ""
|
2572
|
+
method_option :sync_before, :type => :boolean, :aliases => ["-sb", "--sync_before"], :default => true
|
2573
|
+
method_option :sync_after, :type => :boolean, :aliases => ["-sa", "--sync_after"], :default => true
|
2574
|
+
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
2575
|
+
method_option :log, :type => :boolean, :aliases => ["--log"], :default => false
|
2576
|
+
method_option :email_notification, :type => :boolean, :aliases => ["-en", "--email_notification"], :default => false
|
2577
|
+
method_option :upload_output, :type => :string, :aliases => ["-uo", "--upload_output"], :default => ""
|
2573
2578
|
method_option :machine_type, :type => :string, :default => ""
|
2574
|
-
method_option :schedule, :type => :string, :aliases => ["-s","--schedule"], :default => ""
|
2579
|
+
method_option :schedule, :type => :string, :aliases => ["-s", "--schedule"], :default => ""
|
2575
2580
|
method_option :commit, :type => :string, :aliases => ["-c, --commit"], :default => nil
|
2576
|
-
method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
|
2581
|
+
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
2577
2582
|
method_option :grid, :type => :string, :aliases => ["-g", "--grid"], :default => ""
|
2578
2583
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2579
2584
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
2580
|
-
method_option :ignore, :type => :string, :aliases => ["-i","--ignore"], :desc => "ignore following files", :default => ""
|
2585
|
+
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2581
2586
|
|
2582
2587
|
def exec_remote(*cmd)
|
2583
2588
|
verify_logged_in(true)
|
@@ -2589,6 +2594,7 @@ module Cnvrg
|
|
2589
2594
|
grid = options["grid"] || nil
|
2590
2595
|
data = options["data"] || nil
|
2591
2596
|
data_commit = options["data_commit"] || nil
|
2597
|
+
sync_before = options["sync_before"]
|
2592
2598
|
|
2593
2599
|
instance_type = options["machine_type"] || nil
|
2594
2600
|
schedule = options["schedule"] || ""
|
@@ -2652,9 +2658,23 @@ module Cnvrg
|
|
2652
2658
|
image_slug = image.image_slug
|
2653
2659
|
end
|
2654
2660
|
|
2661
|
+
invoke :sync, [false], [] if sync_before
|
2655
2662
|
|
2656
|
-
invoke :sync, [false], []
|
2657
2663
|
|
2664
|
+
if command.include? "'"
|
2665
|
+
oc = command.to_enum(:scan, /'/).map { Regexp.last_match }
|
2666
|
+
pairs = oc.enum_for(:each_slice, 2).to_a
|
2667
|
+
pairs.each_with_index do |p,i|
|
2668
|
+
add=0
|
2669
|
+
if i!=0
|
2670
|
+
add=2*i
|
2671
|
+
end
|
2672
|
+
total_loc = command[p[0].offset(0)[0]+add..p[1].offset(0)[0]+add]
|
2673
|
+
command[p[0].offset(0)[0]+add..p[1].offset(0)[0]+add] = "\"#{total_loc}\""
|
2674
|
+
end
|
2675
|
+
|
2676
|
+
|
2677
|
+
end
|
2658
2678
|
say "Running remote experiment", Thor::Shell::Color::BLUE
|
2659
2679
|
exp = Experiment.new(project.owner, project.slug)
|
2660
2680
|
res = exp.exec_remote(command, commit_to_run, instance_type, image_slug, schedule, local_timestamp, grid, path_to_cmd, data, data_commit)
|
@@ -4573,6 +4593,9 @@ module Cnvrg
|
|
4573
4593
|
|
4574
4594
|
config = YAML.load_file(File.expand_path('~')+"/.cnvrg/config.yml")
|
4575
4595
|
version_date = config.to_h[:version_last_check]
|
4596
|
+
if version_date.nil?
|
4597
|
+
version_date = get_start_day()
|
4598
|
+
end
|
4576
4599
|
next_day = get_start_day+ 86399
|
4577
4600
|
if not (version_date..next_day).cover?(Time.now)
|
4578
4601
|
if should_update_version()
|
@@ -4848,73 +4871,30 @@ module Cnvrg
|
|
4848
4871
|
`tar -xvf #{file_path} -C #{dir_path} > /dev/null 2>&1`
|
4849
4872
|
return $?.success?
|
4850
4873
|
end
|
4851
|
-
end
|
4852
|
-
end
|
4853
|
-
class Data < SubCommandBase
|
4854
|
-
desc "data init", "init data folder"
|
4855
|
-
method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
|
4856
|
-
|
4857
|
-
def init
|
4858
|
-
cli = Cnvrg::CLI.new()
|
4859
|
-
public = options["public"]
|
4860
|
-
cli.init_data(public)
|
4861
|
-
end
|
4862
|
-
|
4863
|
-
desc "data upload", "upload data folder"
|
4864
|
-
method_option :ignore, :type => :array, :aliases => ["-i", "--i"], :desc => "ignore following files"
|
4865
|
-
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
4866
|
-
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
4867
|
-
|
4868
|
-
def upload
|
4869
|
-
cli = Cnvrg::CLI.new()
|
4870
|
-
ignore = options["ignore"]
|
4871
|
-
verbose = options["verbose"]
|
4872
|
-
sync = options["sync"]
|
4873
|
-
|
4874
|
-
cli.upload_data_tar(ignore, verbose, sync)
|
4875
|
-
end
|
4876
|
-
|
4877
|
-
desc 'data download', 'pull data'
|
4878
|
-
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
4879
|
-
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
4880
|
-
|
4881
|
-
def download()
|
4882
|
-
cli = Cnvrg::CLI.new()
|
4883
|
-
verbose = options["verbose"]
|
4884
|
-
sync = options["sync"]
|
4885
|
-
|
4886
|
-
cli.download_data(verbose, sync, Dir.pwd)
|
4887
|
-
|
4888
|
-
end
|
4889
4874
|
|
4890
|
-
|
4875
|
+
def with_progress_bar
|
4876
|
+
not_done = true
|
4877
|
+
upload_progress_bar = ProgressBar.create(:title => "Upload progress",
|
4878
|
+
:format => '%a <%B> %p%% %t',
|
4879
|
+
:starting_at => 0,
|
4880
|
+
:total => 600)
|
4881
|
+
pb = Thread.new do
|
4882
|
+
while not_done do
|
4883
|
+
upload_progress_bar.increment
|
4884
|
+
sleep(1)
|
4891
4885
|
|
4892
|
-
|
4893
|
-
|
4894
|
-
cli.clone_data(dataset_url)
|
4895
|
-
|
4896
|
-
end
|
4897
|
-
|
4898
|
-
desc 'data list', 'list of datasets'
|
4899
|
-
|
4900
|
-
def list()
|
4901
|
-
cli = Cnvrg::CLI.new()
|
4902
|
-
|
4903
|
-
cli.list_dataset()
|
4886
|
+
end
|
4887
|
+
end
|
4904
4888
|
|
4889
|
+
yield.tap do # After yielding to the block, save the return value
|
4890
|
+
not_done = false # Tell the thread to exit, cleaning up after itself…
|
4891
|
+
pb.join # …and wait for it to do so.
|
4892
|
+
end
|
4893
|
+
end
|
4905
4894
|
end
|
4906
4895
|
|
4907
|
-
desc 'data commits', 'pull data'
|
4908
|
-
|
4909
|
-
def commits()
|
4910
|
-
cli = Cnvrg::CLI.new()
|
4911
|
-
cli.list_dataset_commits()
|
4912
|
-
|
4913
|
-
end
|
4914
4896
|
|
4915
4897
|
end
|
4916
|
-
|
4917
4898
|
end
|
4918
4899
|
|
4919
4900
|
|
4920
|
-
|
data/lib/cnvrg/datafiles.rb
CHANGED
@@ -241,20 +241,23 @@ module Cnvrg
|
|
241
241
|
response = http.request request
|
242
242
|
body = response.read_body
|
243
243
|
end
|
244
|
+
is_python = false
|
245
|
+
s4cmd_suc = false
|
246
|
+
s4cmd_install_suc = false
|
244
247
|
|
245
248
|
URLcrypt::key = [body].pack('H*')
|
246
249
|
|
247
|
-
python_version=`python --version > /dev/null 2>&1` ; is_python=$?.success?
|
248
|
-
if is_python
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
end
|
256
|
-
|
257
|
-
if
|
250
|
+
# python_version=`python --version > /dev/null 2>&1` ; is_python=$?.success?
|
251
|
+
# if is_python
|
252
|
+
#
|
253
|
+
# s4cmd=`pip freeze 2>/dev/null |grep -e s4cmd -e boto3 > /dev/null 2>&1` ; s4cmd_suc=$?.success?
|
254
|
+
# if !s4cmd_suc
|
255
|
+
# `pip install s4cmd > /dev/null 2>&1` ; s4cmd_install_suc=$?.success?
|
256
|
+
# end
|
257
|
+
#
|
258
|
+
# end
|
259
|
+
|
260
|
+
if !s4cmd_suc and !s4cmd_install_suc
|
258
261
|
s3 = Aws::S3::Resource.new(
|
259
262
|
:access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
|
260
263
|
:secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
|
@@ -289,10 +292,10 @@ module Cnvrg
|
|
289
292
|
tmp.flush
|
290
293
|
tmp.close
|
291
294
|
|
292
|
-
|
295
|
+
is_success = false
|
293
296
|
count = 0
|
294
297
|
while !is_success and count <3
|
295
|
-
resp = `python #{tmp.path} --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
|
298
|
+
resp = `python #{tmp.path} --num-threads=8 --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
|
296
299
|
is_success =$?.success?
|
297
300
|
count +=1
|
298
301
|
|
@@ -479,7 +482,7 @@ module Cnvrg
|
|
479
482
|
|
480
483
|
response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {dataset_slug: @dataset_slug,new_branch:false,
|
481
484
|
username: @owner})
|
482
|
-
Cnvrg::CLI.is_response_success(response)
|
485
|
+
Cnvrg::CLI.is_response_success(response,false)
|
483
486
|
return response
|
484
487
|
end
|
485
488
|
|
data/lib/cnvrg/dataset.rb
CHANGED
@@ -168,8 +168,6 @@ module Cnvrg
|
|
168
168
|
|
169
169
|
File.open(".cnvrgignore", "w+") { |f| f.write cnvrgignore } unless File.exist? ".cnvrgignore"
|
170
170
|
rescue => e
|
171
|
-
puts e
|
172
|
-
puts e.backtrace
|
173
171
|
return false
|
174
172
|
end
|
175
173
|
return true
|
@@ -230,7 +228,7 @@ module Cnvrg
|
|
230
228
|
def downlowd_updated_data(current_commit)
|
231
229
|
|
232
230
|
response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/downlowd_updated_data", 'POST', {current_commit: current_commit})
|
233
|
-
CLI.is_response_success(response)
|
231
|
+
CLI.is_response_success(response,false)
|
234
232
|
return response
|
235
233
|
end
|
236
234
|
def compare_idx(new_branch, commit=last_local_commit,local_idx=nil)
|
@@ -239,7 +237,7 @@ module Cnvrg
|
|
239
237
|
end
|
240
238
|
|
241
239
|
response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/status", 'POST', {idx: local_idx, new_branch: new_branch, current_commit: commit})
|
242
|
-
CLI.is_response_success(response)
|
240
|
+
CLI.is_response_success(response,false)
|
243
241
|
return response
|
244
242
|
end
|
245
243
|
|
@@ -247,7 +245,7 @@ module Cnvrg
|
|
247
245
|
|
248
246
|
def compare_commits(commit)
|
249
247
|
response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/compare_commits", 'POST', {compare_commit: commit,current_commit:last_local_commit})
|
250
|
-
CLI.is_response_success(response)
|
248
|
+
CLI.is_response_success(response,false)
|
251
249
|
return response
|
252
250
|
end
|
253
251
|
|
@@ -256,7 +254,7 @@ module Cnvrg
|
|
256
254
|
commit = last_local_commit
|
257
255
|
end
|
258
256
|
response = Cnvrg::API.request("users/#{self.owner}/projects/#{self.slug}/commit/compare", 'POST', {current_commit: commit})
|
259
|
-
CLI.is_response_success(response)
|
257
|
+
CLI.is_response_success(response,false)
|
260
258
|
update_is_new_branch(response["result"]["new_branch"])
|
261
259
|
return response["result"]["new_branch"]
|
262
260
|
end
|
data/lib/cnvrg/experiment.rb
CHANGED
@@ -13,7 +13,7 @@ module Cnvrg
|
|
13
13
|
res = Cnvrg::API.request(@base_resource + "experiment/start", 'POST',
|
14
14
|
{input: input, platform: platform, machine_name: machine_name, start_commit: start_commit,
|
15
15
|
title: name, email_notification: email_notification, machine_activity: machine_activity,script_path:script_path})
|
16
|
-
Cnvrg::CLI.is_response_success(res)
|
16
|
+
Cnvrg::CLI.is_response_success(res,false)
|
17
17
|
|
18
18
|
@slug = res.to_h["result"].to_h["slug"]
|
19
19
|
|
@@ -37,7 +37,7 @@ module Cnvrg
|
|
37
37
|
def end_notebook_session(notebook_slug, end_commit)
|
38
38
|
res = Cnvrg::API.request(@base_resource + "notebook/end_session", 'POST',
|
39
39
|
{notebook_slug: notebook_slug, end_commit: end_commit})
|
40
|
-
Cnvrg::CLI.is_response_success(res)
|
40
|
+
Cnvrg::CLI.is_response_success(res,false)
|
41
41
|
|
42
42
|
return res
|
43
43
|
|
@@ -94,7 +94,7 @@ module Cnvrg
|
|
94
94
|
response = Cnvrg::API.request(@base_resource + "experiment/upload_temp_log", 'POST', {output: temp_log,
|
95
95
|
exp_slug: @slug, cpu_average: cpu_average,
|
96
96
|
memory_average: memory_average})
|
97
|
-
Cnvrg::CLI.is_response_success(response)
|
97
|
+
Cnvrg::CLI.is_response_success(response,false)
|
98
98
|
end
|
99
99
|
|
100
100
|
def end(output, exit_status, end_commit, cpu_average, memory_average)
|
@@ -102,7 +102,7 @@ module Cnvrg
|
|
102
102
|
response = Cnvrg::API.request(@base_resource + "experiment/end", 'POST', {output: output, exp_slug: @slug,
|
103
103
|
exit_status: exit_status, end_commit: end_commit,
|
104
104
|
cpu_average: cpu_average, memory_average: memory_average})
|
105
|
-
Cnvrg::CLI.is_response_success(response)
|
105
|
+
Cnvrg::CLI.is_response_success(response,false)
|
106
106
|
|
107
107
|
begin
|
108
108
|
FileUtils.rm_rf(["/home/ds/.cnvrg/tmp/exec.log"])
|
data/lib/cnvrg/files.rb
CHANGED
@@ -26,7 +26,7 @@ module Cnvrg
|
|
26
26
|
|
27
27
|
upload_resp = Cnvrg::API.request(@base_resource + "upload_file", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
|
28
28
|
commit_sha1: commit_sha1, file_name: file_name,
|
29
|
-
file_size: file_size, file_content_type: content_type, sha1:sha1})
|
29
|
+
file_size: file_size, file_content_type: content_type, sha1: sha1})
|
30
30
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
31
31
|
path = upload_resp["result"]["path"]
|
32
32
|
if file_size.to_f>= Cnvrg::Files::LARGE_FILE.to_f
|
@@ -36,24 +36,25 @@ module Cnvrg
|
|
36
36
|
end
|
37
37
|
return s3_res
|
38
38
|
# if s3_res
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
# update_s3_resp = Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
|
40
|
+
# blob_id: upload_resp["result"]["id"]})
|
41
|
+
# is_suc = Cnvrg::CLI.is_response_success(update_s3_resp, false)
|
42
|
+
#
|
43
|
+
# return is_suc
|
44
44
|
end
|
45
45
|
return false
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
|
+
def upload_log_file(absolute_path, relative_path, log_date)
|
48
49
|
file_name = File.basename relative_path
|
49
50
|
file_size = File.size(absolute_path).to_f
|
50
51
|
content_type = "text/x-log"
|
51
52
|
upload_resp = Cnvrg::API.request("/users/#{@owner}/" + "upload_cli_log", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
|
52
|
-
|
53
|
-
|
53
|
+
file_name: file_name, log_date: log_date,
|
54
|
+
file_size: file_size, file_content_type: content_type})
|
54
55
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
55
|
-
|
56
|
-
|
56
|
+
path = upload_resp["result"]["path"]
|
57
|
+
s3_res = upload_small_files_s3(path, absolute_path, "text/plain")
|
57
58
|
end
|
58
59
|
if s3_res
|
59
60
|
return true
|
@@ -61,18 +62,19 @@ module Cnvrg
|
|
61
62
|
return false
|
62
63
|
|
63
64
|
end
|
64
|
-
|
65
|
+
|
66
|
+
def upload_exec_file(absolute_path, image_name, commit_id)
|
65
67
|
file_name = File.basename absolute_path
|
66
68
|
file_size = File.size(absolute_path).to_f
|
67
69
|
content_type = "application/zip"
|
68
70
|
begin
|
69
71
|
upload_resp = Cnvrg::API.request("users/#{@owner}/images/" + "upload_config", 'POST_FILE', {relative_path: absolute_path,
|
70
72
|
file_name: file_name,
|
71
|
-
image_name:image_name,
|
73
|
+
image_name: image_name,
|
72
74
|
file_size: file_size,
|
73
75
|
file_content_type: content_type,
|
74
76
|
project_slug: @project_slug,
|
75
|
-
commit_id:commit_id})
|
77
|
+
commit_id: commit_id})
|
76
78
|
# puts upload_resp
|
77
79
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
78
80
|
if upload_resp["result"]["image"] == -1
|
@@ -82,21 +84,20 @@ module Cnvrg
|
|
82
84
|
s3_res = upload_small_files_s3(path, absolute_path, content_type)
|
83
85
|
|
84
86
|
end
|
85
|
-
|
86
|
-
|
87
|
+
if s3_res
|
88
|
+
return upload_resp["result"]["id"]
|
89
|
+
end
|
90
|
+
return false
|
91
|
+
rescue SignalException
|
92
|
+
|
93
|
+
say "\nAborting"
|
94
|
+
exit(1)
|
87
95
|
end
|
88
|
-
return false
|
89
|
-
rescue SignalException
|
90
96
|
|
91
|
-
say "\nAborting"
|
92
|
-
exit(1)
|
93
97
|
end
|
94
98
|
|
95
|
-
end
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
def upload_image(absolute_path, image_name, owner, is_public, is_base,dpkg,libraries,bash,message,commit_id)
|
100
|
+
def upload_image(absolute_path, image_name, owner, is_public, is_base, dpkg, libraries, bash, message, commit_id)
|
100
101
|
file_name = File.basename absolute_path
|
101
102
|
file_size = File.size(absolute_path).to_f
|
102
103
|
if is_base
|
@@ -106,41 +107,42 @@ module Cnvrg
|
|
106
107
|
content_type = "application/gzip"
|
107
108
|
end
|
108
109
|
begin
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
110
|
+
upload_resp = Cnvrg::API.request("users/#{owner}/images/" + "upload_cnvrg", 'POST_FILE', {relative_path: absolute_path,
|
111
|
+
file_name: file_name,
|
112
|
+
image_name: image_name,
|
113
|
+
file_size: file_size,
|
114
|
+
file_content_type: content_type,
|
115
|
+
is_public: is_public,
|
116
|
+
project_slug: @project_slug,
|
117
|
+
commit_id: commit_id,
|
118
|
+
dpkg: dpkg,
|
119
|
+
py2: libraries,
|
120
|
+
py3: libraries,
|
121
|
+
|
122
|
+
bash_history: bash,
|
123
|
+
commit_message: message,
|
124
|
+
is_base: is_base})
|
125
|
+
# puts upload_resp
|
126
|
+
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
127
|
+
path = upload_resp["result"]["path"]
|
128
|
+
s3_res = upload_small_files_s3(path, absolute_path, content_type)
|
129
|
+
if s3_res
|
130
|
+
commit_resp = Cnvrg::API.request("users/#{owner}/images/#{upload_resp["result"]["id"]}/" + "commit", 'GET')
|
131
|
+
if Cnvrg::CLI.is_response_success(commit_resp, false)
|
132
|
+
return commit_resp["result"]["image"]
|
133
|
+
else
|
134
|
+
return false
|
135
|
+
end
|
135
136
|
|
137
|
+
end
|
136
138
|
end
|
137
|
-
|
138
|
-
|
139
|
-
rescue =>e
|
139
|
+
return false
|
140
|
+
rescue => e
|
140
141
|
end
|
141
142
|
|
142
143
|
end
|
143
|
-
|
144
|
+
|
145
|
+
def upload_cnvrg_image(absolute_path, image_name, owner, is_public, is_base, dpkg, libraries, bash, message)
|
144
146
|
file_name = File.basename absolute_path
|
145
147
|
file_size = File.size(absolute_path).to_f
|
146
148
|
if is_base
|
@@ -151,16 +153,16 @@ module Cnvrg
|
|
151
153
|
end
|
152
154
|
begin
|
153
155
|
upload_resp = Cnvrg::API.request("users/#{owner}/images/" + "upload_cnvrg", 'POST_FILE', {relative_path: absolute_path,
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
156
|
+
file_name: file_name,
|
157
|
+
image_name: image_name,
|
158
|
+
file_size: file_size,
|
159
|
+
file_content_type: content_type,
|
160
|
+
is_public: is_public,
|
161
|
+
dpkg: dpkg,
|
162
|
+
libraries: libraries,
|
163
|
+
bash_history: bash,
|
164
|
+
commit_message: message,
|
165
|
+
is_base: is_base})
|
164
166
|
# puts upload_resp
|
165
167
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
166
168
|
path = upload_resp["result"]["path"]
|
@@ -176,7 +178,7 @@ module Cnvrg
|
|
176
178
|
end
|
177
179
|
end
|
178
180
|
return false
|
179
|
-
rescue =>e
|
181
|
+
rescue => e
|
180
182
|
end
|
181
183
|
|
182
184
|
end
|
@@ -208,225 +210,260 @@ module Cnvrg
|
|
208
210
|
|
209
211
|
def upload_large_files_s3(upload_resp, file_path)
|
210
212
|
begin
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
if
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
213
|
+
# speed_uri = URI.parse("https://s3-us-west-2.amazonaws.com/cnvrgw2-dev/speedtest-cli")
|
214
|
+
# speed_http_object = Net::HTTP.new(speed_uri.host, speed_uri.port)
|
215
|
+
# speed_http_object.use_ssl = true if speed_uri.scheme == 'https'
|
216
|
+
# speed_request = Net::HTTP::Get.new("https://s3-us-west-2.amazonaws.com/cnvrgw2-dev/speedtest-cli")
|
217
|
+
#
|
218
|
+
# speed_body = ""
|
219
|
+
# speed_http_object.start do |http|
|
220
|
+
# response = http.request speed_request
|
221
|
+
# speed_body = response.read_body
|
222
|
+
# end
|
223
|
+
# speed_tmp = Tempfile.new('speed')
|
224
|
+
# speed_tmp << speed_body
|
225
|
+
# speed_tmp.flush
|
226
|
+
# speed_tmp.close
|
227
|
+
# count = 0
|
228
|
+
# sum = 0
|
229
|
+
# speed_res = `python #{speed_tmp.path} --json`
|
230
|
+
# if !speed_res.nil? and !speed_res.empty?
|
231
|
+
# upload = JSON.parse(speed_res)["upload"]
|
232
|
+
# if !upload.nil?
|
233
|
+
# up_spped = (upload/1000000).round(2)
|
234
|
+
# end
|
235
|
+
#
|
236
|
+
#
|
237
|
+
# file_size = File.size(file_path)/1048576
|
238
|
+
# est_up = ((file_size*8)/up_spped)/60
|
239
|
+
# puts est_up
|
240
|
+
# end
|
241
|
+
|
242
|
+
|
243
|
+
sts_path = upload_resp["result"]["path_sts"]
|
244
|
+
s4cmd_path = upload_resp["result"]["path_s4cmd"]
|
245
|
+
|
246
|
+
uri = URI.parse(sts_path)
|
247
|
+
http_object = Net::HTTP.new(uri.host, uri.port)
|
248
|
+
http_object.use_ssl = true if uri.scheme == 'https'
|
249
|
+
request = Net::HTTP::Get.new(sts_path)
|
250
|
+
|
251
|
+
body = ""
|
252
|
+
http_object.start do |http|
|
253
|
+
response = http.request request
|
254
|
+
body = response.read_body
|
233
255
|
end
|
234
256
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
+
URLcrypt::key = [body].pack('H*')
|
258
|
+
is_python = false
|
259
|
+
s4cmd_suc = false
|
260
|
+
s4cmd_install_suc = false
|
261
|
+
# python_version=`python --version > /dev/null 2>&1`; is_python=$?.success?
|
262
|
+
# if is_python
|
263
|
+
#
|
264
|
+
# s4cmd=`pip freeze 2>/dev/null |grep -e s4cmd -e boto3 > /dev/null 2>&1`; s4cmd_suc=$?.success?
|
265
|
+
# if !s4cmd_suc
|
266
|
+
# `pip install s4cmd > /dev/null 2>&1`; s4cmd_install_suc=$?.success?
|
267
|
+
# end
|
268
|
+
#
|
269
|
+
# end
|
270
|
+
if !s4cmd_suc and !s4cmd_install_suc
|
271
|
+
s3 = Aws::S3::Resource.new(
|
272
|
+
:access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
|
273
|
+
:secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
|
274
|
+
:session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
|
275
|
+
:region => URLcrypt.decrypt(upload_resp["result"]["region"]))
|
276
|
+
resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
|
277
|
+
object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
|
278
|
+
upload_file(file_path, {:use_accelerate_endpoint => true})
|
279
|
+
else
|
280
|
+
s4cmd_uri = URI.parse(s4cmd_path)
|
281
|
+
s4cmd_http_object = Net::HTTP.new(s4cmd_uri.host, s4cmd_uri.port)
|
282
|
+
s4cmd_http_object.use_ssl = true if s4cmd_uri.scheme == 'https'
|
283
|
+
s4cmd_request = Net::HTTP::Get.new(s4cmd_path)
|
284
|
+
|
285
|
+
s4cmd_body = ""
|
286
|
+
s4cmd_http_object.start do |http|
|
287
|
+
response = http.request s4cmd_request
|
288
|
+
s4cmd_body = response.read_body
|
289
|
+
end
|
290
|
+
s4cmd_new_body = s4cmd_body.gsub(" self.client = self.boto3.client('s3',
|
257
291
|
aws_access_key_id=aws_access_key_id,
|
258
|
-
aws_secret_access_key=aws_secret_access_key)"," self.client = self.boto3.client('s3',
|
292
|
+
aws_secret_access_key=aws_secret_access_key)", " self.client = self.boto3.client('s3',
|
259
293
|
aws_access_key_id='#{ URLcrypt.decrypt(upload_resp["result"]["sts_a"])}',
|
260
294
|
aws_secret_access_key='#{URLcrypt.decrypt(upload_resp["result"]["sts_s"])}',
|
261
295
|
aws_session_token='#{URLcrypt.decrypt(upload_resp["result"]["sts_st"])}')")
|
262
296
|
|
263
297
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
298
|
+
tmp = Tempfile.new('s4cmd.py')
|
299
|
+
tmp << s4cmd_new_body
|
300
|
+
tmp.flush
|
301
|
+
tmp.close
|
302
|
+
#
|
303
|
+
is_success = false
|
304
|
+
count = 0
|
305
|
+
while !is_success and count <3
|
306
|
+
resp = `python #{tmp.path} --num-threads=8 --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1 `
|
307
|
+
is_success =$?.success?
|
308
|
+
count +=1
|
268
309
|
|
269
|
-
|
270
|
-
|
271
|
-
while !is_success and count <3
|
272
|
-
resp = `python #{tmp.path} --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
|
273
|
-
is_success =$?.success?
|
274
|
-
count +=1
|
310
|
+
end
|
311
|
+
resp= is_success
|
275
312
|
|
276
313
|
end
|
277
|
-
resp= is_success
|
278
314
|
|
279
|
-
|
315
|
+
return resp
|
280
316
|
|
281
|
-
|
317
|
+
rescue => e
|
318
|
+
if File.exist? tmp
|
319
|
+
FileUtils.rm_rf [tmp]
|
320
|
+
end
|
321
|
+
return false
|
282
322
|
|
283
|
-
rescue =>e
|
284
|
-
if File.exist? tmp
|
285
|
-
FileUtils.rm_rf [tmp]
|
286
323
|
end
|
287
|
-
return
|
324
|
+
return true
|
288
325
|
|
289
326
|
end
|
290
|
-
return true
|
291
327
|
|
292
|
-
|
328
|
+
def upload_small_files_s3(url_path, file_path, content_type)
|
329
|
+
url = URI.parse(url_path)
|
330
|
+
file = File.open(file_path, "rb")
|
331
|
+
body = file.read
|
332
|
+
begin
|
333
|
+
Net::HTTP.start(url.host) do |http|
|
334
|
+
http.send_request("PUT", url.request_uri, body, {
|
335
|
+
"content-type" => content_type,
|
336
|
+
})
|
337
|
+
end
|
338
|
+
return true
|
339
|
+
rescue Interrupt
|
340
|
+
return false
|
341
|
+
rescue
|
342
|
+
return false
|
343
|
+
end
|
344
|
+
end
|
293
345
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
http.send_request("PUT", url.request_uri, body, {
|
301
|
-
"content-type" => content_type,
|
302
|
-
})
|
346
|
+
def upload_url(file_path)
|
347
|
+
response = Cnvrg::API.request(@base_resource + "upload_url", 'POST', {file_s3_path: file_path})
|
348
|
+
if Cnvrg::CLI.is_response_success(response, false)
|
349
|
+
return response
|
350
|
+
else
|
351
|
+
return nil
|
303
352
|
end
|
304
|
-
|
305
|
-
rescue Interrupt
|
306
|
-
return false
|
307
|
-
rescue
|
308
|
-
return false
|
353
|
+
|
309
354
|
end
|
310
|
-
end
|
311
355
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
return response
|
316
|
-
else
|
317
|
-
return nil
|
356
|
+
def delete_file(absolute_path, relative_path, commit_sha1)
|
357
|
+
response = Cnvrg::API.request(@base_resource + "delete_file", 'DELETE', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
358
|
+
return Cnvrg::CLI.is_response_success(response, false)
|
318
359
|
end
|
319
360
|
|
320
|
-
|
361
|
+
def delete_dir(absolute_path, relative_path, commit_sha1)
|
362
|
+
response = Cnvrg::API.request(@base_resource + "delete_dir", 'DELETE', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
363
|
+
return Cnvrg::CLI.is_response_success(response, false)
|
364
|
+
end
|
321
365
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
366
|
+
def create_dir(absolute_path, relative_path, commit_sha1)
|
367
|
+
response = Cnvrg::API.request(@base_resource + "create_dir", 'POST', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
368
|
+
return Cnvrg::CLI.is_response_success(response, false)
|
369
|
+
end
|
326
370
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
371
|
+
def download_file_s3(absolute_path, relative_path, project_home, commit_sha1=nil, conflict=false)
|
372
|
+
begin
|
373
|
+
res = Cnvrg::API.request(@base_resource + "download_file", 'POST', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
374
|
+
Cnvrg::CLI.is_response_success(res, false)
|
375
|
+
if res["result"]
|
376
|
+
download_resp = res
|
377
|
+
filename = download_resp["result"]["filename"]
|
378
|
+
|
379
|
+
absolute_path += ".conflict" if conflict
|
380
|
+
sts_path = download_resp["result"]["path_sts"]
|
381
|
+
uri = URI.parse(sts_path)
|
382
|
+
http_object = Net::HTTP.new(uri.host, uri.port)
|
383
|
+
http_object.use_ssl = true if uri.scheme == 'https'
|
384
|
+
request = Net::HTTP::Get.new(sts_path)
|
385
|
+
|
386
|
+
body = ""
|
387
|
+
http_object.start do |http|
|
388
|
+
response = http.request request
|
389
|
+
body = response.read_body
|
390
|
+
end
|
391
|
+
URLcrypt::key = [body].pack('H*')
|
392
|
+
s3 = Aws::S3::Client.new(
|
393
|
+
:access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
|
394
|
+
:secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
|
395
|
+
:session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
|
396
|
+
:region => URLcrypt.decrypt(download_resp["result"]["region"]))
|
397
|
+
File.open(project_home+"/"+absolute_path, 'wb') do |file|
|
398
|
+
resp = s3.get_object({bucket: URLcrypt.decrypt(download_resp["result"]["bucket"]),
|
399
|
+
key: URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
|
400
|
+
end
|
401
|
+
return true
|
402
|
+
end
|
331
403
|
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
404
|
+
rescue => e
|
405
|
+
return false
|
406
|
+
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
def download_file(absolute_path, relative_path, project_home, conflict=false)
|
411
|
+
res = Cnvrg::API.request(@base_resource + "download_file", 'POST', {absolute_path: absolute_path, relative_path: relative_path})
|
339
412
|
Cnvrg::CLI.is_response_success(res, false)
|
340
413
|
if res["result"]
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
sts_path = download_resp["result"]["path_sts"]
|
346
|
-
uri = URI.parse(sts_path)
|
347
|
-
http_object = Net::HTTP.new(uri.host, uri.port)
|
348
|
-
http_object.use_ssl = true if uri.scheme == 'https'
|
349
|
-
request = Net::HTTP::Get.new(sts_path)
|
350
|
-
|
351
|
-
body = ""
|
352
|
-
http_object.start do |http|
|
353
|
-
response = http.request request
|
354
|
-
body = response.read_body
|
355
|
-
end
|
356
|
-
URLcrypt::key = [body].pack('H*')
|
357
|
-
s3 = Aws::S3::Client.new(
|
358
|
-
:access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
|
359
|
-
:secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
|
360
|
-
:session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
|
361
|
-
:region => URLcrypt.decrypt(download_resp["result"]["region"]))
|
362
|
-
File.open(project_home+"/"+absolute_path, 'wb') do |file|
|
363
|
-
resp = s3.get_object({ bucket:URLcrypt.decrypt(download_resp["result"]["bucket"]),
|
364
|
-
key:URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
|
365
|
-
end
|
366
|
-
return true
|
367
|
-
end
|
414
|
+
res = res["result"]
|
415
|
+
return false if res["link"].empty? or res["filename"].empty?
|
416
|
+
filename = res["filename"]
|
417
|
+
file_location = absolute_path.gsub(/#{filename}\/?$/, "")
|
368
418
|
|
369
|
-
|
370
|
-
|
419
|
+
FileUtils.mkdir_p project_home + "/" + file_location
|
420
|
+
filename += ".conflict" if conflict
|
371
421
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
if res["result"]
|
378
|
-
res = res["result"]
|
379
|
-
return false if res["link"].empty? or res["filename"].empty?
|
380
|
-
filename = res["filename"]
|
381
|
-
file_location = absolute_path.gsub(/#{filename}\/?$/, "")
|
382
|
-
|
383
|
-
FileUtils.mkdir_p project_home + "/" + file_location
|
384
|
-
filename += ".conflict" if conflict
|
385
|
-
|
386
|
-
File.open("#{project_home}/#{file_location}/#{filename}", "wb") do |file|
|
387
|
-
file.write open(res["link"]).read
|
422
|
+
File.open("#{project_home}/#{file_location}/#{filename}", "wb") do |file|
|
423
|
+
file.write open(res["link"]).read
|
424
|
+
end
|
425
|
+
else
|
426
|
+
return false
|
388
427
|
end
|
389
|
-
|
390
|
-
return false
|
428
|
+
return true
|
391
429
|
end
|
392
|
-
return true
|
393
|
-
end
|
394
430
|
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
def revoke_download_dir(absolute_path, relative_path, project_home)
|
399
|
-
puts FileUtils.rmtree("#{absolute_path}")
|
400
|
-
end
|
431
|
+
def download_dir(absolute_path, relative_path, project_home)
|
432
|
+
FileUtils.mkdir_p("#{project_home}/#{absolute_path}")
|
433
|
+
end
|
401
434
|
|
402
|
-
|
403
|
-
|
404
|
-
|
435
|
+
def revoke_download_dir(absolute_path, relative_path, project_home)
|
436
|
+
puts FileUtils.rmtree("#{absolute_path}")
|
437
|
+
end
|
405
438
|
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
439
|
+
def revoke_download_file(project_home, absolute_path, filename, conflict=false)
|
440
|
+
begin
|
441
|
+
file_location = absolute_path.gsub(/#{filename}\/?$/, "")
|
442
|
+
|
443
|
+
filename += ".conflict" if conflict
|
444
|
+
FileUtils.remove("#{file_location}/#{filename}")
|
445
|
+
return true
|
446
|
+
rescue
|
447
|
+
return false
|
448
|
+
end
|
411
449
|
end
|
412
|
-
end
|
413
450
|
|
414
|
-
|
451
|
+
def start_commit(new_branch)
|
415
452
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
453
|
+
response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {project_slug: @project_slug, new_branch: new_branch,
|
454
|
+
username: @owner})
|
455
|
+
Cnvrg::CLI.is_response_success(response,false)
|
456
|
+
return response
|
457
|
+
end
|
421
458
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
459
|
+
def end_commit(commit_sha1)
|
460
|
+
response = Cnvrg::API.request("#{base_resource}/commit/end", 'POST', {commit_sha1: commit_sha1})
|
461
|
+
return response
|
462
|
+
end
|
426
463
|
|
427
|
-
|
428
|
-
|
429
|
-
|
464
|
+
def rollback_commit(commit_sha1)
|
465
|
+
response = Cnvrg::API.request("#{base_resource}/commit/rollback", 'POST', {commit_sha1: commit_sha1})
|
466
|
+
Cnvrg::CLI.is_response_success(response, false)
|
467
|
+
end
|
430
468
|
end
|
431
469
|
end
|
432
|
-
end
|
data/lib/cnvrg/project.rb
CHANGED
@@ -23,9 +23,7 @@ module Cnvrg
|
|
23
23
|
idx = YAML.load_file(@local_path + "/.cnvrg/idx.yml")
|
24
24
|
return idx[:commit]
|
25
25
|
end
|
26
|
-
def get_last_commit
|
27
26
|
|
28
|
-
end
|
29
27
|
|
30
28
|
def url
|
31
29
|
url = Cnvrg::Helpers.remote_url
|
@@ -293,7 +291,7 @@ module Cnvrg
|
|
293
291
|
|
294
292
|
local_idx = self.generate_idx
|
295
293
|
response = Cnvrg::API.request("users/#{self.owner}/projects/#{self.slug}/status", 'POST', {idx: local_idx, new_branch: new_branch, current_commit: commit})
|
296
|
-
CLI.is_response_success(response)
|
294
|
+
CLI.is_response_success(response,false)
|
297
295
|
return response
|
298
296
|
end
|
299
297
|
|
@@ -302,7 +300,7 @@ module Cnvrg
|
|
302
300
|
commit = last_local_commit
|
303
301
|
end
|
304
302
|
response = Cnvrg::API.request("users/#{self.owner}/projects/#{self.slug}/commit/compare", 'POST', {current_commit: commit})
|
305
|
-
CLI.is_response_success(response)
|
303
|
+
CLI.is_response_success(response,false)
|
306
304
|
update_is_new_branch(response["result"]["new_branch"])
|
307
305
|
return response["result"]["new_branch"]
|
308
306
|
end
|
data/lib/cnvrg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cnvrg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1424
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yochay Ettun
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-06-
|
12
|
+
date: 2017-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -315,6 +315,20 @@ dependencies:
|
|
315
315
|
- - "~>"
|
316
316
|
- !ruby/object:Gem::Version
|
317
317
|
version: '5.0'
|
318
|
+
- !ruby/object:Gem::Dependency
|
319
|
+
name: ruby-progressbar
|
320
|
+
requirement: !ruby/object:Gem::Requirement
|
321
|
+
requirements:
|
322
|
+
- - ">="
|
323
|
+
- !ruby/object:Gem::Version
|
324
|
+
version: '0'
|
325
|
+
type: :runtime
|
326
|
+
prerelease: false
|
327
|
+
version_requirements: !ruby/object:Gem::Requirement
|
328
|
+
requirements:
|
329
|
+
- - ">="
|
330
|
+
- !ruby/object:Gem::Version
|
331
|
+
version: '0'
|
318
332
|
description: A CLI tool for interacting with cnvrg.io.
|
319
333
|
email:
|
320
334
|
- info@cnvrg.io
|