本文整理汇总了Golang中appengine/datastore.Key类的典型用法代码示例。如果您正苦于以下问题:Golang Key类的具体用法?Golang Key怎么用?Golang Key使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Key类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: addIndexToZip
// addIndexToZip generates an index.html file for the given Overlay and adds
// it to the provided zip file.
func addIndexToZip(c appengine.Context, z *zip.Writer, oKey *datastore.Key, o *Overlay) error {
w, err := z.Create(fmt.Sprintf("%s/index.html", oKey.Encode()))
if err != nil {
return err
}
return zipTemplate.Execute(w, o)
}
示例2: redirectToBid
func redirectToBid(bidKey *datastore.Key, w http.ResponseWriter, r *http.Request) {
bidUrl, _ := url.Parse("/bid/" + bidKey.Encode())
bidUrl = r.URL.ResolveReference(bidUrl)
w.Header().Set("Location", bidUrl.RequestURI())
w.Header().Set("X-Bid-Key", bidKey.Encode())
w.WriteHeader(http.StatusSeeOther)
}
示例3: saveParagraph
func saveParagraph(w http.ResponseWriter, r *http.Request) {
if !checkUser(w, r) {
return
}
ctx := appengine.NewContext(r)
dec := json.NewDecoder(r.Body)
var p Paragraph
if err := dec.Decode(&p); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
var err error
var key *datastore.Key
keyString := r.FormValue("key")
if keyString != "" {
key, err = datastore.DecodeKey(keyString)
} else {
key = datastore.NewIncompleteKey(ctx, "Paragraph", nil)
}
if err == nil {
key, err = datastore.Put(ctx, key, &p)
}
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-type", "text/plain; charset=utf-8")
fmt.Fprintf(w, "%s", key.Encode())
}
示例4: getKeyString
func (g *gapDatabase) getKeyString(key *datastore.Key) string {
if tmp := key.IntID(); tmp != 0 {
return strconv.FormatInt(tmp, 10)
} else {
return key.StringID()
}
}
示例5: exists
// Valid only if k has no descendents of its own kind.
func exists(c appengine.Context, k *datastore.Key) (bool, error) {
count, err := datastore.NewQuery(k.Kind()).KeysOnly().Ancestor(k).Count(c)
if err != nil {
return false, err
}
return (count != 0), err
}
示例6: updateFeed
func updateFeed(c appengine.Context, cl *http.Client, fk *datastore.Key) error {
resp, err := cl.Get(fk.StringID())
if err != nil {
return err
}
defer resp.Body.Close()
decoder := xml.NewDecoder(resp.Body)
var rfeed RSS
err = datastore.Get(c, fk, &rfeed)
if err != nil {
return err
}
if rfeed.IsAtom {
var afeed Atom
err = decoder.Decode(&afeed)
if err != nil {
return err
}
return afeed.update(c, fk)
} else {
err = decoder.Decode(&rfeed)
if err != nil {
return err
}
return rfeed.update(c, fk)
}
panic("unreachable")
}
示例7: RetireTransaction
// Transactions in phase FINISHED will cause the price to be credited on the seller's
// account, and the fee to be deducted.
// All other phases will lead to price and fee being reimbursed to the buyer.
// Returns ErrTransactionTooYoung if the transaction has not passed its timout at the
// time of the call.
// Returns ErrTransactionAlreadyRetired if the transaction has already been retired at
// the time of the call.
func RetireTransaction(c appengine.Context, key *datastore.Key) error {
f := func(c appengine.Context) error {
now := time.Now()
dao := NewGaeAccountingDao(c, true)
var tx Transaction
if err := datastore.Get(c, key, txCodec{&tx}); err != nil {
return err
}
if err := tx.Retire(dao, key.Encode(), now); err == ErrTooYoung {
return ErrTransactionTooYoung
} else if err == ErrAlreadyRetired {
return ErrTransactionAlreadyRetired
} else if err != nil {
return err
}
if _, err := datastore.Put(c, key, txCodec{&tx}); err != nil {
return err
}
return dao.Flush()
}
return datastore.RunInTransaction(c, f, &datastore.TransactionOptions{XG: true})
}
示例8: SetSess
func SetSess(w http.ResponseWriter, c appengine.Context, key *datastore.Key, email string, name string) (string, *datastore.Key, error) {
now := time.Now().Add(time.Duration(GMTADJ) * time.Second)
h := md5.New()
io.WriteString(h, key.Encode())
io.WriteString(h, fmt.Sprintf("%s", now))
md5 := fmt.Sprintf("%x", h.Sum(nil))
ex := now.AddDate(0, 0, Expiracion)
s := Sess{
Md5: md5,
Id: key.Encode(),
User: email,
Name: name,
Expiration: ex,
}
cKey, err := datastore.Put(c, datastore.NewKey(c, "Sess", email, 0, nil), &s)
if err != nil {
return "", nil, err
}
// Se crean 2 cookies, una con el key de sesión otra con el número random llave
//csc := http.Cookie{ Name: "ebfmex-pub-sesscontrol-ua", Value: md5, Expires: ex, Path: "/" }
//http.SetCookie(w, &csc)
//csc = http.Cookie{ Name: "ebfmex-pub-sessid-ua", Value: cKey.Encode(), Expires: ex, Path: "/" }
//http.SetCookie(w, &csc)
//w.Header().Add("Set-Cookie", fmt.Sprintf("ebfmex-pub-sesscontrol-ua=%s; expires=%s; path=/;", md5, ex.Format("Mon Jan 2 15:04:05")))
w.Header().Add("Set-Cookie", fmt.Sprintf("ebfmex-pub-sesscontrol-ua=%v; expires=%v; path=/;", md5, ex.Format(time.ANSIC)))
//w.Header().Add("Set-Cookie", fmt.Sprintf("ebfmex-pub-sessid-ua=%s; expires=%s; path=/;", cKey.Encode(), ex.Format("Mon Jan 2 15:04:05")))
w.Header().Add("Set-Cookie", fmt.Sprintf("ebfmex-pub-sessid-ua=%v; expires=%v; path=/;", cKey.Encode(), ex.Format(time.ANSIC)))
return md5, cKey, err
}
示例9: Get
// Get given a *datastore.Key returns a single entity from the store
func Get(c appengine.Context, key *datastore.Key, dst interface{}) (err error) {
sc := getConfig(key.Kind())
needMemory := true
needMemcache := true
if sc.Memory {
err = memory.Get(c, key, dst)
if err == nil {
needMemory = false
goto Complete
}
}
if sc.Memcache {
err = memcache.Get(c, key, dst)
if err == nil {
needMemcache = false
goto Complete
}
}
if sc.Datastore {
err = dsds.Get(c, key, dst)
if err == nil {
goto Complete
}
}
return
Complete:
// Save the entity to any caches that it should be saved to.
if sc.Memcache && needMemcache {
_, _ = memcache.Put(c, key, dst)
}
if sc.Memory && needMemory {
_, _ = memory.Put(c, key, dst)
}
return
}
示例10: GetByKey
// Generic get by function
func GetByKey(m Model, key *datastore.Key) string {
if err := datastore.Get(c, key, m); err != nil {
session.AddFlash("An error occured while loading: " + err.Error())
return ""
}
return key.Encode()
}
示例11: SaveGeneralData
func (db *AppEngineDB) SaveGeneralData(d *GeneralData) error {
if d.UserID == "" {
return errors.New("model: invalid UserID")
}
var (
key *datastore.Key
err error
)
if d.Key == "" {
key = datastore.NewIncompleteKey(db.ctx, "GeneralData", nil)
} else {
key, err = datastore.DecodeKey(d.Key)
if err != nil {
return err
}
}
key, err = datastore.Put(db.ctx, key, d)
if err != nil {
return err
}
d.Key = key.Encode()
return nil
}
示例12: RetireBid
// This will reimburse the bid's price and fee to the buyer.
func RetireBid(c appengine.Context, key *datastore.Key) error {
f := func(c appengine.Context) error {
now := time.Now()
dao := NewGaeAccountingDao(c, true)
var bid Bid
if err := datastore.Get(c, key, bidCodec{&bid}); err != nil {
return err
}
if bid.State == Matched {
c.Infof("Not retiring matched bid %v", key)
return nil
}
if err := bid.Retire(dao, key.Encode(), now); err != nil {
return err
}
if _, err := datastore.Put(c, key, bidCodec{&bid}); err != nil {
return err
}
return dao.Flush()
}
if err := datastore.RunInTransaction(c, f, &datastore.TransactionOptions{XG: true}); err != nil {
return err
}
return nil
}
示例13: ajaxEncode
func ajaxEncode(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
c := appengine.NewContext(r)
var err error
kind := trimmedFormValue(r, "kind")
stringID := trimmedFormValue(r, "stringid")
intIDstr := trimmedFormValue(r, "intid")
appID := trimmedFormValue(r, "appid")
namespace := trimmedFormValue(r, "namespace")
// Parent (optional)
kind2 := trimmedFormValue(r, "kind2")
stringID2 := trimmedFormValue(r, "stringid2")
intIDstr2 := trimmedFormValue(r, "intid2")
// Grand-parent (optional)
kind3 := trimmedFormValue(r, "kind3")
stringID3 := trimmedFormValue(r, "stringid3")
intIDstr3 := trimmedFormValue(r, "intid3")
c.Infof("Encoding %v\n", []string{
appID, namespace,
kind, stringID, intIDstr,
kind2, stringID2, intIDstr2,
kind3, stringID3, intIDstr3,
})
var key, parent, grandparent *datastore.Key
if kind2 != "" {
if kind3 != "" {
grandparent, err = CreateKey(c, appID, namespace, kind3, stringID3, intID64(intIDstr3), nil)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
}
parent, err = CreateKey(c, appID, namespace, kind2, stringID2, intID64(intIDstr2), grandparent)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
}
key, err = CreateKey(c, appID, namespace, kind, stringID, intID64(intIDstr), parent)
if err != nil {
c.Errorf("Failed: %v\n", err.Error())
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
//fmt.Fprint(w, keyString)
w.Header().Set("Content-Type", "application/json")
keyString := key.Encode()
fmt.Fprint(w, Response{
"keystring": keyString,
})
c.Infof("Encoded %v\n", keyString)
}
示例14: SetDatastoreKey
// SetDatastoreKey sets the datastore Key and updates the records ID if needed.
// Advanced use only.
func (r *Record) SetDatastoreKey(key *datastore.Key) *Record {
if key == nil {
r.setID(NoIDValue)
r.datastoreKey = nil
} else {
// does the key have an ID?
if key.IntID() > 0 {
// set the ID
r.setID(key.IntID())
}
// set the key
r.datastoreKey = key
}
// chain
return r
}
示例15: cacheSetFeed
func cacheSetFeed(c appengine.Context, k *datastore.Key, f FeedInfo) error {
id := k.StringID()
if len(id) > mcacheKeyMax { // silently don't set the value
c.Infof("Not caching feed with a big key: %s", id)
return nil
}
return memcache.Gob.Set(c, &memcache.Item{Key: k.StringID(), Object: f})
}