Index: go/src/infra/gae/libs/wrapper/gae/context.go |
diff --git a/go/src/infra/gae/libs/wrapper/gae/context.go b/go/src/infra/gae/libs/wrapper/gae/context.go |
index be90906df6140acbb26abb6baaeeed7a9b98028c..2bf13f2a14e089975dcb869db606b475307f7baa 100644 |
--- a/go/src/infra/gae/libs/wrapper/gae/context.go |
+++ b/go/src/infra/gae/libs/wrapper/gae/context.go |
@@ -5,6 +5,7 @@ |
package gae |
import ( |
+ "errors" |
"golang.org/x/net/context" |
"appengine" |
@@ -12,15 +13,25 @@ import ( |
"github.com/mjibson/goon" |
) |
-// Enable adds the appengine Context to c. |
-func Enable(c context.Context, gaeCtx appengine.Context) context.Context { |
- return context.WithValue(c, goonContextKey, goon.FromContext(gaeCtx)) |
-} |
- |
-// Use calls ALL of this packages Use* methods on c. This enables all |
-// gae/wrapper Get* api's. |
-func Use(c context.Context) context.Context { |
- return UseDS(UseMC(UseTQ(UseGI(c)))) |
+// Use adds implementations for the following gae/wrapper interfaces to the |
+// context: |
+// * wrapper.Datastore |
+// * wrapper.TaskQueue |
+// * wrapper.Memcache |
+// * wrapper.GlobalInfo |
+// |
+// These can be retrieved with the "gae/wrapper".Get functions. |
+// |
+// The implementations are all backed by the real "appengine" SDK functionality, |
+// and by "github.com/mjibson/goon". |
+// |
+// Using this more than once per context.Context will cause a panic. |
+func Use(c context.Context, gaeCtx appengine.Context) context.Context { |
+ if c.Value(goonContextKey) != nil { |
+ panic(errors.New("gae.Use: called twice on the same Context")) |
+ } |
+ c = context.WithValue(c, goonContextKey, goon.FromContext(gaeCtx)) |
+ return useDS(useMC(useTQ(useGI(c)))) |
} |
type key int |