remotefilez

package module
v0.0.0-...-f4ae35c Latest Latest
Warning

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

Go to latest
Published: Oct 17, 2023 License: MIT Imports: 14 Imported by: 0

README

remotefilez

Sensible defaults handles to various (local and Azure) file URLs as io.ReadSeekCloser and io.WriteCloser.

io.WriteSeekCloser is not supported at the moment.

This package is experimental. Do not use it for production workloads.

Below are some (limited) examples. Please handle errors, .Close() and timeouts properly.

Local file

var ro remotefilez.Opener

localfile, err := ro.OpenReader("file:///path/to/local/file.txt")
if err != nil { ... }

defer localfile.Close()
contents, err := ioutil.ReadAll(localfile)
if err != nil { ... }

Azure Blob Storage

var ro remotefilez.Opener

creds, err := azidentity.NewDefaultAzureCredentials(nil)
if err != nil { ... }
readTimeout := time.Second*1
ro = ro.WithAzure(creds, readTimeout)

storageAcc := "mystorageacct"
containerName := "mycontainer"
blobPath := "path/to/blob.txt"
blobURL := fmt.Sprintf(
    "abs://%v.blob.core.windows.net/%v/%v",
    storageAcc, containerName, blobPath,
)

bgCtx := context.Background()
ctx, cancel := context.WithTimeout(bgCtx, time.Second*10)
defer cancel()

// Upload ./somefile.txt to path/to/blob.txt
f, err := os.Open("somefile.txt")
if err != nil { ... }

azwrite, err := ro.OpenWriterCtx(blobURL, ctx)
if err != nil { ... }

// Copy
_, err = io.Copy(azwrite, f)
if err != nil { ... }
err = azwrite.Close() // IMPORTANT!
if err != nil { ... }

// Read blob contents
azread, err := ro.OpenReaderCtx(blobURL, ctx)
if err != nil { ... }

contents, err := ioutil.ReadAll(azread)
if err != nil { ... }
err = azread.Close()
if err != nil { ... }

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrRelativePath      = errors.New("relative path")
	ErrUnsupportedScheme = errors.New("unsupported scheme")
	ErrNotImplemented    = errors.New("not implemented")
)
View Source
var (
	ErrInvalidBlobURL = errors.New("invalid blob url")
)

Functions

func NewAzureBlobReader

func NewAzureBlobReader(
	ctx context.Context,
	blobURL string,
	creds azcore.TokenCredential,
	openTimeout time.Duration,
	doAcct bool,
) (*azReader, error)

func NewAzureBlobWriteCloser

func NewAzureBlobWriteCloser(
	blobURL string,
	creds azcore.TokenCredential,
	openTimeout time.Duration,
	ctx context.Context,
) (*azWriter, error)

NewAzureBlobWriteCloser returns an io.WriteCloser that can be used to write to an Azure Blob.

Types

type Opener

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

Opener provides a unified interface for resolving io.ReadSeekClosers from URLs.

func (*Opener) Open

func (ro *Opener) Open(fileURL string) (ReaderAtSeekCloser, error)

Open returns an io.ReadSeekCloser handle from the provided file URL.

Depecated: Use OpenReader instead.

func (*Opener) OpenCtx

func (ro *Opener) OpenCtx(ctx context.Context, fileURL string) (ReaderAtSeekCloser, error)

OpenCtx returns an io.ReadSeekCloser handle from the provided file URL. Errors if a resolver for the provided schema is not registered.

Depecated: Use OpenReaderCtx instead.

func (*Opener) OpenReader

func (ro *Opener) OpenReader(fileURL string) (ReaderAtSeekCloser, error)

OpenReader returns an io.ReadSeekCloser handle from the provided file URL.

func (*Opener) OpenReaderCtx

func (ro *Opener) OpenReaderCtx(ctx context.Context, fileURL string) (ReaderAtSeekCloser, error)

OpenReaderCtx returns an io.ReadSeekCloser handle from the provided file URL. Errors if a resolver for the provided schema is not registered.

func (*Opener) OpenWriter

func (ro *Opener) OpenWriter(fileURL string) (io.WriteCloser, error)

Open returns an io.ReadSeekCloser handle from the provided file URL.

func (*Opener) OpenWriterCtx

func (ro *Opener) OpenWriterCtx(ctx context.Context, fileURL string) (io.WriteCloser, error)

OpenCtx returns an io.ReadSeekCloser handle from the provided file URL. Errors if a resolver for the provided schema is not registered.

func (Opener) WithAzureResolver

func (ro Opener) WithAzureResolver(
	creds azcore.TokenCredential,
	timeout time.Duration,
	doAccounting bool,
) *Opener

WithAzureResolver returns a copy of the Opener with the provided Azure Resolver.

type ReaderAtSeekCloser

type ReaderAtSeekCloser interface {
	io.ReaderAt
	io.ReadSeekCloser
	Size() (int64, error)
}

Jump to

Keyboard shortcuts

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