cnvrg 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42022fa13f8fd836b23c053f1fb307c7187603dd
4
- data.tar.gz: 6fe9747627cf95a833a5efe4f3b93a35457b0cc5
3
+ metadata.gz: f4256d8fe0490792ce6c903208f55fb334c090fb
4
+ data.tar.gz: 90297a245a2df22569c0f1b11135d09d35f7d1e8
5
5
  SHA512:
6
- metadata.gz: 4e9037eb3b8536c4a6c54493beb6c9826de49a90cacab42586ea113bd7d067825d6289f4335e1f45bbb02e7b0df9935aca7314e7fce110522d88fa070d406935
7
- data.tar.gz: 0183b26af7ec67875fc47a3c1f4455c10a1c42e6cc33a2958456f65c174230fd17e7ce421bce0547b48ef89cc3893eb3a54e21e1d1f492d1cb2a17219c88eab1
6
+ metadata.gz: 0abffec7afcb1f5ed6cbbf764cea7826e2aa267e3f5e7f80ba18b5c3338604f4bdb36ad10e8009438b2d2ae437406feed79d4273a7b8f9cfb76f7b2fac43befc
7
+ data.tar.gz: 8ba624643cbb0772f9fb08880ddb285012a936feb31fae3ef3ca9b0059fcc95da94801e68838a273c82f357e98c42682db96fb94488b295f0a40663ff629c249
@@ -105,6 +105,36 @@ module Cnvrg
105
105
  else
106
106
  response
107
107
  end
108
+ when 'POST_JSON'
109
+ conn.options.timeout = 4200
110
+ conn.options.open_timeout =4200
111
+ conn.headers['Content-Type'] = "application/json"
112
+ new_data = JSON.dump(data)
113
+
114
+ retries = 0
115
+ success = false
116
+
117
+ while !success and retries < 20
118
+ begin
119
+ response = conn.post "#{resource}", new_data
120
+ success = true
121
+
122
+ rescue => e
123
+ sleep(5)
124
+ retries +=1
125
+ end
126
+ end
127
+ if !success
128
+ return false
129
+ end
130
+ if response.to_hash[:status] == 404
131
+ return false
132
+ end
133
+ if parse_request == true
134
+ JSON.parse(response.body)
135
+ else
136
+ response
137
+ end
108
138
  when 'POST_FILE'
109
139
  conn = Faraday.new do |fr|
110
140
  fr.headers['Auth-Token'] = @pass
@@ -842,20 +842,18 @@ module Cnvrg
842
842
  :progress_mark => '=',
843
843
  :format => "%b>>%i| %p%% %t",
844
844
  :starting_at => 0,
845
+ :total => files_count,
845
846
  :autofinish => true)
846
847
  while files['keys'].length > 0
847
- @files.download_multiple_files_s3(files, dataset_home)
848
+ @files.download_multiple_files_s3(files, dataset_home, progressbar: progressbar)
848
849
  downloaded_files += files['keys'].length
849
- progressbar.progress = (downloaded_files * 100 / files_count)
850
850
  files = @files.get_clone_chunk(commit: commit, latest_id: files['latest'])
851
851
  end
852
852
  if downloaded_files == files_count
853
853
  Dataset.verify_cnvrgignore_exist(dataset_name, false)
854
854
  @dataset = Dataset.new(dataset_home)
855
- @dataset.write_idx(nil, commit)
855
+ @dataset.write_idx(nil, commit) #nil means, generate idx
856
856
  log_message("#{check} Clone finished successfully", Thor::Shell::Color::GREEN)
857
- else
858
- log_message(result.msg, result.msg_color)
859
857
  end
860
858
  else
861
859
  log_message("Error: Couldn't create directory: #{dataset_name}", Thor::Shell::Color::RED)
@@ -1938,10 +1936,12 @@ module Cnvrg
1938
1936
  method_option :tags, :type => :boolean, :aliases => ["--tags"], :desc => "upload file tags", :default => false
1939
1937
  method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
1940
1938
  def upload_data_new(new_branch, verbose,sync,force, tags, chunk_size)
