cnvrg 1.6.26 → 1.6.35

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: b90d814761168667e43372f1966e30a2d5a821568bcf28d913dffcbda6b033c7
4
- data.tar.gz: c72d65d79f183cad5002bd2c14f940e6d51a9ef7a869bac12172a5bcc4ddbc76
3
+ metadata.gz: 5f90f59c9a970e96f5ac718fa295cc2ce4f81ff143d8d9f8848b039a4ecdd004
4
+ data.tar.gz: 66beb8643ccbe900863b674b20f6138d69380cd0719deba77b15ce836c14d3dd
5
5
  SHA512:
6
- metadata.gz: d093bd678b362dc9297e69a3b1454811e036c2eaf476aab4083df5da5e18492d6951fda662f02818b52776c43c6b6881c624db205066b5cf0ee314ec6a187588
7
- data.tar.gz: 06f86968182f724358ffe7d241afaa8dfcc9c6b834cabae3c75b82e2326b286abc547dd9458b9a3c1a984d846abc7611b54379dadea934ca0c5d767d61b721d0
6
+ metadata.gz: 771c2fc62849c1d33363d49aa555ffd7408ef3f821dc3b3106c5c94004ab1076f4d96574b12af92b80f5a7fe8ca38270875cd06801edd26145d6c7eaef249266
7
+ data.tar.gz: 53fd6f5f3653ed67777022e9c50f9b042f2a4b35739e23a28ff4777c5480c62e227b62633cd7b34ff44bf19a8d1ed2268555194a5650f2c103578960f2d0bf5f
@@ -1184,7 +1184,7 @@ module Cnvrg
1184
1184
  end
1185
1185
 
1186
1186
  desc '', '', :hide => true
1187
- def data_put(dataset_url, files: [], dir: '', commit: '', chunk_size: 1000)
1187
+ def data_put(dataset_url, files: [], dir: '', commit: '', chunk_size: 1000, message: nil)
1188
1188
  begin
1189
1189
  verify_logged_in(false)
1190
1190
  log_start(__method__, args, options)
@@ -1204,7 +1204,7 @@ module Cnvrg
1204
1204
  log_message("Uploading #{@files.size} files", Thor::Shell::Color::GREEN)
1205
1205
  number_of_chunks = (@files.size.to_f / chunk_size).ceil
1206
1206
  if commit.blank?
1207
- response = @datafiles.start_commit(false, true, chunks: number_of_chunks)
1207
+ response = @datafiles.start_commit(false, true, chunks: number_of_chunks, message: message )
1208
1208
  unless response #means we failed in the start commit.
1209
1209
  raise SignalException.new(1, "Cant put files into dataset, check the dataset id")
1210
1210
  end
@@ -1229,14 +1229,16 @@ module Cnvrg
1229
1229
  end
1230
1230
  if commit.blank?
1231
1231
  res = @datafiles.put_commit(@commit)
1232
- #unless res.is_success?
1233
- # raise SignalException.new(1, res.msg)
1234
- #end
1232
+ unless res.is_success?
1233
+ raise SignalException.new(1, res.msg)
1234
+ end
1235
1235
  else
1236
1236
  res = @datafiles.end_commit(@commit,false, success: true )
1237
- #unless res.is_success?
1238
- # raise SignalException.new(1, res.msg)
1239
- #end
1237
+ msg = res['result']
1238
+ response = Cnvrg::Result.new(Cnvrg::CLI.is_response_success(res, true), msg)
1239
+ unless response.is_success?
1240
+ raise SignalException.new(1, res.msg)
1241
+ end
1240
1242
  end
1241
1243
  log_message("Uploading files finished Successfully", Thor::Shell::Color::GREEN)
1242
1244
  rescue SignalException => e
@@ -1835,8 +1837,6 @@ module Cnvrg
1835
1837
  end
1836
1838
  clone_resp = Project.clone_dir(slug, owner, project_name,git)
1837
1839
  project_home = Dir.pwd + "/" + project_name
1838
-
1839
-
1840
1840
  end
1841
1841
 
1842
1842
  if clone_resp
@@ -1984,31 +1984,7 @@ module Cnvrg
1984
1984
  files_to_upload, upload_errors = invoke :upload_data_files,[commit, files_list: files_list],:new_branch=>new_branch, :verbose =>verbose, :force =>force, :sync =>sync, :chunk_size => chunk_size
