Chromium Code Reviews| Index: go/src/infra/gae/libs/wrapper/globalinfo.go |
| diff --git a/go/src/infra/gae/libs/wrapper/globalinfo.go b/go/src/infra/gae/libs/wrapper/globalinfo.go |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..382b76ec2bc1ea99d55742f4c9c90f9fdb295d8b |
| --- /dev/null |
| +++ b/go/src/infra/gae/libs/wrapper/globalinfo.go |
| @@ -0,0 +1,77 @@ |
| +// 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 wrapper |
| + |
| +import ( |
| + "time" |
| + |
| + "appengine" |
| + |
| + "golang.org/x/net/context" |
| +) |
| + |
| +// GlobalInfo is the interface for all of the package methods which normally |
| +// would be in the 'appengine' package. |
| +type GlobalInfo interface { |
| + // methods usually requiring a Context |
| + |
| + AccessToken(scopes ...string) (token string, expiry time.Time, err error) |
| + AppID() string |
| + DefaultVersionHostname() string |
| + ModuleHostname(module, version, instance string) (string, error) |
| + ModuleName() string |
| + PublicCertificates() ([]appengine.Certificate, error) |
| + RequestID() string |
| + ServiceAccount() (string, error) |
| + SignBytes(bytes []byte) (keyName string, signature []byte, err error) |
| + VersionID() string |
| + |
| + // our tweaked interface |
| + |
| + Namespace(namespace string) (context.Context, error) |
|
Vadim Sh.
2015/05/24 19:01:57
document
iannucci
2015/05/24 20:04:31
Done (as much as we can)
|
| + |
| + // Really global functions... these don't normally even require context, but |
| + // for the purposes of testing+consistency, they're included here. |
| + |
| + Datacenter() string |
| + InstanceID() string |
| + IsDevAppserver() bool |
| + ServerSoftware() string |
| + |
| + IsCapabilityDisabled(err error) bool |
| + IsOverQuota(err error) bool |
| + IsTimeoutError(err error) bool |
| + |
| + // Backends are deprecated in favor of modules, so simplify this a bit by |
| + // omitting them from the interface. |
| + // BackendHostname(name string, index int) string |
| + // BackendInstance() (name string, index int) |
| +} |
| + |
| +// GIFactory is the function signature for factory methods compatible with |
| +// SetGIFactory. |
| +type GIFactory func(context.Context) GlobalInfo |
| + |
| +// GetGI gets gets the GlobalInfo implementation from context. |
| +func GetGI(c context.Context) GlobalInfo { |
| + obj := c.Value(globalInfoKey) |
| + if obj == nil || obj.(GIFactory) == nil { |
| + return nil |
| + } |
| + return obj.(GIFactory)(c) |
| +} |
| + |
| +// SetGIFactory sets the function to produce GlobalInfo instances, as returned by |
| +// the GetGI method. |
| +func SetGIFactory(c context.Context, gif GIFactory) context.Context { |
| + return context.WithValue(c, globalInfoKey, gif) |
| +} |
| + |
| +// SetGI sets the current GlobalInfo object in the context. Useful for testing |
| +// with a quick mock. This is just a shorthand SetGIFactory invocation to set |
| +// a factory which always returns the same object. |
| +func SetGI(c context.Context, gi GlobalInfo) context.Context { |
| + return SetGIFactory(c, func(context.Context) GlobalInfo { return gi }) |
| +} |