X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2d2f3bed79f9504d15503277056feb394c12dd7c..7314917d65573b0e9d55f7b6522463c470356fba:/sdk/go/util/util.go diff --git a/sdk/go/util/util.go b/sdk/go/util/util.go index 4505db6a52..ac510de02a 100644 --- a/sdk/go/util/util.go +++ b/sdk/go/util/util.go @@ -3,41 +3,10 @@ package util import ( - "errors" "git.curoverse.com/arvados.git/sdk/go/arvadosclient" - "log" ) -type SdkListResponse interface { - NumItemsAvailable() (int, error) - NumItemsContained() (int, error) -} - -type UnstructuredSdkListResponse map[string]interface{} - -func (m UnstructuredSdkListResponse) NumItemsAvailable() (numAvailable int, err error) { - if itemsAvailable, ok := m["items_available"]; !ok { - err = errors.New("Could not find \"items_available\" field in " + - "UnstructuredSdkListResponse that NumItemsAvailable was called on.") - } else { - // TODO(misha): Check whether this assertion will work before casting - numAvailable = int(itemsAvailable.(float64)) - } - return -} - -func (m UnstructuredSdkListResponse) NumItemsContained() (numContained int, err error) { - if value, ok := m["items"]; ok { - // TODO(misha): check whether this assertion will work before casting - numContained = len(value.([]interface{})) - } else { - err = errors.New(`Could not find "items" field in ` + - "UnstructuredSdkListResponse that NumItemsContained was called on.") - } - return -} - -func UserIsAdmin(arv arvadosclient.ArvadosClient) (is_admin bool, err error) { +func UserIsAdmin(arv *arvadosclient.ArvadosClient) (is_admin bool, err error) { type user struct { IsAdmin bool `json:"is_admin"` } @@ -46,38 +15,20 @@ func UserIsAdmin(arv arvadosclient.ArvadosClient) (is_admin bool, err error) { return u.IsAdmin, err } -// TODO(misha): Consider returning an error here instead of fatal'ing -func ContainsAllAvailableItems(response SdkListResponse) (containsAll bool, numContained int, numAvailable int) { - var err error - numContained, err = response.NumItemsContained() - if err != nil { - log.Fatalf("Error retrieving number of items contained in SDK response: %v", - err) - } - numAvailable, err = response.NumItemsAvailable() - if err != nil { - log.Fatalf("Error retrieving number of items available from "+ - "SDK response: %v", - err) +// Returns the total count of a particular type of resource +// +// resource - the arvados resource to count +// return +// count - the number of items of type resource the api server reports, if no error +// err - error accessing the resource, or nil if no error +func NumberItemsAvailable(client *arvadosclient.ArvadosClient, resource string) (count int, err error) { + var response struct { + ItemsAvailable int `json:"items_available"` } - containsAll = numContained == numAvailable - return -} - -func IterateSdkListItems(response map[string]interface{}) (c <-chan map[string]interface{}, err error) { - if value, ok := response["items"]; ok { - ch := make(chan map[string]interface{}) - c = ch - items := value.([]interface{}) - go func() { - for _, item := range items { - ch <- item.(map[string]interface{}) - } - close(ch) - }() - } else { - err = errors.New("Could not find \"items\" field in response " + - "passed to IterateSdkListItems()") + sdkParams := arvadosclient.Dict{"limit": 0} + err = client.List(resource, sdkParams, &response) + if err == nil { + count = response.ItemsAvailable } return }