1985
1985
 
1986
1986
  upload_size = files_to_upload + upload_errors.try(:size) rescue 0
1987
-
1988
- if files_to_upload <= 0
1989
- check = Helpers.checkmark
1990
- log_message("#{check} Data sync finished", Thor::Shell::Color::GREEN)
1991
- if total_deleted > 0
1992
- log_message("#{total_deleted} files deleted successfully.", Thor::Shell::Color::GREEN)
1993
- end
1994
-
1995
- if total_downloaded > 0
1996
- log_message("#{total_downloaded} files downloaded successfully.", Thor::Shell::Color::GREEN)
1997
- end
1998
-
1999
- if upload_errors.try(:size) > 0
2000
- log_message("#{upload_errors.try(:size)}/#{upload_size} files didn't upload:", Thor::Shell::Color::RED)
2001
- upload_errors.each do |file_hash|
2002
- log_message("#{file_hash[:absolute_path]}", Thor::Shell::Color::RED)
2003
- end
2004
- end
2005
-
2006
- if upload_errors.blank? and total_downloaded == 0 and total_deleted == 0
2007
- Cnvrg::CLI.log_message("You are up to date", Thor::Shell::Color::GREEN)
2008
- end
2009
- return
2010
- end
2011
- invoke :end_commit_data,[commit, success: true, uploaded_files: files_to_upload], :new_branch=>new_branch, :force =>force
1987
+ invoke :end_commit_data,[commit, success: true, uploaded_files: files_to_upload, sync: sync], :new_branch=>new_branch, :force =>force
2012
1988
  if tags
2013
1989
  log_message('Uploading Tags', Thor::Shell::Color::BLUE)
2014
1990
  dataset_dir = is_cnvrg_dir(Dir.pwd)
@@ -2033,8 +2009,10 @@ module Cnvrg
2033
2009
  if total_downloaded > 0
2034
2010
  log_message("#{total_downloaded} files downloaded successfully.", Thor::Shell::Color::GREEN)
2035
2011
  end
2012
+ if upload_size > 0
2013
+ log_message("#{files_to_upload}/#{upload_size} files uploaded successfully.", Thor::Shell::Color::GREEN)
2014
+ end
2036
2015
 
2037
- log_message("#{files_to_upload}/#{upload_size} files uploaded successfully.", Thor::Shell::Color::GREEN)
2038
2016
  if upload_errors.try(:size) > 0
2039
2017
  log_message("#{upload_errors.try(:size)}/#{upload_size} files didn't upload:", Thor::Shell::Color::RED)
2040
2018
  upload_errors.each do |file_hash|
@@ -2098,7 +2076,7 @@ module Cnvrg
2098
2076
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
2099
2077
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
2100
2078
 
2101
- def end_commit_data(commit, success: true, uploaded_files: 0)
2079
+ def end_commit_data(commit, success: true, uploaded_files: 0, sync: false)
2102
2080
  begin
2103
2081
  verify_logged_in(true)
2104
2082
  log_start(__method__, args, options)
@@ -2113,7 +2091,12 @@ module Cnvrg
2113
2091
  @dataset.revert_next_commit #removes the next commit
2114
2092
  log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN)
2115
2093
  else
2116
- log_message("#{check} Data sync finished", Thor::Shell::Color::GREEN)
2094
+ if sync
2095
+ message = "#{check} Data sync finished"
2096
+ else
2097
+ message = "#{check} Data upload finished"
2098
+ end
2099
+ log_message(message, Thor::Shell::Color::GREEN)
2117
2100
  @dataset.remove_next_commit #takes the next commit and put it as current commit
2118
2101
  @dataset.set_partial_commit(nil)
2119
2102
  @dataset.backup_idx
@@ -2909,7 +2892,7 @@ module Cnvrg
2909
2892
  method_option :job_type, :type => :string, :aliases => ["-jt", "--job_type"], :default => nil
2910
2893
  method_option :files, :type => :string, :aliases => ["--files"], :default => nil
2911
2894
  method_option :output_dir, :type => :string, :aliases => ["--output_dir"], :default => nil
2912
- def sync(direct = true)
2895
+ def sync(direct = true)
2913
2896
  verify_logged_in(true) if direct
2914
2897
  @project = Project.new(get_project_home)
