cnvrg 1.9.9.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/bin/cnvrg +9 -0
  3. data/cnvrg.gemspec +47 -0
  4. data/lib/cnvrg.rb +7 -0
  5. data/lib/cnvrg/Images.rb +351 -0
  6. data/lib/cnvrg/api.rb +247 -0
  7. data/lib/cnvrg/api_v2.rb +14 -0
  8. data/lib/cnvrg/auth.rb +79 -0
  9. data/lib/cnvrg/cli.rb +5715 -0
  10. data/lib/cnvrg/cli/flow.rb +166 -0
  11. data/lib/cnvrg/cli/library_cli.rb +33 -0
  12. data/lib/cnvrg/cli/subcommand.rb +28 -0
  13. data/lib/cnvrg/cli/task.rb +116 -0
  14. data/lib/cnvrg/colors.rb +8 -0
  15. data/lib/cnvrg/connect_job_ssh.rb +31 -0
  16. data/lib/cnvrg/data.rb +335 -0
  17. data/lib/cnvrg/datafiles.rb +1325 -0
  18. data/lib/cnvrg/dataset.rb +892 -0
  19. data/lib/cnvrg/downloader/client.rb +101 -0
  20. data/lib/cnvrg/downloader/clients/azure_client.rb +45 -0
  21. data/lib/cnvrg/downloader/clients/gcp_client.rb +50 -0
  22. data/lib/cnvrg/downloader/clients/s3_client.rb +78 -0
  23. data/lib/cnvrg/experiment.rb +209 -0
  24. data/lib/cnvrg/files.rb +1047 -0
  25. data/lib/cnvrg/flow.rb +137 -0
  26. data/lib/cnvrg/helpers.rb +422 -0
  27. data/lib/cnvrg/helpers/agent.rb +188 -0
  28. data/lib/cnvrg/helpers/executer.rb +213 -0
  29. data/lib/cnvrg/hyper.rb +21 -0
  30. data/lib/cnvrg/image.rb +113 -0
  31. data/lib/cnvrg/image_cli.rb +25 -0
  32. data/lib/cnvrg/job_cli.rb +73 -0
  33. data/lib/cnvrg/job_ssh.rb +48 -0
  34. data/lib/cnvrg/logger.rb +111 -0
  35. data/lib/cnvrg/org_helpers.rb +5 -0
  36. data/lib/cnvrg/project.rb +822 -0
  37. data/lib/cnvrg/result.rb +29 -0
  38. data/lib/cnvrg/runner.rb +49 -0
  39. data/lib/cnvrg/ssh.rb +94 -0
  40. data/lib/cnvrg/storage.rb +128 -0
  41. data/lib/cnvrg/task.rb +165 -0
  42. data/lib/cnvrg/version.rb +3 -0
  43. metadata +460 -0
