Example #1
0
def feedback(request):

    subject = get_subject_from_request(request)

    # This malarkey will get a unique list of experiments.
    completed_experiments\
        = {session.name:session.experiment_version.experiment.title 
           for session in\
           ExperimentSession.objects.filter(subject=subject,
                                            status=status_completed)}
    experiments = []
    for name, title in completed_experiments.items():

        completed_attempts\
            = len(
                ExperimentSession\
                   .objects\
                   .filter(subject=subject, 
                           experiment_version__experiment__class_name=name.capitalize())\
                   .filter(status = status_completed)
            )

        experiment = dict(name = name,
                          title = title,
                          completed_attempts = completed_attempts)

        experiments.append(experiment)

    context = dict(experiments = experiments)

    return http_response(request, 'subjects/feedback.html', context)
Example #2
0
def profileview(request):

    if is_demo_account(request):
        return HttpResponseRedirect('/')

    else:
        user = request.user
        subject = Subject.objects.get(user=user)

        demographics = {}

        if subject.has_sex:
            demographics['sex'] = subject.sex

        if subject.has_dob:
            demographics['dob'] = subject.birthdate
            demographics['age'] = subject.age

        if subject.has_language:
            demographics['native_language'] = subject.native_language

        if subject.has_handedness:
            demographics['handedness'] = subject.handedness

        context = dict(demographics=demographics)

        return http_response(request, 'subjects/profile.html', context)
Example #3
0
def subject_initialization_routine(request):

    '''
    This is the gateway through which subject enter the website. It checks
    their demographic requirments.

    '''

    if is_demo_account(request):
        return http_redirect(request)

    else:

        subjects = Subject.objects.filter(user=request.user)

        try:
            if len(subjects) == 0:
                msg = 'A user with no subject persona should not be here.'
                logger.warning(msg)

                # TODO (Thu 26 Feb 2015 02:33:25 GMT): Raise a proper exception. 
                raise Exception(msg)

            elif len(subjects) > 1:

                # TODO (Sat 11 Jul 2015 16:06:44 BST): If we are
                # short-circuiting this method with the is_demo_account check
                # and redirect above, then this logic is probably obsolete or
                # unnecessary, right?

                try:

                    msg = 'A user with multiple non-temporary subject persona.'
                    assert all([subject.temp_subject for subject in subjects]), msg

                    context = dict(temp_user = True)
                    return http_response(request, 'subjects/profile.html', context)

                except AssertionError as e:
                    logger.warning(e.message)
                    raise 

            else:

                logger.info('Initialization of subject with unique subject account.')

                return getdemographicsview(request)

        except (Exception, AssertionError) as e:

            exception_details = dump_traceback()

            logger.warning('An exception: %s.' % e.message)
            logger.warning('Exception details: %s.' % exception_details)
Example #4
0
def experiment_feedback(request, experiment_name):

    """
    Return the subject's feedback for experiment `experiment_name`.
    """

    completed_experiment_sessions\
        = get_completed_experiment_sessions(request, experiment_name)

    completed_sessions_feedback\
        = [experiment_session.feedback() 
           for experiment_session in completed_experiment_sessions]

    context = dict(feedbacks=completed_sessions_feedback,
                   jsonfeedback=tojson(completed_sessions_feedback))

    return http_response(request, 'subjects/experiment_feedback.html', context)
Example #5
0
def welcome(request):
    '''
    The main landing page for the experiments website.
    '''

    welcome_info\
        = configobj.ConfigObj(os.path.join(settings.WILHELM_ROOT,
                                           'apps/front/flatfiles/welcome.cfg'))

    welcome_blurbs = []
    for welcome_blurb_key, welcome_blurb in welcome_info.iteritems():
        welcome_blurbs.append((welcome_blurb['title'],
                               rst2innerhtml(welcome_blurb['short-text']),
                              ))

    context = {'title': 'Cognition Experiments',
               'welcome_blurbs': welcome_blurbs}

    return http_response(request, 'front/welcome.html', context)
Example #6
0
def listing(request):
    '''
    Return a page listing all available experiments.
    '''
    projects = models.Project.objects.all()

    project_list = []
    for project in projects:

        project_list.append( 
            dict(url = project.experiment.name,
                 name = project.experiment.class_name,
                 title = project.experiment.title,
                 blurb = rst2innerhtml(project.blurb))
        )

    context = dict(title = 'Experiment List',
                   projects = project_list)

    return http_response(request, 'research/listing.html', context)
Example #7
0
def listing(request):
    '''
    Return a page listing all available experiments.
    '''
    experiments = models.Experiment.objects.filter(live=True)

    experiment_list = []
    for experiment in experiments:

        experiment_list.append( 
            dict(url = experiment.name,
                 name = experiment.class_name,
                 title = experiment.title,
                 blurb = rst2innerhtml(experiment.blurb))
        )

    context = dict(title = 'Experiment List',
                   experiments = experiment_list)

    return http_response(request, 'archives/listing.html', context)
Example #8
0
def blurb(request, blurb_type):
    '''
    The view for the blurb pages. These pages present general info about the
    site and their content is stored in text files as restructuredText.'''

    blurb_types = dict(about='about.cfg',
                       takingpart='takingpart.cfg',
                       privacy='privacy.cfg')

    _blurb = configobj.ConfigObj(os.path.join(settings.WILHELM_ROOT,
                                              'apps/front/flatfiles',
                                              blurb_types[blurb_type]))

    blurb = dict(title = _blurb['title'],
                 text = rst2innerhtml(_blurb['text']))
                                          
    context = {'title': 'Cognition Experiments',
               'blurb': blurb}

    return http_response(request, 'front/blurb.html', context)
Example #9
0
def archive_listing(request):
    '''
    Return a page listing all available experiments.
    '''

    exports = models.ExperimentDataExport.objects.all()

    export_list = []
    for export in exports:

        export_list.append( 
            dict(url = export.short_uid,
                 path = export.filename,
                 name = export.experiment.name,
                 filesize = export.filesize,
                 datetime = export.datetime)
        )

    context = dict(title = 'Experiment data listing',
                   export_list = export_list)

    return http_response(request, 'dataexport/listing.html', context)
Example #10
0
def presenter_error_response(request, msg):
    # TODO (Thurs Dec 11 16:54:45 2014): Send emergency email here.
    context = dict(error_message=msg)
    return http_response(request, conf.error_template, context)
Example #11
0
def admin(request):
    # TODO (Sat 13 Dec 2014 19:47:07 GMT): Presumably this is broken.
    return http_response(request, 'administration/admin.html')