1941
- commit = invoke :start_commit_data,[], :new_branch=> new_branch, :direct=>false, :force =>force
1939
+ commit = invoke :start_commit_data,[], :new_branch=> new_branch, :direct=>false, :force =>force, :chunk_size => chunk_size
1942
1940
  upload_res = invoke :upload_data_files,[commit],:new_branch=>new_branch, :verbose =>verbose, :force =>force, :sync =>sync, :chunk_size => chunk_size
1943
- invoke :end_commit_data,[commit] , :new_branch=>new_branch, :force =>force, :success => upload_res
1944
-
1941
+ if !upload_res
1942
+ return
1943
+ end
1944
+ invoke :end_commit_data,[commit, success: upload_res] , :new_branch=>new_branch, :force =>force
1945
1945
  if tags
1946
1946
  log_message('Uploading Tags', Thor::Shell::Color::BLUE)
1947
1947
  dataset_dir = is_cnvrg_dir(Dir.pwd)
@@ -1970,6 +1970,7 @@ module Cnvrg
1970
1970
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
1971
1971
  method_option :direct, :type => :boolean, :aliases => ["-d","--direct"], :desc => "was called directed", :default => true
1972
1972
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
1973
+ method_option :chunk_size, :type => :numeric, :aliases => ["-ch"], :default => 0
1973
1974
 
1974
1975
  def start_commit_data()
1975
1976
  begin
@@ -1979,30 +1980,38 @@ module Cnvrg
1979
1980
  direct = options[:direct]
1980
1981
  new_branch = options["new_branch"] || false
1981
1982
  force = options["force"] || false
1983
+ chunk_size = options["chunk_size"] || false
1982
1984
  commit_sha1 = nil
1983
1985
  @dataset = Dataset.new(dataset_dir)
1984
1986
  @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
1985
- next_commit = @dataset.get_next_commit() #if there was a partial commit..
1986
- if next_commit.present? #keep from existing commit.
1987
- resp = @files.get_commit(next_commit)
1988
- if resp["result"]["status"].eql? "new"
1989
- resp = @files.start_commit(new_branch,force)
1990
- commit_sha1 = resp["result"]["commit_sha1"]
1991
- @dataset.set_next_commit(commit_sha1)
1992
- else
1993
- commit_sha1 = resp["result"]["commit_sha1"]
1994
- end
1995
- else
1996
- resp = @files.start_commit(new_branch,force)
1997
- commit_sha1 = resp["result"]["commit_sha1"]
1998
- @dataset.set_next_commit(commit_sha1)
1987
+ next_commit = @dataset.get_next_commit #if there was a partial commit..
1988
+ chunks = (@dataset.list_all_files.length.to_f / chunk_size).ceil
1989
+ resp = @files.start_commit(new_branch, force, chunks: chunks, current_commit: next_commit || @dataset.last_local_commit)
1990
+ if !resp['result']['can_commit']
1991
+ log_message("Cant upload files because a new version of this dataset exists, please download it or upload with --force", Thor::Shell::Color::RED)
1992
+ exit(1)
1999
1993
  end
1994
+ # if next_commit.present? #keep from existing commit.
1995
+ # resp = @files.get_commit(next_commit)
1996
+ # if resp["result"]["status"].eql? "new"
1997
+ # resp = @files.start_commit(new_branch,force, chunks: chunks)
1998
+ # commit_sha1 = resp["result"]["commit_sha1"]
1999
+ # @dataset.set_next_commit(commit_sha1)
2000
+ # else
2001
+ # commit_sha1 = resp["result"]["commit_sha1"]
2002
+ # end
2003
+ # else
2004
+ # resp = @files.start_commit(new_branch,force, chunks: chunks)
2005
+ # commit_sha1 = resp["result"]["commit_sha1"]
2006
+ # @dataset.set_next_commit(commit_sha1)
2007
+ # end
2008
+ commit_sha1 = resp["result"]["commit_sha1"]
2009
+ @dataset.set_next_commit(commit_sha1)
2000
2010
  if direct
2001
2011
  puts commit_sha1
2002
2012
  end
2003
2013
  return commit_sha1
2004
2014
  rescue => e
