func (t *taskQueueData) prepTask(c context.Context, ns string, task *tq.Task, queueName string) (*tq.Task, error) { toSched := task.Duplicate() if toSched.Path == "" { toSched.Path = "/_ah/queue/" + queueName } if toSched.ETA.IsZero() { toSched.ETA = clock.Now(c).Add(toSched.Delay) } else if toSched.Delay != 0 { panic("taskqueue: both Delay and ETA are set") } toSched.Delay = 0 switch toSched.Method { // Methods that can have payloads. case "": toSched.Method = "POST" fallthrough case "POST", "PUT", "PULL": break // Methods that can not have payloads. case "GET", "HEAD", "DELETE": toSched.Payload = nil default: return nil, fmt.Errorf("taskqueue: bad method %q", toSched.Method) } if _, ok := toSched.Header[currentNamespace]; !ok { if ns != "" { if toSched.Header == nil { toSched.Header = http.Header{} } toSched.Header[currentNamespace] = []string{ns} } } // TODO(riannucci): implement DefaultNamespace if toSched.Name == "" { toSched.Name = mkName(c, "", t.named[queueName]) } else { if !validTaskName.MatchString(toSched.Name) { return nil, errors.New("INVALID_TASK_NAME") } } return toSched, nil }
// tqR2F (TQ real-to-fake) converts a *taskqueue.Task to a *tq.Task. func tqR2F(o *taskqueue.Task) *tq.Task { if o == nil { return nil } n := tq.Task{} n.Path = o.Path n.Payload = o.Payload n.Header = o.Header n.Method = o.Method n.Name = o.Name n.Delay = o.Delay n.ETA = o.ETA n.RetryCount = o.RetryCount n.RetryOptions = (*tq.RetryOptions)(o.RetryOptions) return &n }