作者:wendye
项目:iweb-ga
//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
}
作者:helloy
项目:simplect
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
}
}
作者:rfistma
项目:camlistor
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
}
作者:thraxi
项目:gridd
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)
}
作者:0x7c
项目:rs
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
}
作者:kpawli
项目:webchecke
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)
}
作者:JayBlaze42
项目:camlistor
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
}
作者:clicker36
项目:ebfmex-pu
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
}
作者:clicker36
项目:ebfmex-pu
// 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
}
作者:clicker36
项目:ebfmex-pu
// 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
}
作者:clicker36
项目:ebfmex-pu
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
}
作者:hendrikdemolde
项目:financialovervie
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
}
}
作者:keyang
项目:tinycha
// 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)
}
}
作者:wendye
项目:iweb-ga
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
}
作者:uka
项目:blogplus-ga
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)
}
}
作者:helloy
项目:simplect
func addAtom(c appengine.Context, url string) error {
feedRoot := datastore.NewKey(c, "feedRoot", "feedRoot", 0, nil)
fk := datastore.NewKey(c, "feed", url, 0, feedRoot)
err := datastore.RunInTransaction(c, func(c appengine.Context) error {
done, err := exists(c, fk)
if err != nil {
return err
}
if !done {
f, err := fetchAtom(c, url)
if err != nil {
return err
}
_, err = datastore.Put(c, fk, f)
if err != nil {
return err
}
err = f.update(c, fk)
if err != nil {
return err
}
return nil
}
return nil
}, nil)
if err != nil {
return err
}
return subscribe(c, fk, true)
}
作者:nrab
项目:t8_restapi_g
/*
This call deletes and creates unit-testing data.
*/
func (h *System) CreateTestData(r *http.Request, args *SystemArgs, reply *GeneralReply) error {
c := appengine.NewContext(r)
var err error
// delete any previous testing data
{
var keys_to_delete []*datastore.Key
REGION_UIDS_TO_DELETE := []string{"@test-san-francisco", "@test-los-angeles"}
RESTAURANT_UIDS_TO_DELETE := []string{"@test-mcdonalds", "@test-In-N-Out", "@test-Wendys"}
TAGS_UIDS_TO_DELETE := []string{"@test-american", "@test-french"}
for _, uid := range REGION_UIDS_TO_DELETE {
q := datastore.NewQuery("Tags").Filter("Uid =", uid).KeysOnly()
keys_to_delete, err = q.GetAll(c, nil)
checkErr(err, "DB error1")
err = datastore.DeleteMulti(c, keys_to_delete)
checkErr(err, "DB error2")
}
for _, uid := range RESTAURANT_UIDS_TO_DELETE {
q := datastore.NewQuery("Region").Filter("Uid =", uid).KeysOnly()
keys_to_delete, err = q.GetAll(c, nil)
checkErr(err, "DB error3")
err = datastore.DeleteMulti(c, keys_to_delete)
checkErr(err, "DB error4")
}
for _, uid := range TAGS_UIDS_TO_DELETE {
q := datastore.NewQuery("Restaurant").Filter("Uid =", uid).KeysOnly()
_, err = q.GetAll(c, &keys_to_delete)
checkErr(err, "DB error5")
err = datastore.DeleteMulti(c, keys_to_delete)
checkErr(err, "DB error6")
}
log.Printf("... cleanup done")
}
// re-create the data (unless this was a cleanup operation only)
if !args.CleanupOnly {
region1 := models.Region{Uid: "@test-san-francisco", Title: "TEST San Francisco"}
_, err = datastore.Put(c, datastore.NewKey(c, "Region", region1.Uid, 0, nil), ®ion1)
checkErr(err, "fail trying to insert")
region2 := models.Region{Uid: "@test-los-angeles", Title: "TEST Los Angeles"}
_, err = datastore.Put(c, datastore.NewKey(c, "Region", region2.Uid, 0, nil), ®ion2)
checkErr(err, "fail trying to insert")
restaurant1 := models.Restaurant{Uid: "@test-mcdonalds", Title: "TEST McDonalds", Tags: []string{"French Cuisine", "American"}, Regions: []string{region1.Uid}}
_, err = datastore.Put(c, datastore.NewKey(c, "Restaurant", restaurant1.Uid, 0, nil), &restaurant1)
checkErr(err, "fail trying to insert")
restaurant2 := models.Restaurant{Uid: "@test-In-N-Out", Tags: []string{"American"}, Regions: []string{region1.Uid, region2.Uid}}
_, err = datastore.Put(c, datastore.NewKey(c, "Restaurant", restaurant2.Uid, 0, nil), &restaurant2)
checkErr(err, "fail trying to insert")
restaurant3 := models.Restaurant{Uid: "@test-Wendys", Tags: []string{"American"}, Regions: []string{region2.Uid}}
_, err = datastore.Put(c, datastore.NewKey(c, "Restaurant", restaurant3.Uid, 0, nil), &restaurant3)
checkErr(err, "fail trying to insert")
log.Printf("... creation done")
}
return nil
}
作者:rdterne
项目:buil
// logHandler displays log text for a given hash.
// It handles paths like "/log/hash".
func logHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-type", "text/plain; charset=utf-8")
c := contextForRequest(r)
hash := r.URL.Path[strings.LastIndex(r.URL.Path, "/")+1:]
key := datastore.NewKey(c, "Log", hash, 0, nil)
l := new(Log)
if err := datastore.Get(c, key, l); err != nil {
if err == datastore.ErrNoSuchEntity {
// Fall back to default namespace;
// maybe this was on the old dashboard.
c := appengine.NewContext(r)
key := datastore.NewKey(c, "Log", hash, 0, nil)
err = datastore.Get(c, key, l)
}
if err != nil {
logErr(w, r, err)
return
}
}
b, err := l.Text()
if err != nil {
logErr(w, r, err)
return
}
w.Write(b)
}
作者:Gleason
项目:go-publ
// UserKey to identify App Engine User
func UserKey(c appengine.Context) *datastore.Key {
u := user.Current(c)
if u == nil {
return datastore.NewKey(c, "User", "Anonymous", 0, nil)
}
return datastore.NewKey(c, "User", u.Email, 0, nil)
}
作者:rjourd
项目:go.authenticatio
func NewUser(r *http.Request, id string, email string, name string, provider string) (*User, error) {
c := appengine.NewContext(r)
// create new user
userId, _, _ := datastore.AllocateIDs(c, "User", nil, 1)
key := datastore.NewKey(c, "User", "", userId, nil)
user := User{userId, email, name, time.Now()}
_, err := datastore.Put(c, key, &user)
if err != nil {
return nil, err
}
// create external authentication
externalAuthId, _, _ := datastore.AllocateIDs(c, "ExternalAuth", nil, 1)
key = datastore.NewKey(c, "ExternalAuth", "", externalAuthId, nil)
externalAuth := ExternalAuth{externalAuthId, id, userId, provider}
_, err = datastore.Put(c, key, &externalAuth)
if err != nil {
return nil, err
}
return &user, err
}