cnvrg 0.0.147 → 0.0.148

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
  SHA1:
3
- metadata.gz: a089a8118adb94a9ae9b8c37e75b6bdf8690eaf9
4
- data.tar.gz: aef1c463d671068e6c7dcaa288f40a4d8b3af303
3
+ metadata.gz: 9889a94a7cbc7cf8e729daf363e61bd38072960a
4
+ data.tar.gz: e46f0fed0b9b6a3007daa399dc4e75b81d402aa6
5
5
  SHA512:
6
- metadata.gz: a12c9b7ad5001f6c8e323ba82851cf3a23398761a6e0c90d72a09d38712a34b9a008e59256006e521f4b498e3bebe572de51ead008b0b75fc877b41f6fbc9c34
7
- data.tar.gz: d0859793528290bee4e56f8ce6f1adb70cc7e1ffeead7cc5dab33e2a85df4d59e43eb0319856ced6f031831d5609c52a75dcb563b2f0a3a1b31238c14da6c6f7
6
+ metadata.gz: 8bc2c1dca91ad6f2ff9e4248b95b34231bef97be4eb9d7ba52b5cd73c9def6ee36ad672beaf45c8581e868d0b89fc7d8cf6e6f6babfd35ed6f5feb5bf610c222
7
+ data.tar.gz: 02d1c07bec47cada6285f3df813b6fc67b0c3f2700df70bc89be691e72f20593da9672ce2fa03430dc2d548e5ba9ac930a7f3d2711b2a36e6fe32f022367e589
@@ -70,11 +70,11 @@ module Cnvrg
70
70
  # },
71
71
  # },
72
72
  # }
73
- container = Docker::Container.get('b4d64bf83f41')
74
- s = "/leah/1/2/3/4/5"
75
- command = ["/bin/bash","-lc","sed -i 's#c.NotebookApp.base_url = .*#c.NotebookApp.base_url = \"#{s}\"#' /home/ds/.jupyter/jupyter_notebook_config.py"]
76
- puts container.exec(command, tty: true)
77
-
73
+ # container = Docker::Container.get('b4d64bf83f41')
74
+ # s = "/leah/1/2/3/4/5"
75
+ # command = ["/bin/bash","-lc","sed -i 's#c.NotebookApp.base_url = .*#c.NotebookApp.base_url = \"#{s}\"#' /home/ds/.jupyter/jupyter_notebook_config.py"]
76
+ # puts container.exec(command, tty: true)
77
+ puts File.read("s4cmd.py")
78
78
  end
79
79
 
80
80
 
@@ -815,9 +815,11 @@ module Cnvrg
815
815
  end
816
816
 
817
817
  end
818
- desc 'unlink','Unlink a project from current directory'
818
+
819
+
820
+ desc 'unlink','Unlink a project from current directory', :hide=>true
819
821
  def create_volume
820
- verify_logged_in(true)
822
+ verify_logged_in(false)
821
823
  log_start(__method__, args, options)
822
824
  dataset_dir = is_cnvrg_dir(Dir.pwd)
823
825
  @dataset = Dataset.new(dataset_dir)
@@ -825,6 +827,20 @@ module Cnvrg
825
827
 
826
828
  end
827
829
 
830
+ desc 'list data','Unlink a project from current directory', :hide=>true
831
+ def list_data
832
+ verify_logged_in(true)
833
+ log_start(__method__, args, options)
834
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
835
+ @dataset = Dataset.new(dataset_dir)
836
+ result = @dataset.list()
837
+ list = result["result"]["list"]
838
+
839
+ print_table(list)
840
+
841
+ end
842
+
843
+
828
844
  desc 'unlink','Unlink a project from current directory'
829
845
  def unlink
830
846
  verify_logged_in(false)
@@ -1083,7 +1099,6 @@ module Cnvrg
1083
1099
  #
1084
1100
  # end
1085
1101
  check = Helpers.checkmark()
1086
-
1087
1102
  if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
