[ARVADOS] updated: 0f9bca457448372de1d15dcd9ed4548c324ff14f

git at public.curoverse.com git at public.curoverse.com
Fri Nov 7 15:48:27 EST 2014


Summary of changes:
 apps/workbench/app/models/arvados_api_client.rb    |   7 +-
 apps/workbench/app/models/arvados_resource_list.rb | 103 +++++++++------------
 .../app/views/application/_paging.html.erb         |  22 +++--
 .../test/functional/users_controller_test.rb       |   1 -
 .../test/unit/arvados_resource_list_test.rb        |   2 +-
 5 files changed, 62 insertions(+), 73 deletions(-)

       via  0f9bca457448372de1d15dcd9ed4548c324ff14f (commit)
      from  83369774c123b427f519bd2a2229415fac383a6a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 0f9bca457448372de1d15dcd9ed4548c324ff14f
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Nov 7 15:48:22 2014 -0500

    3400: ArvadosResourceList retains api token that is active when it is created.
    Tweaked fetch-multiple-pages loop.  Made #each_page protected.  _paging sets
    fetch_multiple_pages(false).

diff --git a/apps/workbench/app/models/arvados_api_client.rb b/apps/workbench/app/models/arvados_api_client.rb
index 7076799..0a99d66 100644
--- a/apps/workbench/app/models/arvados_api_client.rb
+++ b/apps/workbench/app/models/arvados_api_client.rb
@@ -78,7 +78,8 @@ class ArvadosApiClient
     @client_mtx = Mutex.new
   end
 
-  def api(resources_kind, action, data=nil)
+  def api(resources_kind, action, data=nil, tokens={})
+
     profile_checkpoint
 
     if not @api_client
@@ -100,8 +101,8 @@ class ArvadosApiClient
     url.sub! '/arvados/v1/../../', '/'
 
     query = {
-      'api_token' => Thread.current[:arvados_api_token] || '',
-      'reader_tokens' => (Thread.current[:reader_tokens] || []).to_json,
+      'api_token' => tokens[:arvados_api_token] || Thread.current[:arvados_api_token] || '',
+      'reader_tokens' => (tokens[:reader_tokens] || Thread.current[:reader_tokens] || []).to_json,
     }
     if !data.nil?
       data.each do |k,v|
diff --git a/apps/workbench/app/models/arvados_resource_list.rb b/apps/workbench/app/models/arvados_resource_list.rb
index 41521c9..7a6a004 100644
--- a/apps/workbench/app/models/arvados_resource_list.rb
+++ b/apps/workbench/app/models/arvados_resource_list.rb
@@ -5,6 +5,8 @@ class ArvadosResourceList
   def initialize resource_class=nil
     @resource_class = resource_class
     @fetch_multiple_pages = true
+    @arvados_api_token = Thread.current[:arvados_api_token]
+    @reader_tokens = Thread.current[:reader_tokens]
   end
 
   def eager(bool=true)
@@ -13,6 +15,9 @@ class ArvadosResourceList
   end
 
   def limit(max_results)
+    if not max_results.nil? and not max_results.is_a? Integer
+      raise ArgumentError("argument to limit() must be an Integer or nil")
+    end
     @limit = max_results
     self
   end
@@ -100,61 +105,6 @@ class ArvadosResourceList
     results
   end
 
-  def each_page
-    api_params = {
-      _method: 'GET'
-    }
-    api_params[:where] = @cond if @cond
-    api_params[:eager] = '1' if @eager
-    api_params[:limit] = @limit if @limit
-    api_params[:select] = @select if @select
-    api_params[:order] = @orderby_spec if @orderby_spec
-    api_params[:filters] = @filters if @filters
-
-    item_count = 0
-
-    if @offset
-      offset = @offset
-    else
-      offset = 0
-    end
-
-    if @limit.is_a? Integer
-      items_to_get = @limit
-    else
-      items_to_get = 1000000000
-    end
-
-    begin
-      api_params[:offset] = offset
-
-      res = arvados_api_client.api @resource_class, '', api_params
-      items = arvados_api_client.unpack_api_response res
-
-      if items.nil? or items.size == 0
-        break
-      end
-
-      @items_available = items.items_available if items.respond_to? :items_available
-      @result_limit = items.limit
-      @result_offset = items.offset
-      @result_links = items.links if items.respond_to? :links
-
-      item_count += items.size
-
-      if items.respond_to? :items_available and
-          (@limit.nil? or (@limit.is_a? Integer and  @limit > items.items_available))
-        items_to_get = items.items_available
-      end
-
-      offset = items.offset + items.size
-
-      yield items
-
-    end while @fetch_multiple_pages and item_count < items_to_get
-    self
-  end
-
   def each(&block)
     if not @results.nil?
       @results.each &block
@@ -237,9 +187,46 @@ class ArvadosResourceList
     end
   end
 
