bfs

package module
v0.2.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2018 License: Apache-2.0 Imports: 12 Imported by: 0

README

BFS

GoDoc Build Status Go Report Card

Multi-adapter bucket-based file system abstraction.

Documentation

For documentation and examples, please see https://godoc.org/github.com/bsm/bfs.

Install

go get -u github.com/bsm/bfs

Basic Usage

package main

import (
	"fmt"

	"github.com/bsm/bfs"
)

func main() {
	ctx := context.Background()
	bucket := bfs.NewInMem()

	// Write object
	o1, err := bucket.Create(ctx, "nested/file.txt")
	if err != nil {
		panic(err)
	}
	defer o1.Close()

	if _, err := o1.Write([]byte("TESTDATA")); err != nil {
		panic(err)
	}
	if err := o1.Close(); err != nil {
		panic(err)
	}

	// Glob entries
	entries, err := bucket.Glob(ctx, "nested/**")
	if err != nil {
		panic(err)
	}
	fmt.Println("ENTRIES:", entries)

	// Read object
	o2, err := bucket.Open(ctx, "nested/file.txt")
	if err != nil {
		panic(err)
	}
	defer o2.Close()

	data, err := ioutil.ReadAll(o2)
	if err != nil {
		panic(err)
	}
	fmt.Println("DATA:", string(data))

	// Head object
	info, err := bucket.Head(ctx, "nested/file.txt")
	if err != nil {
		panic(err)
	}
	fmt.Printf("INFO: name=%q size=%d\n", info.Name, info.Size)

	// Delete object
	if err := bucket.Remove(ctx, "nested/file.txt"); err != nil {
		panic(err)
	}
}

Documentation

Overview

Package bfs outlines an abstraction for bucket-based fyle systems with mock-implmentations.

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrNotFound = errors.New("bfs: object not found")

ErrNotFound must be returned by all implementations when a requested object cannot be found.

Functions

func CopyObject

func CopyObject(bucket Bucket, ctx context.Context, src, dst string) error

CopyObject is a quick helper to copy objects within the same bucket.

func Register added in v0.2.3

func Register(scheme string, resv Resolver)

Register registers a new protocol with a scheme and a corresponding resolver. Example (from bfs/bfsfs):

bfs.Register("file", func(_ context.Context, u *url.URL) (bfs.Bucket, error) {
  return bfsfs.New(u.Path, "")
})

u, err := url.Parse("file:///home/user/Documents")
...
bucket, err := bfs.Resolve(context.TODO(), u)
...

func WriteObject

func WriteObject(bucket Bucket, ctx context.Context, name string, data []byte) error

WriteObject is a quick write helper.

Types

type Bucket

type Bucket interface {
	// Glob lists the files matching a glob pattern. It supports
	// `*`, `**`, `?` wildcards, character classes and alternative sequences.
	// Please see https://github.com/bmatcuk/doublestar#patterns for more details.
	Glob(ctx context.Context, pattern string) (Iterator, error)

	// Head returns an object's meta info.
	Head(ctx context.Context, name string) (*MetaInfo, error)

	// Open opens an object for reading.
	Open(ctx context.Context, name string) (io.ReadCloser, error)

	// Create creates/opens a object for writing.
	Create(ctx context.Context, name string) (io.WriteCloser, error)

	// Remove removes a object.
	Remove(ctx context.Context, name string) error

	// Close closes the bucket.
	Close() error
}

Bucket is an abstract storage bucket.

func Resolve added in v0.2.3

func Resolve(ctx context.Context, u *url.URL) (Bucket, error)

Resolve opens a bucket from a URL. Example (from bfs/bfsfs):

bfs.Register("file", func(_ context.Context, u *url.URL) (bfs.Bucket, error) {
  return bfsfs.New(u.Path, "")
})

u, err := url.Parse("file:///home/user/Documents")
...
bucket, err := bfs.Resolve(context.TODO(), u)
...

type InMem

type InMem struct {
	// contains filtered or unexported fields
}

InMem is an in-memory Bucket implementation which can be used for mocking.

Example
package main

import (
	"context"
	"fmt"
	"io/ioutil"

	"github.com/bsm/bfs"
)

