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 }