def test_redirection_url_stack(self): self.assertFalse('redirection_url_stack' in self.request.session) for url in self.test_urls: push_redirection_url_stack(self.request, url) self.assertIn(url, self.request.session['redirection_url_stack']) self.assertTrue('redirection_url_stack' in self.request.session) i = 0 for test_url in self.test_urls[::-1]: i += 1 redirection_url = http_redirect(self.request) self.assertEqual(redirection_url.url, test_url) self.assertNotIn(test_url, self.request.session['redirection_url_stack']) self.assertEqual(len(self.request.session['redirection_url_stack']), len(self.test_urls) - i) self.assertEqual(len(self.request.session['redirection_url_stack']), 0) self.assertEqual('/', http_redirect(self.request).url) self.assertEqual('/', http_redirect(self.request).url)
def getdemographicsview(request): ''' The view for the demographic form submission page. ''' demographic_templates = dict([ ('Date_of_Birth', 'subjects/birthday.html'), ('Sex', 'subjects/sex.html'), ('Handedness', 'subjects/handedness.html'), ('Native_Language', 'subjects/native-language.html') ]) subject = get_subject_from_request(request) required_variables\ = [variable for (variable, required) in conf.demographic_variables\ if required and not subject.has(variable)] placeholders\ = {variable + '_placeholder': value for variable, value\ in conf.demographic_variables_placeholders.items()\ if variable in required_variables} templates\ = [demographic_templates[variable] for variable in required_variables] if required_variables: context = dict(demographic_templates = templates) context.update(placeholders) logger.info( 'Subject %s. Getting demographic variables: %s'\ % (subject.user.username, ', '.join(required_variables)) ) process = lambda request: DemographicsForm.process(request, required_variables) return form_view(request, template = 'subjects/demographicsform.html', context=context, process=process, prgobject_key = 'demographicsform_context', url_on_valid = lambda: http_redirect(request).url, url_on_invalid = lambda: '/initialize') else: logger.info( 'Subject %s. No required demographic variables.' % (subject.user.username) ) return http_redirect(request)
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)