| Index: go/src/infra/gae/libs/gae/doc.go
|
| diff --git a/go/src/infra/gae/libs/gae/doc.go b/go/src/infra/gae/libs/gae/doc.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a42695bac5e402f1eeecd60667eb74c1051b4423
|
| --- /dev/null
|
| +++ b/go/src/infra/gae/libs/gae/doc.go
|
| @@ -0,0 +1,62 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Package gae provides a fakable wrapped interface for the appengine SDK's
|
| +// APIs. This means that it's possible to mock all of the supported appengine
|
| +// APIs for testing (or potentially implement a different backend for them).
|
| +//
|
| +// gae currently provides interfaces for:
|
| +// * Datastore
|
| +// * Memcache
|
| +// * TaskQueue
|
| +// * GlobalInfo (e.g. Namespace, AppID, etc.)
|
| +//
|
| +// A package which implements the gae is expected to provide the following:
|
| +// * A package function `Enable(c context.Context, ...) context.Context`
|
| +// This function is expected to add any information to c which is necessary
|
| +// for the rest of its implementations to work. This may be something like
|
| +// an `appengine.Context` or some connection information for an external
|
| +// server. The `...` in the function signature may be any additional data
|
| +// needed.
|
| +// * Any of the package functions:
|
| +//
|
| +// UseDS(context.Context) context.Context
|
| +// UseMC(context.Context) context.Context
|
| +// UseTQ(context.Context) context.Context
|
| +// UseGI(context.Context) context.Context
|
| +//
|
| +// each of which would call gae.Set<service>Factory with the factory
|
| +// function for that interface type.
|
| +// * A `Use(context.Context) context.Context` function which calls all of the
|
| +// `Use*` package functions implemented by the package.
|
| +// * Partially-implemented interfaces should embed one of the Dummy* structs
|
| +// which will panic with an appropriate error for unimplemented
|
| +// methods.
|
| +//
|
| +// see "infra/gae/libs/gae/oldsdk" for an appengine-backed implementation.
|
| +//
|
| +// Datastore struct serialization uses the tag name 'gae' instead of 'datastore',
|
| +// and uses gae.DSKey but otherwise behaves identically. You must use the
|
| +// new-SDK primitive types (like GeoPoint, ByteString, etc.), even when using
|
| +// the old-SDK implementation of the factories. This was done to ensure that all
|
| +// code written against gae is go-gettable, and was deemed as less-annoying than
|
| +// re-defining all of the types identically.
|
| +//
|
| +// Kinds/Keys work similarly to how they work in goon (except you no longer use
|
| +// the goon + datastore tags and key/control-related tags start with $):
|
| +//
|
| +// type FooModel struct {
|
| +// _kind string `gae:"$kind,Foo"`
|
| +// Id string `gae:"$id"`
|
| +// Parent DSKey `gae:"$parent"`
|
| +//
|
| +// privateSkipped bool
|
| +// AutoSave int
|
| +// NoSaveField string `gae:"-"`
|
| +// NoIndexField float `gae:",noindex"`
|
| +// DiffName string `gae:"coolName"`
|
| +// }
|
| +//
|
| +// func (FooModel) GetCachePolicy() DSCacheFlags { return DSCache }
|
| +package gae
|
|
|