gifs/api

Paddy 2014-10-17 Parent:08ec88016e2f Child:eb450538f079

5:b5d88d57d587 Go to Latest

gifs/api/context.go

Simplify upload. Simplify the upload code by not running the hashing async, which requires fewer copy operations and less channel synchronization. Also, take advantage of the fact that PipeWriters and PipeReaders will return an error to the PipeReaders/PipeWriters (respectively) when read/write is called (respectively) to avoid passing back errors through channels.

History
paddy@0 1 package api
paddy@0 2
paddy@0 3 import (
paddy@0 4 "code.google.com/p/goauth2/oauth/jwt"
paddy@0 5 "code.google.com/p/google-api-go-client/storage/v1beta2"
paddy@0 6 _ "github.com/go-sql-driver/mysql"
paddy@0 7 )
paddy@0 8
paddy@0 9 type Context struct {
paddy@0 10 Storage Storage
paddy@0 11 Datastore Datastore
paddy@0 12 UsageTracker *UsageTracker
paddy@0 13 Bucket string
paddy@0 14 RootDomain string
paddy@0 15 }
paddy@0 16
paddy@0 17 func NewMemStorage() Storage {
paddy@0 18 return Memstorage{}
paddy@0 19 }
paddy@0 20
paddy@0 21 func NewMemDatastore() Datastore {
paddy@0 22 return &Memstore{
paddy@0 23 collections: map[string]Collection{},
paddy@0 24 domains: map[string]Domain{},
paddy@0 25 items: map[string]Item{},
paddy@0 26 users: map[string]User{},
paddy@0 27 }
paddy@0 28 }
paddy@0 29
paddy@0 30 func NewGCSStorage(gcsClientEmail, gcsTokenURI string, gcsPemBytes []byte) (Storage, error) {
paddy@0 31 t := jwt.NewToken(gcsClientEmail, storage.DevstorageFull_controlScope, gcsPemBytes)
paddy@0 32 t.ClaimSet.Aud = gcsTokenURI
paddy@0 33 transport, err := jwt.NewTransport(t)
paddy@0 34 if err != nil {
paddy@0 35 return nil, err
paddy@0 36 }
paddy@0 37 client := transport.Client()
paddy@0 38 gcsService, err := storage.New(client)
paddy@0 39 if err != nil {
paddy@0 40 return nil, err
paddy@0 41 }
paddy@0 42 return &GoogleCloudStorage{gcsService}, nil
paddy@0 43 }