2915
2898
  log_start(__method__, args, options)
@@ -2971,6 +2954,7 @@ module Cnvrg
2971
2954
  method_option :requirements, :type => :boolean, :aliases => ["-r", "--requirements"], :default => true
2972
2955
  method_option :notify_on_error, :type => :boolean, :aliases => ["-noe", "--notify_on_error"], :default => nil
2973
2956
  method_option :notify_on_success, :type => :boolean, :aliases => ["-nos", "--notify_on_success"], :default => nil
2957
+ method_option :emails, :type => :string, :aliases => ["-es", "--emails"], :default => "", :desc => "additional emails to notify on success / or error, comma separated"
2974
2958
 
2975
2959
  def run(*cmd)
2976
2960
  verify_logged_in(true)
@@ -3004,6 +2988,7 @@ module Cnvrg
3004
2988
  requirements = options["requirements"]
3005
2989
  email_notification_error = options["notify_on_error"]
3006
2990
  email_notification_success = options["notify_on_success"]
2991
+ emails = options["emails"]
3007
2992
 
3008
2993
  if !data.present? and data_query.present?
3009
2994
  log_message("Please provide data with data_query", Thor::Shell::Color::RED)
@@ -3018,7 +3003,6 @@ module Cnvrg
3018
3003
  restart_if_stuck = options["restart_if_stuck"]
3019
3004
 
3020
3005
  options_hash = Hash[options]
3021
-
3022
3006
  if local
3023
3007
  if Cnvrg::Helpers.windows?
3024
3008
  say "Windows is currently not supported for running experiments locally"
@@ -3054,7 +3038,7 @@ module Cnvrg
3054
3038
  :periodic_sync => periodic_sync, :dataset_only_tree=> dataset_only_tree,
3055
3039
  :output_dir=>output_dir, :data_query=>data_query, :git_commit =>git_commit, :git_branch=> git_branch,
3056
3040
  :restart_if_stuck =>restart_if_stuck, :local_folders => local_folders, :datasets => datasets, :prerun => prerun, :requirements => requirements,
3057
- :email_notification_error => email_notification_error, :email_notification_success => email_notification_success
3041
+ :email_notification_error => email_notification_error, :email_notification_success => email_notification_success, :emails => emails
3058
3042
  return
3059
3043
  end
3060
3044
 
@@ -3360,8 +3344,9 @@ module Cnvrg
3360
3344
  method_option :datasets, :type => :string, :aliases => ["--datasets"], :default => nil
3361
3345
  method_option :prerun, :type => :boolean, :aliases => ["-p", "--prerun"], :default => true
3362
3346
  method_option :requirements, :type => :boolean, :aliases => ["-r", "--requirements"], :default => true
3363
- method_option :email_notification_error, :type => :boolean, :aliases => ["--email_notification_error"], :default => true
3364
- method_option :email_notification_success, :type => :boolean, :aliases => ["--email_notification_success"], :default => true
3347
+ method_option :email_notification_error, :type => :boolean, :aliases => ["-noe", "--email_notification_error"], :default => true
3348
+ method_option :email_notification_success, :type => :boolean, :aliases => ["-nos", "--email_notification_success"], :default => true
3349
+ method_option :emails, :type => :string, :aliases => ["-es", "--emails"], :default => "", :desc => "additional emails to notify on success / or error"
3365
3350
 
3366
3351
  def exec_remote(*cmd)
3367
3352
 
@@ -3383,6 +3368,7 @@ module Cnvrg
3383
3368
  requirements = options["requirements"]
3384
3369
  email_notification_error = options["email_notification_error"]
3385
3370
  email_notification_success = options["email_notification_success"]
3371
+ emails = options["emails"]
3386
3372
  max_time = options["max_time"]
3387
3373
  if !max_time.nil? and !max_time.empty?
3388
3374
  max_time = max_time.to_i
@@ -3422,7 +3408,7 @@ module Cnvrg
3422
3408
  options_hash.except!("schedule", "recurring", "machine_type", "image", "upload_output", "grid", "data", "data_commit", "title",
3423
3409
  "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl","max_time","dataset_only_tree",
3424
3410
  "data_query", "git_commit","git_branch", "restart_if_stuck","local_folders","output_dir", "commit", "datasets", "requirements", "prerun",
3425
- "email_notification_error", "email_notification_success")
3411
+ "email_notification_error", "email_notification_success", "emails")
3426
3412
  exec_options = options_hash.map {|x| "--#{x[0]}=#{x[1]}"}.flatten.join(" ")
