X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d3229c7f727f40436cad66fba5f3345e0b3eede5..8ca0b1449607ded51e908481cc4660c20f43a777:/apps/workbench/app/models/arvados_resource_list.rb?ds=sidebyside diff --git a/apps/workbench/app/models/arvados_resource_list.rb b/apps/workbench/app/models/arvados_resource_list.rb index 3000aa8ac2..9ba61eaba0 100644 --- a/apps/workbench/app/models/arvados_resource_list.rb +++ b/apps/workbench/app/models/arvados_resource_list.rb @@ -1,7 +1,13 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + class ArvadosResourceList include ArvadosApiClientHelper include Enumerable + attr_reader :resource_class + def initialize resource_class=nil @resource_class = resource_class @fetch_multiple_pages = true @@ -14,6 +20,21 @@ class ArvadosResourceList self end + def distinct(bool=true) + @distinct = bool + self + end + + def include_trash(option=nil) + @include_trash = option + self + end + + def recursive(option=nil) + @recursive = option + self + 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") @@ -77,6 +98,13 @@ class ArvadosResourceList self end + # with_count sets the 'count' parameter to 'exact' or 'none' -- see + # https://doc.arvados.org/api/methods.html#index + def with_count(count_param='exact') + @count = count_param + self + end + def fetch_multiple_pages(f) @fetch_multiple_pages = f self @@ -146,14 +174,17 @@ class ArvadosResourceList end def items_available + results @items_available end def result_limit + results @result_limit end def result_offset + results @result_offset end @@ -168,12 +199,18 @@ class ArvadosResourceList api_params = { _method: 'GET' } + api_params[:count] = @count if @count api_params[:where] = @cond if @cond api_params[:eager] = '1' if @eager api_params[:select] = @select if @select api_params[:order] = @orderby_spec if @orderby_spec api_params[:filters] = @filters if @filters - + api_params[:distinct] = @distinct if @distinct + api_params[:include_trash] = @include_trash if @include_trash + if @fetch_multiple_pages + # Default limit to (effectively) api server's MAX_LIMIT + api_params[:limit] = 2**(0.size*8 - 1) - 1 + end item_count = 0 offset = @offset || 0 @@ -189,12 +226,12 @@ class ArvadosResourceList 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 (@fetch_multiple_pages == false) and items.respond_to?(:limit) @result_offset = items.offset if (@fetch_multiple_pages == false) and items.respond_to?(:offset) + break if items.nil? or not items.any? + item_count += items.size if items.respond_to?(:offset) offset = items.offset + items.size