cnvrg 0.5.0 → 0.5.5

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: e44751ed52140fdaee81469a183a0f06f86968e1
4
- data.tar.gz: 7b95fb6b3720a17d2edfe7a12da9c21ef0d3034f
3
+ metadata.gz: be48abaee7b44f00673ed8e4fe95fdc32044cdbf
4
+ data.tar.gz: fdc1bb3df689ea6524f268f910915559ba62ddfb
5
5
  SHA512:
6
- metadata.gz: 2766aba6a508f5b073b4b12e987ee1d4568f84c47c632e6fefa6bf6fc0416a3737727cae88dfa7b97873c3f6461c5821d15a4ca9c7c54e32e9ca763b3e8b79d2
7
- data.tar.gz: 8d2985f8c0ff5ea5d70131e993d896ce3ddd20a1f855dcf7ba7cad4a862a09fa13424bcdb3c5ebccb2a4e2ec9746f00eff2d7be49b7ee810826dc94d41a05a35
6
+ metadata.gz: 70a35b1ac372e78feffd115d7426338dced272bd351b7e76277f3dc2ead315d2632b9f28a07c4f7fd27f93c9668678addb4d91b106cb3c26b5e75d94832c752b
7
+ data.tar.gz: 96a10e4bd81552ea5b1ce22468fd102f9ec21a29e64152b83106a743e2e6278de0d68cb504fc78dcfb64098f30b60d5ecb051a224685dcdb5f9eea876ce12cc2
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'pry'
27
27
 
28
28
  spec.add_runtime_dependency 'mimemagic', '~> 0.3.1','>=0.3.2'
29
- spec.add_runtime_dependency 'faraday', '~> 0.10.0'
29
+ spec.add_runtime_dependency 'faraday', '~> 0.15.2'
30
30
  spec.add_runtime_dependency 'netrc', '~> 0.11.0'
31
31
  spec.add_runtime_dependency 'open4', '~> 1.3', '>= 1.3.4'
32
32
  spec.add_runtime_dependency 'highline', '~> 1.7', '>= 1.7.8'
@@ -41,11 +41,10 @@ Gem::Specification.new do |spec|
41
41
  spec.add_runtime_dependency 'launchy', '~> 2.4'
42
42
  spec.add_runtime_dependency 'docker-api', '~> 1.33'
43
43
  spec.add_runtime_dependency 'rubyzip', '~> 1.2'
44
- spec.add_runtime_dependency 'activesupport', '~> 5.0'
44
+ spec.add_runtime_dependency 'activesupport', '~> 5.2.0'
45
45
  spec.add_runtime_dependency 'ruby-progressbar'
46
46
  spec.add_runtime_dependency 'net-ssh'
47
47
  spec.add_runtime_dependency 'down'
48
- spec.add_runtime_dependency 'faraday_middleware-request-retry'
49
48
 
50
49
 
51
50
 
@@ -81,8 +81,8 @@ module Cnvrg
81
81
  response
82
82
  end
83
83
  when 'POST'
84
- conn.options.timeout = 420
85
- conn.options.open_timeout =420
84
+ conn.options.timeout = 4200
85
+ conn.options.open_timeout =4200
86
86
  retries = 0
87
87
  success = false
88
88
  while !success and retries < 20
@@ -121,8 +121,8 @@ module Cnvrg
121
121
  fr.request :retry, max: 2, interval: 0.05,interval_randomness: 0.5, backoff_factor: 2
122
122
  fr.adapter :net_http
123
123
  end
124
- conn.options.timeout = 420
125
- conn.options.open_timeout =420
124
+ conn.options.timeout = 4200
125
+ conn.options.open_timeout =4200
126
126
 
127
127
 
128
128
  # what if windows?
@@ -147,7 +147,7 @@ module Cnvrg
147
147
  IP = "localhost"
148
148
  PORT = 7654
149
149
 
150
- ParallelThreads ||= 10
150
+ ParallelThreads ||= 15
151
151
  ParallelProcesses ||= Parallel.processor_count
152
152
 
153
153
  class << self
@@ -647,6 +647,7 @@ module Cnvrg
647
647
  desc 'link', 'Link current directory to a new cnvrg project'
648
648
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
649
649
  method_option :docker_image, :type => :string, :aliases => ["-d"], :default => ""
650
+ method_option :git, :type => :boolean, :aliases => ["-g","--git"], :default => false
650
651
 
651
652
  def link
652
653
  begin
@@ -660,6 +661,8 @@ module Cnvrg
660
661
  end
661
662
 
662
663
  sync = options["sync"]
664
+ git = options["git"] || false
665
+
663
666
  project_name = File.basename(Dir.getwd)
664
667
  log_message("Linking #{project_name}", Thor::Shell::Color::BLUE)
665
668
  if File.directory?(Dir.getwd + "/.cnvrg")
@@ -669,7 +672,7 @@ module Cnvrg
669
672
  end
670
673
  working_dir = Dir.getwd
671
674
  owner = CLI.get_owner
672
- if Project.link(owner, project_name, docker)
675
+ if Project.link(owner, project_name, docker = docker,git = git)
673
676
  path = Dir.pwd
674
677
  @project = Project.new(path)
675
678
  @project.generate_idx()
@@ -793,7 +796,9 @@ module Cnvrg
793
796
  desc 'data clone', 'Clone dataset'
794
797
  method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
795
798
  method_option :only_tree, :type => :boolean, :aliases => ["-t", "--tree"], :default => false
796
- def clone_data(dataset_url,only_tree=false,commit=nil)
799
+ method_option :query, :type => :string, :aliases => ["-q", "--query"], :default => nil
800
+
801
+ def clone_data(dataset_url,only_tree=false,commit=nil,query=nil)
797
802
  begin
798
803
  verify_logged_in(false)
799
804
  log_start(__method__, args, options)
@@ -805,7 +810,8 @@ module Cnvrg
805
810
  project_index = Cnvrg::Helpers.look_for_in_path(dataset_url, "datasets")
806
811
  slug = url_parts[project_index + 1]
807
812
  owner = url_parts[project_index - 1]
808
- response = Cnvrg::API.request("users/#{owner}/datasets/#{slug}/clone", 'POST',{ commit: commit})
813
+
814
+ response = Cnvrg::API.request("users/#{owner}/datasets/#{slug}/clone", 'POST',{ commit: commit, query:query})
809
815
  Cnvrg::CLI.is_response_success(response,true)
810
816
  dataset_name = response["result"]["name"]
811
817
  dataset_home = Dir.pwd+"/"+dataset_name
@@ -819,12 +825,21 @@ module Cnvrg
819
825
  end
820
826
 
821
827
  end
828
+ check = Helpers.checkmark
829
+
822
830
  if Dataset.clone(owner, dataset_name, slug)
823
831
  log_message("Cloning #{dataset_name}", Thor::Shell::Color::BLUE)