3427
3413
  command = "#{exec_options} #{remote} #{upload_output_option} #{cmd.flatten.join(" ")}"
3428
3414
  commit_to_run = options["commit"] || nil
@@ -3490,7 +3476,7 @@ module Cnvrg
3490
3476
  res = exp.exec_remote(command, commit_to_run, instance_type, image, schedule, local_timestamp, grid, path_to_cmd, data, data_commit,
3491
3477
  periodic_sync, sync_before_terminate, max_time, ds_sync_options,output_dir,
3492
3478
  data_query, git_commit, git_branch, restart_if_stuck,local_folders_options, title, datasets, prerun: prerun, requirements: requirements, recurring: recurring,
3493
- email_notification_error: email_notification_error, email_notification_success: email_notification_success)
3479
+ email_notification_error: email_notification_error, email_notification_success: email_notification_success, emails_to_notify: emails)
3494
3480
  if Cnvrg::CLI.is_response_success(res)
3495
3481
  check = Helpers.checkmark()
3496
3482
  str = "#{check} Experiment's is on: #{Cnvrg::Helpers.remote_url}/#{project.owner}/projects/#{project.slug}/experiments/#{res["result"]["exp_url"]}"
@@ -186,11 +186,14 @@ module Cnvrg
186
186
  desc 'data put DATASET_URL FILES_PREFIX', 'Upload selected files from local dataset directory to remote server'
187
187
  method_option :dir, :type => :string, :aliases => ["-d", "--dir"], :default => ''
188
188
  method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ''
189
+ method_option :message, :type => :string, :aliases => ["--message"], :desc => "create commit with message", :default => nil
189
190
  def put(dataset_url, *files)
190
191
  cli = Cnvrg::CLI.new()
191
192
  dir = options[:dir]
192
193
  commit = options[:commit]
193
- cli.data_put(dataset_url, files: files, dir: dir, commit: commit)
194
+ message = options[:message]
195
+
196
+ cli.data_put(dataset_url, files: files, dir: dir, commit: commit, message: message)
194
197
  end
195
198
 
196
199
  desc 'data clone_query --query=QUERY_SLUG DATASET_URL', 'Clone dataset with specific query'
@@ -20,6 +20,15 @@ module Cnvrg
20
20
  @dataset = dataset
21
21
  @base_resource = "users/#{owner}/datasets/#{dataset_slug}/"
22
22
  @downloader = @dataset.get_storage_client
23
+ @token_issue_time = Time.current
24
+ end
25
+
26
+ def refresh_storage_token
27
+ current_time = Time.current
28
+ if current_time - @token_issue_time > 3.hours
29
+ @downloader = @dataset.get_storage_client
30
+ @token_issue_time = Time.current
31
+ end
23
32
  end
24
33
 
25
34
  def check_file_sha1(filename, org_sha1, tag: 'conflict')
@@ -117,6 +126,7 @@ module Cnvrg
117
126
  def upload_multiple_files(commit_sha1, tree, threads: ParallelThreads, force: false, new_branch: false, prefix: '', partial_commit: nil, total: nil)
118
127
  begin
119
128
  Cnvrg::Logger.log_info("Sending Upload Files request")
129
+ refresh_storage_token
120
130
  error = nil
121
131
  upload_resp = nil
122
132
  10.times do
@@ -914,7 +924,7 @@ module Cnvrg
914
924
  begin
915
925
  response = Cnvrg::API.request("#{base_resource}/commit/end", 'POST', {commit_sha1: commit_sha1,force:force, success: success, uploaded_files: uploaded_files})
916
926
  Cnvrg::CLI.is_response_success(response, true)
917
- #return response
927
+ return response
918
928
  rescue => e
919
929
  return false
920
930
  end
@@ -1007,6 +1017,7 @@ module Cnvrg
1007
1017
 
1008
1018
  def download_multiple_files_s3(files, project_home, conflict: false, progressbar: nil, read_only:false)
1009
1019
  begin
