cnvrg 1.2.7 → 1.3.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f7319668db1dc7e8257aa9f6067fc43b91dd559f4e73c1c5d84c6e0a6c4ec30b
4
- data.tar.gz: 3958b12ea50a32fa38ebc0c41a3e0b019199fe3f6a4f0f3ebcbe43b839fa25c1
3
+ metadata.gz: c562ccc1d7fd69f3f2b0d28db538d27d57e4a55df5f1fef3eee6cab511bd30ca
4
+ data.tar.gz: 624e78308a885897c9fc31402aff21198a3f2db6551b676f14d82d9126624255
5
5
  SHA512:
6
- metadata.gz: cb413f91c9968b93ec5e1b05be0a2deff6f5aaa5e097b9eda6e02311a36e6b14d8dba34a8385c0e1abc5193810fbaa1a0902f49537ffb79e2a7745117448233c
7
- data.tar.gz: 5a4d02fc1920d0fda7e0d5b7dfab5793ee31e6adc8b9fc2e60adc5e55213284dcc3bb3cb1c1974b1da0541da9fd8a86eb94d4c3f1c3f0a82543ec43fd4dcd080
6
+ metadata.gz: 928e1bb402e0dac773bb9d8150c65815b2af8878c4969ca555eeb79ac7ad51a8f9a7f1d8c69cd58651788100c0cf6b2cd9a2e2b427d7efd667d0d4abf6f41629
7
+ data.tar.gz: 123068cd21d3900cdf3e9ae982feb2e9e52ee9303236877f41a6653cb8e4e6294f7afa8cb8c7c3a1e665fa0b331d8ee1e337b3e6a1b9e34a4f8293f25381d027
@@ -6,7 +6,7 @@ require 'cnvrg/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'cnvrg'
8
8
  spec.version = Cnvrg::VERSION
9
- spec.authors = ['Yochay Ettun', 'Leah Kolben']
9
+ spec.authors = ['Yochay Ettun', 'Leah Kolben', 'Omer Shacham']
10
10
  spec.email = ['info@cnvrg.io']
11
11
  spec.summary = %q{A CLI tool for interacting with cnvrg.io.}
12
12
  spec.description = %q{A CLI tool for interacting with cnvrg.io.}
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = ['cnvrg']
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'bundler', '~> 1.11'
21
+ spec.add_development_dependency 'bundler'
22
22
  spec.add_development_dependency 'rake', '~> 10.0'
23
23
  spec.add_development_dependency 'rspec', '~> 3.0'
24
24
  spec.add_development_dependency 'vcr', '~> 3.0'
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
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
34
  spec.add_runtime_dependency 'aws-sdk', '~> 2'
35
+ spec.add_runtime_dependency 'google-cloud-storage', '~> 1.16'
35
36
  spec.add_runtime_dependency 'sucker_punch', '~> 2.0'
36
37
  spec.add_runtime_dependency 'urlcrypt', '~> 0.1.1'
37
38
  spec.add_runtime_dependency 'parallel', '~> 1.12.0'
@@ -53,7 +53,7 @@ module Cnvrg
53
53
  end
54
54
  conn.headers['Auth-Token'] = @pass
55
55
  conn.headers['User-Agent'] = "#{Cnvrg::API::USER_AGENT}"
56
- conn.options.timeout = 420
56
+ conn.options.timeout = 420
57
57
  conn.options.open_timeout=180
58
58
  case method
59
59
  when 'GET'
@@ -201,7 +201,7 @@ module Cnvrg
201
201
  else
202
202
  end
203
203
  rescue => e
204
- puts e
204
+ Cnvrg::Logger.log_error(e)
205
205
  return nil
206
206
  rescue SignalException
207
207
  return false
@@ -11,6 +11,18 @@ require 'yaml'
11
11
  require 'digest' # sha1up
12
12
  require "highline/import"
13
13
  require 'socket'
14
+ require 'thor'
15
+ require 'docker'
16
+ require 'launchy'
17
+ require 'socket'
18
+ require 'timeout'
19
+ require 'fileutils'
20
+ require 'active_support/all'
21
+ require 'pathname'
22
+ require 'enumerator'
23
+ require 'ruby-progressbar'
24
+ require 'open3'
25
+ require 'logstash-logger'
14
26
  require 'cnvrg/helpers'