2005
- puts e
2006
2015
  if commit_sha1.present?
2007
2016
  @dataset.set_next_commit(commit_sha1)
2008
2017
  end
@@ -2018,9 +2027,8 @@ module Cnvrg
2018
2027
  desc 'end_commit', 'start data commit'
2019
2028
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
2020
2029
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
2021
- method_option :success, :type => :boolean, :default => true, :hide=>true
2022
2030
 
2023
- def end_commit_data(commit)
2031
+ def end_commit_data(commit, success: true)
2024
2032
  begin
2025
2033
  verify_logged_in(true)
2026
2034
  log_start(__method__, args, options)
@@ -2028,21 +2036,14 @@ module Cnvrg
2028
2036
  @dataset = Dataset.new(dataset_dir)
2029
2037
  @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2030
2038
  force = options["force"] || false
2031
- resp = @files.end_commit(commit, force, options[:success])
2032
- if (resp and resp["result"])
2033
- if !options[:success]
2034
- @dataset.set_next_commit(resp["result"]["commit_sha1"])
2035
- @dataset.remove_next_commit
2036
- else
2037
- check = Helpers.checkmark
2038
- @dataset.set_next_commit(commit)
2039
- @dataset.remove_next_commit
2040
- log_message("#{check} Data files were updated successfully", Thor::Shell::Color::GREEN)
2041
- end
2042
-
2043
- end
2044
-
2045
2039
 
2040
+ resp = @files.end_commit(commit, force, success: success)
2041
+ if (resp and resp["result"])
2042
+ check = Helpers.checkmark
2043
+ @dataset.set_next_commit(commit)
2044
+ @dataset.remove_next_commit
2045
+ log_message("#{check} Data files were updated successfully", Thor::Shell::Color::GREEN)
2046
+ end
2046
2047
  rescue => e
2047
2048
  puts e
2048
2049
  rescue SignalException
@@ -2105,49 +2106,47 @@ module Cnvrg
2105
2106
  dataset_dir = is_cnvrg_dir(Dir.pwd)
2106
2107
  @dataset = Dataset.new(dataset_dir)
2107
2108
  @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2108
- next_commit = @dataset.get_next_commit()
2109
- if new_commit.blank? and next_commit.blank?
2109
+ new_commit ||= @dataset.get_next_commit()
2110
+ if new_commit.blank?
2110
2111
  log_message("You must specify commit, run start_commit to create new commit", Thor::Shell::Color::RED)
2111
- exit(1)
2112
+ return false
2112
2113
  end
2113
-
2114
2114
  force = options[:force] || false
2115
2115
  chunk_size = options[:chunk_size]
2116
2116
  chunk_size = [chunk_size, 1].max
2117
2117
  new_branch = options["new_branch"] || false
2118
+ new_tree = {}
2118
2119
  force = options["force"] || false
2119
2120
  parallel_threads = options["parallel"] || ParallelThreads
2120
- new_tree = {}
2121
+ all_files = @dataset.list_all_files
2121
2122
  progressbar = ProgressBar.create(:title => "Upload Progress",
2122
2123
  :progress_mark => '=',
2123
2124
  :format => "%b>>%i| %p%% %t",
2124
2125
  :starting_at => 0,
2126
+ :total => all_files.length,
2125
2127
  :autofinish => true)
2126
- all_files = @dataset.list_all_files
2127
- files_count = all_files.count
2128
- finished_chunks = 0
2129
2128
  files_uploaded = 0
2130
- chunked_files = all_files.each_slice(chunk_size)
2131
- chunked_files.each_with_index do |list_files,i|
2132
- log_message("generating chunk #{i} / #{chunked_files.size}", Thor::Shell::Color::BLUE, false)
2129
+ all_files.each_slice(chunk_size).each do |list_files|
2133
2130
  temp_tree = @dataset.generate_chunked_idx(list_files, threads: parallel_threads)