@@ -0,0 +1,166 @@
1
+ require 'cnvrg/cli'
2
+ require 'cnvrg/data'
3
+ require 'cnvrg/task'
4
+ require 'cnvrg/flow'
5
+ require 'cnvrg/hyper'
6
+ require 'cnvrg/cli/subcommand'
7
+ require 'cnvrg/cli/task'
8
+ require 'thor'
9
+ module Cnvrg
10
+ module Commands
11
+ class Flow < SubCommand
12
+
13
+ def initialize(*args)
14
+ super
15
+ unless @curr_dir.present?
16
+ @cli.log_message("Not On Project Dir, exiting", Thor::Color::RED)
17
+ exit(1)
18
+ end
19
+ end
20
+
21
+ desc "flow import --file='flow.yaml'", "Import flow to the web"
22
+ method_option :file, :type => :string, :aliases => ["-f", "--file"]
23
+ def import()
24
+ run_flow_internal(file: options[:file], run: false)
25
+ end
26
+
27
+ desc "flow run --file='flow.yaml'", "Import flow to the web"
28
+ method_option :file, :type => :string, :aliases => ["-f", "--file"]
29
+ def run()
30
+ run_flow_internal(file: options[:file], run: true)
31
+ end
32
+
33
+ no_commands {
34
+ def run_flow_internal(file: nil, run: false)
35
+ if options[:file].blank?
36
+ Cnvrg::CLI.log_message("Flow title is required for export. please use --title='Flow 1'")
37
+ return
38
+ end
39
+ if not File.exists? options[:file]
40
+ Cnvrg::CLI.log_message("Cant find file in path #{options[:file]}.")
41
+ return
42
+ end
43
+ payload = YAML.safe_load(File.open(file).read)
44
+ @project = Cnvrg::Project.new(Cnvrg::CLI.get_project_home)
45
+ begin
46
+ @flow, version_slug = Flows.create_flow(@project, payload, run: run)
47
+ rescue => e
48
+ Cnvrg::CLI.log_message("Error while validating flow: #{e.message}", 'error')
49
+ return
50
+ end
51
+ Cnvrg::CLI.log_message("New flow version was created successfuly!", 'green')
52
+ Cnvrg::CLI.log_message("you can find the flow in #{@flow.edit_version_href(version_slug)}", 'green')
53
+ rescue => e
54
+ Cnvrg::CLI.log_message("Failed while creating flow")
55
+ Cnvrg::Logger.log_error(e)
56
+ end
57
+ }
58
+
59
+ desc "flow export --file='flow.yaml' --title='Flow 1' --version='version 1'", "Export flow to the web"
60
+ method_option :file, :type => :string, :aliases => ["-f", "--file"]
61
+ method_option :title, :type => :string, :aliases => ["-t", "--title"]
62
+ method_option :version, :type => :string, :aliases => ["-v", "--version"], :default => "latest"
63
+ def export()
64
+ if options[:title].blank?
65
+ Cnvrg::CLI.log_message("Flow title is required for export. please use --title='Flow 1'", "red")
66
+ return
67
+ end
68
+
69
+ @project = Cnvrg::Project.new(Cnvrg::CLI.get_project_home)
70
+ @flow = Flows.new(options[:title], project: @project)
71
+ filename = @flow.export(options[:version], file: options[:file])
72
+ Cnvrg::CLI.log_message("Flow was saved successfuly to: #{filename}", 'green')
73
+ rescue => e
74
+ Cnvrg::CLI.log_message(e.message, 'red')
75
+ Cnvrg::Logger.log_error(e)
76
+ end
77
+
78
+ # desc "task", "Running Flow tasks", :hide => true
79
+ # subcommand 'task', Cnvrg::Commands::Task
80
+ #
81
+ # desc "flow verify", "verify that the flow is well formatted"
82
+ #
83
+ # def verify(path)
84
+ # unless @curr_dir.present?
85
+ # @cli.log_message("Cant run this command because you are not in project directory", Thor::Color::RED)
86
+ # return false
87
+ # end
88
+ # @flow = Cnvrg::Flows.new(@curr_dir, path)
89
+ # @cli.log_message("The Flow is Valid", Thor::Color::GREEN)
90
+ # end
91
+ #
92
+ #
93
+ # desc "flow run", "run a flow file"
94
+ # def run(flow_slug)
95
+ # unless @curr_dir.present?
96
+ # @cli.log_message("Cant run this command because you are not in project directory", Thor::Color::RED)
97
+ # return false
98
+ # end
99
+ # @flow = Cnvrg::Flows.new(flow_slug)
100
+ # resp = @flow.run
101
+ # flow_version_href = resp["flow_version"]["href"]
102
+ # Cnvrg::CLI.log_message("Flow Live results: #{flow_version_href}")
103
+ # true
104
+ # end
105
+ #
106
+ # desc "flow create", "create a flow file"
107
+ #
108
+ # def create
109
+ # title = ask("Flow Title: ")
110
+ # title = title.presence || "cnvrg-flow"
111
+ # relations = []
112
+ # task = ask_for_relation
113
+ # while task.compact.size == 2
114
+ # from, to = task
115
+ # relations << {from: from, to: to}
116
+ # task = ask_for_relation
117
+ # end
118
+ # start_commit = ask("Flow Starting Commit (empty will set this value to 'latest')")
119
+ # Cnvrg::Flows.create_flow("#{title}.flow.yaml", {title: title, relations: relations, start_commit: start_commit})
120
+ # end
121
+ #
122
+ #
123
+ # # desc "flow resolve", "Resolve flow parameters"
124
+ # # def resolve(path)
125
+ # # @hyper = Cnvrg::Hyper.new(@curr_dir, path)
126
+ # # @hyper.resolve_params
127
+ # # end
128
+ # #
129
+ #
130
+ # private
131
+ #
132
+ # def init_tasks
133
+ # @tasks = Dir.glob("**/*.task*")
134
+ # end
135
+ #
136
+ # def ask_for_relation
137
+ # init_tasks if @tasks.blank?
138
+ # to = nil
139
+ # from = ask_for_task("Task To Start From: [#{@tasks.join(', ')}]")
140
+ # to = ask_for_task("Task To Go To: [#{@tasks.join(', ')}]") if from.present?
141
+ # [from, to]
142
+ # end
143
+ #
144
+ # def ask_for_task(text)
145
+ # verified = false
146
+ # task = nil
147
+ # while !verified
148
+ # task = ask(text)
149
+ # if task.blank?
150
+ # return nil
151
+ # end
152
+ # begin
153
+ # Cnvrg::Task.new(@curr_dir, path: task).verify_task
154
+ # verified = true
155
+ # rescue => e
156
+ # end
157
+ # end
158
+ # task
159
+ # end
160
+ #
161
+ # def get_all_tasks
162
+ # @tasks = Dir.glob("*/**.task.yaml")
163
+ # end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,33 @@
1
+ module Cnvrg
2
+ class LibraryCli < SubCommandBase
3
+
4
+ desc "library import", ''
5
+ def import
6
+ unless File.exists? "library.yml"
7
+ Cnvrg::CLI.log_message("Can't find library.yml", 'red')
8
+ exit(1)
9
+ end
10
+ library = YAML.safe_load(File.open("library.yml").read)
11
+ Cnvrg::CLI.log_message("Archiving library #{library["title"]}")
12
+ files = Dir["**/*"].select{|file| not File.directory?(file)}
13
+ File.open("archive.tar.gz", "wb") do |file|
14
+ Zlib::GzipWriter.wrap(file) do |gzip|
15
+ Gem::Package::TarWriter.new(gzip) do |tar|
16
+ files.each do |filename|
17
+ f = File.open(filename)
18
+ tar.add_file_simple(filename, 0644, f.size) do |io|
19
+ io.write(f.read)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ response = Cnvrg::API.request(['users', Cnvrg::CLI.get_owner, 'libraries'].join("/"), "POST_FILE", {relative_path: "archive.tar.gz"})
26
+ if response["status"] != 200
27
+ Cnvrg::CLI.log_message("Can't create library: #{response["message"]}")
28
+ exit(1)
29
+ end
30
+ Cnvrg::CLI.log_message("Library Created successfuly", "green")
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ class SubCommand < Thor
2
+ @cli = nil
3
+ @curr_dir = nil
4
+
5
+ def initialize(*args)
6
+ super
7
+ @cli = Cnvrg::CLI.new
8
+ @curr_dir = @cli.is_cnvrg_dir
9
+ @config = YAML.load_file(@curr_dir + "/.cnvrg/config.yml") if @curr_dir
10
+ @helpers = Cnvrg::OrgHelpers.new();
11
+ end
12
+
13
+ def self.banner(command, namespace = nil, subcommand = false)
14
+ "#{basename} #{command.usage}"
15
+ end
16
+
17
+ def self.subcommand_prefix
18
+ self.name.gsub(%r{.*::}, '').gsub(%r{^[A-Z]}) {|match| match[0].downcase}.gsub(%r{[A-Z]}) {|match| "-#{match[0].downcase}"}
19
+ end
20
+
21
+ class << self
22
+ # Hackery.Take the run method away from Thor so that we can redefine it.
23
+ def is_thor_reserved_word?(word, type)
24
+ return false if word == "run"
25
+ super
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,116 @@
1
+ module Cnvrg
2
+ module Commands
3
+ class Task < SubCommand
4
+
5
+ def initialize(*args)
6
+ super
7
+ unless @curr_dir.present?
8
+ @cli.log_message("Not On Project Dir, exiting", Thor::Color::RED)
9
+ exit(1)
10
+ end
11
+ end
12
+
13
+ desc "flow task verify", "verify that the task is well formatted"
14
+ def verify(path)
15
+ unless @curr_dir.present?
16
+ @cli.log_message("Cant run this command because you are not in project directory", Thor::Color::RED)
17
+ return false
18
+ end
19
+ @task = Cnvrg::Task.new(@curr_dir, path: path)
20
+ begin
21
+ @task.verify_task
22
+ rescue StandardError => e
23
+ @cli.log_message("An error during parsing task: #{e.message}", Thor::Color::RED)
24
+ @cli.log_error(e)
25
+ return false
26
+ rescue => e
27
+ @cli.log_error(e)
28
+ return false
29
+ end
30
+ @cli.log_message("The task verified successfuly", Thor::Color::GREEN)
31
+ return @task
32
+ end
33
+
34
+
35
+ desc "flow task create", "Creates new task"
36
+ def create
37
+ @project = Cnvrg::Project.new(@curr_dir)
38
+
39
+ task = {}
40
+ task[:title] = ask("Task title", Thor::Color::GREEN)
41
+ task[:type] = ask("Task Type?", Thor::Color::GREEN, :limited_to => ["exec", "data", "library", "deploy"])
42
+ case task[:type]
43
+ when "exec"
44
+ task[:cmd] = ask("Command to run", Thor::Color::GREEN)
45
+ task[:params], task[:params_path] = ask_for_params
46
+ task[:machine] = ask_for_machine
47
+ when "data"
48
+ task[:dataset] = ask("Dataset slug", Thor::Color::GREEN)
49
+ task[:query] = ask("Dataset query", Thor::Color::GREEN)
50
+ when "library"
51
+ task[:library] = ask("Library Slug", Thor::Color::GREEN)
52
+ task[:params], task[:params_path] = ask_for_params
53
+ task[:machine] = ask_for_machine
54
+ when "deploy"
55
+ task[:cmd] = ask("Command to run", Thor::Color::GREEN)
56
+ task[:function] = ask("Function to run", Thor::Color::GREEN)
57
+ end
58
+ @task = Cnvrg::Task.new(@curr_dir, content: task)
59
+ @task.save
60
+ @cli.log_message("Task #{@task.title} Saved Successfuly", Thor::Color::GREEN)
61
+ end
62
+
63
+
64
+ desc "flow task run", "Running specific task"
65
+ def run(path)
66
+ begin
67
+ path = "#{path}.task.yaml" unless path.end_with? '.task.yaml'
68
+ @task = Cnvrg::Task.new(@curr_dir, path: path)
69
+ url = @task.run
70
+ @cli.log_message("Task: #{@task.title} is running, you can track its performance on #{url}", Thor::Color::GREEN)
71
+ rescue => e
72
+ @cli.log_message(e.message, Thor::Color::RED)
73
+ @cli.log_error(e)
74
+ end
75
+ end
76
+
77
+ private
78
+
79
+ def ask_for_params
80
+ params = []
81
+ param_key = ask("Param key: (enter for continue)", Thor::Color::GREEN)
82
+ while param_key.present?
83
+ param_value = ask("#{param_key} value: (seperated by commas)", Thor::Color::GREEN)
84
+ params << {key: param_key, value: param_value}
85
+ param_key = ask("Param key: (enter for continue)", Thor::Color::GREEN)
86
+ end
87
+ if params.blank?
88
+ params_path = ask("Params from file: ")
89
+ if params_path.present?
90
+ while params_path.present? and !File.exists? params_path
91
+ params_path = ask("Cant find file, please write it again.")
92
+ end
93
+ end
94
+ end
95
+ return params, params_path
96
+ end
97
+
98
+ def ask_for_machine
99
+ options = {}
100
+ all_machines = @project.get_machines
101
+ options[:limited_to] = all_machines if all_machines.present?
102
+ ask("Kind of machine to execute on?", Thor::Color::GREEN, options).presence || "medium"
103
+ end
104
+
105
+
106
+ def on_project
107
+ unless @curr_dir.present?
108
+ @cli.log_message("Cant run this command because you are not in project directory", Thor::Color::RED)
109
+ return false
110
+ end
111
+ end
112
+
113
+
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,8 @@
1
+ module Cnvrg
2
+ class Colors
3
+ RED = 0
4
+ BLUE = 1
5
+ YELLOW = 2
6
+ GREEN = 3
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ module Cnvrg
2
+ class ConnectJobSsh
3
+ def initialize(job_id)
4
+ home_dir = File.expand_path('~')
5
+ config = YAML.load_file(home_dir+"/.cnvrg/config.yml")
6
+ @owner = config.to_h[:owner]
7
+ @job_id = job_id
8
+ rescue => e
9
+ @owner = ""
10
+ Cnvrg::Logger.log_info("cnvrg is not configured")
11
+ end
12
+
13
+ def start(username, password)
14
+ Cnvrg::API_V2.request("#{@owner}/job_ssh/#{@job_id}/start" , 'POST', {username: username, password: password})
15
+ end
16
+
17
+ def status()
18
+ Cnvrg::API_V2.request("#{@owner}/job_ssh/#{@job_id}/status" , 'GET', nil)
19
+ end
20
+
21
+ def run_portforward_command(pod_name, port, kubeconfig, namespace)
22
+ command = "kubectl"
23
+ if kubeconfig.present?
24
+ command = "kubectl --kubeconfig=#{kubeconfig}"
25
+ end
26
+ bashCommand = "#{command} -n #{namespace} port-forward #{pod_name} #{port}:22"
27
+ puts("\nrunning command #{bashCommand}")
28
+ `#{bashCommand}`
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,335 @@
1
+ require 'cnvrg/cli'
2
+ require 'thor'
3
+ class SubCommandBase < Thor
4
+ def self.banner(command, namespace = nil, subcommand = false)
5
+ "#{basename} #{command.usage}"
6
+ end
7
+
8
+ def self.subcommand_prefix
9
+ self.name.gsub(%r{.*::}, '').gsub(%r{^[A-Z]}) { |match| match[0].downcase }.gsub(%r{[A-Z]}) { |match| "-#{match[0].downcase}" }
10
+ end
11
+ end
12
+
13
+ module Cnvrg
14
+ class Data < SubCommandBase
15
+ class_option :no_compression, :type => :boolean, :aliases => ["-nc", "--no_compression"], :default => false
16
+
17
+ module ConfigValidation
18
+ SUCCESS = "success"
19
+ FAILED = "failed"
20
+ end
21
+
22
+ desc "data init", "Set current directory as dataset directory"
23
+ method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
24
+ method_option :bucket, :type => :string, :aliases => ["-b", "--bucket"], :default => ""
25
+ method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
26
+
27
+ def init
28
+ cli = Cnvrg::CLI.new()
29
+ public = options["public"]
30
+ bucket = options["bucket"]
31
+ title = options["title"]
32
+ cli.init_data(public, bucket: bucket, title: title)
33
+ end
34
+
35
+ desc "data link DATASET_SLUG", "Set current directory as dataset directory"
36
+ def link(dataset=nil)
37
+ begin
38
+ cli = Cnvrg::CLI.new()
39
+ cli.verify_logged_in(false)
40
+ cli.log_start(__method__, args, options)
41
+
42
+ if dataset.include? "/"
43
+ ## this case is to support DATASET_URL expected example: domain.com/organization_name/datasets/dataset_name
44
+ url_parts = dataset.split("/")
45
+ dataset_index = Cnvrg::Helpers.look_for_in_path(dataset, "datasets")
46
+ dataset_slug = url_parts[dataset_index + 1]
47
+ owner = url_parts[dataset_index - 1]
48
+ raise Exception.new("Can't find all dataset information please check the URL") if dataset_slug.blank? or owner.blank?
49
+ else
50
+ ## this case is to support DATASET_SLUG expected example: dataset_name
51
+ # in this case it will take the organization from the config file
52
+ dataset_slug = dataset
53
+ raise Exception.new("Please enter dataset name or dataset full url") if dataset_slug.blank?
54
+ owner = CLI.get_owner
55
+ end
56
+
57
+ config_validation = Dataset.validate_config
58
+ if config_validation[:validation] == Data::ConfigValidation::SUCCESS
59
+ cli.log_message(config_validation[:message])
60
+ return
61
+ else
62
+ Cnvrg::Logger.log_error_message(config_validation)
63
+ FileUtils.rmtree(".cnvrg")
64
+ end
65
+
66
+ cli.log_message("Linking dataset: #{dataset_slug} to the current directory", Thor::Shell::Color::BLUE)
67
+ success = Dataset.link_dataset(owner: owner, slug: dataset_slug)
68
+ if success
69
+ cli.log_message("Dataset: #{dataset_slug} linked successfully to the current directory")
70
+ else
71
+ cli.log_message("Linking failed\nAborting", Thor::Shell::Color::RED)
72
+ end
73
+ rescue => e
74
+ Cnvrg::Logger.log_error(e)
75
+ cli.log_message("Aborting\n#{e.message}", Thor::Shell::Color::RED)
76
+ exit(1)
77
+ rescue Exception => e
78
+ Cnvrg::Logger.log_error(e)
79
+ cli.log_message("Aborting\n#{e.message}", Thor::Shell::Color::RED)
80
+ exit(1)
81
+ end
82
+ end
83
+
84
+
85
+ desc "data upload", "Upload files from local dataset directory to remote server"
86
+ method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
87
+ method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
88
+ method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
89
+ method_option :sync, :type => :boolean, :aliases => ["-s","--sync"], :default => false
90
+ method_option :tags, :type => :boolean, :aliases => ["--tags"], :desc => "upload file tags", :default => false
91
+ method_option :chunk_size, :type => :numeric, :aliases => ["--chunk"], :desc => "upload file tags", :default => 1000
92
+ method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
93
+
94
+ def upload
95
+ cli = Cnvrg::CLI.new()
96
+ verbose = options["verbose"]
97
+ sync = options["sync"]
98
+ force = options["force"]
99
+ new_branch = options["new_branch"]
100
+ chunk_size = options["chunk_size"]
101
+ tags = options["tags"]
102
+ message = options["message"]
103
+ cli.upload_data_new(new_branch, verbose, sync, force, tags, chunk_size, message:message)
104
+ end
105
+ desc 'data sync', 'Synchronise local dataset directory with remote server'
106
+ method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
107
+ method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
108
+ method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
109
+ method_option :commit, :type => :string, :aliases => ["-c"], :desc => "download specified commit", :default => nil
110
+ method_option :all_files, :type => :boolean, :aliases => ["--all"], :desc => "download specified commit", :default => false
111
+ method_option :tags, :type => :boolean, :aliases => ["--tags"], :desc => "upload file tags", :default => false
112
+ method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
113
+ method_option :chunk_size, :type => :numeric, :aliases => ["--chunk_size"], :desc => "chunk size to communicate with the server", :default => 1000
114
+ method_option :init, :type => :boolean, :aliases => ["--initial"], :desc => "initial upload of dataset", :default => false
115
+ method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
116
+
117
+ def sync_data_new()
118
+ cli = Cnvrg::CLI.new()
119
+ force = options["force"]
120
+ new_branch = options["new_branch"]
121
+ verbose = options["verbose"]
122
+ commit = options["commit"]
123
+ all_files = options["all_files"]
124
+ tags = options["tags"]
125
+ parallel=options["parallel"]
126
+ chunk_size = options["chunk_size"]
127
+ init = options["init"]
128
+ message = options["message"]
129
+ cli.sync_data_new(new_branch, force, verbose, commit, all_files, tags, parallel, chunk_size, init, message)
130
+ end
131
+
132
+ desc 'data download', 'Download files from remote server'
133
+ method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits", :default => false
134
+ method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
135
+ method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
136
+ method_option :commit, :type => :string, :aliases => ["-c"], :desc => "download specified commit", :default => nil
137
+ method_option :all_files, :type => :boolean, :aliases => ["--all"], :desc => "download specified commit", :default => false
138
+
139
+ def download()
140
+ cli = Cnvrg::CLI.new()
141
+ verbose = options["verbose"]
142
+ sync = options["sync"]
143
+ new_branch = options["new_branch"]
144
+ commit = options["commit"]
145
+ all_files = options["all_files"]
146
+ cli.download_data_new(verbose,sync,new_branch, commit,all_files)
147
+ end
148
+ desc 'data clone DATASET_URL', 'Clone dataset'
149
+ method_option :only_tree, :type => :boolean, :aliases => ["-t", "--tree"], :default => false
150
+ method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => nil
151
+ method_option :query, :type => :string, :aliases => ["-q", "--query"], :default => nil
152
+ method_option :read, :type => :boolean, :aliases => ["-r", "--read"], :default => false
153
+ method_option :remote, :type => :boolean, :aliases => ["-h", "--remote"], :default => false
154
+ method_option :relative, :type => :boolean, :aliases => ["-rel", "--relative"], :default => false
155
+ method_option :flatten, :type => :boolean, :aliases => ["-f", "--flatten"], :default => false
156
+ method_option :soft, :type => :boolean, :aliases => ["-s", "--soft"], :default => false, :hide => true
157
+ def clone(dataset_url)
158
+ cli = Cnvrg::CLI.new()
159
+ only_tree =options[:only_tree]
160
+ commit =options[:commit]
161
+ query =options[:query]
162
+ read = options[:read]
163
+ remote = options[:remote]
164
+ soft = options[:soft]
165
+ flatten = options[:flatten]
166
+ cli.clone_data(
167
+ dataset_url,
168
+ only_tree=only_tree,
169
+ commit=commit,
170
+ query=query,
171
+ read=read,
172
+ remote=remote,
173
+ flatten: flatten,
174
+ relative: options[:relative],
175
+ soft: soft
176
+ )
177
+ end
178
+
179
+ desc 'data verify DATASETS_TITLES', 'verify datasets', :hide => true
180
+ method_option :timeout, :type => :numeric, :aliases => ["-t", "--timeout"], :desc => "Time to wait before returning final answer", :default => nil
181
+ def verify(*dataset_titles)
182
+ cli = Cnvrg::CLI.new()
183
+ timeout =options[:timeout]
184
+ cli.verify_datasets(dataset_titles, timeout)
185
+ end
186
+
187
+ desc 'data scan', 'lookup datasets', :hide => true
188
+ def scan()
189
+ cli = Cnvrg::CLI.new()
190
+ cli.scan_datasets()
191
+ end
192
+
193
+ desc "data block DATASET_TITLES", 'verifying that datasets exists', hide: true
194
+ def block(*dataset_slugs)
195
+ not_verified = true
196
+ while not_verified
197
+ not_verified = dataset_slugs.select{|slug| not Dataset.verify_dataset(slug)}.present?
198
+ end
199
+ end
200
+
201
+ desc 'data set --url=DATASET_URL', 'Set dataset url to other url'
202
+ method_option :url, :type => :string, :aliases => ["--url"], :default => ''
203
+ def set
204
+ cli = Cnvrg::CLI.new
205
+ cli.log_start(__method__)
206
+ cli.log_handler
207
+ if options['url'].present?
208
+ cli.set_data_url(options['url'])
209
+ end
210
+ end
211
+
212
+ desc 'data put DATASET_URL FILES_PREFIX', 'Upload selected files from local dataset directory to remote server'
213
+ method_option :dir, :type => :string, :aliases => ["-d", "--dir"], :default => ''
214
+ method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ''
215
+ method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
216
+ method_option :override, :type => :boolean, :aliases => ["--override"], :default => false
217
+ method_option :threads, :type => :numeric, :aliases => ["-t","--threads"], :default => 15
218
+ method_option :chunk_size, :type => :numeric, :aliases => ["-cs","--chunk"], :default => 1000
219
+ method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
220
+
221
+ def put(dataset_url, *files)
222
+ cli = Cnvrg::CLI.new()
223
+ dir = options[:dir]
224
+ force = options[:force]
225
+ override = options[:override]
226
+ commit = options[:commit]
227
+ message = options[:message]
228
+ threads = options[:threads]
229
+ chunk_size = options[:chunk_size]
230
+ cli.data_put(
231
+ dataset_url,
232
+ files: files,
233
+ dir: dir,
234
+ commit: commit,
235
+ force: force,
236
+ override: override,
237
+ threads: threads,
238
+ chunk_size: chunk_size,
239
+ message: message
240
+ )
241
+ end
242
+
243
+ desc 'data rm DATASET_URL FILES_PREFIX', 'Delete selected files from remote server'
244
+ method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
245
+ def rm(dataset_url, *regex_list)
246
+ cli = Cnvrg::CLI.new()
247
+ message = options[:message]
248
+ cli.data_rm(dataset_url, regex_list: regex_list, message: message)
249
+ end
250
+
251
+ desc 'data clone_query --query=QUERY_SLUG DATASET_URL', 'Clone dataset with specific query'
252
+ method_option :query, :type => :string, :aliases => ["-q", "--query"], :default => nil
253
+ method_option :soft, :type => :boolean, :aliases => ["-s", "--soft"], :default => false, :hide => true
254
+ method_option :flatten, :type => :boolean, :aliases => ["-f", "--flatten"], :default => false
255
+ def clone_query(dataset_url)
256
+ cli = Cnvrg::CLI.new()
257
+ query = options[:query]
258
+ flatten = options[:flatten]
259
+ soft =options[:soft]
260
+ cli.clone_data_query(dataset_url,query=query, flatten, soft: soft)
261
+ end
262
+
263
+ desc 'data delete DATASET_SLUG', 'Delete dataset'
264
+ def delete(dataset_slug)
265
+ cli = Cnvrg::CLI.new()
266
+ cli.delete_data(dataset_slug)
267
+
268
+ end
269
+ desc 'data list', 'Show list of all datasets'
270
+ def list()
271
+ cli = Cnvrg::CLI.new()
272
+
273
+ cli.list_dataset()
274
+
275
+ end
276
+
277
+ desc 'data commits URL/SLUG', 'List all commits for a given dataset'
278
+ method_option :commit_sha1, :type => :string, :aliases => ["-c", "--commit"], :default => nil
279
+ def commits(dataset_url)
280
+ cli = Cnvrg::CLI.new()
281
+ commit_sha1 = options[:commit_sha1]
282
+ cli.list_dataset_commits(dataset_url, commit_sha1:commit_sha1)
283
+ end
284
+
285
+ desc 'data files DATASET_URL', 'Show list of dataset files'
286
+ method_option :offset, :type => :numeric, :aliases => ["-o", "--offset"], :default => 0
287
+ method_option :limit, :type => :numeric, :aliases => ["-l", "--limit"], :default => 1000
288
+ method_option :expires, :type => :numeric, :aliases => ["-ex", "--expires"], :default => 3600
289
+ method_option :commit_sha1, :type => :string, :aliases => ["-c", "--commit"], :default => nil
290
+ def files(dataset_url)
291
+ cli = Cnvrg::CLI.new()
292
+ cli.verify_logged_in(false)
293
+ cli.log_start(__method__, args, options)
294
+ @dataset = Dataset.new(dataset_url: dataset_url)
295
+ files = @dataset.list_files(
296
+ commit_sha1: options[:commit_sha1],
297
+ limit: options[:limit],
298
+ expires: options[:expires],
299
+ offset: options[:offset])
300
+ cli.log_message(files)
301
+ end
302
+
303
+ desc 'data queries', 'List all dataset queries related to current dataset'
304
+ def queries()
305
+ cli = Cnvrg::CLI.new()
306
+ cli.queries()
307
+ end
308
+
309
+ desc 'data query_files QUERY_NAME', 'Show list of all files in specific query'
310
+ def query_files(query)
311
+ cli = Cnvrg::CLI.new()
312
+ cli.query_files(query)
313
+ end
314
+
315
+ desc 'data download_tags_yaml', 'Download dataset tags yml files in current dataset directory'
316
+ def download_tags_yaml
317
+ cli = Cnvrg::CLI.new()
318
+ cli.download_tags_yaml()
319
+ end
320
+
321
+
322
+ desc 'data test', 'test client'
323
+ def test(data_url)
324
+ cli = Cnvrg::CLI.new
325
+ cli.verify_logged_in(true)
326
+ cli.log_start(__method__, args, options)
327
+ @dataset = Dataset.new(dataset_url: data_url)
328
+ resp = @dataset.get_storage_client
329
+ @dataset.init_home(remote: false)
330
+ @dataset.download_softlink
331
+
332
+ end
333
+
334
+ end
335
+ end