824
832
  @files = Cnvrg::Datafiles.new(owner, slug)
825
833
 
826
834
  successful_changes = []
827
835
  log_message("Downloading files", Thor::Shell::Color::BLUE)
836
+ if not(query.nil? or query.empty?)
837
+ @files.download_list_files_in_query(response["result"]["list_files"],dataset_home)
838
+
839
+ log_message("#{check} Clone finished successfully", Thor::Shell::Color::GREEN)
840
+ return
841
+
842
+ end
828
843
  commit = response["result"]["commit"]
829
844
  idx = {commit: response["result"]["commit"], tree: response["result"]["tree"]}
830
845
  File.open(dataset_home + "/.cnvrg/idx.yml", "w+") {|f| f.write idx.to_yaml}
@@ -878,8 +893,6 @@ module Cnvrg
878
893
 
879
894
 
880
895
  end
881
- check = Helpers.checkmark
882
-
883
896
  successful_changes = response["result"]["tree"]
884
897
  if !successful_changes.nil? and is_success
885
898
  Dataset.verify_cnvrgignore_exist(dataset_name, false)
@@ -899,10 +912,84 @@ module Cnvrg
899
912
  say "\nAborting"
900
913
  exit(1)
901
914
  end
915
+ end
902
916
 
917
+ desc 'data clone_query', 'Clone dataset _query'
918
+ method_option :query, :type => :string, :aliases => ["-q", "--query"], :default => ""
919
+ def clone_data_query(dataset_url,query=nil)
920
+ begin
921
+ verify_logged_in(false)
922
+ log_start(__method__, args, options)
923
+ query = options["query"] || query
924
+ if !query.present?
925
+ log_message("Argument missing : query", Thor::Shell::Color::RED)
926
+ exit(1)
927
+ end
903
928
 
929
+ url_parts = dataset_url.split("/")
930
+ project_index = Cnvrg::Helpers.look_for_in_path(dataset_url, "datasets")
931
+ slug = url_parts[project_index + 1]
932
+ owner = url_parts[project_index - 1]
904
933
 
934
+ response = Cnvrg::API.request("users/#{owner}/datasets/#{slug}/search/#{query}", 'GET')
935
+ Cnvrg::CLI.is_response_success(response,true)
936
+ dataset_name = response["results"]["name"]
937
+ dataset_slug = response["results"]["slug"]
938
+ # dataset_home = Dir.pwd+"/"+dataset_name
939
+ dataset_home = Dir.pwd
905
940
 