2131
+ upload_resp = @files.upload_multiple_files(new_commit, temp_tree, threads: parallel_threads, force: force, new_branch: new_branch, progressbar: progressbar)
2132
+
2133
+ if upload_resp.is_a? Cnvrg::Result
2134
+ log_message(upload_resp.msg, upload_resp.msg_color)
2135
+
2136
+ return false
2137
+
2138
+ else
2139
+ files_uploaded += upload_resp
2140
+ end
2134
2141
 
2135
- log_message("uploading chunk #{i} / #{chunked_files.size}", Thor::Shell::Color::BLUE, false)
2136
- files_uploaded += @files.upload_multiple_files(next_commit, temp_tree, threads: parallel_threads, force: force)
2137
2142
  temp_tree.each do |k,v|
2138
- if v.present?
2139
- new_tree[k] = {sha1: v.try(:fetch, :sha1, nil), commit_time: nil}
2140
- else
2141
- new_tree[k] = nil
2142
- end
2143
+ new_tree[k] = (v.present?) ? {sha1: v.try(:fetch, :sha1, nil), commit_time: nil} : nil
2143
2144
  end
2144
- @dataset.write_idx(new_tree, next_commit)
2145
- finished_chunks += 1
2146
- progressbar.progress = [(finished_chunks * chunk_size*100) / files_count, 100].min
2145
+ @dataset.write_idx(new_tree, new_commit)
2147
2146
  end
2148
2147
  return files_uploaded > 0
2149
2148
  rescue Exception => e
2150
- log_error(e)
2149
+ puts e
2151
2150
  return false
2152
2151
  end
2153
2152
 
@@ -2387,8 +2386,8 @@ module Cnvrg
2387
2386
  if git_output_dir.ends_with? "/"
2388
2387
  git_output_dir = git_output_dir[0..-2]
2389
2388
  end
2390
- spec_files_to_upload = Dir.glob("#{git_output_dir}/**/*", File::FNM_DOTMATCH).flatten
2391
- spec_files_to_upload = spec_files_to_upload.select{|x| !x.ends_with? "/."}
2389
+ list = @project.generate_output_dir(output_dir)
2390
+ spec_files_to_upload = list
2392
2391
  if spec_files_to_upload.blank?
2393
2392
  log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
2394
2393
  return true
@@ -2398,6 +2397,7 @@ module Cnvrg
2398
2397
  end
2399
2398
 
2400
2399
 
2400
+
2401
2401
  if ignore.nil? or ignore.empty?
2402
2402
  ignore = ignore_list
2403
2403
  end
@@ -2416,6 +2416,7 @@ module Cnvrg
2416
2416
 
2417
2417
  result = @project.compare_idx(new_branch, force: force, deploy: options["deploy"],in_exp:in_exp, specific_files: spec_files_to_upload)
2418
2418
  commit = result["result"]["commit"]
2419
+
2419
2420
  if !link
2420
2421
  if (result["result"]["new_version_exist"] and !force) or ((commit != @project.last_local_commit and !@project.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?) and !force)
2421
2422
  log_message("Remote server has an updated version, please run `cnvrg download` first, or alternatively: `cnvrg sync`", Thor::Shell::Color::BLUE)
@@ -2445,7 +2446,7 @@ module Cnvrg
2445
2446
  log_message("Syncing files", Thor::Shell::Color::BLUE, ((options["sync"] or sync)) ? false : true)
2446
2447
  end
2447
2448
  # Start commit
2448
- if in_exp
2449
+ if in_exp || (job_slug.present? and job_type.present?)
2449
2450
  exp_start_commit = @project.last_local_commit
2450
2451
  else
2451
2452
  exp_start_commit = nil
@@ -2799,6 +2800,8 @@ module Cnvrg
2799
2800
  log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN, ((sync or options["sync"]) ? false : true))
2800
2801
  end
2801
2802
  return true
2803
+ else
2804
+ @dataset.update_idx_with_commit!(commit_to_download)
2802
2805
  end
2803
2806
  rescue => e
2804
2807
  log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
@@ -2811,7 +2814,7 @@ module Cnvrg
2811
2814
  end
2812
2815
 
2813
2816
  desc 'download in git project', 'Download other files', :hide =>true
2814
- def download_in_git(commit_sha1)
2817
+ def download_in_git(*commit_sha1)
2815
2818
  begin
