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 +4 -4
- data/cnvrg.gemspec +3 -2
- data/lib/cnvrg/api.rb +2 -2
- data/lib/cnvrg/cli.rb +51 -36
- data/lib/cnvrg/data.rb +14 -3
- data/lib/cnvrg/datafiles.rb +20 -62
- data/lib/cnvrg/dataset.rb +198 -144
- data/lib/cnvrg/downloader/client.rb +53 -0
- data/lib/cnvrg/downloader/clients/azure_client.rb +22 -0
- data/lib/cnvrg/downloader/clients/gcp_client.rb +46 -0
- data/lib/cnvrg/downloader/clients/s3_client.rb +51 -0
- data/lib/cnvrg/files.rb +17 -44
- data/lib/cnvrg/helpers/executer.rb +171 -0
- data/lib/cnvrg/job_cli.rb +33 -0
- data/lib/cnvrg/project.rb +45 -6
- data/lib/cnvrg/storage.rb +128 -0
- data/lib/cnvrg/version.rb +1 -1
- metadata +28 -7
- data/lib/cnvrg/job.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c562ccc1d7fd69f3f2b0d28db538d27d57e4a55df5f1fef3eee6cab511bd30ca
|
4
|
+
data.tar.gz: 624e78308a885897c9fc31402aff21198a3f2db6551b676f14d82d9126624255
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 928e1bb402e0dac773bb9d8150c65815b2af8878c4969ca555eeb79ac7ad51a8f9a7f1d8c69cd58651788100c0cf6b2cd9a2e2b427d7efd667d0d4abf6f41629
|
7
|
+
data.tar.gz: 123068cd21d3900cdf3e9ae982feb2e9e52ee9303236877f41a6653cb8e4e6294f7afa8cb8c7c3a1e665fa0b331d8ee1e337b3e6a1b9e34a4f8293f25381d027
|
data/cnvrg.gemspec
CHANGED
@@ -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'
|
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'
|
data/lib/cnvrg/api.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
204
|
+
Cnvrg::Logger.log_error(e)
|
205
205
|
return nil
|
206
206
|
rescue SignalException
|
207
207
|
return false
|
data/lib/cnvrg/cli.rb
CHANGED
@@ -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/
|
29
|
-
require
|
30
|
-
require
|
31
|
-
require
|
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
|
-
|
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("/")
|
data/lib/cnvrg/data.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/cnvrg/datafiles.rb
CHANGED
@@ -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
|
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
|
125
|
+
def upload_single_file(file)
|
130
126
|
begin
|
131
|
-
file = file.
|
132
|
-
Cnvrg::Logger.log_info("Uploading #{file[
|
133
|
-
|
134
|
-
|
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[
|
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
|
-
|
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:
|
939
|
+
in_threads: ParallelThreads,
|
958
940
|
isolation: true
|
959
941
|
}
|
960
942
|
Parallel.map(files["keys"], parallel_options) do |f|
|
961
|
-
|
962
|
-
|
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
|
965
|
-
|
966
|
-
|
967
|
-
|
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
|
-
|
976
|
-
|
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
|
-
|
988
|
-
|
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)
|