941
+ if Dataset.blank_clone(owner, dataset_name, dataset_slug)
942
+ dataset = Dataset.new(dataset_home)
943
+ log_message("Cloning #{dataset_name}", Thor::Shell::Color::BLUE)
944
+ parallel_options = {
945
+ :progress => {
946
+ :title => "Download Progress",
947
+ :progress_mark => '=',
948
+ :format => "%b>>%i| %p%% %t",
949
+ :starting_at => 0,
950
+ :total => response["results"]["query_files"].size,
951
+ :autofinish => true
952
+ },
953
+ in_threads: ParallelThreads
954
+ }
955
+ begin
956
+ log_message("Downloading files", Thor::Shell::Color::BLUE)
957
+ Parallel.map((response["results"]["query_files"]), parallel_options) do |f|
958
+ relative_path = f["fullpath"].gsub(/^#{dataset_home}/, "")
959
+ relative_path_dir = relative_path.split("/")
960
+ file_name = relative_path_dir.pop()
961
+ relative_path_dir = relative_path_dir.join("/")
962
+ abs_path = dataset_home + "/" + relative_path_dir
963
+ begin
964
+ FileUtils.mkdir_p(abs_path) unless File.exist? (abs_path + "/" + file_name)
965
+ rescue
966
+ log_message("Could not create directory: #{abs_path}", Thor::Shell::Color::RED)
967
+ exit(1)
968
+ end
969
+ begin
970
+ File.write "#{abs_path}/#{file_name}", open(f["s3_url"]).read unless File.exist? (abs_path + "/" + file_name)
971
+ rescue
972
+ log_message("Could not download file: #{f["fullpath"]}", Thor::Shell::Color::RED)
973
+ exit(1)
974
+ end
975
+
976
+ end
977
+ rescue Interrupt
978
+ log_message("Couldn't download", Thor::Shell::Color::RED)
979
+ exit(1)
980
+ end
981
+ begin
982
+ dataset.generate_idx()
983
+ check = Helpers.checkmark
984
+ log_message("#{check} Clone finished successfully", Thor::Shell::Color::GREEN)
985
+ rescue
986
+ exit(1)
987
+ end
988
+ end
989
+ rescue SignalException
990
+ say "\nAborting"
991
+ exit(1)
992
+ end
906
993
  end
907
994
 
908
995
  desc 'init_data_container', 'Init dataset directory', :hide => true
@@ -1210,7 +1297,11 @@ module Cnvrg
1210
1297
  if (Cnvrg::CLI.is_response_success(res, false))
1211
1298
  # save idx
1212
1299
  begin
1213
- @dataset.update_idx_with_files_commits!((successful_deletions + successful_updates), res["result"]["commit_time"])
1300
+ list_files = []
1301
+ list_files.concat successful_deletions
1302
+ list_files.concat successful_updates
1303
+
1304
+ @dataset.update_idx_with_files_commits!(list_files, res["result"]["commit_time"])
1214
1305
 
1215
1306
  @dataset.update_idx_with_commit!(commit_sha1)
1216
1307
  rescue => e
@@ -1490,7 +1581,44 @@ module Cnvrg
1490
1581
  print_table(list)
1491
1582
 
1492
1583
 
1584
+ end
1585
+
1586
+ desc 'data queries', 'List all data search queries you currently have'
1587
+
1588
+ def queries
1589
+ verify_logged_in(false)
1590
+ log_start(__method__, args, options)
1591
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
1592
+ @dataset = Dataset.new(dataset_dir)
1593
+ result = @dataset.search_queries()
1594
+ print_table(result)
1595
+ end
1596
+
1597
+ desc 'data download_tags_yaml', 'Download dataset tags yml file in current directory'
1598
+
1599
+ def download_tags_yaml
1600
+ verify_logged_in(false)
1601
+ log_start(__method__, args, options)
1602
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
1603
+ @dataset = Dataset.new(dataset_dir)
1604
+ status = @dataset.download_tags_yaml()
1605
+ if status
1606
+ log_message("Downloaded tags yaml successfully", Thor::Shell::Color::GREEN)
1607
+ else
1608
+ log_message("Unable to download", Thor::Shell::Color::RED)
1493
1609
  end
1610
+ end
1611
+
1612
+ desc 'data query_files', 'List all data search queries you currently have'
1613
+ def query_files(query)
1614
+ verify_logged_in(false)
1615
+ log_start(__method__, args, options)
1616
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
1617
+ @dataset = Dataset.new(dataset_dir)
1618
+ query = options["query"] || query
1619
+ result = @dataset.get_query_file(query)
1620
+ print_table(result)
1621
+ end
1494
1622
 
1495
1623
  desc 'data commits', 'List all commits for a specific dataset'
1496
1624
 
@@ -1532,6 +1660,51 @@ module Cnvrg
1532
1660
  FileUtils.rm_rf list_to_del
1533
1661
  end
1534
1662
 
1663
+
1664
+
1665
+ desc 'git_clone', 'Clone project'
1666
+ def git_clone(slug, owner)
1667
+ verify_logged_in(false)
1668
+ log_start(__method__, args, options)
1669
+
1670
+ clone_resp = Project.clone_dir_remote(slug, owner, slug,true)
1671
+ idx_status = Project.new(get_project_home).generate_idx
1672
+ end
1673
+
1674
+
1675
+ desc 'link git project', 'link git project'
1676
+ method_option :git, :type => :boolean, :aliases => ["-g", "--git"], :default => false
1677
+ def link_git(project_url)
1678
+ begin
1679
+ verify_logged_in(false)
1680
+ log_start(__method__, args, options)
1681
+ url_parts = project_url.split("/")
1682
+ project_index = Cnvrg::Helpers.look_for_in_path(project_url, "projects")
1683
+ slug = url_parts[project_index + 1]
1684
+ owner = url_parts[project_index - 1]
1685
+ response = Cnvrg::API.request("users/#{owner}/projects/#{slug}/get_project", 'GET')
1686
+ Cnvrg::CLI.is_response_success(response)
1687
+ response = JSON.parse response["result"]
1688
+ project_name = response["title"]
1689
+
1690
+ log_message("Linking #{project_name}", Thor::Shell::Color::BLUE)
1691
+ clone_resp = Project.clone_dir_remote(slug, owner, project_name, true)
1692
+ idx_status = Project.new(get_project_home).generate_idx
1693
+ log_message("Linking project #{project_name} successfully", Thor::Shell::Color::GREEN)
1694
+
1695
+ return
1696
+ rescue => e
1697
+ log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
1698
+ log_error(e)
1699
+ return
1700
+ rescue SignalException
1701
+
1702
+ say "\nAborting", Thor::Shell::Color::BLUE
1703
+ return
1704
+ end
1705
+
1706
+ end
1707
+
1535
1708
  desc 'clone', 'Clone project'
1536
1709
  method_option :remote, :type => :boolean, :aliases => ["-r", "--r"], :default => false
1537
1710
  method_option :commit, :type => :string, :aliases => ["-c", "--c"], :default => nil
@@ -1545,17 +1718,34 @@ module Cnvrg
1545
1718
  slug = url_parts[project_index + 1]
1546
1719
  owner = url_parts[project_index - 1]
1547
1720
  remote = options["remote"] || false
1721
+
1548
1722
  response = Cnvrg::API.request("users/#{owner}/projects/#{slug}/get_project", 'GET')
1549
1723
  Cnvrg::CLI.is_response_success(response)
1550
1724
  response = JSON.parse response["result"]
1551
1725
  project_name = response["title"]
1726
+ git = response["git"] || false
1727
+
1552
1728
  commit_to_clone = options["commit"] || nil
1553
1729
 
1554
1730
  log_message("Cloning #{project_name}", Thor::Shell::Color::BLUE)
1555
1731
  clone_resp = false
1556
- if remote
1557
- clone_resp = Project.clone_dir_remote(slug, owner, project_name)
1558
- project_home = Dir.pwd
1732
+ project_home = Dir.pwd
1733
+
1734
+ if remote and !git
1735
+ clone_resp = Project.clone_dir_remote(slug, owner, project_name,git)
1736
+ elsif git
1737
+ if remote
1738
+ clone_resp = Project.clone_dir_remote(slug, owner, project_name,git)
1739
+ else
1740
+ project_home += "/#{project_name}"
1741
+ clone_resp = Project.clone_dir(slug, owner, project_name,git)
1742
+
1743
+ end
1744
+
1745
+ idx_status = Project.new(project_home).generate_idx
1746
+ log_message("Cloned project #{project_name} successfully", Thor::Shell::Color::GREEN)
1747
+
1748
+ return
1559
1749
  else
1560
1750
  if (Dir.exists? project_name)
1561
1751
  # project_name = "#{project_name}_#{rand(1 .. 5000000000)}"
@@ -1567,7 +1757,7 @@ module Cnvrg
1567
1757
  end
1568
1758
 
1569
1759
  end
1570
- clone_resp = Project.clone_dir(slug, owner, project_name)
1760
+ clone_resp = Project.clone_dir(slug, owner, project_name,git)
1571
1761
  project_home = Dir.pwd + "/" + project_name
1572
1762
 
1573
1763
 
@@ -1766,21 +1956,25 @@ module Cnvrg
1766
1956
  exit(1)
1767
1957
  end
1768
1958
  end
1769
- desc 'sync_data_new', 'sync_data_new'
1959
+ desc 'sync_data_new', 'sync_data_new', :hide=> true
1770
1960
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
1771
1961
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
1772
1962
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
1963
+ method_option :sync, :type => :boolean, :aliases => ["-s","--sync"], :default => false
1964
+ method_option :tags, :type => :string, :aliases => ["--tags"], :desc => "upload file tags", :default => ""
1773
1965
  method_option :commit, :type => :string, :aliases => ["-c"], :desc => "download specified commit", :default => nil
1774
1966
  method_option :all_files, :type => :boolean, :aliases => ["--all"], :desc => "download specified commit", :default => true
1967
+ method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
1775
1968
 
1776
- def sync_data_new(new_branch, force, verbose, commit, all_files)
1969
+ def sync_data_new(new_branch, force, verbose, commit, all_files, tags,parallel)
1777
1970
  verify_logged_in(true)
1778
1971
  log_start(__method__, args, options)
1779
1972
  log_message('Syncing dataset', Thor::Shell::Color::BLUE, !options["verbose"])
1780
1973
  if !options[:force]
1781
1974
  invoke :download_data_new,[verbose,true, commit, all_files], :new_branch=>new_branch, :direct=>false, :force =>force
1782
1975
  end
1783
- invoke :upload_data_new,[new_branch, verbose,true,force], :new_branch=>new_branch, :direct=>false, :force =>force, :sync =>true
1976
+ invoke :upload_data_new,[new_branch, verbose,true,force, tags], :new_branch=>new_branch,
1977
+ :direct=>false, :force =>force, :sync =>true, :tags =>tags, :parallel => parallel
1784
1978
 
1785
1979
  end
1786
1980
  desc 'upload_data_new', 'upload_data_new'
@@ -1788,10 +1982,34 @@ module Cnvrg
1788
1982
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
1789
1983
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
1790
1984
  method_option :sync, :type => :boolean, :aliases => ["-s","--sync"], :default => false
1791
- def upload_data_new(new_branch, verbose,sync,force)
1792
- commit = invoke :start_commit_data,[], :new_branch=>new_branch, :direct=>false, :force =>force
1985
+ method_option :tags, :type => :boolean, :aliases => ["--tags"], :desc => "upload file tags", :default => false
1986
+ method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
1987
+
1988
+ def upload_data_new(new_branch, verbose,sync,force, tags)
1989
+ commit = invoke :start_commit_data,[], :new_branch=> new_branch, :direct=>false, :force =>force
1990
+ upload_res = invoke :upload_data_files,[commit],:new_branch=>new_branch, :verbose =>verbose,
1991
+ :force =>force, :sync =>sync,:parallel => options[:parallel]
1992
+ if upload_res
1993
+ invoke :end_commit_data,[commit] , :new_branch=>new_branch, :force =>force
1994
+ end
1995
+ if tags
1996
+ log_message('Uploading Tags', Thor::Shell::Color::BLUE)
1997
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
1998
+ @dataset = Dataset.new(dataset_dir)
1999
+ begin
2000
+ tag_file = File.open(options[:tags], "r+")
2001
+ status = @dataset.upload_tags_via_yml(tag_file)
2002
+ rescue
2003
+ log_message('Tags file not found', Thor::Shell::Color::RED)
2004
+ return
2005
+ end
2006
+ if status
2007
+ log_message('Tags are successfully uploaded', Thor::Shell::Color::GREEN)
2008
+ else
2009
+ log_message('There was some error in uploading Tags', Thor::Shell::Color::RED)
2010
+ end
2011
+ end
1793
2012
 
1794
- upload_res = invoke :upload_data_files,[commit],:new_branch=>new_branch, :verbose =>verbose, :force =>force, :sync =>sync
1795
2013
  if upload_res
1796
2014
  invoke :end_commit_data,[commit] , :new_branch=>new_branch, :force =>force
1797
2015
  end
@@ -1925,6 +2143,9 @@ module Cnvrg
1925
2143
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
1926
2144
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
1927
2145
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
2146
+ method_option :tags, :type => :string, :aliases => ["--tags"], :desc => "upload file tags", :default => ""
2147
+ # method_option :tags_yml, :type => :boolean, :aliases => ["--file_tag_yml"], :default => false
2148
+ method_option :parallel, :type => :numeric, :aliases => ["-p", "--parallel"], :desc => "uparallel upload at the same time", :default => 15
1928
2149
 
1929
2150
  def upload_data_files(new_commit, *files)
1930
2151
 
@@ -1944,10 +2165,10 @@ module Cnvrg
1944
2165
  end
1945
2166
 
1946
2167
  force = options[:force] || false
1947
-
2168
+ parallel_threads = options["parallel"] || ParallelThreads
1948
2169
  new_branch = options["new_branch"] || false
1949
2170
  log_message("Checking dataset", Thor::Shell::Color::BLUE) unless options[:sync]
1950
- local_idx = @dataset.generate_idx
2171
+ local_idx = @dataset.generate_idx(true)
1951
2172
  result = @dataset.compare_idx(new_branch, commit=@dataset.last_local_commit, local_idx= local_idx, force=force, next_commit= next_commit)
1952
2173
 
1953
2174
  commit_sha1 = result["result"]["commit"]
@@ -1987,7 +2208,6 @@ module Cnvrg
1987
2208
 
1988
2209
  # upload / update
1989
2210
  begin
1990
-
1991
2211
  parallel_options = {
1992
2212
  :progress => {
1993
2213
  :title => "Upload Progress",
@@ -1997,7 +2217,7 @@ module Cnvrg
1997
2217
  :total => (result["added"] + result["updated_on_local"]).size,
1998
2218
  :autofinish => true
1999
2219
  },
2000
- in_threads: ParallelThreads,
2220
+ in_threads: parallel_threads.to_i,
2001
2221
  isolation: true
2002
2222
  }
2003
2223
  successful_updates = []
@@ -2152,10 +2372,10 @@ module Cnvrg
2152
2372
  method_option :message, :type => :string, :aliases => ["-m", "--message"], :default => ""
2153
2373
  method_option :deploy, :type => :boolean, :aliases => ["-d", "--deploy"], :default => false
2154
2374
  method_option :return_id, :type => :boolean, :aliases => ["-r", "--return_id"], :default => false
2155
- method_option :files, :type => :string, :aliases => ["-f", "--files"], :default => nil
2156
-
2157
- def upload(link = false, sync = false, direct = false, ignore_list = "", in_exp = false)
2375
+ method_option :files, :type => :string, :aliases => ["--files"], :default => nil
2376
+ method_option :output_dir, :type => :string, :aliases => ["--output_dir"], :default => nil
2158
2377
 
2378
+ def upload(link = false, sync = false, direct = false, ignore_list = "", in_exp = false, force = false)
2159
2379
  begin
2160
2380
  verify_logged_in(true)
2161
2381
  log_start(__method__, args, options)
@@ -2173,6 +2393,11 @@ module Cnvrg
2173
2393
  if !spec_files_to_upload.blank?
2174
2394
  spec_files_to_upload = spec_files_to_upload.split(",")
2175
2395
  end
2396
+ git_output_dir = options["output_dir"]
2397
+ if !git_output_dir.blank?
2398
+ spec_files_to_upload = Dir.glob("#{git_output_dir}/**/*", File::FNM_DOTMATCH).flatten
2399
+ force = true
2400
+ end
2176
2401
 
2177
2402
  if ignore.nil? or ignore.empty?
2178
2403
  ignore = ignore_list
@@ -2201,6 +2426,7 @@ module Cnvrg
2201
2426
  log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE, (options["verbose"]))