2816
2819
  verify_logged_in(true)
2817
2820
  log_start(__method__, args, options)
@@ -2826,7 +2829,11 @@ module Cnvrg
2826
2829
  end
2827
2830
 
2828
2831
  begin
2829
- download_result = @files.download_multiple_files_s3(files, project_home)
2832
+ if files["keys"].blank?
2833
+ log_message("No New files to download", Thor::Shell::Color::GREEN)
2834
+ return
2835
+ end
2836
+ download_result = @files.download_multpile_files_s3(files, project_home)
2830
2837
  if download_result
2831
2838
  log_message("Done.\nDownloaded finished successfully", Thor::Shell::Color::GREEN)
2832
2839
  else
@@ -2836,7 +2843,6 @@ module Cnvrg
2836
2843
 
2837
2844
  rescue => e
2838
2845
  log_error(e)
2839
- puts e.backtrace
2840
2846
  log_message("Error while trying to download ", Thor::Shell::Color::RED)
2841
2847
  return
2842
2848
  end
@@ -2850,6 +2856,8 @@ module Cnvrg
2850
2856
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
2851
2857
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
2852
2858
  method_option :ignore, :type => :string, :aliases => ["-i"], :desc => "ignore following files", :default => ""
2859
+ method_option :git, :type => :boolean, :aliases => ["--git"], :desc => "download from git projects' commits", :default => false
2860
+ method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :desc => "download a specific commit", :default => nil
2853
2861
 
2854
2862
  def download(sync = false, ignore_list = "", in_exp=false)
2855
2863
  begin
@@ -2858,6 +2866,11 @@ module Cnvrg
2858
2866
  project_home = get_project_home
2859
2867
  @project = Project.new(project_home)
2860
2868
  @files = Cnvrg::Files.new(@project.owner, @project.slug)
2869
+ git = options["git"]
2870
+ commit = options["commit"]
2871
+ if git or @project.is_git
2872
+ return download_in_git(commit)
2873
+ end
2861
2874
  ignore = options[:ignore] || ""
2862
2875
  if ignore.nil? or ignore.empty?
2863
2876
  ignore = ignore_list
@@ -3236,7 +3249,7 @@ module Cnvrg
3236
3249
  if run_download
3237
3250
  invoke :download, [true, "", in_exp ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true
3238
3251
  end
3239
- invoke :upload, [false, true, direct, "",options['exp_slug'] ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true,
3252
+ invoke :upload, [false, true, direct, "",in_exp,options[:force], options["output_dir"],job_type, job_slug ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true,
3240
3253
  :ignore => options[:ignore], :force => options[:force], :message => options[:message], :deploy => options["deploy"], :return_id => options["return_id"],
3241
3254
  :files => options["files"], :output_dir => options["output_dir"], :job_slug => job_slug, :job_type => job_type
3242
3255
 
@@ -20,12 +20,13 @@ module Cnvrg
20
20
  @base_resource = "users/#{owner}/datasets/#{dataset_slug}/"
21
21
  end
22
22
 
23
- def upload_multiple_files(commit_sha1, tree, threads: ParallelThreads, force: false, new_branch: false)
23
+ def upload_multiple_files(commit_sha1, tree, threads: ParallelThreads, force: false, new_branch: false, progressbar: nil)
24
24
  random_file_name = (0...8).map { (65 + rand(26)).chr }.join #needed to create a file for post_file..
25
25
  # each file have: {sha1: sha1, file_name: file_name, file_size: file_size, content_type: content_type, absolute_path, relative_path}
26
26
 
27
- #this call should also implement compare_idx...
28
- upload_resp = Cnvrg::API.request(@base_resource + "upload_files", 'POST', {commit_sha1: commit_sha1, tree: tree, force: force, is_branch: new_branch})
27
+ #this call should also implement compare_idx...
28
+ begin
29
+ upload_resp = Cnvrg::API.request(@base_resource + "upload_files", 'POST_JSON', {commit_sha1: commit_sha1, tree: tree, force: force, is_branch: new_branch})
29
30
  return Cnvrg::Result.new(false, "Failed to upload files") unless Cnvrg::CLI.is_response_success(upload_resp, false)
30
31
  results = upload_resp['result'].with_indifferent_access
31
32
  props = Cnvrg::Helpers.get_s3_props(results)
@@ -34,11 +35,20 @@ module Cnvrg
34
35
  upload_options = props[:upload_options]
35
36
  s3_bucket = Aws::S3::Resource.new(client: client).bucket(bucket)
36
37
  files = results['files']
38
+ progressbar.progress += tree.keys.length - files.length if progressbar.present?
37
39
  Parallel.map((files.keys), {in_threads: threads}) do |k|
38
40
  o = tree[k].merge(files[k])
39
41
  upload_single_file(o, s3_bucket, upload_options)
42
+ progressbar.progress += 1 if progressbar.present?
40
43
  end
44
+ blob_ids = files.values.map{|f| f['bv_id']}
45
+ dirs = tree.keys.select{|k| tree[k].nil? }
46
+ upload_resp = Cnvrg::API.request(@base_resource + "upload_files_save", "POST", {commit: commit_sha1, blob_ids: blob_ids, dirs: dirs})
41
47
  return files.keys.length
48
+ rescue => e
49
+ return Cnvrg::Result.new(false, "Failed to upload files")
50
+ end
51
+
42
52
  end
43
53
 
44
54
  def upload_single_file(file, s3_bucket, upload_options={})
@@ -734,10 +744,10 @@ module Cnvrg
734
744
  Cnvrg::CLI.is_response_success(response, true)
735
745
  return response
736
746
  end
737
- def start_commit(new_branch,force=false,delete_commit=nil)
747
+ def start_commit(new_branch,force=false,delete_commit=nil, chunks: 0, current_commit: nil)
738
748
  begin
739
749
  response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {dataset_slug: @dataset_slug, new_branch: new_branch,force:force,
740
- username: @owner,delete_commit:delete_commit})
750
+ username: @owner,current_commit:current_commit, total_chunks: chunks})
741
751
  Cnvrg::CLI.is_response_success(response, true)
742
752
  return response
743
753
  rescue => e
@@ -746,9 +756,9 @@ module Cnvrg
746
756
 
747
757
  end
748
758
 
749
- def end_commit(commit_sha1,force, is_success)
759
+ def end_commit(commit_sha1,force, success: true)
750
760
  begin
751
- response = Cnvrg::API.request("#{base_resource}/commit/end", 'POST', {commit_sha1: commit_sha1,force:force, success:is_success})
761
+ response = Cnvrg::API.request("#{base_resource}/commit/end", 'POST', {commit_sha1: commit_sha1,force:force, success: success})
752
762
  Cnvrg::CLI.is_response_success(response, true)
753
763
  return response
754
764
  rescue => e
@@ -828,7 +838,7 @@ module Cnvrg
828
838
 
829
839
  end
830
840
 
831
- def download_multiple_files_s3(files, project_home, conflict: false)
841
+ def download_multiple_files_s3(files, project_home, conflict: false, progressbar: nil)
832
842
  begin
833
843
  props = Cnvrg::Helpers.get_s3_props(files)
834
844
  client = props[:client]
@@ -841,11 +851,11 @@ module Cnvrg
841
851
  isolation: true
842
852
  }
843
853
  Parallel.map(files["keys"], parallel_options) do |f|
844
-
845
854
  file_path = f["name"]
855
+ progressbar.progress += 1 if progressbar.present?
846
856
  if file_path.end_with? "/"
847
857
  # dir
848
- if download_dir(file_path, file_path)
858
+ if download_dir(project_home, file_path)
849
859
  download_succ_count += 1
850
860
  else
851
861
  return Cnvrg::Result.new(false,"Could not create directory: #{file_path}")
@@ -857,6 +867,8 @@ module Cnvrg
857
867
  file_key = Cnvrg::Helpers.decrypt(key,iv, f["path"])
858
868
  resp = false
859
869
  file_path = "#{file_path}.conflict" if conflict
870
+ dirname = File.dirname file_path
871
+ download_dir(project_home, dirname) unless dirname.eql? "."
860
872
  File.open(project_home+"/"+file_path, 'w+') do |file|
