作者:TimSylveste
项目:bitwr
// Marks a bid as placed. This is purely informational for the user.
func PlaceBid(c appengine.Context, bidId string) error {
var key *datastore.Key
if k, err := datastore.DecodeKey(bidId); err != nil {
return err
} else {
key = k
}
f := func(c appengine.Context) error {
var bid Bid
if err := datastore.Get(c, key, bidCodec{&bid}); err != nil {
return err
}
if bid.State != InQueue {
c.Infof("Not placing bid %v : State=%v", key, bid.State)
return nil
}
bid.State = Placed
if _, err := datastore.Put(c, key, bidCodec{&bid}); err != nil {
return err
}
return nil
}
return datastore.RunInTransaction(c, f, nil)
}
作者:kissthin
项目:gorea
func ParseFeed(c appengine.Context, contentType, origUrl, fetchUrl string, body []byte) (*Feed, []*Story, error) {
cr := defaultCharsetReader
if !bytes.EqualFold(body[:len(xml.Header)], []byte(xml.Header)) {
enc, err := encodingReader(body, contentType)
if err != nil {
return nil, nil, err
}
if enc != encoding.Nop {
cr = nilCharsetReader
body, err = ioutil.ReadAll(transform.NewReader(bytes.NewReader(body), enc.NewDecoder()))
if err != nil {
return nil, nil, err
}
}
}
var feed *Feed
var stories []*Story
var atomerr, rsserr, rdferr error
feed, stories, atomerr = parseAtom(c, body, cr)
if feed == nil {
feed, stories, rsserr = parseRSS(c, body, cr)
}
if feed == nil {
feed, stories, rdferr = parseRDF(c, body, cr)
}
if feed == nil {
c.Warningf("atom parse error: %s", atomerr.Error())
c.Warningf("xml parse error: %s", rsserr.Error())
c.Warningf("rdf parse error: %s", rdferr.Error())
return nil, nil, fmt.Errorf("Could not parse feed data")
}
feed.Url = origUrl
return parseFix(c, feed, stories, fetchUrl)
}
作者:uv
项目:localization.exper
func getTickets(c appengine.Context, status string, newStatus string, limit int) ([]Ticket, []*datastore.Key, error) {
c.Debugf("getTickets: ", status)
statusKey, err := getStatusByType(c, status)
if err != nil {
return nil, nil, err
}
c.Debugf("statusKey: ", statusKey)
q := datastore.NewQuery(DATASTORE_TICKET).
Filter("Status =", statusKey).
//Filter("SellerUrl >", "").
Order("Modified").
Limit(limit)
var tickets []Ticket
ticket_keys, err := q.GetAll(c, &tickets)
if err != nil {
return nil, nil, err
}
if len(tickets) < 1 {
return nil, nil, fmt.Errorf("getTickets: No new tickets found with status: %s", status)
}
if newStatus != "" {
err = setTicketsStatus(c, tickets, ticket_keys, newStatus)
if err != nil {
return nil, nil, err
}
}
return tickets, ticket_keys, nil
}
作者:jlmeeke
项目:orgreminder
func (e Event) GetHTMLView(c appengine.Context) string {
buffer := new(bytes.Buffer)
var tmpltxt = `<label>Event Title: </label><a href="https://orgreminders.appspot.com/editevent?id={{.Key}}">{{.Title}}</a>
<br>
<label>When Due: </label>{{.DueFormatted}}
<br>
<label>Organization(s): </label>{{range .Orgs}}{{.}},{{end}}
<br>
<label>Email enabled: </label>{{.Email}}
<br>
<label>Text Enabled: </label>{{.Text}}
<br>
<label>Email Message: </label><br><div class="msgbody">{{.EmailMessage}}</div>
<br>
<label>Text Message: </label><br><div class="msgbody"><pre>{{.TextMessage}}</pre></div>
<br>`
template, terr := template.New("foo").Parse(tmpltxt)
if terr != nil {
c.Infof("error parsing event html template: %v", terr)
return ""
}
template.Execute(buffer, e)
return buffer.String()
}
作者:junglesun
项目:TestGcmServe
func searchUser(instanceId string, c appengine.Context) (key *datastore.Key, user *User, err error) {
var v []User
// Initial variables
key = nil
user = nil
err = nil
// Query
f := datastore.NewQuery(UserKind)
f = f.Filter("InstanceId=", instanceId)
k, err := f.GetAll(c, &v)
if err != nil {
c.Errorf("%s in getting data from datastore\n", err)
err = errors.New("Datastore is temporary unavailable")
return
}
if k == nil || len(k) == 0 {
return
}
key = k[0]
user = &v[0]
return
}
作者:roboticdo
项目:mernessa_cop
// Handler to find all questions with specific tags
func tagHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
// Collect query
tag := r.FormValue("tagSearch")
// Create and fill in a new webData struct
tempData := newWebData()
data.CacheLock.Lock()
// range through the question caches golang stackongoand add if the question contains the tag
for cacheType, cache := range data.Caches {
for _, question := range cache {
if contains(question.Tags, tag) {
tempData.Caches[cacheType] = append(tempData.Caches[cacheType], question)
}
}
}
tempData.Qns = data.Qns
data.CacheLock.Unlock()
page := template.Must(template.ParseFiles("public/template.html"))
var tagQuery = []string{
"tag",
tag,
}
if err := page.Execute(w, writeResponse(user, tempData, c, tagQuery)); err != nil {
c.Criticalf("%v", err.Error())
}
}
作者:roboticdo
项目:mernessa_cop
//This is the main tags page
//Should display a list of tags that are logged in the database
//User can either click on a tag to view any questions containing that tag or search by a specific tag
func viewTagsHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
//Read all tags and their counts from the db, and execute the page
query := readTagsFromDb()
//Format array of tags into another array, to be easier formatted on the page into a table
//An array of tagData arrays of size 4
var tagArray [][]tagData
var tempTagArray []tagData
i := 0
for _, t := range query {
tempTagArray = append(tempTagArray, t)
i++
if i == 4 {
tagArray = append(tagArray, tempTagArray)
i = 0
//clear the temp array.
tempTagArray = nil
}
}
tagArray = append(tagArray, tempTagArray)
page := template.Must(template.ParseFiles("public/viewTags.html"))
if err := page.Execute(w, queryReply{user, tagArray}); err != nil {
c.Criticalf("%v", err.Error())
}
}
作者: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
}
作者:reedperr
项目:gogra
func createPostKeyID(postID string, c appengine.Context) string {
if postID == "" {
c.Errorf("Creating a post entity key with no postID!")
}
return "post:" + postID
}
作者:ducktsm
项目:snova-ga
func HandleEvent(tags *event.EventHeaderTags, ev event.Event, ctx appengine.Context, sender EventSendService) error {
res, err := handleRecvEvent(tags, ev, ctx)
if nil != err {
ctx.Errorf("Failed to handle event[%d:%d] for reason:%v", ev.GetType(), ev.GetVersion(), err)
return err
}
if nil == res {
var empty bytes.Buffer
sender.Send(&empty)
return nil
}
res.SetHash(ev.GetHash())
compressType := Cfg.CompressType
if httpres, ok := res.(*event.HTTPResponseEvent); ok {
v := httpres.GetHeader("Content-Type")
if len(v) > 0 && Cfg.CompressType != event.COMPRESSOR_NONE {
if isContentTypeInCompressFilter(v) {
compressType = event.COMPRESSOR_NONE
}
}
}
x := new(event.CompressEvent)
x.SetHash(ev.GetHash())
x.CompressType = compressType
x.Ev = res
y := new(event.EncryptEvent)
y.SetHash(ev.GetHash())
y.EncryptType = Cfg.EncryptType
y.Ev = x
var buf bytes.Buffer
tags.Encode(&buf)
event.EncodeEvent(&buf, y)
sender.Send(&buf)
return nil
}
作者:qts
项目:go_fetc
func RetrieveActDetails(c appengine.Context, actId int) (res *ActDetail, err os.Error) {
var d DSActDetail
if itm, err := memcache.Get(c, "actId__"+strconv.Itoa(actId)); err != nil && err != memcache.ErrCacheMiss {
return nil, err
} else if err == nil {
// Cache hit
buf := bytes.NewBuffer(itm.Value)
dec := gob.NewDecoder(buf)
dec.Decode(&d)
} else {
// Cache miss
key := datastore.NewKey(c, "DSActDetail", "", int64(actId), nil)
if err := datastore.Get(c, key, &d); err == datastore.ErrNoSuchEntity {
return &ActDetail{ActId: actId}, nil
} else if err != nil {
return nil, err
}
buf := bytes.NewBufferString("")
enc := gob.NewEncoder(buf)
enc.Encode(d)
itm := &memcache.Item{
Key: "actId__" + strconv.Itoa(actId),
Value: buf.Bytes(),
}
err = memcache.Set(c, itm)
c.Debugf("Request cache to memcache")
}
return d.fromDS(), nil
}
作者:yschu
项目:go_tes
// AllocateIDs returns a range of n integer IDs with the given kind and parent
// combination. kind cannot be empty; parent may be nil. The IDs in the range
// returned will not be used by the datastore's automatic ID sequence generator
// and may be used with NewKey without conflict.
//
// The range is inclusive at the low end and exclusive at the high end. In
// other words, valid intIDs x satisfy low <= x && x < high.
//
// If no error is returned, low + n == high.
func AllocateIDs(c appengine.Context, kind string, parent *Key, n int) (low, high int64, err error) {
if kind == "" {
return 0, 0, errors.New("datastore: AllocateIDs given an empty kind")
}
if n < 0 {
return 0, 0, fmt.Errorf("datastore: AllocateIDs given a negative count: %d", n)
}
if n == 0 {
return 0, 0, nil
}
req := &pb.AllocateIdsRequest{
ModelKey: keyToProto("", NewIncompleteKey(c, kind, parent)),
Size: proto.Int64(int64(n)),
}
res := &pb.AllocateIdsResponse{}
if err := c.Call("datastore_v3", "AllocateIds", req, res, nil); err != nil {
return 0, 0, err
}
// The protobuf is inclusive at both ends. Idiomatic Go (e.g. slices, for loops)
// is inclusive at the low end and exclusive at the high end, so we add 1.
low = res.GetStart()
high = res.GetEnd() + 1
if low+int64(n) != high {
return 0, 0, fmt.Errorf("datastore: internal error: could not allocate %d IDs", n)
}
return low, high, nil
}
作者:ashokgela
项目:gorill
// Purge removes all tasks from a queue.
func Purge(c appengine.Context, queueName string) error {
req := &taskqueue_proto.TaskQueuePurgeQueueRequest{
QueueName: []byte(queueName),
}
res := &taskqueue_proto.TaskQueuePurgeQueueResponse{}
return c.Call("taskqueue", "PurgeQueue", req, res, nil)
}
作者:reedperr
项目:gogra
func createUserKeyID(userID string, c appengine.Context) string {
if userID == "" {
c.Errorf("Creating an appUser entity key with no userID!")
}
return "user:" + userID
}
作者:hugozh
项目:gae-rpi-webap
func count_uv_pv(c appengine.Context, mins int) (uv int, pv int) {
count := 0
uniq := make(map[string]bool)
query := &log.Query{
AppLogs: true,
StartTime: time.Now().Add(time.Duration(-1*mins) * time.Minute),
Versions: []string{"1"},
}
for results := query.Run(c); ; {
record, err := results.Next()
if err == log.Done {
break
}
if err != nil {
c.Errorf("Failed to retrieve next log: %v", err)
}
if len(record.AppLogs) > 0 && strings.Index(record.Combined, "GET "+config.URL_BEACON) > 0 {
zcookie := record.AppLogs[0].Message
if zcookie != "" {
count++
uniq[zcookie] = true
}
}
}
uv = len(uniq)
pv = count
return
}
作者:AppScal
项目:appscal
// DeleteMulti is a batch version of Delete.
// If any keys cannot be found, an appengine.MultiError is returned.
// Each key must be at most 250 bytes in length.
func DeleteMulti(c appengine.Context, key []string) error {
req := &pb.MemcacheDeleteRequest{
Item: make([]*pb.MemcacheDeleteRequest_Item, len(key)),
}
for i, k := range key {
req.Item[i] = &pb.MemcacheDeleteRequest_Item{Key: []byte(k)}
}
res := &pb.MemcacheDeleteResponse{}
if err := c.Call("memcache", "Delete", req, res, nil); err != nil {
return err
}
if len(res.DeleteStatus) != len(key) {
return ErrServerError
}
me, any := make(appengine.MultiError, len(key)), false
for i, s := range res.DeleteStatus {
switch s {
case pb.MemcacheDeleteResponse_DELETED:
// OK
case pb.MemcacheDeleteResponse_NOT_FOUND:
me[i] = ErrCacheMiss
any = true
default:
me[i] = ErrServerError
any = true
}
}
if any {
return me
}
return nil
}
作者:shick
项目:storytim
// Sends an email to the author of part with a link to continue.
func sendMail(c appengine.Context, story Story) {
if story.Complete {
return
}
var subject, text string
part := story.LastPart()
url := fmt.Sprintf(serverUrl, story.Id, story.NextId)
if part != nil {
subject = "Please write the next part of this story."
text = fmt.Sprintf("%s, %s wrote:\n> %s\n\nPlease visit %s to write the next part.",
capital(fuzzyTime(part.Written)), getFullEmail(c, part.Author), part.Visible, url)
} else {
subject = "Please write the first part of this story."
text = fmt.Sprintf("%s, %s initiated a new story.\n\nPlease visit %s to write the beginning.",
capital(fuzzyTime(story.Created)), getFullEmail(c, story.Creator), url)
}
msg := &mail.Message{
Sender: sender,
To: []string{story.NextAuthor},
Subject: subject,
Body: text,
}
if err := mail.Send(c, msg); err != nil {
c.Errorf("Couldn't send email: %v", err)
panic(err)
}
}
作者:sapuglh
项目:golang-group
func load(c appengine.Context, id string) (*Group, error) {
group := &Group{}
_, err := memcache.JSON.Get(c, id, group)
if err == nil {
return group, nil
}
if err != memcache.ErrCacheMiss {
c.Errorf("memcache get %q: %v", id, err)
}
group, err = fetch(c, id)
if err != nil {
return nil, err
}
item := &memcache.Item{
Key: id,
Object: group,
Expiration: time.Hour,
}
err = memcache.JSON.Set(c, item)
if err != nil {
c.Errorf("memcache set %q: %v", id, err)
}
return group, nil
}
作者:roboticdo
项目:mernessa_cop
// Handler to find all questions answered/being answered by the user in URL
func userHandler(w http.ResponseWriter, r *http.Request, c appengine.Context, user stackongo.User) {
userID, _ := strconv.Atoi(r.FormValue("id"))
query := userData{}
// Create and fill in a new webData struct
tempData := newWebData()
data.CacheLock.Lock()
// range through the question caches golang stackongo and add if the question contains the tag
tempData.Caches["unanswered"] = data.Caches["unanswered"]
if userQuery, ok := data.Users[userID]; ok {
query = userQuery
for cacheType, cache := range data.Users[userID].Caches {
if cacheType != "unanswered" {
tempData.Caches[cacheType] = cache
}
}
tempData.Qns = data.Qns
}
data.CacheLock.Unlock()
page := template.Must(template.ParseFiles("public/template.html"))
var userQuery = []string{
"user",
query.User_info.Display_name,
}
if err := page.Execute(w, writeResponse(user, tempData, c, userQuery)); err != nil {
c.Criticalf("%v", err.Error())
}
}
作者:ashokgela
项目:gorill
// DeleteMulti is a batch version of Delete.
// The returned slice will have the same length as the input slice.
// If a given key cannot be found, its corresponding value in the
// returned error slice is set to ErrCacheMiss.
// Each key must be at most 250 bytes in length.
func DeleteMulti(c appengine.Context, key []string) []error {
req := &pb.MemcacheDeleteRequest{
Item: make([]*pb.MemcacheDeleteRequest_Item, len(key)),
}
for i, k := range key {
req.Item[i] = &pb.MemcacheDeleteRequest_Item{Key: []byte(k)}
}
res := &pb.MemcacheDeleteResponse{}
e := make([]error, len(key))
err := c.Call("memcache", "Delete", req, res, nil)
if err == nil && len(e) != len(res.DeleteStatus) {
err = ErrServerError
}
if err != nil {
for i := range e {
e[i] = err
}
return e
}
for i, s := range res.DeleteStatus {
switch s {
case pb.MemcacheDeleteResponse_DELETED:
e[i] = nil
case pb.MemcacheDeleteResponse_NOT_FOUND:
e[i] = ErrCacheMiss
default:
e[i] = ErrServerError
}
}
return e
}