2202
2427
  end
2203
2428
  result = result["result"]["tree"]
2429
+
2204
2430
  check = Helpers.checkmark()
2205
2431
  if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
2206
2432
  log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
@@ -2685,8 +2911,42 @@ module Cnvrg
2685
2911
  say "\nAborting", Thor::Shell::Color::BLUE
2686
2912
  exit(1)
2687
2913
  end
2914
+ end
2915
+ desc 'download in git project', 'Download other files', :hide =>true
2916
+ def download_in_git(commit_sha1)
2917
+ begin
2918
+ verify_logged_in(true)
2919
+ log_start(__method__, args, options)
2920
+ project_home = get_project_home
2921
+ @project = Project.new(project_home)
2922
+ @files = Cnvrg::Files.new(@project.owner, @project.slug)
2923
+ res = @project.git_download_commit(commit_sha1)
2924
+ files = res.try(:fetch, "result").try(:fetch, "files")
2925
+ if files.blank?
2926
+ log_message("No files to download", Thor::Shell::Color::RED)
2927
+ return
2928
+ end
2929
+
2930
+ begin
2931
+ download_result = @files.download_multiple_files_s3(files, project_home)
2932
+ if download_result
2933
+ log_message("Done.\nDownloaded finished successfully", Thor::Shell::Color::GREEN)
2934
+ else
2935
+ log_message("Error while trying to download\n", Thor::Shell::Color::RED)
2936
+
2937
+ end
2938
+
2939
+ rescue => e
2940
+ log_error(e)
2941
+ puts e.backtrace
2942
+ log_message("Error while trying to download ", Thor::Shell::Color::RED)
2943
+ return
2944
+ end
2945
+
2946
+ end
2688
2947
  end