15
27
  require 'cnvrg/api'
16
28
  require 'cnvrg/auth'
@@ -21,25 +33,15 @@ require 'cnvrg/Images'
21
33
  require 'cnvrg/dataset'
22
34
  require 'cnvrg/datafiles'
23
35
  require 'cnvrg/data'
36
+ require 'cnvrg/storage'
24
37
  require 'cnvrg/ssh'
25
38
  require 'cnvrg/result'
26
39
  require 'cnvrg/logger'
27
40
  require 'cnvrg/org_helpers'
28
- require 'cnvrg/cli/flow'
29
- require 'cnvrg/cli/task'
30
- require 'logstash-logger'
31
- require 'cnvrg/job'
32
- require 'docker'
33
- require 'launchy'
34
- require 'socket'
35
- require 'timeout'
36
- require 'fileutils'
37
- require 'active_support/all'
38
- require 'thor'
39
- require 'pathname'
40
- require 'enumerator'
41
- require 'ruby-progressbar'
42
- require 'open3'
41
+ require 'cnvrg/job_cli'
42
+ Gem.find_files("cnvrg/downloader/**/*.rb").reverse.each{|r| require r}
43
+ Gem.find_files("cnvrg/helpers/**/*.rb").reverse.each{|r| require r}
44
+ Gem.find_files("cnvrg/cli/**/*.rb").each{|r| require r}
43
45
 
44
46
 
45
47
  class Thor
@@ -164,6 +166,9 @@ module Cnvrg
164
166
  desc "data", "upload and manage datasets", :hide => false
165
167
  subcommand "data", Data
166
168
 
169
+ desc "job", "manage running jobs", :hide => false
170
+ subcommand "job", JobCli
171
+
167
172
  desc "flow", "mange project flows", :hide => true
168
173
  subcommand "flow", Cnvrg::Commands::Flow
169
174
 
@@ -605,12 +610,14 @@ module Cnvrg
605
610
  desc 'new', 'Create a new cnvrg project'
606
611
  method_option :clean, :type => :boolean, :aliases => ["-c"], :default => false
607
612
  method_option :docker_image, :type => :string, :aliases => ["-d"], :default => ""
613
+ method_option :bucket, :type => :string, :aliases => ["-b", "--bucket"], :default => ""
608
614
 
609
615
  def new(project_name)
610
616
  begin
611
617
  verify_logged_in(false)
612
618
  log_start(__method__, args, options)
613
619
  clean = options["clean"]
620
+ bucket = options["bucket"]
614
621
  docker_image = options["docker_image"]
615
622
  working_dir = Dir.pwd + "/" + project_name
616
623
  docker = false
@@ -662,6 +669,7 @@ module Cnvrg
662
669
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
663
670
  method_option :docker_image, :type => :string, :aliases => ["-d"], :default => ""
664
671
  method_option :git, :type => :boolean, :aliases => ["-g","--git"], :default => false
672
+ method_option :bucket, :type => :string, :aliases => ["-b","--bucket"], :default => ''
665
673
  method_option :title, :type => :string, :aliases => ["-t","--title"], :default => nil
666
674
 
667
675
  def link
@@ -669,7 +677,8 @@ module Cnvrg
669
677
  verify_logged_in(false)
670
678
  log_start(__method__, args, options)
671
679
  docker_image = options["docker_image"]
672
- if !docker_image.nil? and !docker_image.empty?
680
+ bucket = options["bucket"]
681
+ if docker_image.present?
673
682
  docker = true
674
683
  else
675
684
  docker = false
@@ -687,7 +696,7 @@ module Cnvrg
687
696
  end
688
697
  working_dir = Dir.getwd
689
698
  owner = CLI.get_owner
690
- if Project.link(owner, project_name, docker,git)
699
+ if Project.link(owner, project_name, docker,git, bucket: bucket)
691
700
  path = Dir.pwd
692
701
  @project = Project.new(path)
693
702
  if sync
