cnvrg 0.0.147 → 0.0.148

Sign up to get free protection for your applications and to get access to all the features.
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