Exemple #1
0
 def process_response(self, request, response):
     """
     If there was a write to the db, set the session variable to enable
     pinning.  If the variable already exists, the time will be reset.
     """
     if pinning.db_was_written():
         pinned_until = datetime.now() + timedelta(seconds=PINNING_SECONDS)
         request.session[PINNING_KEY] = pinned_until
         pinning.clear_db_write()
     pinning.unpin_thread()
     return response
Exemple #2
0
 def process_response(self, request, response):
     """
     If there was a write to the db, set the session variable to enable
     pinning.  If the variable already exists, the time will be reset.
     """
     if pinning.db_was_written():
         pinned_until = datetime.now() + timedelta(seconds=PINNING_SECONDS)
         request.session[PINNING_KEY] = pinned_until
         pinning.clear_db_write()
     pinning.unpin_thread()
     return response
Exemple #3
0
 def process_response(self, request, response):
     """
     If this is a POST request and there was a write to the db, set the
     cookie to enable pinning.  If the cookie already exists, the time will
     be reset.
     """
     if request.method == 'POST' and pinning.db_was_written():
         response.set_cookie(PINNING_KEY,
                             value='y',
                             max_age=PINNING_SECONDS)
         pinning.clear_db_write()
     pinning.unpin_thread()
     return response
Exemple #4
0
 def process_response(self, request, response):
     """
     If this is a POST request and there was a write to the db, set the
     cookie to enable pinning.  If the cookie already exists, the time will
     be reset.
     """
     if request.method == 'POST' and pinning.db_was_written():
         response.set_cookie(PINNING_KEY,
                             value='y',
                             max_age=PINNING_SECONDS)
         pinning.clear_db_write()
     pinning.unpin_thread()
     return response
Exemple #5
0
 def test_middleware(self):
     for middleware, vehicle in [(PinningSessionMiddleware(), 'session'),
                                 (PinningCookieMiddleware(), 'cookie')]:
         # The first request shouldn't pin the database
         middleware.process_request(self.mock_request)
         self.assertFalse(pinning.thread_is_pinned())
         
         # A simulated write also shouldn't, if the request isn't a POST
         pinning.set_db_write()
         middleware.process_request(self.mock_request)
         self.assertFalse(pinning.thread_is_pinned())
         
         # This response should set the session variable and clear the pin
         pinning.set_db_write()
         self.mock_request.method = 'POST'
         response = middleware.process_response(self.mock_request,
                                                self.mock_response)
         self.assertFalse(pinning.thread_is_pinned())
         self.assertFalse(pinning.db_was_written())
         if vehicle == 'session':
             self.assertTrue(
                 self.mock_request.session.get(PINNING_KEY, False)
             )
         else:
             self.assertEqual(response.cookie, PINNING_KEY)
             self.mock_request.COOKIES = [response.cookie]
         
         # The subsequent request should then pin the database
         middleware.process_request(self.mock_request)
         self.assertTrue(pinning.thread_is_pinned())
         
         pinning.unpin_thread()
         
         if vehicle == 'session':
             # After the pinning period has expired, the request should no
             # longer pin the thread
             exp = timedelta(seconds=PINNING_SECONDS - 5)
             self.mock_request.session[PINNING_KEY] = datetime.now() - exp
             middleware.process_request(self.mock_request)
             self.assertFalse(pinning.thread_is_pinned())
             
             pinning.unpin_thread()
Exemple #6
0
    def test_middleware(self):
        for middleware, vehicle in [(PinningSessionMiddleware(), 'session'),
                                    (PinningCookieMiddleware(), 'cookie')]:
            # The first request shouldn't pin the database
            middleware.process_request(self.mock_request)
            self.assertFalse(pinning.thread_is_pinned())

            # A simulated write also shouldn't, if the request isn't a POST
            pinning.set_db_write()
            middleware.process_request(self.mock_request)
            self.assertFalse(pinning.thread_is_pinned())

            # This response should set the session variable and clear the pin
            pinning.set_db_write()
            self.mock_request.method = 'POST'
            response = middleware.process_response(self.mock_request,
                                                   self.mock_response)
            self.assertFalse(pinning.thread_is_pinned())
            self.assertFalse(pinning.db_was_written())
            if vehicle == 'session':
                self.assertTrue(
                    self.mock_request.session.get(PINNING_KEY, False)
                )
            else:
                self.assertEqual(response.cookie, PINNING_KEY)
                self.mock_request.COOKIES = [response.cookie]

            # The subsequent request should then pin the database
            middleware.process_request(self.mock_request)
            self.assertTrue(pinning.thread_is_pinned())

            pinning.unpin_thread()

            if vehicle == 'session':
                # After the pinning period has expired, the request should no
                # longer pin the thread
                exp = timedelta(seconds=PINNING_SECONDS - 5)
                self.mock_request.session[PINNING_KEY] = datetime.now() - exp
                middleware.process_request(self.mock_request)
                self.assertFalse(pinning.thread_is_pinned())

                pinning.unpin_thread()