func main() {
	ctx := context.Background()
	bucket := bfs.NewInMem()

	// Write object
	o1, err := bucket.Create(ctx, "nested/file.txt")
	if err != nil {
		panic(err)
	}
	defer o1.Close()

	if _, err := o1.Write([]byte("TESTDATA")); err != nil {
		panic(err)
	}
	if err := o1.Close(); err != nil {
		panic(err)
	}

	// Glob entries
	entries, err := bucket.Glob(ctx, "nested/**")
	if err != nil {
		panic(err)
	}
	fmt.Println("ENTRIES:", entries)

	// Read object
	o2, err := bucket.Open(ctx, "nested/file.txt")
	if err != nil {
		panic(err)
	}
	defer o2.Close()

	data, err := ioutil.ReadAll(o2)
	if err != nil {
		panic(err)
	}
	fmt.Println("DATA:", string(data))

	// Head object
	info, err := bucket.Head(ctx, "nested/file.txt")
	if err != nil {
		panic(err)
	}
	fmt.Printf("INFO: name=%q size=%d\n", info.Name, info.Size)

	// Delete object
	if err := bucket.Remove(ctx, "nested/file.txt"); err != nil {
		panic(err)
	}
}
Output:

func NewInMem

func NewInMem() *InMem

NewInMem returns an initialised Bucket.

func (*InMem) Close

func (*InMem) Close() error

Close implements Bucket.

func (*InMem) Create

func (b *InMem) Create(ctx context.Context, name string) (io.WriteCloser, error)

Create implements Bucket.

func (*InMem) Glob

func (b *InMem) Glob(_ context.Context, pattern string) (Iterator, error)

Glob implements Bucket.

func (*InMem) Head

func (b *InMem) Head(_ context.Context, name string) (*MetaInfo, error)

Head implements Bucket.

func (*InMem) ObjectSizes added in v0.2.1

func (b *InMem) ObjectSizes() map[string]int64

ObjectSizes return a map of object sizes by name

func (*InMem) Open

func (b *InMem) Open(_ context.Context, name string) (io.ReadCloser, error)

Open implements Bucket.

func (*InMem) Remove

func (b *InMem) Remove(_ context.Context, name string) error

Remove implements Bucket.

type Iterator added in v0.2.0

type Iterator interface {
	// Next advances the cursor to the next position.
	Next() bool
	// Name returns the name at the current cursor position.
	Name() string
	// Error returns the last iterator error, if any.
	Error() error
	// Close closes the iterator, should always be deferred.
	Close() error
}

Iterator iterates over objects

type MetaInfo

type MetaInfo struct {
	Name    string    // base name of the object
	Size    int64     // length of the content in bytes
	ModTime time.Time // modification time
}

MetaInfo contains meta information about an object.

type Object added in v0.2.9

type Object struct {
	// contains filtered or unexported fields
}

Object is a handle for a single file/object on a Bucket.

func NewInMemObject added in v0.2.11

func NewInMemObject(name string) *Object

NewInMemObject returns a new in-memory object.

func NewObject added in v0.2.9

func NewObject(ctx context.Context, fullURL string) (*Object, error)

NewObject inits a new object from an URL string

func (*Object) Close added in v0.2.9

func (o *Object) Close() error

Close closes the object.

func (*Object) Create added in v0.2.9

func (o *Object) Create(ctx context.Context) (io.WriteCloser, error)

Create creates/opens a object for writing.

func (*Object) Head added in v0.2.9

func (o *Object) Head(ctx context.Context) (*MetaInfo, error)

Head returns an object's meta info.

func (*Object) Open added in v0.2.9

func (o *Object) Open(ctx context.Context) (io.ReadCloser, error)

Open opens an object for reading.

func (*Object) Remove added in v0.2.9

func (o *Object) Remove(ctx context.Context) error

Remove removes a object.

type ObjectHandle added in v0.2.10

type ObjectHandle interface {
	// Head returns an object's meta info.
	Head(context.Context) (*MetaInfo, error)
	// Open opens an object for reading.
	Open(context.Context) (io.ReadCloser, error)
	// Create creates/opens a object for writing.
	Create(context.Context) (io.WriteCloser, error)
	// Remove removes a object.
	Remove(context.Context) error
	// Close closes the object.
	Close() error
}

ObjectHandle is an abstract object handle.

type Resolver added in v0.2.3

type Resolver func(context.Context, *url.URL) (Bucket, error)

Resolver constructs a bucket from a URL.

Directories

Path Synopsis
Package bfsfs abstracts local file system.
Package bfsfs abstracts local file system.
Package bfsgs abstracts Google Cloud Storage bucket.
Package bfsgs abstracts Google Cloud Storage bucket.
Package bfss3 abstracts Amazon S3 bucket.
Package bfss3 abstracts Amazon S3 bucket.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL