amclient

package
v0.30.2 Latest Latest
Warning

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

Go to latest
Published: Aug 13, 2020 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckResponse

func CheckResponse(r *http.Response) error

CheckResponse checks the API response for errors, and returns them if present. A response is considered an error if it has a status code outside the 200 range. API error responses are expected to have either no response body, or a JSON response body that maps to ErrorResponse. Any other response body will be silently ignored.

func WaitUntilStored

func WaitUntilStored(ctx context.Context, c *Client, transferID string) (SIPID string, err error)

WaitUntilStored blocks until the AIP generated after a transfer is confirmed to be stored. The implementation is based on TransferService.Status and JobsService.List.

The retry gives up as soon as one of the following events occur: * The caller cancels the context. * The total retry period exceeds maxWait.

TODO: we may want to give up earlier in case of specific errors, e.g. if TransferService.Status returns errors repeatedly?

Example
package main

import (
	"context"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/artefactual-labs/enduro/internal/amclient"
)

func main() {
	ctx := context.Background()
	client := amclient.NewClient(http.DefaultClient, "http://127.0.0.1:62080/api", "test", "test")

	// Start transfer.
	ctxTimeout, cancel := context.WithTimeout(ctx, time.Hour*2)
	defer cancel()
	payload, _, err := client.Package.Create(ctxTimeout, &amclient.PackageCreateRequest{
		Name:             "images",
		Type:             "standard",
		Path:             "/home/archivematica/archivematica-sampledata/SampleTransfers/Images",
		ProcessingConfig: "automated",
	})
	if err != nil {
		log.Fatal("Package.Create failed: ", err)
	}

	// Wait until the AIP is stored.
	SIPID, err := amclient.WaitUntilStored(ctx, client, payload.ID)
	if err != nil || SIPID == "" {
		log.Fatal("WaitUntilStored failed: ", err)
	}

	fmt.Printf("Transfer stored successfully! AIP %s", SIPID)
}
Output:

Types

type Client

type Client struct {

	// Base URL for API requests.
	BaseURL *url.URL

	// User agent for client
	UserAgent string

	// Authentication
	User string
	Key  string

	// Services used for communicating with the API
	Transfer         TransferService
	Ingest           IngestService
	ProcessingConfig ProcessingConfigService
	Package          PackageService
	Jobs             JobsService
	Task             TaskService
	// contains filtered or unexported fields
}

Client manages communication with Archivematica API.

func New

func New(httpClient *http.Client, bu, u, k string, opts ...ClientOpt) (*Client, error)

New returns a new Archivematica API client instance.

func NewClient

func NewClient(httpClient *http.Client, bu, u, k string) *Client

NewClient returns a new Archivematica API client.

func (*Client) Do

func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error)

Do sends an API request and returns the API response. The API response is JSON decoded and stored in the value pointed to by v, or returned as an error if an API error has occurred. If v implements the io.Writer interface, the raw response will be written to v, without attempting to decode it.

func (*Client) NewRequest

func (c *Client) NewRequest(ctx context.Context, method, urlStr string, body interface{}, opts ...RequestOpt) (*http.Request, error)

NewRequest creates an API request. A relative URL can be provided in urlStr, which will be resolved to the BaseURL of the Client. Relative URLS should always be specified without a preceding slash. If specified, the value pointed to by body is form encoded and included in as the request body.

func (*Client) NewRequestJSON

func (c *Client) NewRequestJSON(ctx context.Context, method, urlStr string, body interface{}, opts ...RequestOpt) (*http.Request, error)

NewRequestJSON is similar to NewRequest but encodes the value to JSON.

type ClientOpt

type ClientOpt func(*Client) error

ClientOpt are options for New.

func SetUserAgent

func SetUserAgent(ua string) ClientOpt

SetUserAgent is a client option for setting the user agent.

type ErrorResponse

type ErrorResponse struct {
	// HTTP response that caused this error
	Response *http.Response
}

An ErrorResponse reports the error caused by an API request

func (*ErrorResponse) Error

func (r *ErrorResponse) Error() string

type IngestHideResponse added in v0.2.0

type IngestHideResponse struct {
	Removed bool `json:"removed"`
}

type IngestService

type IngestService interface {
	Status(context.Context, string) (*IngestStatusResponse, *Response, error)
	Hide(context.Context, string) (*IngestHideResponse, *Response, error)
}

Ingest is an interface for interfacing with the Ingest endpoints of the Dashboard API.

type IngestServiceOp

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

IngestServiceOp handles communication with the Ingest related methods of the Archivematica API.

func (*IngestServiceOp) Hide added in v0.2.0

func (*IngestServiceOp) Status

type IngestStatusResponse

type IngestStatusResponse struct {
	ID           string `json:"uuid"`
	Status       string `json:"status"`
	Name         string `json:"name"`
	SIPID        string `json:"sip_uuid"`
	Microservice string `json:"microservice"`
	Directory    string `json:"directory"`
	Path         string `json:"path"`
	Message      string `json:"message"`
	Type         string `json:"type"`
}

type Job

type Job struct {
	ID           string    `json:"uuid"`
	Name         string    `json:"name"`
	Status       JobStatus `json:"status"`
	Microservice string    `json:"microservice"`
	LinkID       string    `json:"link_uuid"`
	Tasks        []Task    `json:"tasks"`
}

type JobStatus

type JobStatus int
const (
	JobStatusUnknown JobStatus = iota
	JobStatusUserInput
	JobStatusProcessing
	JobStatusComplete
	JobStatusFailed
)

func (JobStatus) MarshalJSON

func (s JobStatus) MarshalJSON() ([]byte, error)

MarshalJSON marshals the enum as a quoted json string

func (*JobStatus) UnmarshalJSON

func (s *JobStatus) UnmarshalJSON(b []byte) error

UnmarshalJSON unmashals a quoted json string to the enum value

type JobsListRequest

type JobsListRequest struct {
	Microservice string `json:"microservice,omitempty"`
	LinkID       string `json:"link_uuid,omitempty"`
	Name         string `json:"name,omitempty"`
}

type JobsService

type JobsService interface {
	List(context.Context, string, *JobsListRequest) ([]Job, *Response, error)
}

type JobsServiceOp

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

func (*JobsServiceOp) List

func (s *JobsServiceOp) List(ctx context.Context, ID string, r *JobsListRequest) ([]Job, *Response, error)

type PackageCreateRequest

type PackageCreateRequest struct {
	Name              string `json:"name"`
	Type              string `json:"type"`
	Path              string `json:"path"`
	AccessionSystemID string `json:"access_system_id,omitempty"`
	MetadataSetID     string `json:"metadata_set_id,omitempty"`
	ProcessingConfig  string `json:"processing_config,omitempty"`
	AutoApprove       *bool  `json:"auto_approve,omitempty"`
}

type PackageCreateResponse

type PackageCreateResponse struct {
	ID string `json:"id,omitempty"`
}

type PackageService

type PackageService interface {
	Create(context.Context, *PackageCreateRequest) (*PackageCreateResponse, *Response, error)
}

type PackageServiceOp

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

func (*PackageServiceOp) Create

type ProcessingConfig

type ProcessingConfig struct {
	bytes.Buffer
}

ProcessingConfig represents the processing configuration document returned by the Dashboard API.

type ProcessingConfigOp

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

ProcessingConfigOp handles communication with the Tranfer related methods of the Archivematica API.

func (*ProcessingConfigOp) Get

Get obtains a processing configuration given its name.

type ProcessingConfigService

type ProcessingConfigService interface {
	Get(context.Context, string) (*ProcessingConfig, *Response, error)
}

ProcessingConfigService is an interface for interfacing with the processing configuration endpoints of the Dashboard API.

type RequestOpt

type RequestOpt func(*http.Request)

RequestOpt is a function type used to alter requests.

func WithRequestAcceptXML

func WithRequestAcceptXML() RequestOpt

WithRequestAcceptXML sets the Accept header to "application/xml". This is needed when consuming endpoints that require this configuration.

type Response

type Response struct {
	*http.Response
}

Response is an Archivematica response. This wraps the standard http.Response returned from Archivematica.

type Task

type Task struct {
	ID       string `json:"uuid"`
	ExitCode uint8  `json:"exit_code"`
}

type TaskDateTime

type TaskDateTime struct {
	time.Time
}

func (*TaskDateTime) UnmarshalJSON

func (t *TaskDateTime) UnmarshalJSON(data []byte) error

type TaskDetailed

type TaskDetailed struct {
	ID          string       `json:"uuid"`
	ExitCode    uint8        `json:"exit_code"`
	FileID      string       `json:"file_uuid"`
	Filename    string       `json:"file_name"`
	TimeCreated TaskDateTime `json:"time_created"`
	TimeStarted TaskDateTime `json:"time_started"`
	TimeEnded   TaskDateTime `json:"time_ended"`
	Duration    uint32       `json:"duration"`
}

type TaskService

type TaskService interface {
	Read(context.Context, string) (*TaskDetailed, *Response, error)
}

type TaskServiceOp

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

func (*TaskServiceOp) Read

type TransferApproveRequest

type TransferApproveRequest struct {
	Type      string `schema:"type"`
	Directory string `schema:"directory"`
}

TransferApproveRequest represents a request to approve a transfer.

type TransferApproveResponse

type TransferApproveResponse struct {
	Message string `json:"message"`
	UUID    string `json:"uuid"`
}

TransferApproveResponse represents a response to TransferApproveRequest.

type TransferHideResponse added in v0.2.0

type TransferHideResponse struct {
	Removed bool `json:"removed"`
}

type TransferService

TransferService is an interface for interfacing with the Transfer endpoints of the Dashboard API.

type TransferServiceOp

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

TransferServiceOp handles communication with the Tranfer related methods of the Archivematica API.

func (*TransferServiceOp) Approve

Approve approves an existing transfer awaiting for approval.

func (*TransferServiceOp) Hide added in v0.2.0

func (*TransferServiceOp) Start

Start starts a new transfer.

func (*TransferServiceOp) Status

func (*TransferServiceOp) Unapproved

Unapproved lists existing transfers waiting for approval.

type TransferStartRequest

type TransferStartRequest struct {
	Name  string   `schema:"name"`
	Type  string   `schema:"type"`
	Paths []string `schema:"paths"`
}

TransferStartRequest represents a request to start a transfer.

type TransferStartResponse

type TransferStartResponse struct {
	Message string `schema:"message"`
	Path    string `schema:"path"`
}

TransferStartResponse represents a response to TransferStartRequest.

type TransferStatusResponse

type TransferStatusResponse struct {
	ID           string `json:"uuid"`
	Status       string `json:"status"`
	Name         string `json:"name"`
	SIPID        string `json:"sip_uuid"`
	Microservice string `json:"microservice"`
	Directory    string `json:"directory"`
	Path         string `json:"path"`
	Message      string `json:"message"`
	Type         string `json:"type"`
}

func (TransferStatusResponse) SIP

func (t TransferStatusResponse) SIP() (string, bool)

type TransferUnapprovedRequest

type TransferUnapprovedRequest struct{}

TransferUnapprovedRequest represents a request to list unapproved transfer.

type TransferUnapprovedResponse

type TransferUnapprovedResponse struct {
	Message string                              `json:"message"`
	Results []*TransferUnapprovedResponseResult `json:"results"`
}

TransferUnapprovedResponse represents a response to TransferUnapprovedRequest.

type TransferUnapprovedResponseResult

type TransferUnapprovedResponseResult struct {
	Type      string `json:"type"`
	Directory string `json:"directory"`
	UUID      string `json:"uuid"`
}

TransferUnapprovedResponseResult represents a result of TransferUnapprovedResponse.

Directories

Path Synopsis
Package fake is a generated GoMock package.
Package fake is a generated GoMock package.

Jump to

Keyboard shortcuts

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