2689
2948
 
2949
+
2690
2950
  desc 'download', 'Download updated files'
2691
2951
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
2692
2952
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
@@ -2727,19 +2987,6 @@ module Cnvrg
2727
2987
  log_message("Project is up to date", Thor::Shell::Color::GREEN, ((options["sync"] or sync) ? false : true))
2728
2988
  return true
2729
2989
  end
2730
- # if result["added"].any? {|x| x.include? ".conflict"} or !result["conflicts"].empty?
2731
- # all = result["added"].select {|x| x.include? ".conflict"} +result["conflicts"].flatten
2732
- # if all.size == 1
2733
- # num = "1 conflict"
2734
- # else
2735
- # num = "#{result["conflicts"].size} conflicts"
2736
- # end
2737
- # say "Project contains #{num}:", Thor::Shell::Color::RED
2738
- # say "#{all.join("\n")}"
2739
- # say "Please fix them, and retry", Thor::Shell::Color::RED
2740
- # exit(1)
2741
- # end
2742
- update_count = 0
2743
2990
  update_total = result["updated_on_server"].size + result["conflicts"].size + result["deleted"].size
2744
2991
 
2745
2992
 
@@ -2906,7 +3153,6 @@ module Cnvrg
2906
3153
 
2907
3154
  desc 'jump', 'jump to specific commit'
2908
3155
  method_option :remote, :type => :boolean, :aliases => ["-r", "--r"], :default => false
2909
-
2910
3156
  def jump(commit_sha1)
2911
3157
  begin
2912
3158
  verify_logged_in()
@@ -3073,18 +3319,21 @@ module Cnvrg
3073
3319
  method_option :return_id, :type => :boolean, :aliases => ["-r", "--return_id"], :default => false
3074
3320
  method_option :deploy, :type => :boolean, :aliases => ["-d", "--deploy"], :default => false
3075
3321
  method_option :in_exp, :type => :boolean, :aliases => ["-e", "--in_exp"], :default => false
3076
- method_option :files, :type => :string, :aliases => ["-f", "--files"], :default => nil
3322
+ method_option :files, :type => :string, :aliases => ["--files"], :default => nil
3323
+ method_option :output_dir, :type => :string, :aliases => ["--output_dir"], :default => nil
3324
+
3077
3325
 
3078
3326
  def sync(direct = true)
3079
3327
  verify_logged_in(true) if direct
3080
3328
  log_start(__method__, args, options)
3081
3329
  log_message('Checking for new updates from remote version', Thor::Shell::Color::BLUE, options["verbose"])
3082
3330
  log_message('Syncing project', Thor::Shell::Color::BLUE, !options["verbose"])