1020
+ refresh_storage_token
1010
1021
  parallel_options = {
1011
1022
  in_threads: ParallelThreads,
1012
1023
  isolation: true
@@ -108,7 +108,7 @@ module Cnvrg
108
108
  def exec_remote(command, commit_to_run, instance_type, image_slug,schedule,local_timestamp, grid,path_to_cmd,data, data_commit,periodic_sync,
109
109
  sync_before_terminate, max_time, ds_sync_options=0,output_dir=nil,data_query=nil,
110
110
  git_commit=nil, git_branch=nil, restart_if_stuck=nil, local_folders=nil,title=nil, datasets=nil, prerun: true, requirements: true, recurring: nil,
111
- email_notification_error: false, email_notification_success: false)
111
+ email_notification_error: false, email_notification_success: false, emails_to_notify: nil)
112
112
  response = Cnvrg::API.request("users/#{@owner}/projects/#{@project_slug}/experiment/remote", 'POST', {command: command, image_slug: image_slug,
113
113
  commit_sha1: commit_to_run,
114
114
  instance_type: instance_type,
@@ -124,7 +124,8 @@ module Cnvrg
124
124
  restart_if_stuck:restart_if_stuck, local_folders: local_folders, title:title,
125
125
  prerun: prerun, requirements: requirements, recurring: recurring,
126
126
  email_notification_error: email_notification_error,
127
- email_notification_success: email_notification_success})
127
+ email_notification_success: email_notification_success,
128
+ emails_to_notify: emails_to_notify})
128
129
 
129
130
  return response
130
131
  end
@@ -7,7 +7,7 @@ require 'cnvrg/result'
7
7
  module Cnvrg
8
8
  class Files
9
9
  ParallelThreads = Cnvrg::Helpers.parallel_threads
10
- VALID_FILE_NAME = /[\x00\\:\*\?\"<>\|]/
10
+ VALID_FILE_NAME = /[\x00\\\*\?\"<>\|]/
11
11
  LARGE_FILE=1024*1024*5
12
12
  MULTIPART_SPLIT=10000000
13
13
 
@@ -27,8 +27,16 @@ module Cnvrg
27
27
  @custom_progess = false
28
28
  @cli = cli
29
29
  @options = options
30
+ @token_issue_time = Time.current
30
31
  end
31
32
 
33
+ def refresh_storage_token
34
+ current_time = Time.current
35
+ if current_time - @token_issue_time > 3.hours
36
+ @client = @project.get_storage_client
37
+ @token_issue_time = Time.current
38
+ end
39
+ end
32
40
 
33
41
  def self.valid_file_name?(fullpath)
34
42
  VALID_FILE_NAME.match(fullpath).blank?
@@ -97,7 +105,13 @@ module Cnvrg
97
105
  files = res['files']
98
106
 
99
107
  #upload files
108
+ token_mutex = Mutex.new
100
109
  blob_ids = Parallel.map(files.keys, in_threads: ParallelThreads) do |file|
110
+
111
+ token_mutex.synchronize {
112
+ refresh_storage_token
113
+ }
114
+
101
115
  begin
102
116
  Cnvrg::Helpers.try_until_success{self.upload_single_file(files[file].merge(files_list[file]))}
103
117
  rescue => e
@@ -721,8 +735,15 @@ module Cnvrg
721
735
  in_threads: Cnvrg::Helpers.parallel_threads,
722
736
  isolation: true
723
737
  }
738
+
739
+ token_mutex = Mutex.new
740
+
724
741
  Parallel.map(files["keys"], parallel_options) do |f|
725
742
 
743
+ token_mutex.synchronize {
744
+ refresh_storage_token
745
+ }
746
+
726
747
  file_path = f["name"]
727
748
  if file_path.end_with? "/"
728
749
  # dir
@@ -1,3 +1,3 @@
1
1
  module Cnvrg
2
- VERSION = '1.6.26'
2
+ VERSION = '1.6.35'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cnvrg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.26
4
+ version: 1.6.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yochay Ettun
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-02-23 00:00:00.000000000 Z
13
+ date: 2020-06-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -477,7 +477,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
477
477
  - !ruby/object:Gem::Version
478
478
  version: '0'
479
479
  requirements: []
480
- rubygems_version: 3.0.4
480
+ rubygems_version: 3.1.2
481
481
  signing_key:
482
482
  specification_version: 4
483
483
  summary: A CLI tool for interacting with cnvrg.io.