-  # Note: this arbitrarily chooses one of (possibly) multiple names.
-  def name_for item_or_uuid
-    links_for(item_or_uuid, 'name').first.andand.name
+  protected
+
+  def each_page
+    api_params = {
+      _method: 'GET'
+    }
+    api_params[:where] = @cond if @cond
+    api_params[:eager] = '1' if @eager
+    api_params[:limit] = @limit if @limit
+    api_params[:select] = @select if @select
+    api_params[:order] = @orderby_spec if @orderby_spec
+    api_params[:filters] = @filters if @filters
+
+    item_count = 0
+    offset = @offset || 0
+
+    begin
+      api_params[:offset] = offset
+      api_params[:limit] = (@limit - item_count) if @limit
+
+      res = arvados_api_client.api(@resource_class, '', api_params,
+                                   arvados_api_token: @arvados_api_token,
+                                   reader_tokens: @reader_tokens)
+      items = arvados_api_client.unpack_api_response res
+
+      break if items.nil? or not items.any?
+
+      @items_available = items.items_available if items.respond_to? :items_available
+      @result_limit = items.limit if items.respond_to? :limit
+      @result_offset = items.offset if items.respond_to? :offset
+
+      item_count += items.size
+      offset = @result_offset + items.size
+
+      yield items
+
+      break if @limit.is_a? Integer and item_count >= @limit
+      break if items.respond_to? :items_available and offset >= items.items_available
+    end while @fetch_multiple_pages
+    self
   end
 
 end
diff --git a/apps/workbench/app/views/application/_paging.html.erb b/apps/workbench/app/views/application/_paging.html.erb
index df9d08d..9c64c2b 100644
--- a/apps/workbench/app/views/application/_paging.html.erb
+++ b/apps/workbench/app/views/application/_paging.html.erb
@@ -11,25 +11,27 @@ min-width: 1.2em;
 }
 <% end %>
 
+<% results.fetch_multiple_pages(false) %>
+
 <% if results.respond_to? :result_offset and
        results.respond_to? :result_limit and
        results.respond_to? :items_available and
        results.result_offset != nil and
        results.result_limit != nil and
-       results.items_available != nil 
+       results.items_available != nil
 %>
 <div class="index-paging">
-  Displaying <%= results.result_offset+1 %> – 
-  <%= if results.result_offset + results.result_limit > results.items_available 
-        results.items_available 
-      else 
-        results.result_offset + results.result_limit 
+  Displaying <%= results.result_offset+1 %> –
+  <%= if results.result_offset + results.result_limit > results.items_available
+        results.items_available
+      else
+        results.result_offset + results.result_limit
       end %>
  out of <%= results.items_available %>
 </div>
 
 <% if not (results.result_offset == 0 and results.items_available <= results.result_limit) %>
-  
+
 <div class="index-paging">
 
 <% if results.result_offset > 0 %>
@@ -54,7 +56,7 @@ min-width: 1.2em;
 <% if results.result_offset > 0 %>
   <%= link_to raw("<span class='glyphicon glyphicon-fast-backward'></span>"), {:id => object, :offset => 0, :limit => results.result_limit}  %>
 <% else %>
-  <span class='glyphicon glyphicon-fast-backward text-muted'></span>  
+  <span class='glyphicon glyphicon-fast-backward text-muted'></span>
 <% end %>
 
 <% if prev_offset %>
@@ -111,10 +113,10 @@ min-width: 1.2em;
 <% end %>
 
 <% if (results.items_available - results.result_offset) >= results.result_limit %>
-  <%= link_to raw("<span class='glyphicon glyphicon-fast-forward'></span>"), {:id => @object, :offset => results.items_available - (results.items_available % results.result_limit), 
+  <%= link_to raw("<span class='glyphicon glyphicon-fast-forward'></span>"), {:id => @object, :offset => results.items_available - (results.items_available % results.result_limit),
         :limit => results.result_limit}  %>
 <% else %>
-  <span class='glyphicon glyphicon-fast-forward text-muted'></span>  
+  <span class='glyphicon glyphicon-fast-forward text-muted'></span>
 <% end %>
 
 </span>
diff --git a/apps/workbench/test/functional/users_controller_test.rb b/apps/workbench/test/functional/users_controller_test.rb
index 9f0c00b..a734391 100644
--- a/apps/workbench/test/functional/users_controller_test.rb
+++ b/apps/workbench/test/functional/users_controller_test.rb
@@ -32,7 +32,6 @@ class UsersControllerTest < ActionController::TestCase
 
   test "show repositories with read, write, or manage permission" do
     get :manage_account, {}, session_for(:active)
-    use_token :active
     assert_response :success
     repos = assigns(:my_repositories)
     assert repos
diff --git a/apps/workbench/test/unit/arvados_resource_list_test.rb b/apps/workbench/test/unit/arvados_resource_list_test.rb
index dac6a74..d936db0 100644
--- a/apps/workbench/test/unit/arvados_resource_list_test.rb
+++ b/apps/workbench/test/unit/arvados_resource_list_test.rb
@@ -72,7 +72,7 @@ class ResourceListTest < ActiveSupport::TestCase
       a += 1
     end
 
-    assert a < 201
+    assert_operator a, :<, 201
     assert_equal c.result_limit, a
   end
 

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list