3083
- if !options[:force] and options[:files].blank?
3331
+ if !options[:force] and (options[:files].blank? or options[:output_dir].blank?)
3084
3332
  invoke :download, [true, "", options["in_exp"] ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true
3085
3333
  end
3086
3334
  invoke :upload, [false, true, direct, "",options["in_exp"] ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true,
3087
- :ignore => options[:ignore], :force => options[:force], :message => options[:message], :deploy => options["deploy"], :return_id => options["return_id"], :files => options["files"]
3335
+ :ignore => options[:ignore], :force => options[:force], :message => options[:message], :deploy => options["deploy"], :return_id => options["return_id"],
3336
+ :files => options["files"], :output_dir => options["output_dir"]
3088
3337
 
3089
3338
 
3090
3339
  end
@@ -3107,7 +3356,7 @@ module Cnvrg
3107
3356
  method_option :upload_output, :type => :string, :aliases => ["-uo", "--upload_output"], :default => ""
3108
3357
  method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
3109
3358
  method_option :schedule, :type => :string, :aliases => ["-s", "--schedule"], :default => ""
3110
- method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
3359
+ method_option :image, :type => :string, :aliases => ["--image"], :default => ""
3111
3360
  method_option :grid, :type => :string, :aliases => ["-g", "--grid"], :default => ""
3112
3361
  method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
3113
3362
  method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
@@ -3117,6 +3366,11 @@ module Cnvrg
3117
3366
  method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--periodic_sync"], :default => nil #//15,30,45,60
3118
3367
  method_option :max_time, :type => :string, :aliases => [ "--max_time"], :default => nil
3119
3368
  method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
3369
+ method_option :output_dir, :type => :string, :aliases => ["-o", "--output_dir"], :default => nil
3370
+ method_option :data_query, :type => :string, :aliases => ["-q", "--query"], :default => nil
3371
+ method_option :git_commit, :type => :string, :aliases => [ "--git_commit"], :default => nil
3372
+ method_option :git_branch, :type => :string, :aliases => [ "--git_branch"], :default => nil
3373
+
3120
3374
 
3121
3375
  def run(*cmd)
3122
3376
  verify_logged_in(true)
@@ -3141,12 +3395,26 @@ module Cnvrg
3141
3395
  max_time = options["max_time"]
3142
3396
  dataset_only_tree = options["dataset_only_tree"]
3143
3397
  custom_machine = options["machine"]
3398
+ output_dir = options["output_dir"]
3399
+ data_query = options["data_query"]
3400
+ if !data.present? and data_query.present?
3401
+ log_message("Please provide data with data_query", Thor::Shell::Color::RED)
3402
+ exit(1)
3403
+ end
3404
+ if data_query.present? and (data_commit.present? or dataset_only_tree.present?)
3405
+ log_message("Please use only one option: --query(-q) or #{data_commit.present? ? '--data_commit' : '--dataset_only_tree'} ", Thor::Shell::Color::RED)
3406
+ exit(1)
3407
+ end
3408
+ git_commit = options["git_commit"]
3409
+ git_branch = options["git_branch"]
3410
+
3144
3411
 
3145
3412
  options_hash = Hash[options]
3413
+
3146
3414
  if local
3147
3415
  invoke :exec, [cmd], :sync_before => sync_before, :sync_after => sync_after, :title => title,
3148
3416
  :log => log, :email_notification => email_notification, :upload_output => upload_output,
3149
- :commit => commit, :image => image, :data => data, :data_commit => data_commit, :ignore => ignore, :force => force
3417
+ :commit => commit, :image => image, :data => data, :data_commit => data_commit, :ignore => ignore, :force => force, :output_dir=>output_dir, :data_query=>data_query
3150
3418
  return
3151
3419
  else
3152
3420
  if !periodic_sync.nil? and !periodic_sync.empty?
@@ -3161,15 +3429,16 @@ module Cnvrg
3161
3429
 
3162
3430
  end
3163
3431
  end
3164
- instances = {"small" => options["small"], "medium" => options["medium"], "large" => options["large"],
3432
+ instances = { "small" => options["small"], "medium" => options["medium"], "large" => options["large"],
3165
3433
  "gpu" => options["gpu"], "gpuxl" => options["gpuxl"], "gpuxxl" => options["gpuxxl"],
3166
- options["machine"] => !options["machine"].blank?}
3434
+ options["machine"] => !options["machine"].blank? }
3167
3435
  instance_type = get_instance_type(instances)
3168
3436
  invoke :exec_remote, [cmd], :sync_before => sync_before, :sync_after => sync_after, :title => title, :machine_type => instance_type,
3169
3437
  :schedule => schedule, :log => log, :email_notification => email_notification, :upload_output => upload_output, :commit => commit,
3170
3438
  :image => image, :grid => grid, :data => data, :data_commit => data_commit, :ignore => ignore, :force => force, :sync_before_terminate => sync_before_terminate,
3171
3439
  :max_time => max_time,
3172
- :periodic_sync => periodic_sync, :dataset_only_tree=> dataset_only_tree
3440
+ :periodic_sync => periodic_sync, :dataset_only_tree=> dataset_only_tree,
3441
+ :output_dir=>output_dir, :data_query=>data_query, :git_commit =>git_commit, :git_branch=> git_branch
3173
3442
  return
3174
3443
  end
3175
3444
 
@@ -3193,6 +3462,9 @@ module Cnvrg
3193
3462
  method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
3194
3463
  method_option :sync_before_terminate, :type => :boolean, :aliases => ["-sbt", "--sync_before_terminate"], :default => false
3195
3464
  method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--periodic_sync"], :default => ""
3465
+ method_option :output_dir, :type => :string, :aliases => ["-o", "--output_dir"], :default => nil
3466
+ method_option :data_query, :type => :string, :aliases => ["-q", "--query"], :default => nil
3467
+
3196
3468
  def exec(*cmd)
3197
3469
  log = []
3198
3470
  verify_logged_in(true)
@@ -3215,12 +3487,14 @@ module Cnvrg
3215
3487
 
3216
3488
 
3217
3489
  email_notification = options["email_notification"]
3218
- upload_output = options["upload_output"]
3219
- upload_output = "1m" if upload_output.nil? or upload_output.empty?
3220
- time_to_upload = calc_output_time(upload_output)
3221
3490
  project_home = get_project_home
3491
+ data_query = options["data_query"]
3222
3492
  @project = Project.new(project_home)
3223
- is_new_branch = @project.compare_commit(commit)
3493
+ if @project.is_git
3494
+ sync_before = false
3495
+ end
3496
+ # is_new_branch = @project.compare_commit(commit)
3497
+ is_new_branch = false
3224
3498
  begin
3225
3499
  if !commit.nil? and !commit.empty?
3226
3500
  invoke :jump, [commit], []
@@ -3287,13 +3561,30 @@ module Cnvrg
3287
3561
  spot_status_thread = Thread.new do
3288
3562
  begin
3289
3563
  loop do
3564
+ puts "Checking Spot Instance Status"
3565
+ log_message('Checking Spot Instance Status', Thor::Shell::Color::YELLOW)
3290
3566
  restart = @exp.restart_spot_instance()
3567
+
3291
3568
  if restart
3292
3569
  log_message('Spot instance is going to be terminated', Thor::Shell::Color::YELLOW)
3293
3570
  # sync
3294
- download(sync = true, ignore_list = [])
3295
- upload(link = false, sync = true, direct = false, ignore_list = [])
3296
- @exp.send_restart_request()
3571
+ if @project.is_git
3572
+ output_dir = @exp.output_dir
3573
+
3574
+ if output_dir.blank?
3575
+ output_dir = "output"
3576
+ end
3577
+ invoke :upload, [false, true, false, ignore, true, true], :output_dir => output_dir, :force=>true
3578
+ else
3579
+ upload_res = upload(false, true, false, ignore, true, true)
3580
+
3581
+ end
3582
+ res = @exp.send_restart_request(@project.get_idx.try(:fetch, :commit))
3583
+ while !Cnvrg::CLI.is_response_success(res, false) do
3584
+ sleep(5)
3585
+ res = @exp.send_restart_request(@project.get_idx.try(:fetch, :commit))
3586
+ end
3587
+ exit(0)
3297
3588
  end
3298
3589
  sleep(10)
3299
3590
  end
@@ -3321,23 +3612,7 @@ module Cnvrg
3321
3612
  end
3322
3613
  end
3323
3614
  end
3324
- log_thread = Thread.new do
3325
- while process_running or !log.empty? do
3326
- begin
3327
- temp_log = log
3328
- if !temp_log.empty?
3329
- @exp.upload_temp_log(temp_log) unless temp_log.empty?
3330
-
3331
- end
3332
- log -= temp_log
3333
- rescue => e
3334
- log_message("Failed to upload ongoing results, continuing with experiment", Thor::Shell::Color::YELLOW)
3335
- log_error(e)
3336
- ensure
3337
- sleep 10
3338
- end
3339
- end
3340
- end
3615
+ start_time = Time.now
3341
3616
  PTY.spawn(cmd) do |stdout, stdin, pid, stderr|
3342
3617
  begin
3343
3618
  stdout.each do |line|
@@ -3348,15 +3623,18 @@ module Cnvrg
3348
3623
  type: "stdout",
3349
3624
  real: real_time
3350
3625
  }
3351
- $LOG.info(cur_log)
3352
3626
  if print_log
3353
3627
  puts cur_log
3354
3628
  end
3355
3629
  log << cur_log
3356
- # if log.size >= 10
3357
- # @exp.upload_temp_log(log)
3358
- # log = []
3359
- # end
3630
+ if log.size >= 15
3631
+ @exp.upload_temp_log(log) unless log.empty?
3632
+ log = []
3633
+ elsif (start_time + 30.seconds) <= Time.now
3634
+ @exp.upload_temp_log(log) unless log.empty?
3635
+ log = []
3636
+ start_time = Time.now
3637
+ end
3360
3638
  end
3361
3639
  if stderr
3362
3640
  stderr.each do |err|
@@ -3366,10 +3644,8 @@ module Cnvrg
3366
3644
  rescue Errno::EIO => e
3367
3645
  log_error(e)
3368
3646
  if !log.empty?
3369
-
3370
3647
  temp_log = log
3371
3648
  @exp.upload_temp_log(temp_log) unless temp_log.empty?
3372
-
3373
3649
  log -= temp_log
3374
3650
  end
3375
3651
  rescue Errno::ENOENT => e
@@ -3380,7 +3656,6 @@ module Cnvrg
3380
3656
  # exp_success = false
3381
3657
  # log_message("The process exited!", Thor::Shell::Color::RED)
3382
3658
  rescue => e
3383
- sleep(20) # end cycle
3384
3659
  res = @exp.end(log, 1, start_commit, 0, 0)
3385
3660
  log_message("Error occurred,aborting", Thor::Shell::Color::RED)
3386
3661
  log_error(e)
@@ -3394,7 +3669,6 @@ module Cnvrg
3394
3669
 
3395
3670
  temp_log = log
3396
3671
  @exp.upload_temp_log(temp_log) unless temp_log.empty?
3397
-
3398
3672
  log -= temp_log
3399
3673
  end
3400
3674
 
@@ -3410,8 +3684,17 @@ module Cnvrg
3410
3684
  upload_res_count = 0
3411
3685
  upload_res = false
3412
3686
  while !upload_res and upload_res_count <5
3687
+ if @project.is_git
3688
+ if !upload_output.blank?
3689
+ upload_output = upload_output.join(",")
3690
+ invoke :upload, [false, true, false, ignore, true, true], :output_dir => upload_output, :force=>true
3691
+ end
3692
+
3693
+ else
3694
+ upload_res = upload(false, true, false, ignore, true, false)
3695
+
3413
3696
 
3414
- upload_res = upload(false, true, false, ignore, true)
3697
+ end
3415
3698
  upload_res_count +=1
3416
3699
  end
3417
3700
  # download(sync = true, ignore_list = ignore)
@@ -3420,7 +3703,7 @@ module Cnvrg
3420
3703
  end
3421
3704
  end_commit = @project.last_local_commit
3422
3705
 
3423
- log_thread.join
3706
+ # log_thread.join
3424
3707
  stats_thread.join
3425
3708
 
3426
3709
  res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
@@ -3440,19 +3723,13 @@ module Cnvrg
3440
3723
  end
3441
3724
  log_message("Couldn't run #{cmd}, check your input parameters", Thor::Shell::Color::RED)
3442
3725
  if @exp
3443
- cur_time = Time.now
3444
- real_time = Time.now - real
3445
- cur_log = {time: cur_time,
3446
- message: "Couldn't run #{cmd}, check your input parameters",
3447
- type: "stdout",
3448
- real: real_time
3449
-
3450
- }
3451
- log << cur_log
3452
- process_running = false
3453
- log_thread.join
3454
- stats_thread.join
3455
- res = @exp.end(log, "-1", end_commit, cpu_average, memory_average)
3726
+ # log_thread.join
3727
+ Thread.kill(stats_thread)
3728
+ exit_status = $?.exitstatus
3729
+ if exit_status.blank?
3730
+ exit_status = "-1"
3731
+ end
3732
+ res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
3456
3733
 
3457
3734
  end
3458
3735
  log_error(e)
@@ -3470,7 +3747,7 @@ module Cnvrg
3470
3747
  exit_status = -1
3471
3748
  end_commit = @project.last_local_commit
3472
3749
  process_running = false
3473
- log_thread.join
3750
+ # log_thread.join
3474
3751
  stats_thread.join
3475
3752
 
3476
3753
  res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
@@ -3502,6 +3779,10 @@ module Cnvrg
3502
3779
  method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
3503
3780
  method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--periodic_sync"], :default => nil
3504
3781
  method_option :sync_before_terminate, :type => :boolean, :aliases => ["-sbt", "--sync_before_terminate"], :default => false
3782
+ method_option :output_dir, :type => :string, :aliases => ["-o", "--output_dir"], :default => nil
3783
+ method_option :data_query, :type => :string, :aliases => ["-q", "--query"], :default => nil
3784
+ method_option :git_commit, :type => :string, :aliases => [ "--git_commit"], :default => nil
3785
+ method_option :git_branch, :type => :string, :aliases => [ "--git_branch"], :default => nil
3505
3786
 
3506
3787
  def exec_remote(*cmd)
3507
3788
  verify_logged_in(true)
@@ -3513,6 +3794,7 @@ module Cnvrg
3513
3794
  grid = options["grid"] || nil
3514
3795
  data = options["data"] || nil
3515
3796
  data_commit = options["data_commit"] || nil
3797
+ data_query = options["data_query"] || nil
3516
3798
  sync_before = options["sync_before"]
3517
3799
  force = options["force"]
3518
3800
  max_time = options["max_time"]
@@ -3530,7 +3812,6 @@ module Cnvrg
3530
3812
  if dataset_only_tree
3531
3813
  ds_sync_options = 1
3532
3814
  end
3533
-
3534
3815
  instance_type = options["machine_type"] || nil
3535
3816
  schedule = options["schedule"] || ""
3536
3817
  if schedule.start_with? 'in'
@@ -3562,9 +3843,14 @@ module Cnvrg
3562
3843
  if !instance_type.nil? and instance_type.include? "gpu"
3563
3844
  remote = "#{remote} --gpu=true"
3564
3845
  end
3846
+ output_dir = options["output_dir"] || nil
3847
+ git_commit = options["git_commit"]
3848
+ git_branch = options["git_branch"]
3565
3849
 
3566
3850
  options_hash = Hash[options]
3567
- options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit", "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl","max_time","dataset_only_tree")
3851
+ options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit",
3852
+ "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl","max_time","dataset_only_tree",
3853
+ "data_query", "git_commit","git_branch" )
3568
3854
  exec_options = options_hash.map {|x| "--#{x[0]}=#{x[1]}"}.flatten.join(" ")