@@ -718,7 +727,7 @@ module Cnvrg
718
727
  desc 'data init', 'Init dataset directory'
719
728
  method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
720
729
 
721
- def init_data(public)
730
+ def init_data(public, bucket: nil)
722
731
  begin
723
732
  verify_logged_in(false)
724
733
  log_start(__method__, args, options)
@@ -733,7 +742,7 @@ module Cnvrg
733
742
 
734
743
  working_dir = Dir.getwd
735
744
  owner = CLI.get_owner
736
- if Dataset.init(owner, dataset_name, options["public"])
745
+ if Dataset.init(owner, dataset_name, options["public"], bucket: bucket)
737
746
  path = Dir.pwd
738
747
  @dataset = Dataset.new(path)
739
748
 
@@ -837,7 +846,7 @@ module Cnvrg
837
846
  check = Helpers.checkmark
838
847
  if Dataset.clone(owner, dataset_name, slug, remote)
839
848
  log_message("Cloning #{dataset_name}", Thor::Shell::Color::BLUE)
840
- @files = Cnvrg::Datafiles.new(owner, slug)
849
+ @files = Cnvrg::Datafiles.new(owner, slug, dataset: Cnvrg::Dataset.new(dataset_home, dataset_url: dataset_url))
841
850
  log_message("Downloading files", Thor::Shell::Color::BLUE)
842
851
  if only_tree
843
852
  success = Dataset.clone_tree(commit: commit, dataset_home: dataset_home)
@@ -853,7 +862,6 @@ module Cnvrg
853
862
  :starting_at => 0,
854
863
  :total => files_count,
855
864
  :autofinish => true)
856
-
857
865
  while files['keys'].length > 0
858
866
  Cnvrg::Logger.log_info("download multiple files, #{downloaded_files.size} files downloaded")
859
867
  @files.download_multiple_files_s3(files, dataset_home, progressbar: progressbar, read_only: read)
@@ -1781,7 +1789,7 @@ module Cnvrg
1781
1789
 
1782
1790
  if clone_resp
1783
1791
  @project = Project.new(project_home)
1784
- @files = Cnvrg::Files.new(@project.owner, slug, project_home: project_home)
1792
+ @files = Cnvrg::Files.new(@project.owner, slug, project_home: project_home, project: @project)
1785
1793
  response = @project.clone(remote, commit_to_clone)
1786
1794
  Cnvrg::CLI.is_response_success response
1787
1795
  commit_sha1 = response["result"]["commit"]
@@ -1974,7 +1982,7 @@ module Cnvrg
1974
1982
  commit_sha1 = nil
1975
1983
  @dataset = Dataset.new(dataset_dir)
1976
1984
  @dataset.backup_idx
1977
- @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
1985
+ @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
1978
1986
  next_commit = @dataset.get_next_commit #if there was a partial commit..
1979
1987
  chunks = (@dataset.list_all_files.length.to_f / chunk_size).ceil
1980
1988
  resp = @files.start_commit(new_branch, force, chunks: chunks, dataset: @dataset)
@@ -2001,7 +2009,7 @@ module Cnvrg
2001
2009
  log_start(__method__, args, options)
2002
2010
  dataset_dir = is_cnvrg_dir(Dir.pwd)
2003
2011
  @dataset = Dataset.new(dataset_dir)
2004
- @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2012
+ @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
2005
2013
  force = options["force"] || false
2006
2014
  resp = @files.end_commit(commit, force, success: success, uploaded_files: uploaded_files)
2007
2015
  if (resp.present? and resp["result"])
@@ -2069,7 +2077,7 @@ module Cnvrg
2069
2077
  log_start(__method__, args, options)
2070
2078
  dataset_dir = is_cnvrg_dir(Dir.pwd)
2071
2079
  @dataset = Dataset.new(dataset_dir)
2072
- @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2080
+ @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
2073
2081
  new_commit ||= @dataset.get_next_commit
2074
2082
  partial_commit = @dataset.get_partial_commit
2075
2083
  if new_commit.blank?
@@ -2374,7 +2382,7 @@ module Cnvrg
2374
2382
  log_start(__method__, args, options)
