cnvrg 1.6.3.1 → 1.6.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cnvrg.gemspec +1 -1
- data/lib/cnvrg/cli.rb +133 -171
- data/lib/cnvrg/data.rb +2 -7
- data/lib/cnvrg/datafiles.rb +30 -67
- data/lib/cnvrg/dataset.rb +10 -6
- data/lib/cnvrg/downloader/client.rb +0 -43
- data/lib/cnvrg/downloader/clients/azure_client.rb +1 -5
- data/lib/cnvrg/downloader/clients/gcp_client.rb +2 -6
- data/lib/cnvrg/downloader/clients/s3_client.rb +1 -4
- data/lib/cnvrg/files.rb +9 -11
- data/lib/cnvrg/project.rb +4 -8
- data/lib/cnvrg/version.rb +2 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd6065b7fe98eebf485fe2813928c509d9f23700c0e6e34f6cbf880f6717e39b
|
4
|
+
data.tar.gz: 9bc650433cd77fba6de2edd9b15ad380c9302dc9eb250c35ffa7b2e3c9668e3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a175f7aaeda31208f381beeefd924bad22e42421d3da023e14e6468460cbd9b3a0fc36602fd4113f7e023ee81877c9cc9f0e659d18e539a774fcc5dc292038aa
|
7
|
+
data.tar.gz: 3dfcbf2f22735ad612cea0974ba75709742371737fc3bfd8a6c6b84c79acdcca30e736b21e39cd397b7394f59891cb649f30ac58ab3ae1be426e1c9a376aa1e8
|
data/cnvrg.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_runtime_dependency 'open4', '~> 1.3', '>= 1.3.4'
|
32
32
|
spec.add_runtime_dependency 'highline', '~> 1.7', '>= 1.7.8'
|
33
33
|
spec.add_runtime_dependency 'thor', '~> 0.19.0','>=0.19.1'
|
34
|
-
spec.add_runtime_dependency 'aws-sdk', '~> 2
|
34
|
+
spec.add_runtime_dependency 'aws-sdk', '~> 2'
|
35
35
|
spec.add_runtime_dependency 'signet', '~> 0.11.0'
|
36
36
|
spec.add_runtime_dependency 'google-cloud-env', '~> 1.2.1'
|
37
37
|
spec.add_runtime_dependency 'google-cloud-core', '~> 1.3.2'
|
data/lib/cnvrg/cli.rb
CHANGED
@@ -753,14 +753,11 @@ module Cnvrg
|
|
753
753
|
desc 'data init', 'Init dataset directory', :hide => true
|
754
754
|
method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
|
755
755
|
|
756
|
-
def init_data(public, bucket: nil
|
756
|
+
def init_data(public, bucket: nil)
|
757
757
|
begin
|
758
758
|
verify_logged_in(false)
|
759
759
|
log_start(__method__, args, options)
|
760
760
|
dataset_name = File.basename(Dir.getwd)
|
761
|
-
if title.present?
|
762
|
-
dataset_name = title
|
763
|
-
end
|
764
761
|
if File.directory?(Dir.getwd + "/.cnvrg")
|
765
762
|
config = YAML.load_file("#{Dir.getwd}/.cnvrg/config.yml")
|
766
763
|
log_message("Directory is already linked to #{config[:dataset_slug]}", Thor::Shell::Color::RED)
|
@@ -848,6 +845,7 @@ module Cnvrg
|
|
848
845
|
begin
|
849
846
|
verify_logged_in(false)
|
850
847
|
log_start(__method__, args, options)
|
848
|
+
return if check_pod_restart[1] ## It means that all datasets downloaded successfully
|
851
849
|
commit = options["commit"] || commit
|
852
850
|
only_tree = options["only_tree"] || only_tree
|
853
851
|
read = options["read"] || read || false
|
@@ -1184,7 +1182,7 @@ module Cnvrg
|
|
1184
1182
|
end
|
1185
1183
|
|
1186
1184
|
desc '', '', :hide => true
|
1187
|
-
def data_put(dataset_url, files: [], dir: '',
|
1185
|
+
def data_put(dataset_url, files: [], dir: '', chunk_size: 1000)
|
1188
1186
|
begin
|
1189
1187
|
verify_logged_in(false)
|
1190
1188
|
log_start(__method__, args, options)
|
@@ -1203,44 +1201,31 @@ module Cnvrg
|
|
1203
1201
|
end
|
1204
1202
|
log_message("Uploading #{@files.size} files", Thor::Shell::Color::GREEN)
|
1205
1203
|
number_of_chunks = (@files.size.to_f / chunk_size).ceil
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
raise SignalException.new(1, "Cant put files into dataset, check the dataset id")
|
1210
|
-
end
|
1211
|
-
@commit = response['result']['commit_sha1']
|
1212
|
-
elsif commit.eql? "latest"
|
1213
|
-
response = @datafiles.last_valid_commit()
|
1214
|
-
unless response #means we failed in the start commit.
|
1215
|
-
raise SignalException.new(1, "Cant put files into commit:#{commit}, check the dataset id and commitc")
|
1216
|
-
end
|
1217
|
-
@commit = response['result']['sha1']
|
1218
|
-
else
|
1219
|
-
@commit = commit
|
1204
|
+
response = @datafiles.start_commit(false, true, chunks: number_of_chunks)
|
1205
|
+
unless response #means we failed in the start commit.
|
1206
|
+
raise SignalException.new(1, "Cant put files into server, check the dataset slug")
|
1220
1207
|
end
|
1208
|
+
@commit = response['result']['commit_sha1']
|
1221
1209
|
#dir shouldnt have starting or ending slash.
|
1222
1210
|
dir = dir[0..-2] if dir.end_with? '/'
|
1223
1211
|
dir = dir[1..-1] if dir.start_with? '/'
|
1224
1212
|
|
1213
|
+
progressbar = ProgressBar.create(:title => "Upload Progress",
|
1214
|
+
:progress_mark => '=',
|
1215
|
+
:format => "%b>>%i| %p%% %t",
|
1216
|
+
:starting_at => 0,
|
1217
|
+
:total => @files.size,
|
1218
|
+
:autofinish => true)
|
1225
1219
|
@files.each_slice(chunk_size).each do |list_files|
|
1226
1220
|
temp_tree = @dataset.generate_chunked_idx(list_files, prefix: dir)
|
1227
1221
|
#will throw a signal exception if something goes wrong.
|
1228
|
-
@datafiles.upload_multiple_files(@commit, temp_tree, force: true,
|
1222
|
+
@datafiles.upload_multiple_files(@commit, temp_tree, force: true, progressbar: progressbar, prefix: dir)
|
1229
1223
|
end
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
raise SignalException.new(1, res.msg)
|
1234
|
-
end
|
1235
|
-
else
|
1236
|
-
res = @datafiles.end_commit(@commit,false, success: true )
|
1237
|
-
msg = res['result']
|
1238
|
-
response = Cnvrg::Result.new(Cnvrg::CLI.is_response_success(res, true), msg)
|
1239
|
-
unless response.is_success?
|
1240
|
-
raise SignalException.new(1, res.msg)
|
1241
|
-
end
|
1224
|
+
res = @datafiles.put_commit(@commit)
|
1225
|
+
unless res.is_success?
|
1226
|
+
raise SignalException.new(1, res.msg)
|
1242
1227
|
end
|
1243
|
-
log_message("
|
1228
|
+
log_message("Upload finished Successfully", Thor::Shell::Color::GREEN)
|
1244
1229
|
rescue SignalException => e
|
1245
1230
|
log_message(e.message, Thor::Shell::Color::RED)
|
1246
1231
|
return false
|
@@ -1796,6 +1781,7 @@ module Cnvrg
|
|
1796
1781
|
begin
|
1797
1782
|
verify_logged_in(false)
|
1798
1783
|
log_start(__method__, args, options)
|
1784
|
+
return if check_pod_restart[0] ## It means that project downloaded successfully
|
1799
1785
|
url_parts = project_url.split("/")
|
1800
1786
|
project_index = Cnvrg::Helpers.look_for_in_path(project_url, "projects")
|
1801
1787
|
slug = url_parts[project_index + 1]
|
@@ -1964,11 +1950,12 @@ module Cnvrg
|
|
1964
1950
|
log_message('Syncing dataset', Thor::Shell::Color::BLUE, !options["verbose"])
|
1965
1951
|
if !force and !init
|
1966
1952
|
# w(verbose=false, new_branch=false,sync=false, commit=nil,all_files=true)
|
1967
|
-
|
1953
|
+
invoke :download_data_new,[verbose, new_branch, true, commit, all_files], :new_branch=>new_branch, :direct=>false, :force =>force
|
1968
1954
|
end
|
1955
|
+
|
1969
1956
|
# w(new_branch, verbose,sync,force, tags, chunk_size)
|
1970
|
-
invoke :upload_data_new,[new_branch, verbose, true, force, tags, chunk_size, message:message,
|
1971
|
-
:
|
1957
|
+
invoke :upload_data_new,[new_branch, verbose, true, force, tags, chunk_size, message:message], :new_branch=>new_branch,
|
1958
|
+
:direct=>false, :force =>force, :sync =>true, :tags =>tags, :parallel => parallel, :message => message
|
1972
1959
|
|
1973
1960
|
end
|
1974
1961
|
desc 'upload_data_new', 'upload_data_new', :hide => true
|
@@ -1980,47 +1967,31 @@ module Cnvrg
|
|
1980
1967
|
method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
|
1981
1968
|
method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
|
1982
1969
|
|
1983
|
-
def upload_data_new(new_branch, verbose, sync, force, tags, chunk_size, message:nil
|
1970
|
+
def upload_data_new(new_branch, verbose, sync, force, tags, chunk_size, message:nil)
|
1984
1971
|
begin
|
1985
|
-
|
1986
|
-
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
1994
|
-
|
1995
|
-
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2001
|
-
if status
|
2002
|
-
log_message('Tags are successfully uploaded', Thor::Shell::Color::GREEN)
|
2003
|
-
else
|
2004
|
-
log_message('There was some error in uploading Tags', Thor::Shell::Color::RED)
|
2005
|
-
end
|
2006
|
-
end
|
2007
|
-
if total_deleted > 0
|
2008
|
-
log_message("#{total_deleted} files deleted successfully.", Thor::Shell::Color::GREEN)
|
2009
|
-
end
|
2010
|
-
|
2011
|
-
if total_downloaded > 0
|
2012
|
-
log_message("#{total_downloaded} files downloaded successfully.", Thor::Shell::Color::GREEN)
|
2013
|
-
end
|
2014
|
-
if upload_size > 0
|
2015
|
-
log_message("#{files_to_upload}/#{upload_size} files uploaded successfully.", Thor::Shell::Color::GREEN)
|
1972
|
+
commit = invoke :start_commit_data,[], :new_branch=> new_branch, :direct=>false, :force =>force, :chunk_size => chunk_size, :message => message
|
1973
|
+
upload_res = invoke :upload_data_files,[commit],:new_branch=>new_branch, :verbose =>verbose, :force =>force, :sync =>sync, :chunk_size => chunk_size
|
1974
|
+
if upload_res < 0
|
1975
|
+
return
|
1976
|
+
end
|
1977
|
+
invoke :end_commit_data,[commit, success: true, uploaded_files: upload_res], :new_branch=>new_branch, :force =>force
|
1978
|
+
if tags
|
1979
|
+
log_message('Uploading Tags', Thor::Shell::Color::BLUE)
|
1980
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
1981
|
+
@dataset = Dataset.new(dataset_dir)
|
1982
|
+
begin
|
1983
|
+
tag_file = File.open(options[:tags], "r+")
|
1984
|
+
status = @dataset.upload_tags_via_yml(tag_file)
|
1985
|
+
rescue
|
1986
|
+
log_message('Tags file not found', Thor::Shell::Color::RED)
|
1987
|
+
return
|
2016
1988
|
end
|
2017
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
log_message("#{file_hash[:absolute_path]}", Thor::Shell::Color::RED)
|
2022
|
-
end
|
1989
|
+
if status
|
1990
|
+
log_message('Tags are successfully uploaded', Thor::Shell::Color::GREEN)
|
1991
|
+
else
|
1992
|
+
log_message('There was some error in uploading Tags', Thor::Shell::Color::RED)
|
2023
1993
|
end
|
1994
|
+
end
|
2024
1995
|
rescue => e
|
2025
1996
|
Cnvrg::CLI.log_message(e.message, 'red')
|
2026
1997
|
Cnvrg::Logger.log_error(e)
|
@@ -2050,16 +2021,17 @@ module Cnvrg
|
|
2050
2021
|
verify_logged_in(true)
|
2051
2022
|
log_start(__method__, args, options)
|
2052
2023
|
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
2024
|
+
direct = options[:direct]
|
2053
2025
|
new_branch = options["new_branch"] || false
|
2054
2026
|
force = options["force"] || false
|
2055
2027
|
chunk_size = options["chunk_size"] || false
|
2056
2028
|
message = options["message"]
|
2029
|
+
commit_sha1 = nil
|
2057
2030
|
@dataset = Dataset.new(dataset_dir)
|
2058
2031
|
@dataset.backup_idx
|
2059
2032
|
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
|
2060
2033
|
next_commit = @dataset.get_next_commit #if there was a partial commit..
|
2061
|
-
|
2062
|
-
chunks = (files_list.length.to_f / chunk_size).ceil
|
2034
|
+
chunks = (@dataset.list_all_files.length.to_f / chunk_size).ceil
|
2063
2035
|
resp = @files.start_commit(new_branch, force, chunks: chunks, dataset: @dataset, message: message)
|
2064
2036
|
if !resp['result']['can_commit']
|
2065
2037
|
log_message("Cant upload files because a new version of this dataset exists, please download it or upload with --force", Thor::Shell::Color::RED)
|
@@ -2070,7 +2042,7 @@ module Cnvrg
|
|
2070
2042
|
@dataset.set_partial_commit(next_commit)
|
2071
2043
|
end
|
2072
2044
|
@dataset.set_next_commit(commit_sha1)
|
2073
|
-
return commit_sha1
|
2045
|
+
return commit_sha1
|
2074
2046
|
end
|
2075
2047
|
|
2076
2048
|
|
@@ -2078,7 +2050,7 @@ module Cnvrg
|
|
2078
2050
|
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
2079
2051
|
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
2080
2052
|
|
2081
|
-
def end_commit_data(commit, success: true, uploaded_files: 0
|
2053
|
+
def end_commit_data(commit, success: true, uploaded_files: 0)
|
2082
2054
|
begin
|
2083
2055
|
verify_logged_in(true)
|
2084
2056
|
log_start(__method__, args, options)
|
@@ -2093,12 +2065,7 @@ module Cnvrg
|
|
2093
2065
|
@dataset.revert_next_commit #removes the next commit
|
2094
2066
|
log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN)
|
2095
2067
|
else
|
2096
|
-
|
2097
|
-
message = "#{check} Data sync finished"
|
2098
|
-
else
|
2099
|
-
message = "#{check} Data upload finished"
|
2100
|
-
end
|
2101
|
-
log_message(message, Thor::Shell::Color::GREEN)
|
2068
|
+
log_message("#{check} Data files were updated successfully", Thor::Shell::Color::GREEN)
|
2102
2069
|
@dataset.remove_next_commit #takes the next commit and put it as current commit
|
2103
2070
|
@dataset.set_partial_commit(nil)
|
2104
2071
|
@dataset.backup_idx
|
@@ -2151,53 +2118,54 @@ module Cnvrg
|
|
2151
2118
|
# method_option :tags_yml, :type => :boolean, :aliases => ["--file_tag_yml"], :default => false
|
2152
2119
|
method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
|
2153
2120
|
|
2154
|
-
def upload_data_files(new_commit,
|
2121
|
+
def upload_data_files(new_commit, *files)
|
2155
2122
|
begin
|
2156
|
-
|
2157
|
-
|
2158
|
-
|
2159
|
-
|
2160
|
-
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2164
|
-
|
2165
|
-
|
2166
|
-
|
2167
|
-
|
2168
|
-
|
2169
|
-
|
2170
|
-
|
2171
|
-
|
2172
|
-
|
2173
|
-
|
2174
|
-
|
2175
|
-
|
2176
|
-
|
2177
|
-
|
2178
|
-
|
2179
|
-
|
2180
|
-
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2184
|
-
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2194
|
-
|
2195
|
-
|
2123
|
+
verify_logged_in(true)
|
2124
|
+
log_start(__method__, args, options)
|
2125
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
2126
|
+
@dataset = Dataset.new(dataset_dir)
|
2127
|
+
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
|
2128
|
+
new_commit ||= @dataset.get_next_commit
|
2129
|
+
partial_commit = @dataset.get_partial_commit
|
2130
|
+
if new_commit.blank?
|
2131
|
+
log_message("You must specify commit, run start_commit to create new commit", Thor::Shell::Color::RED)
|
2132
|
+
return false
|
2133
|
+
end
|
2134
|
+
force = options[:force] || false
|
2135
|
+
chunk_size = options[:chunk_size]
|
2136
|
+
chunk_size = [chunk_size, 1].max
|
2137
|
+
new_branch = options["new_branch"] || false
|
2138
|
+
new_tree = {}
|
2139
|
+
force = options["force"] || false
|
2140
|
+
parallel_threads = options["parallel"] || ParallelThreads
|
2141
|
+
all_files = @dataset.list_all_files
|
2142
|
+
progressbar = ProgressBar.create(:title => "Upload Progress",
|
2143
|
+
:progress_mark => '=',
|
2144
|
+
:format => "%b>>%i| %p%% %t",
|
2145
|
+
:starting_at => 0,
|
2146
|
+
:total => all_files.length,
|
2147
|
+
:autofinish => true)
|
2148
|
+
files_uploaded = 0
|
2149
|
+
all_files.each_slice(chunk_size).each do |list_files|
|
2150
|
+
Cnvrg::Logger.log_info("Uploading files into #{@dataset.slug}, #{files_uploaded} files uploaded")
|
2151
|
+
temp_tree = @dataset.generate_chunked_idx(list_files, threads: parallel_threads)
|
2152
|
+
upload_resp = @files.upload_multiple_files(new_commit, temp_tree,
|
2153
|
+
threads: parallel_threads,
|
2154
|
+
force: force,
|
2155
|
+
new_branch: new_branch,
|
2156
|
+
progressbar: progressbar,
|
2157
|
+
partial_commit: partial_commit)
|
2158
|
+
files_uploaded += upload_resp
|
2159
|
+
temp_tree.each do |k, v|
|
2160
|
+
new_tree[k] = (v.present?) ? {sha1: v.try(:fetch, :sha1, nil), commit_time: nil} : nil
|
2161
|
+
end
|
2162
|
+
end
|
2163
|
+
@dataset.write_tree(new_tree) #we dont want to re-run it every time so just on finish.
|
2196
2164
|
rescue => e
|
2197
2165
|
Cnvrg::Logger.log_error(e)
|
2198
2166
|
raise e
|
2199
2167
|
end
|
2200
|
-
return files_uploaded
|
2168
|
+
return files_uploaded
|
2201
2169
|
end
|
2202
2170
|
|
2203
2171
|
|
@@ -2325,9 +2293,7 @@ module Cnvrg
|
|
2325
2293
|
:total => (to_upload.size + deleted.size),
|
2326
2294
|
:autofinish => true)
|
2327
2295
|
@files.upload_multiple_files(to_upload, commit_sha1, progress: progressbar)
|
2328
|
-
|
2329
2296
|
@files.delete_files_from_server(deleted, commit_sha1)
|
2330
|
-
|
2331
2297
|
progressbar.finish
|
2332
2298
|
res = @files.end_commit(commit_sha1, force: force, message: commit_msg)
|
2333
2299
|
unless Cnvrg::CLI.is_response_success(res, false)
|
@@ -2465,51 +2431,52 @@ module Cnvrg
|
|
2465
2431
|
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
2466
2432
|
@dataset = Dataset.new(dataset_dir)
|
2467
2433
|
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
|
2434
|
+
all_files = all_files
|
2435
|
+
@dataset.generate_idx
|
2468
2436
|
res = @dataset.compare_idx_download(all_files: all_files, desired_commit: commit)
|
2469
2437
|
unless CLI.is_response_success(res, false)
|
2470
2438
|
log_message("Cant find the desired commit, please check it or try to download without it.", Thor::Shell::Color::RED)
|
2471
2439
|
exit(1)
|
2472
2440
|
end
|
2473
|
-
result = res["result"]
|
2474
|
-
|
2475
|
-
|
2476
|
-
|
2441
|
+
result = res["result"]["tree"]
|
2442
|
+
commit = res["result"]["commit"]
|
2443
|
+
can_commit = res["result"]["can_commit"] || false #can commit means that our next commit is newer than the latest commit
|
2444
|
+
# so if can_commit is true it means that we have to be up-to-date with the dataset.
|
2445
|
+
update_total = [result['added'], result["updated_on_server"], result["conflicts"], result["deleted"]].compact.flatten.size
|
2477
2446
|
successful_changes = 0
|
2478
|
-
if update_total == 0
|
2479
|
-
log_message("Dataset is up to date", Thor::Shell::Color::GREEN
|
2480
|
-
return
|
2447
|
+
if update_total == 0 or can_commit
|
2448
|
+
log_message("Dataset is up to date", Thor::Shell::Color::GREEN) if !sync
|
2449
|
+
return true
|
2450
|
+
elsif options["verbose"]
|
2451
|
+
log_message("Downloading #{update_total} files", Thor::Shell::Color::BLUE)
|
2481
2452
|
else
|
2482
|
-
log_message("Downloading #{update_total} files", Thor::Shell::Color::BLUE, options["verbose"])
|
2483
2453
|
log_message("Syncing Dataset", Thor::Shell::Color::BLUE, !sync)
|
2484
2454
|
end
|
2485
|
-
Cnvrg::Logger.log_info("Current commit: #{@dataset.
|
2486
|
-
Cnvrg::Logger.log_info("Compare idx res: #{
|
2455
|
+
Cnvrg::Logger.log_info("Current commit: #{@dataset.get_current_commit}, destination commit: #{commit}")
|
2456
|
+
Cnvrg::Logger.log_info("Compare idx res: #{result}")
|
2487
2457
|
progressbar = ProgressBar.create(:title => "Download Progress",
|
2488
|
-
|
2489
|
-
|
2490
|
-
|
2491
|
-
|
2492
|
-
|
2458
|
+
:progress_mark => '=',
|
2459
|
+
:format => "%b>>%i| %p%% %t",
|
2460
|
+
:starting_at => 0,
|
2461
|
+
:total => update_total,
|
2462
|
+
:autofinish => true)
|
2463
|
+
conflicts = @files.mark_conflicts(result)
|
2493
2464
|
|
2494
|
-
conflicts = @files.mark_conflicts(tree)
|
2495
2465
|
log_message("Found some conflicts, check .conflict files.", Thor::Shell::Color::BLUE) if conflicts > 0
|
2496
|
-
update_res = @files.download_files_in_chunks(
|
2497
|
-
added_res = @files.download_files_in_chunks(
|
2498
|
-
|
2466
|
+
update_res = @files.download_files_in_chunks(result["updated_on_server"], progress: progressbar) if result["updated_on_server"].present?
|
2467
|
+
added_res = @files.download_files_in_chunks(result["added"], progress: progressbar) if result["added"].present?
|
2468
|
+
# conflict_res = @files.download_files_in_chunks(result["conflicts"], conflict: true) if result["conflicts"].present?
|
2469
|
+
deleted = result["deleted"].to_a
|
2499
2470
|
delete_res = @files.delete_commit_files_local(deleted)
|
2500
|
-
|
2471
|
+
progressbar.progress += deleted.size if progressbar.present?
|
2501
2472
|
if !delete_res
|
2502
2473
|
log_message("Couldn't delete #{deleted.join(" ")}", Thor::Shell::Color::RED)
|
2503
2474
|
log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
|
2504
2475
|
exit(1)
|
2505
2476
|
end
|
2506
|
-
|
2507
|
-
progressbar.progress += deleted.size if progressbar.present? and deleted.size > 0
|
2508
|
-
|
2509
2477
|
success = (update_res.blank? or update_res.is_success?)
|
2510
2478
|
success &= (delete_res.blank? or delete_res.is_success?)
|
2511
2479
|
success &= (added_res.blank? or added_res.is_success?)
|
2512
|
-
|
2513
2480
|
if success
|
2514
2481
|
# update idx with latest commit
|
2515
2482
|
@dataset.update_idx_with_commit!(commit)
|
@@ -2519,24 +2486,17 @@ module Cnvrg
|
|
2519
2486
|
log_message(successful_changes.join("\n"), Thor::Shell::Color::GREEN)
|
2520
2487
|
log_message("Total of #{successful_changes.size} / #{update_total} files.", Thor::Shell::Color::GREEN)
|
2521
2488
|
else
|
2522
|
-
log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN,
|
2489
|
+
log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN, ((sync or options["sync"]) ? false : true))
|
2523
2490
|
end
|
2524
|
-
|
2525
|
-
total_deleted = deleted.try(:size)
|
2526
|
-
total_downloaded = tree["added"].try(:size) || 0
|
2527
|
-
total_downloaded += tree["updated_on_server"].try(:size) if tree["updated_on_server"].present?
|
2528
|
-
|
2529
|
-
return total_deleted, total_downloaded
|
2530
|
-
else
|
2531
|
-
return []
|
2491
|
+
return true
|
2532
2492
|
end
|
2533
2493
|
rescue SignalException => e
|
2534
2494
|
Cnvrg::Logger.log_error(e)
|
2535
2495
|
say "\nAborting", Thor::Shell::Color::BLUE
|
2536
2496
|
exit(1)
|
2537
2497
|
rescue => e
|
2498
|
+
log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
|
2538
2499
|
Cnvrg::Logger.log_error(e)
|
2539
|
-
log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
|
2540
2500
|
exit(1)
|
2541
2501
|
end
|
2542
2502
|
end
|
@@ -2894,15 +2854,14 @@ module Cnvrg
|
|
2894
2854
|
method_option :job_type, :type => :string, :aliases => ["-jt", "--job_type"], :default => nil
|
2895
2855
|
method_option :files, :type => :string, :aliases => ["--files"], :default => nil
|
2896
2856
|
method_option :output_dir, :type => :string, :aliases => ["--output_dir"], :default => nil
|
2897
|
-
def
|
2857
|
+
def sync(direct = true)
|
2898
2858
|
verify_logged_in(true) if direct
|
2899
2859
|
@project = Project.new(get_project_home)
|
2900
2860
|
log_start(__method__, args, options)
|
2901
2861
|
log_message('Checking for new updates from remote version', Thor::Shell::Color::BLUE, options["verbose"])
|
2902
2862
|
log_message('Syncing project', Thor::Shell::Color::BLUE, !options["verbose"])
|
2903
|
-
job_slug = options['job_slug']
|
2904
|
-
job_type = options['job_type']
|
2905
|
-
is_git = ENV['CNVRG_GIT_PROJECT'] == "true" || @project.is_git
|
2863
|
+
job_slug = options['job_slug']
|
2864
|
+
job_type = options['job_type']
|
2906
2865
|
in_exp = options["in_exp"] || (job_slug.present? and job_type.present?)
|
2907
2866
|
in_exp = false if job_type.present? and job_type == "NotebookSession"
|
2908
2867
|
run_download = true
|
@@ -2938,7 +2897,7 @@ module Cnvrg
|
|
2938
2897
|
method_option :image, :type => :string, :aliases => ["--image"], :default => nil
|
2939
2898
|
method_option :grid, :type => :string, :aliases => ["-g", "--grid"], :default => ""
|
2940
2899
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2941
|
-
method_option :datasets, :type => :string, :aliases => ["--datasets"], :desc => "'[{\"id\": \"dataset id\", \"commit\": \"commit id\", \"query\": \"query name\", \"tree_only\": true
|
2900
|
+
method_option :datasets, :type => :string, :aliases => ["--datasets"], :desc => "'[{\"id\": \"dataset id\", \"commit\": \"commit id\", \"query\": \"query name\", \"tree_only\": true]'", :default => ""
|
2942
2901
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
2943
2902
|
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2944
2903
|
method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
|
@@ -3422,6 +3381,10 @@ module Cnvrg
|
|
3422
3381
|
output_dir = "output"
|
3423
3382
|
end
|
3424
3383
|
image = options["image"] || nil
|
3384
|
+
if image.blank?
|
3385
|
+
image = "cnvrg"
|
3386
|
+
end
|
3387
|
+
|
3425
3388
|
forced_commit = nil
|
3426
3389
|
if sync_before and !project.is_git
|
3427
3390
|
if force
|
@@ -5523,7 +5486,7 @@ module Cnvrg
|
|
5523
5486
|
end
|
5524
5487
|
end
|
5525
5488
|
|
5526
|
-
def self.log_message(message, type = Thor::Shell::Color::BLUE)
|
5489
|
+
def self.log_message(message, type = Thor::Shell::Color::BLUE, to_print: true)
|
5527
5490
|
if $LOG.blank?
|
5528
5491
|
### handle case when $LOG is not initialized
|
5529
5492
|
CLI.new.log_handler
|
@@ -5545,12 +5508,11 @@ module Cnvrg
|
|
5545
5508
|
color = nil
|
5546
5509
|
$LOG.info message: message, type: "unknown"
|
5547
5510
|
end
|
5548
|
-
say "#{color}#{message}#{Thor::Shell::Color::CLEAR}"
|
5511
|
+
say "#{color}#{message}#{Thor::Shell::Color::CLEAR}" if to_print
|
5549
5512
|
end
|
5550
5513
|
|
5551
5514
|
def log_message(message, type=Thor::Shell::Color::GREEN, to_print = true)
|
5552
|
-
|
5553
|
-
CLI.log_message(message, type)
|
5515
|
+
CLI.log_message(message, type, to_print: to_print)
|
5554
5516
|
end
|
5555
5517
|
|
5556
5518
|
def log_error(e)
|
data/lib/cnvrg/data.rb
CHANGED
@@ -22,14 +22,11 @@ module Cnvrg
|
|
22
22
|
desc "data init", "Set current directory as dataset directory"
|
23
23
|
method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
|
24
24
|
method_option :bucket, :type => :string, :aliases => ["-b", "--bucket"], :default => ""
|
25
|
-
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
26
|
-
|
27
25
|
def init
|
28
26
|
cli = Cnvrg::CLI.new()
|
29
27
|
public = options["public"]
|
30
28
|
bucket = options["bucket"]
|
31
|
-
|
32
|
-
cli.init_data(public, bucket: bucket, title: title)
|
29
|
+
cli.init_data(public, bucket: bucket)
|
33
30
|
end
|
34
31
|
|
35
32
|
desc "data link DATASET_SLUG", "Set current directory as dataset directory"
|
@@ -185,12 +182,10 @@ module Cnvrg
|
|
185
182
|
|
186
183
|
desc 'data put DATASET_URL FILES_PREFIX', 'Upload selected files from local dataset directory to remote server'
|
187
184
|
method_option :dir, :type => :string, :aliases => ["-d", "--dir"], :default => ''
|
188
|
-
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ''
|
189
185
|
def put(dataset_url, *files)
|
190
186
|
cli = Cnvrg::CLI.new()
|
191
187
|
dir = options[:dir]
|
192
|
-
|
193
|
-
cli.data_put(dataset_url, files: files, dir: dir, commit: commit)
|
188
|
+
cli.data_put(dataset_url, files: files, dir: dir)
|
194
189
|
end
|
195
190
|
|
196
191
|
desc 'data clone_query --query=QUERY_SLUG DATASET_URL', 'Clone dataset with specific query'
|
data/lib/cnvrg/datafiles.rb
CHANGED
@@ -114,82 +114,54 @@ module Cnvrg
|
|
114
114
|
end
|
115
115
|
|
116
116
|
|
117
|
-
def upload_multiple_files(commit_sha1, tree, threads: ParallelThreads, force: false, new_branch: false, prefix: '', partial_commit: nil
|
117
|
+
def upload_multiple_files(commit_sha1, tree, threads: ParallelThreads, force: false, new_branch: false, progressbar: nil, prefix: '', partial_commit: nil)
|
118
118
|
begin
|
119
119
|
Cnvrg::Logger.log_info("Sending Upload Files request")
|
120
|
-
|
121
|
-
upload_resp
|
122
|
-
10.times do
|
123
|
-
upload_resp = Cnvrg::API.request(@base_resource + "upload_files", 'POST_JSON', {commit_sha1: commit_sha1, tree: tree, force: force, is_branch: new_branch, partial_commit: partial_commit})
|
124
|
-
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
125
|
-
error = nil
|
126
|
-
break
|
127
|
-
end
|
128
|
-
error = upload_resp
|
120
|
+
upload_resp = Cnvrg::API.request(@base_resource + "upload_files", 'POST_JSON', {commit_sha1: commit_sha1, tree: tree, force: force, is_branch: new_branch, partial_commit: partial_commit})
|
121
|
+
unless Cnvrg::CLI.is_response_success(upload_resp, false)
|
129
122
|
Cnvrg::Logger.log_method(bind: binding)
|
130
|
-
|
123
|
+
raise Exception.new("Got an error message from server, #{upload_resp.try(:fetch, "message")}")
|
131
124
|
end
|
132
|
-
raise Exception.new("Can't upload data files: #{error["message"]}") if error.present?
|
133
|
-
|
134
125
|
Cnvrg::Logger.log_info("Uploading files")
|
135
126
|
results = upload_resp['result'].with_indifferent_access
|
136
|
-
|
137
127
|
if results['files'].blank?
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
if @temp_upload_progressbar.blank?
|
142
|
-
@temp_upload_progressbar = ProgressBar.create(:title => "Upload Progress",
|
143
|
-
:progress_mark => '=',
|
144
|
-
:format => "%b>>%i| %p%% %t",
|
145
|
-
:starting_at => 0,
|
146
|
-
:total => total,
|
147
|
-
:autofinish => true)
|
128
|
+
progressbar.progress += tree.keys.length if progressbar.present?
|
129
|
+
return 0
|
148
130
|
end
|
149
|
-
|
150
131
|
files = results['files']
|
151
|
-
|
152
|
-
|
153
|
-
Parallel.map((files.keys), in_threads: threads) do |k|
|
132
|
+
progressbar.progress += tree.keys.length - files.length if progressbar.present?
|
133
|
+
Parallel.map((files.keys), {in_threads: threads}) do |k|
|
154
134
|
o = tree[k].merge(files[k])
|
155
|
-
|
156
|
-
if
|
157
|
-
upload_error_files << {absolute_path: o[:absolute_path]}
|
158
|
-
files.except!(k)
|
159
|
-
tree.except!(k)
|
160
|
-
Cnvrg::Logger.log_error_message("Error while upload single file #{o["path"]}")
|
161
|
-
end
|
162
|
-
@temp_upload_progressbar.progress += 1 if @temp_upload_progressbar.present?
|
135
|
+
upload_single_file(o)
|
136
|
+
progressbar.progress += 1 if progressbar.present?
|
163
137
|
end
|
164
138
|
blob_ids = files.values.map {|f| f['bv_id']}
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
raise Exception.new("Got an error message from server, #{upload_resp.try(:fetch, "message")}")
|
172
|
-
end
|
139
|
+
dirs = tree.keys.select {|k| tree[k].nil?} || []
|
140
|
+
Cnvrg::Logger.info("Sending Upload files save")
|
141
|
+
upload_resp = Cnvrg::API.request(@base_resource + "upload_files_save", "POST", {commit: commit_sha1, blob_ids: blob_ids, dirs: dirs})
|
142
|
+
unless Cnvrg::CLI.is_response_success(upload_resp, false)
|
143
|
+
Cnvrg::Logger.log_method(bind: binding)
|
144
|
+
raise Exception.new("Got an error message from server, #{upload_resp.try(:fetch, "message")}")
|
173
145
|
end
|
174
146
|
Cnvrg::Logger.log_info("Upload Success")
|
175
|
-
return files.
|
147
|
+
return files.keys.length
|
176
148
|
rescue => e
|
177
149
|
Cnvrg::Logger.log_method(bind: binding)
|
178
150
|
Cnvrg::Logger.log_error(e)
|
179
151
|
raise e
|
180
152
|
end
|
153
|
+
|
181
154
|
end
|
182
155
|
|
183
156
|
def upload_single_file(file)
|
184
157
|
begin
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
158
|
+
file = file.as_json
|
159
|
+
Cnvrg::Logger.log_info("Uploading #{file["absolute_path"]}")
|
160
|
+
@downloader.upload(file["path"], file["absolute_path"])
|
161
|
+
Cnvrg::Logger.log_info("#{file["absolute_path"]} uploaded.")
|
189
162
|
rescue => e
|
190
163
|
Cnvrg::Logger.log_error_message("Error while upload single file #{file["path"]}")
|
191
164
|
Cnvrg::Logger.log_error(e)
|
192
|
-
return false
|
193
165
|
end
|
194
166
|
end
|
195
167
|
|
@@ -830,7 +802,6 @@ module Cnvrg
|
|
830
802
|
end
|
831
803
|
return true
|
832
804
|
end
|
833
|
-
|
834
805
|
def delete_commit_files_local(deleted)
|
835
806
|
begin
|
836
807
|
FileUtils.rm_rf(deleted) unless (deleted.nil? or deleted.empty?)
|
@@ -838,6 +809,9 @@ module Cnvrg
|
|
838
809
|
rescue => e
|
839
810
|
return Cnvrg::Result.new(false, '')
|
840
811
|
end
|
812
|
+
|
813
|
+
return Cnvrg::Result.new(true, '')
|
814
|
+
|
841
815
|
end
|
842
816
|
|
843
817
|
def download_dir(dataset_home, absolute_path)
|
@@ -882,7 +856,6 @@ module Cnvrg
|
|
882
856
|
Cnvrg::CLI.is_response_success(response, true)
|
883
857
|
return response
|
884
858
|
end
|
885
|
-
|
886
859
|
def start_commit(new_branch,force=false,delete_commit=nil, chunks: 0, dataset: @dataset, message:nil)
|
887
860
|
begin
|
888
861
|
#if we are pushing with force or to branch we dont need to send current/next commit cause we want to
|
@@ -890,24 +863,14 @@ module Cnvrg
|
|
890
863
|
idx = (force || new_branch) ? {} : dataset.get_idx
|
891
864
|
commit = idx[:commit]
|
892
865
|
next_commit = idx[:next_commit]
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
rescue => e
|
898
|
-
return false
|
899
|
-
end
|
900
|
-
end
|
901
|
-
def last_valid_commit()
|
902
|
-
begin
|
903
|
-
#if we are pushing with force or to branch we dont need to send current/next commit cause we want to
|
904
|
-
# create a new commit.
|
905
|
-
response = Cnvrg::API.request("#{base_resource}/last_valid_commit", 'GET')
|
906
|
-
Cnvrg::CLI.is_response_success(response, true)
|
907
|
-
return response
|
866
|
+
response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {dataset_slug: @dataset_slug, new_branch: new_branch,force:force,
|
867
|
+
username: @owner,current_commit: commit, next_commit: next_commit, total_chunks: chunks, message: message})
|
868
|
+
Cnvrg::CLI.is_response_success(response, true)
|
869
|
+
return response
|
908
870
|
rescue => e
|
909
871
|
return false
|
910
872
|
end
|
873
|
+
|
911
874
|
end
|
912
875
|
|
913
876
|
def end_commit(commit_sha1,force, success: true, uploaded_files: 0 )
|
data/lib/cnvrg/dataset.rb
CHANGED
@@ -103,12 +103,8 @@ module Cnvrg
|
|
103
103
|
|
104
104
|
def backup_idx
|
105
105
|
Cnvrg::Logger.log_info("Backup idx")
|
106
|
-
|
107
|
-
|
108
|
-
else
|
109
|
-
idx = {commit: nil, tree: {}}
|
110
|
-
File.open("#{self.local_path}/.cnvrg/idx.yml.backup", 'w') {|f| f.write idx.to_yaml}
|
111
|
-
end
|
106
|
+
idx = self.get_idx
|
107
|
+
File.open("#{self.local_path}/.cnvrg/idx.yml.backup", 'w') {|f| f.write idx.to_yaml}
|
112
108
|
end
|
113
109
|
|
114
110
|
def restore_idx
|
@@ -784,6 +780,14 @@ module Cnvrg
|
|
784
780
|
File.open("#{self.local_path}/.cnvrg/idx.yml", 'w') {|f| f.write idx_hash.to_yaml}
|
785
781
|
end
|
786
782
|
|
783
|
+
def get_current_commit()
|
784
|
+
if !File.exist? "#{self.local_path}/.cnvrg/idx.yml"
|
785
|
+
return nil
|
786
|
+
end
|
787
|
+
idx_hash = YAML.load_file("#{self.local_path}/.cnvrg/idx.yml")
|
788
|
+
return idx_hash[:commit]
|
789
|
+
end
|
790
|
+
|
787
791
|
def compare_commit(commit)
|
788
792
|
if commit.nil? or commit.empty?
|
789
793
|
commit = last_local_commit
|
@@ -2,8 +2,6 @@
|
|
2
2
|
module Cnvrg
|
3
3
|
module Downloader
|
4
4
|
OLD_SERVER_VERSION_MESSAGE = "Your server version is not relevant for this cli version please contact support for further help."
|
5
|
-
MAXIMUM_BACKOFF = 64
|
6
|
-
RETRIES = ENV['UPLOAD_FILE_RETRIES'].try(:to_i) || 20
|
7
5
|
attr_accessor :bucket, :client
|
8
6
|
class Client
|
9
7
|
def initialize(params)
|
@@ -43,35 +41,6 @@ module Cnvrg
|
|
43
41
|
Cnvrg::Helpers.decrypt(@key, @iv, str)
|
44
42
|
end
|
45
43
|
|
46
|
-
def safe_upload(storage_path, local_path)
|
47
|
-
n = 1
|
48
|
-
error = nil
|
49
|
-
while n <= RETRIES
|
50
|
-
begin
|
51
|
-
self.upload(storage_path, local_path)
|
52
|
-
error = nil
|
53
|
-
break
|
54
|
-
rescue => e
|
55
|
-
backoff_time_seconds = backoff_time(n)
|
56
|
-
|
57
|
-
message = "Got error: #{e.class.name} with message: #{e.message} while uploading a single file: #{local_path}, retry: #{n} of: #{RETRIES}"
|
58
|
-
if n < RETRIES
|
59
|
-
message += ", next retry in: #{backoff_time_seconds} seconds"
|
60
|
-
else
|
61
|
-
message += ", done retry, continuing to the next file"
|
62
|
-
end
|
63
|
-
Cnvrg::Logger.log_error_message(message)
|
64
|
-
|
65
|
-
sleep backoff_time_seconds
|
66
|
-
|
67
|
-
n += 1
|
68
|
-
error = e
|
69
|
-
end
|
70
|
-
end
|
71
|
-
raise error if error.present?
|
72
|
-
true
|
73
|
-
end
|
74
|
-
|
75
44
|
def self.factory(params)
|
76
45
|
params = params.as_json
|
77
46
|
case params["storage"]
|
@@ -84,18 +53,6 @@ module Cnvrg
|
|
84
53
|
return Cnvrg::Downloader::Clients::GcpClient.new(project_id: params["project_id"], credentials: params["credentials"], bucket_name: params["bucket_name"], sts: params["sts"])
|
85
54
|
end
|
86
55
|
end
|
87
|
-
|
88
|
-
private
|
89
|
-
|
90
|
-
def random_number_milliseconds
|
91
|
-
rand(1000) / 1000.0
|
92
|
-
end
|
93
|
-
|
94
|
-
|
95
|
-
def backoff_time(n)
|
96
|
-
return [((2**n)+random_number_milliseconds), MAXIMUM_BACKOFF].min
|
97
|
-
end
|
98
|
-
|
99
56
|
end
|
100
57
|
end
|
101
58
|
end
|
@@ -20,11 +20,7 @@ module Cnvrg
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def upload(storage_path, local_path)
|
23
|
-
|
24
|
-
client.create_block_blob(@container, storage_path, File.open(local_path, "rb"))
|
25
|
-
rescue => e
|
26
|
-
raise e
|
27
|
-
end
|
23
|
+
client.create_block_blob(@container, storage_path, File.open(local_path, "rb"))
|
28
24
|
end
|
29
25
|
|
30
26
|
def fetch_files(prefix: nil, marker: nil, limit: 10000)
|
@@ -11,7 +11,7 @@ module Cnvrg
|
|
11
11
|
@tempfile = nil
|
12
12
|
@bucket_name = Cnvrg::Helpers.decrypt(@key, @iv, bucket_name)
|
13
13
|
init_gcp_credentials
|
14
|
-
@storage = Google::Cloud::Storage.new(project_id: @project_id, credentials: @credentials
|
14
|
+
@storage = Google::Cloud::Storage.new(project_id: @project_id, credentials: @credentials)
|
15
15
|
@bucket = @storage.bucket(@bucket_name)
|
16
16
|
@bucket.name
|
17
17
|
rescue => e
|
@@ -38,11 +38,7 @@ module Cnvrg
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def upload(storage_path, local_path)
|
41
|
-
|
42
|
-
@bucket.create_file(local_path, storage_path)
|
43
|
-
rescue => e
|
44
|
-
raise e
|
45
|
-
end
|
41
|
+
@bucket.create_file(local_path, storage_path)
|
46
42
|
end
|
47
43
|
end
|
48
44
|
end
|
@@ -53,10 +53,7 @@ module Cnvrg
|
|
53
53
|
### storage path is the path inside s3 (after the bucket)
|
54
54
|
# local path is fullpath for the file /home/ubuntu/user.../hazilim.py
|
55
55
|
o = aws_bucket.object(storage_path)
|
56
|
-
|
57
|
-
return success
|
58
|
-
rescue => e
|
59
|
-
raise e
|
56
|
+
o.upload_file(local_path, @upload_options)
|
60
57
|
end
|
61
58
|
|
62
59
|
def fetch_files(prefix: nil, marker: nil, limit: 1000)
|
data/lib/cnvrg/files.rb
CHANGED
@@ -6,7 +6,6 @@ require 'net/http'
|
|
6
6
|
require 'cnvrg/result'
|
7
7
|
module Cnvrg
|
8
8
|
class Files
|
9
|
-
ParallelThreads = Cnvrg::Helpers.parallel_threads
|
10
9
|
VALID_FILE_NAME = /[\x00\\:\*\?\"<>\|]/
|
11
10
|
LARGE_FILE=1024*1024*5
|
12
11
|
MULTIPART_SPLIT=10000000
|
@@ -86,7 +85,6 @@ module Cnvrg
|
|
86
85
|
Cnvrg::Logger.log_info("Upload files to older server..")
|
87
86
|
return self.upload_files_old(files_list, commit_sha1, progress: progress)
|
88
87
|
end
|
89
|
-
|
90
88
|
files_list = files_list.map{|x| [x,self.parse_file(x)]}.to_h
|
91
89
|
resp = Cnvrg::API.request(@base_resource + "upload_files", 'POST', {files: files_list, commit: commit_sha1})
|
92
90
|
unless Cnvrg::CLI.is_response_success(resp, false)
|
@@ -97,11 +95,10 @@ module Cnvrg
|
|
97
95
|
files = res['files']
|
98
96
|
|
99
97
|
#upload files
|
100
|
-
blob_ids = Parallel.map(files.keys,
|
98
|
+
blob_ids = Parallel.map(files.keys, self.get_upload_options) do |file|
|
101
99
|
begin
|
102
100
|
Cnvrg::Helpers.try_until_success{self.upload_single_file(files[file].merge(files_list[file]))}
|
103
101
|
rescue => e
|
104
|
-
|
105
102
|
Cnvrg::CLI.log_message("Failed to upload #{file}: #{e.message}", 'red')
|
106
103
|
Cnvrg::Logger.log_error(e)
|
107
104
|
Cnvrg::Logger.log_method(bind: binding)
|
@@ -880,7 +877,6 @@ module Cnvrg
|
|
880
877
|
end
|
881
878
|
|
882
879
|
end
|
883
|
-
|
884
880
|
def delete_commit_files_local(deleted)
|
885
881
|
begin
|
886
882
|
FileUtils.rm_rf(deleted) unless (deleted.nil? or deleted.empty?)
|
@@ -888,14 +884,16 @@ module Cnvrg
|
|
888
884
|
rescue => e
|
889
885
|
return false
|
890
886
|
end
|
891
|
-
end
|
892
887
|
|
893
|
-
|
894
|
-
|
895
|
-
username: @owner, exp_start_commit:exp_start_commit, job_slug: job_slug, job_type: job_type, start_commit: start_commit, message: message})
|
896
|
-
Cnvrg::CLI.is_response_success(response,false)
|
897
|
-
return response
|
888
|
+
return true
|
889
|
+
|
898
890
|
end
|
891
|
+
def start_commit(new_branch,force:false, exp_start_commit:nil, job_slug: nil, job_type: nil, start_commit: nil, message: nil)
|
892
|
+
response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {project_slug: @project_slug, new_branch: new_branch,force:force,
|
893
|
+
username: @owner, exp_start_commit:exp_start_commit, job_slug: job_slug, job_type: job_type, start_commit: start_commit, message: message})
|
894
|
+
Cnvrg::CLI.is_response_success(response,false)
|
895
|
+
return response
|
896
|
+
end
|
899
897
|
|
900
898
|
def end_commit(commit_sha1,force:false,message:"")
|
901
899
|
response = Cnvrg::API.request("#{base_resource}/commit/end", 'POST', {commit_sha1: commit_sha1,force:force,message:message})
|
data/lib/cnvrg/project.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
1
|
require 'fileutils'
|
2
|
-
require 'pathname'
|
3
|
-
|
4
|
-
|
5
2
|
module Cnvrg
|
6
3
|
class Project
|
7
4
|
attr_reader :slug, :owner, :title, :local_path, :working_dir, :is_git, :is_branch, :machines
|
@@ -329,13 +326,10 @@ module Cnvrg
|
|
329
326
|
def get_storage_client
|
330
327
|
response = Cnvrg::API.request("users/#{@owner}/projects/#{@slug}/client", 'GET')
|
331
328
|
if Cnvrg::CLI.is_response_success(response, false)
|
332
|
-
|
333
329
|
client_params = response['client']
|
334
330
|
else
|
335
|
-
|
336
331
|
client_params = get_storage_client_fallback
|
337
332
|
end
|
338
|
-
|
339
333
|
Cnvrg::Downloader::Client.factory(client_params)
|
340
334
|
end
|
341
335
|
|
@@ -433,8 +427,10 @@ module Cnvrg
|
|
433
427
|
list_ignore_new = list_ignore.map{|x| x.gsub("//","/")} rescue []
|
434
428
|
# list.each do |e|
|
435
429
|
Parallel.map(list, in_threads: IDXParallelThreads) do |e|
|
436
|
-
label = e.
|
437
|
-
|
430
|
+
label = e.gsub(self.local_path + "/", "")
|
431
|
+
if not Cnvrg::Files.valid_file_name?(label)
|
432
|
+
raise StandardError.new("#{label} is not a valid file name")
|
433
|
+
end
|
438
434
|
if list_ignore_new.include? label
|
439
435
|
next
|
440
436
|
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: 1.6.
|
4
|
+
version: 1.6.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yochay Ettun
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-01-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -210,14 +210,14 @@ dependencies:
|
|
210
210
|
requirements:
|
211
211
|
- - "~>"
|
212
212
|
- !ruby/object:Gem::Version
|
213
|
-
version: 2
|
213
|
+
version: '2'
|
214
214
|
type: :runtime
|
215
215
|
prerelease: false
|
216
216
|
version_requirements: !ruby/object:Gem::Requirement
|
217
217
|
requirements:
|
218
218
|
- - "~>"
|
219
219
|
- !ruby/object:Gem::Version
|
220
|
-
version: 2
|
220
|
+
version: '2'
|
221
221
|
- !ruby/object:Gem::Dependency
|
222
222
|
name: signet
|
223
223
|
requirement: !ruby/object:Gem::Requirement
|