[ARVADOS] created: 0332c1678b9d7b500f0b11ac60ef387d85e5097c

git at public.curoverse.com git at public.curoverse.com
Mon Jan 27 16:18:22 EST 2014


        at  0332c1678b9d7b500f0b11ac60ef387d85e5097c (commit)


commit 0332c1678b9d7b500f0b11ac60ef387d85e5097c
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 12:43:50 2014 -0800

    Remove request body object from parameters lists in *.create and
    *.update -- mark it required in the request body instead.
    
    refs #1946

diff --git a/services/api/app/controllers/arvados/v1/schema_controller.rb b/services/api/app/controllers/arvados/v1/schema_controller.rb
index 1c75488..7df2edb 100644
--- a/services/api/app/controllers/arvados/v1/schema_controller.rb
+++ b/services/api/app/controllers/arvados/v1/schema_controller.rb
@@ -246,16 +246,9 @@ class Arvados::V1::SchemaController < ApplicationController
               path: "#{k.to_s.underscore.pluralize}",
               httpMethod: "POST",
               description: "Create a new #{k.to_s}.",
-              parameters: {
-                k.to_s.underscore => {
-                  type: "object",
-                  required: false,
-                  location: "query",
-                  properties: object_properties
-                }
-              },
+              parameters: {},
               request: {
-                required: false,
+                required: true,
                 properties: {
                   k.to_s.underscore => {
                     "$ref" => k.to_s
@@ -280,16 +273,10 @@ class Arvados::V1::SchemaController < ApplicationController
                   description: "The UUID of the #{k.to_s} in question.",
                   required: true,
                   location: "path"
-                },
-                k.to_s.underscore => {
-                  type: "object",
-                  required: false,
-                  location: "query",
-                  properties: object_properties
                 }
               },
               request: {
-                required: false,
+                required: true,
                 properties: {
                   k.to_s.underscore => {
                     "$ref" => k.to_s

commit 0693d6260764bff4deeb12fcd14b8906de9b83ae
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 12:31:59 2014 -0800

    Add version string to arv (assume "gem install" makes the version
    apparent in the executable path).

diff --git a/sdk/cli/bin/arv b/sdk/cli/bin/arv
index 90e3327..81e5da8 100755
--- a/sdk/cli/bin/arv
+++ b/sdk/cli/bin/arv
@@ -207,6 +207,7 @@ def parse_arguments(discovery_document)
   end
 
   global_opts = Trollop::options do
+    version __FILE__
     banner "arv: the Arvados CLI tool"
     opt :dry_run, "Don't actually do anything", :short => "-n"
     opt :verbose, "Print some things on stderr"

commit 1d84f4602ec9ef13689be6acfb27bc98e6dc367a
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 12:11:08 2014 -0800

    Do not add body object to discovery parameters.

diff --git a/sdk/cli/bin/arv b/sdk/cli/bin/arv
index 62b22ca..90e3327 100755
--- a/sdk/cli/bin/arv
+++ b/sdk/cli/bin/arv
@@ -269,7 +269,6 @@ def parse_arguments(discovery_document)
         required: is_required,
         type: :string
       }
-      discovered_params[resource.to_sym] = body_object
     end
   end
 

commit ee08ff24e0126f602bfd9f7371c90f75801c3597
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 12:10:34 2014 -0800

    Fix up dependencies, pin google-api-client at 0.6.x

diff --git a/sdk/cli/Gemfile b/sdk/cli/Gemfile
index 851fabc..638a00c 100644
--- a/sdk/cli/Gemfile
+++ b/sdk/cli/Gemfile
@@ -1,2 +1,4 @@
 source 'https://rubygems.org'
 gemspec
+gem 'minitest', '>= 5.0.0'
+gem 'rake'
diff --git a/sdk/cli/Gemfile.lock b/sdk/cli/Gemfile.lock
index 33a3ee8..5118fb8 100644
--- a/sdk/cli/Gemfile.lock
+++ b/sdk/cli/Gemfile.lock
@@ -1,11 +1,11 @@
 PATH
   remote: .
   specs:
-    arvados-cli (0.1.20140122170812)
+    arvados-cli (0.1.20140127123159)
       activesupport (>= 3.2.13)
       andand (>= 1.3.3)
       curb (~> 0.8)
-      google-api-client (>= 0.6.3)
+      google-api-client (~> 0.6.3)
       json (>= 1.7.7)
       oj (>= 2.0.3)
       trollop (>= 2.0)
@@ -13,32 +13,28 @@ PATH
 GEM
   remote: https://rubygems.org/
   specs:
-    activesupport (4.0.2)
+    activesupport (3.2.16)
       i18n (~> 0.6, >= 0.6.4)
-      minitest (~> 4.2)
-      multi_json (~> 1.3)
-      thread_safe (~> 0.1)
-      tzinfo (~> 0.3.37)
+      multi_json (~> 1.0)
     addressable (2.3.5)
     andand (1.3.3)
-    atomic (1.1.14)
     autoparse (0.3.3)
       addressable (>= 2.3.1)
       extlib (>= 0.9.15)
       multi_json (>= 1.0.0)
     curb (0.8.5)
     extlib (0.9.16)
-    faraday (0.9.0)
-      multipart-post (>= 1.2, < 3)
-    google-api-client (0.7.0)
+    faraday (0.8.9)
+      multipart-post (~> 1.2.0)
+    google-api-client (0.6.4)
       addressable (>= 2.3.2)
       autoparse (>= 0.3.3)
       extlib (>= 0.9.15)
-      faraday (>= 0.9.0)
+      faraday (~> 0.8.4)
       jwt (>= 0.1.5)
       launchy (>= 2.1.1)
       multi_json (>= 1.0.0)
-      signet (>= 0.5.0)
+      signet (~> 0.4.5)
       uuidtools (>= 2.1.0)
     i18n (0.6.9)
     json (1.8.1)
@@ -46,19 +42,17 @@ GEM
       multi_json (>= 1.5)
     launchy (2.4.2)
       addressable (~> 2.3)
-    minitest (4.7.5)
+    minitest (5.2.2)
     multi_json (1.8.4)
-    multipart-post (2.0.0)
+    multipart-post (1.2.0)
     oj (2.5.4)
-    signet (0.5.0)
+    rake (10.1.1)
+    signet (0.4.5)
       addressable (>= 2.2.3)
-      faraday (>= 0.9.0.rc5)
+      faraday (~> 0.8.1)
       jwt (>= 0.1.5)
       multi_json (>= 1.0.0)
-    thread_safe (0.1.3)
-      atomic
     trollop (2.0)
-    tzinfo (0.3.38)
     uuidtools (2.1.4)
 
 PLATFORMS
@@ -66,3 +60,5 @@ PLATFORMS
 
 DEPENDENCIES
   arvados-cli!
+  minitest (>= 5.0.0)
+  rake
diff --git a/sdk/cli/arvados-cli.gemspec b/sdk/cli/arvados-cli.gemspec
index e629d3b..4360d39 100644
--- a/sdk/cli/arvados-cli.gemspec
+++ b/sdk/cli/arvados-cli.gemspec
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
   s.executables << "arv-run-pipeline-instance"
   s.executables << "arv-crunch-job"
   s.executables << "arv-tag"
-  s.add_dependency('google-api-client', '>= 0.6.3')
+  s.add_dependency('google-api-client', '~> 0.6.3')
   s.add_dependency('activesupport', '>= 3.2.13')
   s.add_dependency('json', '>= 1.7.7')
   s.add_dependency('trollop', '>= 2.0')

commit d6e0ee35e9aa71891feacefcc65e98ba8a7615e5
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 11:25:19 2014 -0800

    Add Gemfile.lock

diff --git a/sdk/ruby/Gemfile.lock b/sdk/ruby/Gemfile.lock
new file mode 100644
index 0000000..f76ba44
--- /dev/null
+++ b/sdk/ruby/Gemfile.lock
@@ -0,0 +1,58 @@
+PATH
+  remote: .
+  specs:
+    arvados (0.1.20140127093947)
+      activesupport (>= 3.2.13)
+      andand
+      google-api-client (~> 0.6.3)
+      json (>= 1.7.7)
+      minitest (>= 5.0.0)
+      rake
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (3.2.16)
+      i18n (~> 0.6, >= 0.6.4)
+      multi_json (~> 1.0)
+    addressable (2.3.5)
+    andand (1.3.3)
+    autoparse (0.3.3)
+      addressable (>= 2.3.1)
+      extlib (>= 0.9.15)
+      multi_json (>= 1.0.0)
+    extlib (0.9.16)
+    faraday (0.8.9)
+      multipart-post (~> 1.2.0)
+    google-api-client (0.6.4)
+      addressable (>= 2.3.2)
+      autoparse (>= 0.3.3)
+      extlib (>= 0.9.15)
+      faraday (~> 0.8.4)
+      jwt (>= 0.1.5)
+      launchy (>= 2.1.1)
+      multi_json (>= 1.0.0)
+      signet (~> 0.4.5)
+      uuidtools (>= 2.1.0)
+    i18n (0.6.9)
+    json (1.8.1)
+    jwt (0.1.11)
+      multi_json (>= 1.5)
+    launchy (2.4.2)
+      addressable (~> 2.3)
+    minitest (5.2.2)
+    multi_json (1.8.4)
+    multipart-post (1.2.0)
+    rake (10.1.1)
+    signet (0.4.5)
+      addressable (>= 2.2.3)
+      faraday (~> 0.8.1)
+      jwt (>= 0.1.5)
+      multi_json (>= 1.0.0)
+    uuidtools (2.1.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  arvados!

commit c0633e110d4920794e1de39c4e98cf95fee670cf
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 11:23:07 2014 -0800

    Send parameters in the request body instead of query parameters if
    discovery document specifies request.properties.(key).$ref.
    
    refs #1946

diff --git a/sdk/ruby/arvados.gemspec b/sdk/ruby/arvados.gemspec
index 0b880b4..68c4970 100644
--- a/sdk/ruby/arvados.gemspec
+++ b/sdk/ruby/arvados.gemspec
@@ -13,9 +13,10 @@ Gem::Specification.new do |s|
   s.email       = 'gem-dev at curoverse.com'
   s.licenses    = ['Apache License, Version 2.0']
   s.files       = ["lib/arvados.rb"]
-  s.add_dependency('google-api-client', '>= 0.6.3')
+  s.add_dependency('google-api-client', '~> 0.6.3')
   s.add_dependency('activesupport', '>= 3.2.13')
   s.add_dependency('json', '>= 1.7.7')
+  s.add_dependency('andand')
   s.homepage    =
     'http://arvados.org'
 end
diff --git a/sdk/ruby/lib/arvados.rb b/sdk/ruby/lib/arvados.rb
index f494123..5d1f489 100644
--- a/sdk/ruby/lib/arvados.rb
+++ b/sdk/ruby/lib/arvados.rb
@@ -3,6 +3,7 @@ require 'google/api_client'
 require 'active_support/inflector'
 require 'json'
 require 'fileutils'
+require 'andand'
 
 ActiveSupport::Inflector.inflections do |inflect|
   inflect.irregular 'specimen', 'specimens'
@@ -78,7 +79,7 @@ class Arvados
         each do |method|
         class << klass; self; end.class_eval do
           define_method method.name do |*params|
-            self.api_exec(method.name.to_sym, *params)
+            self.api_exec method, *params
           end
         end
       end
@@ -86,7 +87,7 @@ class Arvados
       # Give the new class access to the API
       klass.instance_eval do
         @arvados = _arvados
-        # These should be pulled from the discovery document instead:
+        # TODO: Pull these from the discovery document instead.
         @api_models_sym = classname.underscore.split('/').last.pluralize.to_sym
         @api_model_sym = classname.underscore.split('/').last.to_sym
       end
@@ -186,15 +187,28 @@ class Arvados
       self.class.arvados.class.debuglog *args
     end
     def self.api_exec(method, parameters={})
+      api_method = arvados_api.send(api_models_sym).send(method.name.to_sym)
       parameters = parameters.
         merge(:api_token => arvados.config['ARVADOS_API_TOKEN'])
       parameters.each do |k,v|
         parameters[k] = v.to_json if v.is_a? Array or v.is_a? Hash
       end
+      # Look for objects expected by request.properties.(key).$ref and
+      # move them from parameters (query string) to request body.
+      body = nil
+      method.discovery_document['request'].
+        andand['properties'].
+        andand.each do |k,v|
+        if v.is_a? Hash and v['$ref']
+          body ||= {}
+          body[k] = parameters.delete k.to_sym
+        end
+      end
       result = client.
-        execute(:api_method => arvados_api.send(api_models_sym).send(method),
+        execute(:api_method => api_method,
                 :authenticated => false,
-                :parameters => parameters)
+                :parameters => parameters,
+                :body => body)
       resp = JSON.parse result.body, :symbolize_names => true
       if resp[:errors]
         raise Arvados::TransactionFailedError.new(resp[:errors])

commit 5e2a966ce8c7e499691f955ba5b5b37a5473e325
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Jan 27 11:17:27 2014 -0800

    Add tests, fix dependencies so "bundle exec rake test" runs.

diff --git a/sdk/cli/test/test_arv-collection-create.rb b/sdk/cli/test/test_arv-collection-create.rb
new file mode 100644
index 0000000..c513be0
--- /dev/null
+++ b/sdk/cli/test/test_arv-collection-create.rb
@@ -0,0 +1,38 @@
+require 'minitest/autorun'
+require 'digest/md5'
+
+class TestCollectionCreate < Minitest::Test
+  def setup
+  end
+
+  def test_small_collection
+    uuid = Digest::MD5.hexdigest(foo_manifest) + '+' + foo_manifest.size.to_s
+    out, err = capture_subprocess_io do
+      assert_arv('--format', 'uuid', 'collection', 'create', '--collection', {
+                   uuid: uuid,
+                   manifest_text: foo_manifest
+                 }.to_json)
+    end
+    assert_equal uuid+"\n", out
+    assert_equal '', err
+    $stderr.puts err
+  end
+
+  protected
+  def assert_arv(*args)
+    expect = case args.first
+             when true, false
+               args.shift
+             else
+               true
+             end
+    assert_equal(expect,
+                 system(['./bin/arv', 'arv'], *args),
+                 "`arv #{args.join ' '}` " +
+                 "should exit #{if expect then 0 else 'non-zero' end}")
+  end
+
+  def foo_manifest
+    ". #{Digest::MD5.hexdigest('foo')}+3 0:3:foo\n"
+  end
+end
diff --git a/sdk/ruby/Gemfile b/sdk/ruby/Gemfile
new file mode 100644
index 0000000..8f441da
--- /dev/null
+++ b/sdk/ruby/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+gemspec
+gem 'rake'
+gem 'minitest', '>= 5.0.0'
diff --git a/sdk/ruby/Rakefile b/sdk/ruby/Rakefile
new file mode 100644
index 0000000..cf4652f
--- /dev/null
+++ b/sdk/ruby/Rakefile
@@ -0,0 +1,8 @@
+require 'rake/testtask'
+
+Rake::TestTask.new do |t|
+  t.libs << 'test'
+end
+
+desc 'Run tests'
+task default: :test
diff --git a/sdk/ruby/test/test_big_request.rb b/sdk/ruby/test/test_big_request.rb
new file mode 100644
index 0000000..d62141a
--- /dev/null
+++ b/sdk/ruby/test/test_big_request.rb
@@ -0,0 +1,38 @@
+require 'minitest/autorun'
+require 'arvados'
+require 'digest/md5'
+
+class TestBigRequest < Minitest::Test
+  def setup
+    begin
+      Dir.mkdir './tmp'
+    rescue Errno::EEXIST
+    end
+    @@arv = Arvados.new
+  end
+
+  def boring_manifest nblocks
+    x = '.'
+    (0..nblocks).each do |z|
+      x += ' d41d8cd98f00b204e9800998ecf8427e+0'
+    end
+    x += "0:0:foo.txt\n"
+    x
+  end
+
+  def test_create_manifest nblocks=1
+    manifest_text = boring_manifest nblocks
+    uuid = Digest::MD5.hexdigest(manifest_text) + '+' + manifest_text.size.to_s
+    c = @@arv.collection.create(collection: {
+                                  uuid: uuid,
+                                  manifest_text: manifest_text
+                                })
+    assert_equal uuid, c[:uuid]
+  end
+
+  def test_create_big_manifest
+    # This ensures that manifest_text is passed in the request body:
+    # it's too large to fit in the query string.
+    test_create_manifest 9999
+  end
+end

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list