def get(self):
     self.response.headers['Content-Type'] = 'text/plain'
     self.response.out.write('I am an algorithm!\n')
     
     import os
     inDev = os.environ.get('SERVER_SOFTWARE', '').startswith('Dev')
     
     task       = str(self.request.get('task'))
     globalstop = str(self.request.get('globalstop'))
     if self.request.get('step') != '':
         step       = int(self.request.get('step'))
     if task == 'true':
         globalstop = int(globalstop)
         uniquifier = str(self.request.get('uniquifier'))
         desireFunc.primeDesireCache(step)    # Must prime cache before starting tasks for first time.
         taskAdd("Desires-"+str(1)+"-"+str(60)+"-step-"+str(step)+"-"+uniquifier,
                 step, globalstop, uniquifier, 1, 60, 0)
     elif task == 'loop' and inDev:
         globalstop = int(globalstop)
         n = str(self.request.get('n'))
         if n == '':
             n = 1
         else:
             n = int(n)
         fillcache = str(self.request.get('fillcache'))
         if fillcache == 'true':
             # Run function to put last 400 steps of desires into memcache.
             desireFunc.primeDesireCache(n)
         if n < globalstop:
             desireFunc.doDesires(n)     # TradeCues express desires
             #commenting out so can just record desires.
             #princeFunc.updateAlgStats(n)       # Prince processes desires and updates algStats
             n += 1
             self.redirect('/algorithms/go?task=loop&n=%s&globalstop=%s'%(n,globalstop))
         else:
             self.response.out.write('Done with step %s!\n'%n)
     elif task == 'loop' and not inDev:
         self.response.out.write('I refuse to loop when not in Dev!\n')
     else:
         startAlg = int(self.request.get('start'))
         stopAlg  = int(self.request.get('stop'))
         result   = doAlgs(step,startAlg,stopAlg)
     self.response.out.write('I am done!')
def startSim(namespace, unique, globalStop, initialStop, stepRange, goNext):
    from google.appengine.api.datastore import Key
    
    JobID = meTools.buildJobID(namespace, unique, globalStop, initialStop, stepRange)

    persistStops = meSchema.WorkQueue(key_name = JobID, globalStop = globalStop, initialStop = initialStop)
    meTools.memPut_multi({persistStops.key().name() : persistStops}, priority = 1)
    
    if not globalStop >= initialStop:
        raise(BaseException('globalStop: %s is not >= lastStopStep: %s' % (globalStop, initialStop)))

    lastDesire = meSchema.desire.all(keys_only = True).filter('__key__ <', Key.from_path('desire','1000000_0000_00')).order('-__key__').get()
    if lastDesire:
        lastDesireStop = int(lastDesire.name().split('_')[0])
    else:
        lastDesireStop = 1
    desireFunc.primeDesireCache(lastDesireStop)
    for step in range(lastDesireStop, globalStop + 1):
        desireFunc.doDesires(step)

    if goNext == 'true':
        doNext(JobID, 'weeklyDesires','')