예제 #1
0
    def test_thread_summary_locmem_cache(self):
        cache.cache = LocMemCache('', {})  # Enable local caching

        thread = self.q.thread
        key = Thread.SUMMARY_CACHE_KEY_TPL % thread.id

        self.assertTrue(thread.summary_html_cached())
        self.assertIsNotNone(thread.get_cached_summary_html())

        ###
        cache.cache.delete(key)  # let's start over

        self.assertFalse(thread.summary_html_cached())
        self.assertIsNone(thread.get_cached_summary_html())

        context = {
            'thread': thread,
            'question': self.q,
            'search_state': DummySearchState(),
        }
        html = get_template('widgets/question_summary.html').render(context)
        filled_html = html.replace('<<<tag1>>>', SearchState.get_empty().add_tag('tag1').full_url())\
                          .replace('<<<tag2>>>', SearchState.get_empty().add_tag('tag2').full_url())\
                          .replace('<<<tag3>>>', SearchState.get_empty().add_tag('tag3').full_url())

        self.assertEqual(
            filled_html,
            thread.get_summary_html(search_state=SearchState.get_empty()))
        self.assertTrue(thread.summary_html_cached())
        self.assertEqual(html, thread.get_cached_summary_html())

        ###
        cache.cache.set(key, 'Test <<<tag1>>>', timeout=100)

        self.assertTrue(thread.summary_html_cached())
        self.assertEqual('Test <<<tag1>>>', thread.get_cached_summary_html())
        self.assertEqual(
            'Test %s' % SearchState.get_empty().add_tag('tag1').full_url(),
            thread.get_summary_html(search_state=SearchState.get_empty()))

        ###
        cache.cache.set(key, 'TestBBB <<<tag1>>>', timeout=100)

        self.assertTrue(thread.summary_html_cached())
        self.assertEqual('TestBBB <<<tag1>>>',
                         thread.get_cached_summary_html())
        self.assertEqual(
            'TestBBB %s' % SearchState.get_empty().add_tag('tag1').full_url(),
            thread.get_summary_html(search_state=SearchState.get_empty()))

        ###
        cache.cache.delete(key)
        thread.update_summary_html = lambda dummy: "Monkey-patched <<<tag2>>>"

        self.assertFalse(thread.summary_html_cached())
        self.assertIsNone(thread.get_cached_summary_html())
        self.assertEqual(
            'Monkey-patched %s' %
            SearchState.get_empty().add_tag('tag2').full_url(),
            thread.get_summary_html(search_state=SearchState.get_empty()))
예제 #2
0
 def _html_for_question(self, q):
     context = {
         'thread': q.thread,
         'question': q,
         'search_state': DummySearchState(),
         }
     html = get_template('widgets/question_summary.html').render(context)
     return html
예제 #3
0
 def _html_for_question(self, q):
     return render_to_string(
         'widgets/question_summary.html', {
             'thread': q.thread,
             'question': q,
             'search_state': DummySearchState(),
             'visitor': None,
         })
예제 #4
0
 def _html_for_question(self, q):
     context = {
         'thread': q.thread,
         'question': q,
         'search_state': DummySearchState(),
         'visitor': None
     }
     return get_template('widgets/question_summary.html').render(
         Context(context))
예제 #5
0
 def _html_for_exercise(self, q):
     context = {
         'thread': q.thread,
         'exercise': q,
         'search_state': DummySearchState(),
         'visitor': None
     }
     html = get_template('widgets/exercise_summary.html').render(context)
     return html
예제 #6
0
 def update_summary_html(self):
     context = {
         'thread': self,
         'question': self._question_post(refresh=True),  # fetch new question post to make sure we're up-to-date
         'search_state': DummySearchState(),
     }
     html = get_template('widgets/question_summary.html').render(context)
     # INFO: Timeout is set to 30 days:
     # * timeout=0/None is not a reliable cross-backend way to set infinite timeout
     # * We probably don't need to pollute the cache with threads older than 30 days
     # * Additionally, Memcached treats timeouts > 30day as dates (https://code.djangoproject.com/browser/django/tags/releases/1.3/django/core/cache/backends/memcached.py#L36),
     #   which probably doesn't break anything but if we can stick to 30 days then let's stick to it
     cache.cache.set(
         self.SUMMARY_CACHE_KEY_TPL % self.id,
         html,
         timeout=const.LONG_TIME
     )
     return html