2375
2383
  dataset_dir = is_cnvrg_dir(Dir.pwd)
2376
2384
  @dataset = Dataset.new(dataset_dir)
2377
- @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2385
+ @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug, dataset: @dataset)
2378
2386
  all_files = all_files
2379
2387
  res = @dataset.compare_idx_download(all_files: all_files, desired_commit: commit)
2380
2388
  unless CLI.is_response_success(res, false)
@@ -2476,7 +2484,7 @@ module Cnvrg
2476
2484
  log_start(__method__, args, options)
2477
2485
  project_home = get_project_home
2478
2486
  @project = Project.new(project_home)
2479
- @files = Cnvrg::Files.new(@project.owner, @project.slug, project_home: project_home)
2487
+ @files = Cnvrg::Files.new(@project.owner, @project.slug, project_home: project_home, project: @project)
2480
2488
  git = options["git"]
2481
2489
  commit = options["commit"]
2482
2490
  if git or @project.is_git
@@ -2607,7 +2615,7 @@ module Cnvrg
2607
2615
  exit(0)
2608
2616
  end
2609
2617
  log_message("Jumping to commit #{commit_sha1}")
2610
- @files = Cnvrg::Files.new(@project.owner, @project.slug, project_home: project_home)
2618
+ @files = Cnvrg::Files.new(@project.owner, @project.slug, project_home: project_home, project: @project)
2611
2619
  resp = @project.jump_idx(destination: commit_sha1)
2612
2620
  if resp.blank?
2613
2621
  log_message("Cant find the given commit", Thor::Shell::Color::RED)
@@ -2651,7 +2659,7 @@ module Cnvrg
2651
2659
 
2652
2660
 
2653
2661
 
2654
- @files = Cnvrg::Files.new(@project.owner, @project.slug)
2662
+ @files = Cnvrg::Files.new(@project.owner, @project.slug, project: @project)
2655
2663
  begin
2656
2664
 
2657
2665
  file = @files.show_file_s3(path, commit)
@@ -2788,7 +2796,6 @@ module Cnvrg
2788
2796
  method_option :local_folders, :type => :string, :aliases => ["--local_folders"], :default => nil
2789
2797
 
2790
2798
  def run(*cmd)
2791
-
2792
2799
  verify_logged_in(true)
2793
2800
  log_start(__method__, args, options)
2794
2801
  datasets = options["datasets"]
@@ -4816,7 +4823,6 @@ module Cnvrg
4816
4823
  user = options[:user]
4817
4824
  is_gpu = options[:gpu]
4818
4825
  res = @image.upload_docker_image(image_path, image_name, workdir, user, description, is_gpu)
4819
-
4820
4826
  if res["status"] == 200
4821
4827
  image_slug = res["id"]
4822
4828
  owner = CLI.get_owner
@@ -5326,19 +5332,24 @@ module Cnvrg
5326
5332
  end
5327
5333
 
5328
5334
  def self.log_message(message, type = Thor::Shell::Color::BLUE, to_print: true)
5329
- say "#{type}#{message}" if to_print
5330
5335
  case type
5331
- when Thor::Shell::Color::BLUE
5336
+ when Thor::Shell::Color::BLUE, 'blue', 'progress'
5337
+ color = Thor::Shell::Color::BLUE
5332
5338
  $LOG.info message: message, type: "info"
5333
- when Thor::Shell::Color::RED
5339
+ when Thor::Shell::Color::RED, 'red', 'error'
5340
+ color = Thor::Shell::Color::RED
5334
5341
  $LOG.error message: message, type: "error"
5335
- when Thor::Shell::Color::YELLOW
5342
+ when Thor::Shell::Color::YELLOW, 'yellow', 'warning'
5343
+ color = Thor::Shell::Color::YELLOW
5336
5344
  $LOG.warn message: message, type: "warning"
5337
- when Thor::Shell::Color::GREEN
5345
+ when Thor::Shell::Color::GREEN, 'green', 'info'
5346
+ color = Thor::Shell::Color::GREEN
5338
5347
  $LOG.info message: message, type: "success"
5339
5348
  else
5349
+ color = nil
5340
5350
  $LOG.info message: message, type: "unknown"