1088
1103
  log_end(0)
1089
1104
  say "#{check} Project is up to date", Thor::Shell::Color::GREEN unless ((options["sync"] or sync) and !direct)
@@ -3056,6 +3071,7 @@ module Cnvrg
3056
3071
  method_option :login, :type => :string, :aliases => ["-l", "--l"], :default => ""
3057
3072
  method_option :app_dir, :type => :string, :aliases => ["-d", "--d"], :default => "/home/ds/notebooks"
3058
3073
  method_option :cmd, :type => :string, :aliases => ["-c", "--c"], :default => "/usr/local/cnvrg/run_ipython.sh"
3074
+ method_option :volume, :type => :string, :aliases => ["-v", "--v"], :default => "/home/ds/notebooks/data"
3059
3075
 
3060
3076
 
3061
3077
  def config_remote(image_name, port=7654,tensport=6006)
@@ -3071,15 +3087,17 @@ module Cnvrg
3071
3087
  login_content = options["login"]
3072
3088
  app_dir = options["app_dir"]
3073
3089
  cmd= options["cmd"]
3090
+ volume_from = options["volume"]
3074
3091
 
3075
3092
  image_settings = {
3076
3093
  'Image' => "#{image_name}:latest",
3077
- 'User' => 'ds',
3094
+
3078
3095
  'Cmd' => cmd,
3079
3096
  'WorkingDir' => app_dir,
3080
3097
  'ExposedPorts' => {
3081
3098
  '8888/tcp' => {},
3082
3099
  },
3100
+ 'VolumesFrom' =>volume_from,
3083
3101
  'HostConfig' => {
3084
3102
  'PortBindings' => {
3085
3103
  '8888/tcp' => [
@@ -30,6 +30,12 @@ module Cnvrg
30
30
  CLI.is_response_success(response)
31
31
  return response
32
32
 
33
+ end
34
+ def list
35
+ response = Cnvrg::API.request("users/#{self.owner}/datasets/list", 'GET')
36
+ CLI.is_response_success(response)
37
+ return response
38
+
33
39
  end
34
40
  def url
35
41
  url = Cnvrg::Helpers.remote_url
@@ -1,11 +1,14 @@
1
1
  require 'mimemagic'
2
2
  require 'aws-sdk'
3
3
  require 'URLcrypt'
4
+ require 'tempfile'
4
5
 
5
6
  module Cnvrg
6
7
  class Files
7
8
 
8
9
  LARGE_FILE=1024*1024*5
10
+ MULTIPART_SPLIT=10000000
11
+
9
12
  attr_reader :base_resource
10
13
 
11
14
  def initialize(owner, project_slug)
@@ -19,9 +22,11 @@ module Cnvrg
19
22
  file_size = File.size(absolute_path).to_f
20
23
  mime_type = MimeMagic.by_path(absolute_path)
21
24
  content_type = !(mime_type.nil? or mime_type.text?) ? mime_type.type : "text/plain"
25
+ sha1 = Digest::SHA1.file(absolute_path).hexdigest
26
+
22
27
  upload_resp = Cnvrg::API.request(@base_resource + "upload_file", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
23
28
  commit_sha1: commit_sha1, file_name: file_name,
24
- file_size: file_size, file_content_type: content_type})
29
+ file_size: file_size, file_content_type: content_type, sha1:sha1})
25
30
  if Cnvrg::CLI.is_response_success(upload_resp, false)
26
31
  path = upload_resp["result"]["path"]
27
32
  if file_size.to_f>= Cnvrg::Files::LARGE_FILE.to_f
@@ -29,11 +34,13 @@ module Cnvrg
29
34
  else
30
35
  s3_res = upload_small_files_s3(path, absolute_path, content_type)
31
36
  end
32
- if s3_res
33
- Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
34
- blob_id: upload_resp["result"]["id"]})
35
- return true
36
- end
37
+ return s3_res
38
+ # if s3_res
39
+ # update_s3_resp = Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
40
+ # blob_id: upload_resp["result"]["id"]})
41
+ # is_suc = Cnvrg::CLI.is_response_success(update_s3_resp, false)
42
+ #
43
+ # return is_suc
37
44
  end
