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