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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
def admin(request): # TODO (Sat 13 Dec 2014 19:47:07 GMT): Presumably this is broken. return http_response(request, 'administration/admin.html')