5341
5351
  end
5352
+ say "#{color}#{message}" if to_print
5342
5353
  end
5343
5354
 
5344
5355
  def log_message(message, type=Thor::Shell::Color::GREEN, to_print = true)
@@ -5450,6 +5461,10 @@ module Cnvrg
5450
5461
  return Cnvrg::CLI.get_project_home
5451
5462
  end
5452
5463
 
5464
+ def get_job
5465
+
5466
+ end
5467
+
5453
5468
  def self.get_project_home
5454
5469
  absolute_path = Dir.pwd
5455
5470
  dirs = absolute_path.split("/")
@@ -1,5 +1,3 @@
1
- require 'cnvrg/cli'
2
- require 'thor'
3
1
  class SubCommandBase < Thor
4
2
  def self.banner(command, namespace = nil, subcommand = false)
5
3
  "#{basename} #{command.usage}"
@@ -15,10 +13,12 @@ module Cnvrg
15
13
  class_option :no_compression, :type => :boolean, :aliases => ["-nc", "--no_compression"], :default => false
16
14
  desc "data init", "init data folder"
17
15
  method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
16
+ method_option :bucket, :type => :string, :aliases => ["-b", "--bucket"], :default => ""
18
17
  def init
19
18
  cli = Cnvrg::CLI.new()
20
19
  public = options["public"]
21
- cli.init_data(public)
20
+ bucket = options["bucket"]
21
+ cli.init_data(public, bucket: bucket)
22
22
  end
23
23
  desc "data upload", "upload data folder"
24
24
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
@@ -187,5 +187,16 @@ module Cnvrg
187
187
  cli.download_tags_yaml()
188
188
  end
189
189
 
190
+
191
+ desc 'data testclient', 'test client'
192
+ def test
193
+ cli = Cnvrg::CLI.new
194
+ cli.verify_logged_in(true)
195
+ cli.log_start(__method__, args, options)
196
+ dataset_dir = cli.is_cnvrg_dir(Dir.pwd)
197
+ @dataset = Project.new(dataset_dir)
198
+ resp = @dataset.get_storage_client
199
+ end
200
+
190
201
  end
191
202
  end
@@ -19,6 +19,7 @@ module Cnvrg
19
19
  @owner = owner
20
20
  @dataset = dataset
21
21
  @base_resource = "users/#{owner}/datasets/#{dataset_slug}/"
22
+ @downloader = @dataset.get_storage_client
22
23
  end
23
24
 
24
25
  def check_file_sha1(filename, org_sha1, tag: 'conflict')
@@ -96,16 +97,11 @@ module Cnvrg
96
97
  progressbar.progress += tree.keys.length if progressbar.present?
97
98
  return 0
98
99
  end
99
- props = Cnvrg::Helpers.get_s3_props(results)
100
- client = props[:client]
101
- bucket = props[:bucket]
102
- upload_options = props[:upload_options]
103
- s3_bucket = Aws::S3::Resource.new(client: client).bucket(bucket)
104
100
  files = results['files']
105
101
  progressbar.progress += tree.keys.length - files.length if progressbar.present?
106
102
  Parallel.map((files.keys), {in_threads: threads}) do |k|
107
103
  o = tree[k].merge(files[k])
108
- upload_single_file(o, s3_bucket, upload_options)
104
+ upload_single_file(o)
109
105
  progressbar.progress += 1 if progressbar.present?
110
106
  end
111
107
  blob_ids = files.values.map {|f| f['bv_id']}
@@ -126,16 +122,14 @@ module Cnvrg
126
122
 
127
123
  end
128
124
 
129
- def upload_single_file(file, s3_bucket, upload_options={})
125
+ def upload_single_file(file)
130
126
  begin
131
- file = file.with_indifferent_access
132
- Cnvrg::Logger.log_info("Uploading #{file[:absolute_path]}")
133
- obj = s3_bucket.
134
- object(file[:path])
135
- obj.upload_file(file[:absolute_path], upload_options)
136
- Cnvrg::Logger.log_info("#{file[:absolute_path]} uploaded.")
127
+ file = file.as_json
128
+ Cnvrg::Logger.log_info("Uploading #{file["absolute_path"]}")
129
+ @downloader.upload(file["path"], file["absolute_path"])
130
+ Cnvrg::Logger.log_info("#{file["absolute_path"]} uploaded.")
137
131
  rescue => e
