Merge branch '21891-output-copying-performance'
[arvados.git] / sdk / go / keepclient / collectionreader.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package keepclient
6
7 import (
8         "errors"
9         "os"
10
11         "git.arvados.org/arvados.git/sdk/go/arvados"
12 )
13
14 // ErrNoManifest indicates the given collection has no manifest
15 // information (e.g., manifest_text was excluded by a "select"
16 // parameter when retrieving the collection record).
17 var ErrNoManifest = errors.New("Collection has no manifest")
18
19 // CollectionFileReader returns a Reader that reads content from a single file
20 // in the collection. The filename must be relative to the root of the
21 // collection.  A leading prefix of "/" or "./" in the filename is ignored.
22 func (kc *KeepClient) CollectionFileReader(collection map[string]interface{}, filename string) (arvados.File, error) {
23         mText, ok := collection["manifest_text"].(string)
24         if !ok {
25                 return nil, ErrNoManifest
26         }
27         fs, err := (&arvados.Collection{ManifestText: mText}).FileSystem(nil, kc)
28         if err != nil {
29                 return nil, err
30         }
31         return fs.OpenFile(filename, os.O_RDONLY, 0)
32 }