861
873
  resp = client.get_object({bucket:bucket,
862
874
  key:file_key}, target: file)
@@ -27,6 +27,9 @@ module Cnvrg
27
27
  end
28
28
 
29
29
  def last_local_commit
30
+ if !File.exist? "#{self.local_path}/.cnvrg/idx.yml"
31
+ return nil
32
+ end
30
33
  idx = YAML.load_file(@local_path + "/.cnvrg/idx.yml")
31
34
  return idx[:commit]
32
35
  end
@@ -488,7 +491,6 @@ module Cnvrg
488
491
  end
489
492
  idx_hash = YAML.load_file("#{self.local_path}/.cnvrg/idx.yml")
490
493
  return idx_hash[:next_commit]
491
-
492
494
  end
493
495
  def remove_next_commit()
494
496
  if !File.exist? "#{self.local_path}/.cnvrg/idx.yml"
@@ -501,6 +503,13 @@ module Cnvrg
501
503
  File.open("#{self.local_path}/.cnvrg/idx.yml", 'w') { |f| f.write idx.to_yaml }
502
504
 
503
505
 
506
+ end
507
+ def get_current_commit()
508
+ if !File.exist? "#{self.local_path}/.cnvrg/idx.yml"
509
+ return nil
510
+ end
511
+ idx_hash = YAML.load_file("#{self.local_path}/.cnvrg/idx.yml")
512
+ return idx_hash[:commit]
504
513
  end
505
514
  def list_files(commit, json)
506
515
  response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/list", 'GET', {commit_sha1:commit, as_json:json})
@@ -141,7 +141,7 @@ module Cnvrg
141
141
  restart = false
142
142
  #TODO: remove this later
143
143
  fall_number = rand(1..20)
144
- if fall_number == 5
144
+ if [5,15].include? fall_number
145
145
  return true
146
146
  else
147
147
  return false
@@ -196,6 +196,7 @@ parameters:
196
196
 
197
197
  def decrypt(key,iv,str)
198
198
  begin
199
+
199
200
  cipher = OpenSSL::Cipher.new("aes-256-cbc").decrypt
200
201
  cipher.key = key
201
202
  cipher.iv = Base64.decode64 iv.encode('ascii-8bit')
@@ -262,7 +263,7 @@ parameters:
262
263
  :http_open_timeout => 60, :retry_limit => 20)
263
264
  use_accelerate_endpoint = true
264
265
  else
265
- endpoint = Cnvrg::Helpers.decrypt(key,iv, files["endpoint_url"])
266
+ endpoint = Cnvrg::Helpers.decrypt(key,iv, files["endpoint"])
266
267
  client = Aws::S3::Client.new(
267
268
  :access_key_id =>access,
268
269
  :secret_access_key => secret,
@@ -317,6 +317,22 @@ module Cnvrg
317
317
  config = YAML.load_file(@working_dir+"/.cnvrg/config.yml")
318
318
  new_config = config.except(:new_branch)
319
319
  File.open(@working_dir+"/.cnvrg/config.yml", "w+") { |f| f.write new_config.to_yaml }
320
+ end
321
+ def generate_output_dir(output_dir)
322
+ upload_list = []
323
+ list = Dir.glob("#{output_dir}/**/*", File::FNM_DOTMATCH)
324
+ Parallel.map(list, in_threads: IDXParallelThreads) do |e|
325
+ next if e.end_with? "/."
326
+ if File.directory? e
327
+
328
+ upload_list << e+"/"
329
+ else
330
+ upload_list << e
331
+ end
332
+ end
333
+ upload_list << output_dir + "/"
334
+ return upload_list
335
+
320
336
  end
321
337
 
322
338
  def generate_idx(deploy:false)
@@ -1,4 +1,4 @@
1
1
  module Cnvrg
2
- VERSION = '0.6.1'
2
+ VERSION = '0.6.2'
3
3
  end
4
4
 
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.6.1
4
+ version: 0.6.2
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: 2018-08-02 00:00:00.000000000 Z
12
+ date: 2018-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler