本文整理汇总了Golang中appengine/datastore.NewKey函数的典型用法代码示例。如果您正苦于以下问题:Golang NewKey函数的具体用法?Golang NewKey怎么用?Golang NewKey使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewKey函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Save
//save article and save tags transaction
func (this *ArticleMetaData) Save(ctx Context) (err error) {
c := ctx.GAEContext
uuid, err := GenUUID()
if err != nil {
return err
}
this.Id = uuid
k := datastore.NewKey(c, "Article", uuid, 0, nil)
err = datastore.RunInTransaction(c, func(c appengine.Context) error {
if len(this.Tags) > 0 {
tags := make([]Tags, len(this.Tags))
tagsKey := make([]*datastore.Key, len(this.Tags))
for id, tag := range this.Tags {
tags[id].ArticleId = uuid
tags[id].Tag = tag
tagId := uuid + tag
tagsKey[id] = datastore.NewKey(c, "Tags", tagId, 0, nil)
}
_, err = datastore.PutMulti(c, tagsKey, tags)
if err != nil {
return err
}
}
_, err = datastore.Put(c, k, this)
return err
}, &datastore.TransactionOptions{XG: true})
return err
}
示例2: showFeed
func showFeed(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
url, err := url.QueryUnescape(r.URL.RawQuery)
if err != nil {
handleError(w, err)
return
}
feedRoot := datastore.NewKey(c, "feedRoot", "feedRoot", 0, nil)
fk := datastore.NewKey(c, "feed", url, 0, feedRoot)
f := new(RSS)
err = datastore.Get(c, fk, f)
if err != nil {
handleError(w, err)
return
}
_, err = datastore.NewQuery("item").Ancestor(fk).Order("-PubDate").GetAll(c, &f.Items)
if err != nil {
handleError(w, err)
return
}
templ, err := template.New("showFeed").Parse(feedPageRaw)
if err != nil {
handleError(w, err)
return
}
err = templ.Execute(w, f)
if err != nil {
handleError(w, err)
return
}
}
示例3: EnumerateBlobs
func (sto *appengineStorage) EnumerateBlobs(ctx context.Context, dest chan<- blob.SizedRef, after string, limit int) error {
defer close(dest)
loan := ctxPool.Get()
defer loan.Return()
actx := loan
prefix := sto.namespace + "|"
keyBegin := datastore.NewKey(actx, memKind, prefix+after, 0, nil)
keyEnd := datastore.NewKey(actx, memKind, sto.namespace+"~", 0, nil)
q := datastore.NewQuery(memKind).Limit(int(limit)).Filter("__key__>", keyBegin).Filter("__key__<", keyEnd)
it := q.Run(actx)
var row memEnt
for {
key, err := it.Next(&row)
if err == datastore.Done {
break
}
if err != nil {
return err
}
select {
case dest <- blob.SizedRef{blob.ParseOrZero(key.StringID()[len(prefix):]), uint32(row.Size)}:
case <-ctx.Done():
return ctx.Err()
}
}
return nil
}
示例4: newGrid
func newGrid(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
title := r.FormValue("title")
rows := strings.Split(r.FormValue("rows"), "\n")
cols := strings.Split(r.FormValue("cols"), "\n")
key := newKey()
k := datastore.NewKey(c, "grid", key, 0, nil)
g := new(Grid)
g.Id = key
g.Title = title
_, err := datastore.Put(c, k, g)
if err != nil {
c.Errorf("error adding grid: %v", err)
}
for i, r := range rows {
rkey := datastore.NewKey(c, "row", newKey(), 0, nil)
row := new(Row)
row.Grid = k
row.Label = strings.TrimSpace(r)
row.DisplayOrder = i
_, err := datastore.Put(c, rkey, row)
c.Errorf("added row %v", err)
}
for i, co := range cols {
ckey := datastore.NewKey(c, "col", newKey(), 0, nil)
col := new(Col)
col.Grid = k
col.Label = strings.TrimSpace(co)
col.DisplayOrder = i
_, err := datastore.Put(c, ckey, col)
c.Errorf("added col %v", err)
}
http.Redirect(w, r, "/grid/"+key, http.StatusFound)
}
示例5: read
func read(c appengine.Context, name string) (fi *FileInfo, data []byte, err error) {
name, _, _ = mangle(c, name)
fi1, err := stat(c, name)
if err != nil {
return nil, nil, err
}
if fi1.IsDir {
dt, err := readdir(c, name)
if err != nil {
return nil, nil, err
}
fi = fi1
data = dt
return fi, data, nil
}
root := datastore.NewKey(c, "RootKey", "v2:", 0, nil)
dkey := datastore.NewKey(c, "FileData", "", fi1.Qid, root)
var fd FileData
c.Infof("DATASTORE Read %q", name)
if err := datastore.Get(c, dkey, &fd); err != nil {
return nil, nil, err
}
fi = fi1
data = fd.Data
return fi, data, nil
}
示例6: Key
func (cfg *Config) Key(c appengine.Context, parent *datastore.Key) *datastore.Key {
if parent == nil {
u := user.Current(c)
parent = datastore.NewKey(c, userTabName, u.String(), 0, nil)
}
return datastore.NewKey(c, configTableName, cfg.Name, 0, parent)
}
示例7: EnumerateBlobs
func (sto *appengineStorage) EnumerateBlobs(dest chan<- blob.SizedRef, after string, limit int, wait time.Duration) error {
defer close(dest)
ctx := sto.ctx
if ctx == nil {
loan := ctxPool.Get()
defer loan.Return()
ctx = loan
}
prefix := sto.namespace + "|"
keyBegin := datastore.NewKey(ctx, memKind, prefix+after, 0, nil)
keyEnd := datastore.NewKey(ctx, memKind, sto.namespace+"~", 0, nil)
q := datastore.NewQuery(memKind).Limit(int(limit)).Filter("__key__>", keyBegin).Filter("__key__<", keyEnd)
it := q.Run(ctx)
var row memEnt
for {
key, err := it.Next(&row)
if err == datastore.Done {
break
}
if err != nil {
return err
}
dest <- blob.SizedRef{blob.ParseOrZero(key.StringID()[len(prefix):]), row.Size}
}
return nil
}
示例8: TouchSuc
func TouchSuc(c appengine.Context, IdSuc string, IdEmp string) error {
/* llave de Cta-Empresa */
ce := &CtaEmpresa{IdEmp: IdEmp}
ceKey := datastore.NewKey(c, "CtaEmpresa", ce.IdEmp, 0, nil)
err := datastore.Get(c, ceKey, ce)
if err == datastore.ErrNoSuchEntity {
return nil
}
/* parent de Empresa */
cta := &Cta{Email: ce.Email}
ctaKey := datastore.NewKey(c, "Cta", cta.Email, 0, nil)
err = datastore.Get(c, ctaKey, cta)
if err == datastore.ErrNoSuchEntity {
return nil
}
/* Key de empresa */
empKey := datastore.NewKey(c, "Empresa", IdEmp, 0, ctaKey)
suc := &Sucursal{IdSuc: IdSuc}
sucKey := datastore.NewKey(c, "Sucursal", IdSuc, 0, empKey)
err = datastore.Get(c, sucKey, suc)
if err == datastore.ErrNoSuchEntity {
return err
}
suc.FechaHora = time.Now().Add(time.Duration(GMTADJ) * time.Second)
if _, err = datastore.Put(c, sucKey, suc); err != nil {
return err
}
return nil
}
示例9: Increment
// Increment increments the named counter.
func Increment(c appengine.Context, name string) error {
// Get counter config.
var cfg counterConfig
ckey := datastore.NewKey(c, configKind, name, 0, nil)
err := datastore.RunInTransaction(c, func(c appengine.Context) error {
err := datastore.Get(c, ckey, &cfg)
if err == datastore.ErrNoSuchEntity {
cfg.Shards = defaultShards
_, err = datastore.Put(c, ckey, &cfg)
}
return err
}, nil)
if err != nil {
return err
}
err = datastore.RunInTransaction(c, func(c appengine.Context) error {
shardName := fmt.Sprintf("%v%d", name, rand.Intn(cfg.Shards))
key := datastore.NewKey(c, shardKind, shardName, 0, nil)
var s shard
err := datastore.Get(c, key, &s)
// A missing entity and a present entity will both work.
if err != nil && err != datastore.ErrNoSuchEntity {
return err
}
s.Count++
s.Name = name
_, err = datastore.Put(c, key, &s)
return err
}, nil)
if err != nil {
return err
}
//memcache.Increment(c, memcacheKey(name), 1, 0)
return nil
}
示例10: GetEmpresa
// Métodos de Empresa
func GetEmpresa(c appengine.Context, id string) *Empresa {
/* llave de Cta-Empresa */
ce := &CtaEmpresa{IdEmp: id}
ceKey := datastore.NewKey(c, "CtaEmpresa", ce.IdEmp, 0, nil)
err := datastore.Get(c, ceKey, ce)
if err == datastore.ErrNoSuchEntity {
return nil
}
/* parent de Empresa */
cta := &Cta{Email: ce.Email}
ctaKey := datastore.NewKey(c, "Cta", cta.Email, 0, nil)
err = datastore.Get(c, ctaKey, cta)
if err == datastore.ErrNoSuchEntity {
return nil
}
/* Key de empresa */
emp := &Empresa{IdEmp: id}
empKey := datastore.NewKey(c, "Empresa", emp.IdEmp, 0, ctaKey)
err = datastore.Get(c, empKey, emp)
if err == datastore.ErrNoSuchEntity {
return nil
}
return emp
}
示例11: GetEmpSucursales
func GetEmpSucursales(c appengine.Context, IdEmp string) *[]Sucursal {
/* llave de Cta-Empresa */
ce := &CtaEmpresa{IdEmp: IdEmp}
ceKey := datastore.NewKey(c, "CtaEmpresa", ce.IdEmp, 0, nil)
err := datastore.Get(c, ceKey, ce)
if err == datastore.ErrNoSuchEntity {
return nil
}
/* parent de Empresa */
cta := &Cta{Email: ce.Email}
ctaKey := datastore.NewKey(c, "Cta", cta.Email, 0, nil)
err = datastore.Get(c, ctaKey, cta)
if err == datastore.ErrNoSuchEntity {
return nil
}
/* Key de empresa */
empKey := datastore.NewKey(c, "Empresa", IdEmp, 0, ctaKey)
q := datastore.NewQuery("Sucursal").Ancestor(empKey)
n, _ := q.Count(c)
sucursales := make([]Sucursal, 0, n)
if _, err := q.GetAll(c, &sucursales); err != nil {
return nil
}
return &sucursales
}
示例12: registration
func registration(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
u := User{
Name: "TestHendrik",
StartDate: datastore.SecondsToTime(time.Seconds()),
}
if g := user.Current(c); g != nil {
var u2 User
u.Account = g.String()
if err := datastore.Get(c, datastore.NewKey("user", g.String(), 0, nil), &u2); err == datastore.ErrNoSuchEntity {
key, err := datastore.Put(c, datastore.NewKey("user", u.Account, 0, nil), &u)
if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError)
return
}
fmt.Fprintf(w, "User %q stored %q", u.Account, key)
return
} else {
fmt.Fprintf(w, "User %q is already logged in", g.String())
return
}
} else {
url, err := user.LoginURL(c, r.URL.String())
if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError)
return
}
w.Header().Set("Location", url)
w.WriteHeader(http.StatusFound)
return
}
}
示例13: memberKey
// chat部屋にいるメンバリストに相当するAncestorKeyを返す
func memberKey(c appengine.Context, key string) *datastore.Key {
if key == "" {
return datastore.NewKey(c, "Member", "default_member", 0, nil)
} else {
return datastore.NewKey(c, "Member", key, 0, nil)
}
}
示例14: Delete
func (this *ArticleMetaData) Delete(ctx Context) (err error) {
c := ctx.GAEContext
k := datastore.NewKey(c, "Article", this.Id, 0, nil)
err = datastore.RunInTransaction(c, func(c appengine.Context) error {
err = datastore.Get(c, k, this)
if err != nil {
return err
}
if len(this.Tags) > 0 {
tags := make([]Tags, len(this.Tags))
tagsKey := make([]*datastore.Key, len(this.Tags))
for id, tag := range this.Tags {
tags[id].ArticleId = this.Id
tags[id].Tag = tag
tagId := this.Id + tag
tagsKey[id] = datastore.NewKey(c, "Tags", tagId, 0, nil)
}
err = datastore.DeleteMulti(c, tagsKey)
if err != nil {
return err
}
}
err = datastore.Delete(c, k)
return err
}, &datastore.TransactionOptions{XG: true})
return err
}
示例15: StorePosts
func (d *DatastoreStorage) StorePosts(req *http.Request, posts []blogplus.Activity) {
c := appengine.NewContext(req)
var keys []*datastore.Key
var src []interface{}
for _, post := range posts {
if d.filter != nil && !d.filter(post) {
c.Debugf("ignore post:%s", post.Id)
continue
}
datespec := blogplus.GetDatespec(post.Published)
data, err := blogplus.EncodeActivity(post)
if err != nil {
c.Errorf("encode error:%#v", err)
continue
}
c.Infof("store %s datespec %s", post.Id, datespec)
datekey := datastore.NewKey(c, activityRef, post.Id, 0, datastore.NewKey(c, datespecKind, datespec, 0, nil))
key := datastore.NewKey(c, activityKind, post.Id, 0, nil)
keys = append(keys, datekey)
src = append(src, &DatespecEntity{Id: key})
keys = append(keys, key)
src = append(src, &ActivityEntity{
Id: post.Id,
Published: post.Published,
Post: data})
}
_, err := datastore.PutMulti(c, keys, src)
if err != nil {
c.Errorf("put error:%#v", err)
}
}