3569
3855
  command = "#{exec_options} #{remote} #{upload_output_option} #{cmd.flatten.join(" ")}"
3570
3856
  commit_to_run = options["commit"] || nil
@@ -3574,7 +3860,9 @@ module Cnvrg
3574
3860
 
3575
3861
  end
3576
3862
  project = Project.new(working_dir)
3577
-
3863
+ if project.is_git and output_dir.blank?
3864
+ output_dir = "output"
3865
+ end
3578
3866
  choose_image = options["image"]
3579
3867
 
3580
3868
  if !choose_image.nil? and !choose_image.empty?
@@ -3592,7 +3880,7 @@ module Cnvrg
3592
3880
  image_slug = image.image_slug
3593
3881
  end
3594
3882
  forced_commit = nil
3595
- if sync_before
3883
+ if sync_before and !project.is_git
3596
3884
  if force
3597
3885
  sync_result = invoke :sync, [false], :force => force, :return_id=> true
3598
3886
  begin
@@ -3606,6 +3894,7 @@ module Cnvrg
3606
3894
 
3607
3895
 
3608
3896
 
3897
+
3609
3898
  end
3610
3899
 
3611
3900
 
@@ -3629,7 +3918,7 @@ module Cnvrg
3629
3918
  commit_to_run = forced_commit
3630
3919
  end
