| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 package wrapper | 
|  | 6 | 
|  | 7 import ( | 
|  | 8         "time" | 
|  | 9 | 
|  | 10         "appengine" | 
|  | 11 | 
|  | 12         "golang.org/x/net/context" | 
|  | 13 ) | 
|  | 14 | 
|  | 15 // GlobalInfo is the interface for all of the package methods which normally | 
|  | 16 // would be in the 'appengine' package. | 
|  | 17 type GlobalInfo interface { | 
|  | 18         // methods usually requiring a Context | 
|  | 19 | 
|  | 20         AccessToken(scopes ...string) (token string, expiry time.Time, err error
    ) | 
|  | 21         AppID() string | 
|  | 22         DefaultVersionHostname() string | 
|  | 23         ModuleHostname(module, version, instance string) (string, error) | 
|  | 24         ModuleName() string | 
|  | 25         PublicCertificates() ([]appengine.Certificate, error) | 
|  | 26         RequestID() string | 
|  | 27         ServiceAccount() (string, error) | 
|  | 28         SignBytes(bytes []byte) (keyName string, signature []byte, err error) | 
|  | 29         VersionID() string | 
|  | 30 | 
|  | 31         // our tweaked interface | 
|  | 32 | 
|  | 33         // Namespace takes the new namespace as a string, and returns a context | 
|  | 34         // set to use that namespace, or an error. | 
|  | 35         // The appengine SDK doesn't document what errors you can see from this | 
|  | 36         // method, or under what circumstances they might occur. | 
|  | 37         Namespace(namespace string) (context.Context, error) | 
|  | 38 | 
|  | 39         // Really global functions... these don't normally even require context,
     but | 
|  | 40         // for the purposes of testing+consistency, they're included here. | 
|  | 41 | 
|  | 42         Datacenter() string | 
|  | 43         InstanceID() string | 
|  | 44         IsDevAppserver() bool | 
|  | 45         ServerSoftware() string | 
|  | 46 | 
|  | 47         IsCapabilityDisabled(err error) bool | 
|  | 48         IsOverQuota(err error) bool | 
|  | 49         IsTimeoutError(err error) bool | 
|  | 50 | 
|  | 51         // Backends are deprecated in favor of modules, so simplify this a bit b
    y | 
|  | 52         // omitting them from the interface. | 
|  | 53         // BackendHostname(name string, index int) string | 
|  | 54         // BackendInstance() (name string, index int) | 
|  | 55 } | 
|  | 56 | 
|  | 57 // GIFactory is the function signature for factory methods compatible with | 
|  | 58 // SetGIFactory. | 
|  | 59 type GIFactory func(context.Context) GlobalInfo | 
|  | 60 | 
|  | 61 // GetGI gets gets the GlobalInfo implementation from context. | 
|  | 62 func GetGI(c context.Context) GlobalInfo { | 
|  | 63         if f, ok := c.Value(globalInfoKey).(GIFactory); ok && f != nil { | 
|  | 64                 return f(c) | 
|  | 65         } | 
|  | 66         return nil | 
|  | 67 } | 
|  | 68 | 
|  | 69 // SetGIFactory sets the function to produce GlobalInfo instances, as returned | 
|  | 70 // by the GetGI method. | 
|  | 71 func SetGIFactory(c context.Context, gif GIFactory) context.Context { | 
|  | 72         return context.WithValue(c, globalInfoKey, gif) | 
|  | 73 } | 
|  | 74 | 
|  | 75 // SetGI sets the current GlobalInfo object in the context. Useful for testing | 
|  | 76 // with a quick mock. This is just a shorthand SetGIFactory invocation to set | 
|  | 77 // a factory which always returns the same object. | 
|  | 78 func SetGI(c context.Context, gi GlobalInfo) context.Context { | 
|  | 79         return SetGIFactory(c, func(context.Context) GlobalInfo { return gi }) | 
|  | 80 } | 
| OLD | NEW | 
|---|