def newstart_session(request, groupToken, workerId=''): try: e=Experiment.objects.get(groupToken=groupToken) except: return HttpResponse(empirical_error('Invalid group token %s' % groupToken)) s=e.study try: consent=s.consentJSON except: try: return HttpResponse(empirical_error('Unable to get consent info from %s' % s.name)) except: return HttpResponse(empirical_error('Bad study linked to %s' % e.name)) session_list=e.groupSessions.split()[:e.numTokens] # sessionlist of tokens to be used c=None has_prior = False if workerId.lower()=='demo': # demo session session=session_list[0] elif workerId=='': # create a synthetic workerId if not provided workerId='NoId_%s' % datetime.now().strftime("%m%d%Y_%H%M%S") config_list=session_order(e,session_list) # sorting needs to be done manually in the function above if e.recycle==False: if config_list[0].lastStarted==None: c=config_list[0] session=c.sessionToken else: return HttpResponse(empirical_error('No tokens are available for %s' % e.name)) else: c = config_list[0] session = c.sessionToken if c==None: try: c=Session.objects.get(sessionToken=session) except: return HttpResponse(empirical_error('Invalid session token %s' % session)) config=c.configFile # update last started c.lastStarted=datetime.now() c.save() # update study particpant list s.addParticipant(workerId,session) # create started datalog event r = Report(sessionToken=session,sessionKey=c,eventType='start',dataLog=workerId) # workerId stored in this event to catch re-use later r.save() start_xml={} start_xml['Empirical:workerid']=workerId start_xml['Empirical:consent']="<![CDATA[%s]]>" % consent start_xml['Empirical:config']="<![CDATA[%s]]>" % config start_xml['Empirical:session']=session return HttpResponse(xml_string(start_xml))
def add_token_creation_event(sessionToken,studyName): key=Session.objects.get(sessionToken=sessionToken) if studyName!=None: consent=studyName.consentJSON else: consent="None" token_report=Report(sessionToken=sessionToken,sessionKey=key,eventType='token',dataLog=consent) token_report.save() return
def start(request, sessionToken): try: s = Session.objects.get(sessionToken=sessionToken) cfg = s.configFile except: cfg = 'No such config file associated with token %s' % sessionToken return HttpResponse(cfg) # should have error template for bad info # add a line to the Report db indicating that this session was started r = Report(sessionToken=s.sessionToken, sessionKey=s, eventType='start', dataLog='') r.save() return HttpResponse(cfg)
def start_session(request, groupToken, workerId=''): try: e = Experiment.objects.get(groupToken=groupToken) except: return HttpResponse( empirical_error('Invalid group token %s' % groupToken)) s = e.study try: consent = s.consentJSON except: try: return HttpResponse( empirical_error('Unable to get consent info from %s' % s.name)) except: return HttpResponse( empirical_error('Bad study linked to %s' % e.name)) session_list = e.groupSessions.split( )[:e.numTokens] # sessionlist of tokens to be used c = None has_prior = False demo_mode = False prior_session = '' if workerId.lower() == 'demo': # demo session session = session_list[0] config = '' demo_mode = True elif workerId != '': # check for existing workerId prior = s.participants.split() for i in prior: if ':' in i: t = i.split(':') if len(t) == 2: worker = t[0] token = t[1] else: worker = t[0] token = t[-1] #(worker,token)=i.split(':') else: worker = i token = '' if worker == workerId: has_prior = True prior_session = token break else: # create a synthetic workerId if not provided workerId = 'NoId_%s' % datetime.now().strftime("%m%d%Y_%H%M%S") if has_prior: # either returning to finish or restarting # if there is no token, will have to search the db to find the session -- to do if prior_session == '': # search r = Report.objects.filter( eventType='start').order_by('-uploadDate') for i in r: if i.dataLog == workerId: prior_session = i.sessionToken break # if prior_session doesn't get set, the participant might be 'blacklisted' if prior_session == '': return HttpResponse( empirical_error('Participant %s on exclusion list' % workerId)) else: session = prior_session elif not demo_mode: # get new session token # sort on lastUpdated config_list = session_order( e, session_list ) # sorting needs to be done manually in the function above # if no recycle, only return if lastUpdated is None if e.recycle == False: if config_list[0].lastStarted == None: c = config_list[0] session = c.sessionToken else: return HttpResponse( empirical_error('No tokens are available for %s' % e.name)) else: c = config_list[0] session = c.sessionToken # for new workers, create started datalog event r = Report(sessionToken=session, sessionKey=c, eventType='start', dataLog=workerId ) # workerId stored in this event to catch re-use later r.save() # and update study particpant list s.addParticipant(workerId, session) if c == None: try: c = Session.objects.get(sessionToken=session) except: return HttpResponse( empirical_error('Invalid session token %s' % session)) config = c.configFile # update last started if not demo_mode: c.lastStarted = datetime.now() c.save() start_xml = {} start_xml['Empirical:workerid'] = workerId start_xml['Empirical:consent'] = "<![CDATA[%s]]>" % consent start_xml['Empirical:config'] = "<![CDATA[%s]]>" % config start_xml['Empirical:session'] = session #debug_string='' #for i in config_list: # debug_string=debug_string+('%s %s;\n' % (i.sessionToken, i.lastStarted)) #start_xml['Empirical:debug']=debug_string return HttpResponse(xml_string(start_xml))
def newstart_session(request, groupToken, workerId=''): try: e = Experiment.objects.get(groupToken=groupToken) except: return HttpResponse( empirical_error('Invalid group token %s' % groupToken)) s = e.study try: consent = s.consentJSON except: try: return HttpResponse( empirical_error('Unable to get consent info from %s' % s.name)) except: return HttpResponse( empirical_error('Bad study linked to %s' % e.name)) session_list = e.groupSessions.split( )[:e.numTokens] # sessionlist of tokens to be used c = None has_prior = False if workerId.lower() == 'demo': # demo session session = session_list[0] elif workerId == '': # create a synthetic workerId if not provided workerId = 'NoId_%s' % datetime.now().strftime("%m%d%Y_%H%M%S") config_list = session_order( e, session_list ) # sorting needs to be done manually in the function above if e.recycle == False: if config_list[0].lastStarted == None: c = config_list[0] session = c.sessionToken else: return HttpResponse( empirical_error('No tokens are available for %s' % e.name)) else: c = config_list[0] session = c.sessionToken if c == None: try: c = Session.objects.get(sessionToken=session) except: return HttpResponse( empirical_error('Invalid session token %s' % session)) config = c.configFile # update last started c.lastStarted = datetime.now() c.save() # update study particpant list s.addParticipant(workerId, session) # create started datalog event r = Report(sessionToken=session, sessionKey=c, eventType='start', dataLog=workerId ) # workerId stored in this event to catch re-use later r.save() start_xml = {} start_xml['Empirical:workerid'] = workerId start_xml['Empirical:consent'] = "<![CDATA[%s]]>" % consent start_xml['Empirical:config'] = "<![CDATA[%s]]>" % config start_xml['Empirical:session'] = session return HttpResponse(xml_string(start_xml))
def start_session(request, groupToken, workerId=''): try: e=Experiment.objects.get(groupToken=groupToken) except: return HttpResponse(empirical_error('Invalid group token %s' % groupToken)) s=e.study try: consent=s.consentJSON except: try: return HttpResponse(empirical_error('Unable to get consent info from %s' % s.name)) except: return HttpResponse(empirical_error('Bad study linked to %s' % e.name)) session_list=e.groupSessions.split()[:e.numTokens] # sessionlist of tokens to be used c=None has_prior = False prior_session='' if workerId.lower()=='demo': # demo session session=session_list[0] consent='' # no consent form for demo elif workerId!='': # check for existing workerId prior=s.participants.split() for i in prior: (worker,token)=i.split(':') if worker==workerId: has_prior=True prior_session=token break else: # create a synthetic workerId if not provided workerId='NoId_%s' % datetime.now().strftime("%m%d%Y_%H%M%S") if has_prior: # either returning to finish or restarting # if there is no token, will have to search the db to find the session -- to do if prior_session=='': # search r=Report.objects.filter(eventType='start').order_by('-uploadDate') for i in r: if i.dataLog==workerId: prior_session=i.sessionToken break # if prior_session doesn't get set, the participant might be 'blacklisted' if prior_session=='': return HttpResponse(empirical_error('Participant %s on exclusion list' % workerId)) else: session=prior_session else: # get new session token # sort on lastUpdated config_list=session_order(e,session_list) # sorting needs to be done manually in the function above # if no recycle, only return if lastUpdated is None if e.recycle==False: if config_list[0].lastStarted==None: c=config_list[0] session=c.sessionToken else: return HttpResponse(empirical_error('No tokens are available for %s' % e.name)) else: c = config_list[0] session = c.sessionToken if c==None: try: c=Session.objects.get(sessionToken=session) except: return HttpResponse(empirical_error('Invalid session token %s' % session)) config=c.configFile # update last started c.lastStarted=datetime.now() c.save() # update study particpant list s.addParticipant(workerId,session) # create started datalog event r = Report(sessionToken=session,sessionKey=c,eventType='start',dataLog=workerId) # workerId stored in this event to catch re-use later r.save() start_xml={} start_xml['Empirical:workerid']=workerId start_xml['Empirical:consent']="<![CDATA[%s]]>" % consent start_xml['Empirical:config']="<![CDATA[%s]]>" % config start_xml['Empirical:session']=session return HttpResponse(xml_string(start_xml))