Пример #1
0
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))
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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)
Пример #5
0
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))
Пример #6
0
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))
Пример #7
0
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))