138
- Cnvrg::Logger.log_error_message("Error while upload single file #{file[:path]}")
132
+ Cnvrg::Logger.log_error_message("Error while upload single file #{file["path"]}")
139
133
  Cnvrg::Logger.log_error(e)
140
134
  end
141
135
  end
@@ -889,9 +883,8 @@ module Cnvrg
889
883
 
890
884
  def download_files_in_chunks(files, chunk_size: 1000, conflict: false, commit: 'latest', progress: nil)
891
885
  begin
892
- ttl_files = 0
893
886
  files.each_slice(chunk_size).each do |files|
894
- ttl_files += download_files_chunk(files, conflict: conflict, progress: progress)
887
+ download_files_chunk(files, conflict: conflict, progress: progress)
895
888
  end
896
889
  return Cnvrg::Result.new(true, "Download Completed")
897
890
  rescue Exception => e
@@ -942,61 +935,26 @@ module Cnvrg
942
935
 
943
936
  def download_multiple_files_s3(files, project_home, conflict: false, progressbar: nil, read_only:false)
944
937
  begin
945
- props = Cnvrg::Helpers.get_s3_props(files)
946
- client = props[:client]
947
- iv = props[:iv]
948
- key = props[:key]
949
- bucket = props[:bucket]
950
- download_succ_count = 0
951
- if read_only
952
- in_threads = 1000
953
- else
954
- in_threads = ParallelThreads
955
- end
956
938
  parallel_options = {
957
- in_threads: in_threads,
939
+ in_threads: ParallelThreads,
958
940
  isolation: true
959
941
  }
960
942
  Parallel.map(files["keys"], parallel_options) do |f|
961
-
962
- file_path = f["name"]
943
+ local_path = @dataset.working_dir + '/' + f['name']
944
+ Cnvrg::Logger.log_info("Downloading #{local_path}")
963
945
  progressbar.progress += 1 if progressbar.present?
964
- if file_path.end_with? "/"
965
- # dir
966
- if download_dir(project_home, file_path)
967
- download_succ_count += 1
968
- else
969
- return Cnvrg::Result.new(false,"Could not create directory: #{file_path}")
970
- raise Parallel::Kill
971
- end
972
- else
946
+ if local_path.end_with? "/"
947
+ @downloader.mkdir(local_path, recursive: true)
948
+ next
949
+ end
973
950
  # blob
974
951
  begin
975
- file_key = Cnvrg::Helpers.decrypt(key,iv, f["path"])
976
- resp = false
977
- file_path = "#{file_path}.conflict" if conflict
978
- dirname = File.dirname file_path
979
- download_dir(project_home, dirname) unless dirname.eql? "."
980
- Cnvrg::Logger.info("Download #{file_path}")
981
- File.open(project_home+"/"+file_path, 'w+') do |file|
982
- resp = client.get_object({bucket:bucket,
983
- key:file_key}, target: file)
984
- end
985
- Cnvrg::Logger.log_info("Download #{file_path} success")
952
+ local_path = "#{local_path}.conflict" if conflict
953
+ storage_path = f["path"]
986
954
 
987
- if resp
988
- download_succ_count +=1
989
- else
990
- return Cnvrg::Result.new(false,"Could not create file: #{file_path}")
955
+ @downloader.download(storage_path, local_path)
956
+ Cnvrg::Logger.log_info("Download #{local_path} success")
991
957
  end
992
- rescue => e
993
- return Cnvrg::Result.new(false,"Could not create file: #{file_path}", e.message, e.backtrace)
994
- raise Parallel::Kill
995
- end
996
- end
997
- end
998
- if download_succ_count == files["keys"].size
999
- return Cnvrg::Result.new(true,"Done.\nDownloaded #{download_succ_count} files")
1000
958
  end
1001
959
  rescue => e
1002
960
  return Cnvrg::Result.new(false,"Could not download some files", e.message, e.backtrace)