3631
3920
  res = exp.exec_remote(command, commit_to_run, instance_type, image_slug, schedule, local_timestamp, grid, path_to_cmd, data, data_commit,
3632
- periodic_sync, sync_before_terminate, max_time, ds_sync_options)
3921
+ periodic_sync, sync_before_terminate, max_time, ds_sync_options,output_dir,data_query, git_commit, git_branch)
3633
3922
  if Cnvrg::CLI.is_response_success(res)
3634
3923
  check = Helpers.checkmark()
3635
3924
  str = "#{check} Experiment's is on: #{Cnvrg::Helpers.remote_url}/#{project.owner}/projects/#{project.slug}/experiments/#{res["result"]["exp_url"]}"
@@ -3750,11 +4039,13 @@ module Cnvrg
3750
4039
  method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
3751
4040
  method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
3752
4041
  method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
3753
-
4042
+ method_option :data_query, :type => :string, :aliases => ["-q", "--query"], :default => ""
3754
4043
 
3755
4044
  desc 'notebook', 'starts a notebook session remotely or locally'
3756
4045
 
3757
4046
  def notebook
4047
+ verify_logged_in(true)
4048
+ log_start(__method__, args, options)
3758
4049
  local = options["local"]
3759
4050
  notebook_dir = options["notebook_dir"]
3760
4051
  kernel = options["kernel"]
@@ -3762,6 +4053,16 @@ module Cnvrg
3762
4053
  data = options["data"]
3763
4054
  data_commit = options["data_commit"]
3764
4055
  dataset_only_tree = options["dataset_only_tree"]
4056
+ data_query = options["data_query"]
4057
+ if !data.present? and data_query.present?
4058
+ log_message("Please provide data with data_query", Thor::Shell::Color::RED)
4059
+ exit(1)
4060
+ end
4061
+ if data_query.present? and (data_commit.present? or dataset_only_tree.present?)
4062
+ log_message("Please use only one option: --query(-q) or #{data_commit.present? ? '--data_commit' : '--dataset_only_tree'} ", Thor::Shell::Color::RED)
4063
+ exit(1)
4064
+ end
4065
+
3765
4066
  if local
3766
4067
  invoke :run_notebook, [], :notebook_dir => notebook_dir, :remote => false, :kernel => kernel, :image => image
3767
4068
  return
@@ -3771,7 +4072,7 @@ module Cnvrg
3771
4072
  instance_type = get_instance_type(instances)
3772
4073
 
3773
4074
  invoke :remote_notebook, [], :notebook_dir => notebook_dir, :kernel => kernel, :machine_type => instance_type, :image => image,
3774
- :data => data, :data_commit => data_commit , :dataset_only_tree => dataset_only_tree
4075
+ :data => data, :data_commit => data_commit , :dataset_only_tree => dataset_only_tree, :data_query => data_query
3775
4076
  return
3776
4077
 
3777
4078
  end
@@ -3891,7 +4192,7 @@ module Cnvrg
3891
4192
  method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
3892
4193
  method_option :commit, :type => :string, :aliases => ["--commit"], :default => ""
3893
4194
  method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
3894
-
4195
+ method_option :data_query, :type => :string, :aliases => ["-q","--data_query"], :default => ""
3895
4196
 
3896
4197
  def remote_notebook()
3897
4198
  verify_logged_in(true)
@@ -3909,6 +4210,16 @@ module Cnvrg
3909
4210
  ds_sync_options = 1
3910
4211
  end
3911
4212
 
4213
+ data_query = nil
4214
+ if data.present?
4215
+ data_query = options["data_query"]
4216
+ end
4217
+
4218
+ if data_commit.present? and data_query.present?
4219
+ log_message("Please use only one option: --query(-q) or --data_commit ", Thor::Shell::Color::RED)
4220
+ exit(1)
4221
+ end
4222
+
3912
4223
  begin
3913
4224
  project = Project.new(working_dir)
3914
4225
  exp = Experiment.new(project.owner, project.slug)
@@ -3918,7 +4229,7 @@ module Cnvrg
3918
4229
  end
3919
4230
  invoke :sync, [false], []
3920
4231
  slug = ""
3921
- res = exp.remote_notebook(instance_type, commit, data, data_commit, notebook_type,ds_sync_options)
4232
+ res = exp.remote_notebook(instance_type, commit, data, data_commit, notebook_type,ds_sync_options,data_query)
3922
4233
  if Cnvrg::CLI.is_response_success(res)
3923
4234
  slug = res["result"]["notebook_url"]
3924
4235
  log_message("#{Helpers.checkmark} Notebook is ready: #{Cnvrg::Helpers.remote_url}/#{project.owner}/projects/#{project.slug}/notebook_sessions/show/#{slug}", Thor::Shell::Color::GREEN)
@@ -5593,7 +5904,7 @@ module Cnvrg
5593
5904
  begin
5594
5905
  $LOG.error message: e.message, type: "error"
5595
5906
  size = e.backtrace.size
5596
- min = 4
5907
+ min = 10
5597
5908
  if min >= size
5598
5909
  min = size
5599
5910
  end
@@ -5702,7 +6013,7 @@ module Cnvrg
5702
6013
  end
5703
6014
 
5704
6015
  def should_update_version
5705
- res = Cnvrg::API.request("/cli/version", 'GET')
6016
+ res = Cnvrg::API.request("cli/version", 'GET')
5706
6017
  if Cnvrg::CLI.is_response_success(res, false)
5707
6018
  updated_version = res["result"]["version"]
5708
6019
  if updated_version != Cnvrg::VERSION
@@ -5796,17 +6107,19 @@ module Cnvrg
5796
6107
  # end
5797
6108
  # end
5798
6109
 
5799
- config = YAML.load_file(File.expand_path('~') + "/.cnvrg/config.yml")
5800
- version_date = config.to_h[:version_last_check]
5801
- if version_date.nil?
5802
- version_date = get_start_day()
5803
- end
5804
- next_day = get_start_day + 86399
5805
- if not (version_date..next_day).cover?(Time.now)
5806
- if should_update_version()
5807
- say "There is a new version, run gem update cnvrg", Thor::Shell::Color::BLUE
5808
- end
5809
- end
6110
+ # config = YAML.load_file(File.expand_path('~') + "/.cnvrg/config.yml")
6111
+ # version_date = config.to_h[:version_last_check]
6112
+ # if version_date.nil?
6113
+ # version_date = get_start_day()
6114
+ # end
6115
+ # next_day = get_start_day + 86399
6116
+ # version_date = version_date.to_i
6117
+ # next_day = next_day.to_i
6118
+ # if not (version_date..next_day).cover?(Time.now)
6119
+ # if should_update_version()
6120
+ # say "There is a new version, run gem update cnvrg", Thor::Shell::Color::BLUE
6121
+ # end
6122
+ # end
5810
6123
  if in_dir
5811
6124
  is_cnvrg = is_cnvrg_dir
5812
6125
  if !is_cnvrg