38
45
  return false
39
46
  end
@@ -199,9 +206,11 @@ module Cnvrg
199
206
 
200
207
  end
201
208
 
202
- def upload_large_files_s3(upload_resp, file_path)
209
+ def upload_large_files_s3(upload_resp, file_path)
203
210
  begin
204
211
  sts_path = upload_resp["result"]["path_sts"]
212
+ s4cmd_path = upload_resp["result"]["path_s4cmd"]
213
+
205
214
  uri = URI.parse(sts_path)
206
215
  http_object = Net::HTTP.new(uri.host, uri.port)
207
216
  http_object.use_ssl = true if uri.scheme == 'https'
@@ -212,18 +221,62 @@ module Cnvrg
212
221
  response = http.request request
213
222
  body = response.read_body
214
223
  end
224
+
215
225
  URLcrypt::key = [body].pack('H*')
216
- s3 = Aws::S3::Resource.new(
217
- :access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
218
- :secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
219
- :session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
220
- :region => URLcrypt.decrypt(upload_resp["result"]["region"]))
226
+
227
+ python_version=`python --version > /dev/null 2>&1` ; is_python=$?.success?
228
+ if !is_python
229
+ s3 = Aws::S3::Resource.new(
230
+ :access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
231
+ :secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
232
+ :session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
233
+ :region => URLcrypt.decrypt(upload_resp["result"]["region"]))
221
234
  resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
222
235
  object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
223
236
  upload_file(file_path,{:use_accelerate_endpoint=>true})
237
+ else
238
+ s4cmd_uri = URI.parse(s4cmd_path)
239
+ s4cmd_http_object = Net::HTTP.new(s4cmd_uri.host, s4cmd_uri.port)
240
+ s4cmd_http_object.use_ssl = true if s4cmd_uri.scheme == 'https'
241
+ s4cmd_request = Net::HTTP::Get.new(s4cmd_path)
242
+
243
+ s4cmd_body = ""
244
+ s4cmd_http_object.start do |http|
245
+ response = http.request s4cmd_request
246
+ s4cmd_body = response.read_body
247
+ end
248
+
249
+ s4cmd_new_body = s4cmd_body.gsub(" self.client = self.boto3.client('s3',
250
+ aws_access_key_id=aws_access_key_id,
251
+ aws_secret_access_key=aws_secret_access_key)"," self.client = self.boto3.client('s3',
252
+ aws_access_key_id='#{ URLcrypt.decrypt(upload_resp["result"]["sts_a"])}',
253
+ aws_secret_access_key='#{URLcrypt.decrypt(upload_resp["result"]["sts_s"])}',
254
+ aws_session_token='#{URLcrypt.decrypt(upload_resp["result"]["sts_st"])}')")
255
+
256
+ tmp = Tempfile.new('s4cmd.py')
257
+ tmp << s4cmd_new_body
258
+ tmp.flush
259
+ tmp.close
260
+
261
+ is_success = false
262
+ count = 0
263
+ while !is_success and count <3
264
+
265
+ resp = `python #{tmp.path} --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
266
+ is_success =$?.success?
267
+ count +=1
268
+
269
+ end
270
+ resp= is_success
271
+
272
+ end
224
273
 
225
274
  return resp
275
+
226
276
  rescue =>e
277
+ if File.exist? tmp
278
+ FileUtils.rm_rf [tmp]
279
+ end
227
280
  puts e
228
281
  return false
229
282
 
@@ -1,4 +1,4 @@
1
1
  module Cnvrg
2
- VERSION = '0.0.147'
2
+ VERSION = '0.0.148'
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.0.147
4
+ version: 0.0.148
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: 2017-04-30 00:00:00.000000000 Z
12
+ date: 2017-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler