コード例 #1
0
    def test_cache_labels(self):
        """Does caching labels work?"""
        from amcat.models.language import Language
        lang = Language.objects.get(pk=1)
        codes = set(
            amcattest.create_test_code(label=l, language=lang)
            for l in "abcdef")
        morecodes = set(
            amcattest.create_test_code(label=l, language=lang)
            for l in "abcdef")

        h = amcattest.create_test_code(label="hidden", language=lang)

        B = amcattest.create_test_codebook(name="B")
        map(B.add_code, morecodes)
        A = amcattest.create_test_codebook(name="A")
        map(A.add_code, codes)
        A.add_code(h, hide=True)
        C = amcattest.create_test_codebook(name="C")
        A.add_base(C)
        C.add_base(B)
        n_bases = 3

        clear_cache(Code)
        maxq = n_bases * 2 + 1  # base + codebookcodes per base, codes
        with self.checkMaxQueries(maxq, "Cache Codes"):
            self.assertEqual(set(A.get_codes(include_hidden=True)),
                             codes | set([h]) | morecodes)

        with self.checkMaxQueries(1, "Cache labels"):  # labels
            A.cache_labels(lang)

        with self.checkMaxQueries(0, "Cache labels again"):
            A.cache_labels(lang)

        A._cache_labels_languages = set()
        clear_cache(Code)
        with self.checkMaxQueries(2, "Cache labels directly"):  # codes, labels
            A.cache_labels(lang)

        with self.checkMaxQueries(0, "Print labels"):
            for c in codes:
                c.get_label(lang)
                str(c)
                unicode(c)
                repr(c)

        with self.checkMaxQueries(0, "Print labels via hierarchy"):
            for c, _p in A.get_hierarchy(include_hidden=True):
                c.get_label(lang)
                str(c)
                unicode(c)
コード例 #2
0
ファイル: test_caching.py プロジェクト: BBie/amcat
    def test_object_cache(self):
        from amcat.models.project import Project

        pid = amcattest.create_test_project().id
        with self.checkMaxQueries(1, "Get project"):
            p = get_object(Project, pid)
        with self.checkMaxQueries(1, "Get cached project"):
            p2 = get_object(Project, pid)
        self.assertIs(p, p2)

        clear_cache(Project)
        with self.checkMaxQueries(1, "Get cleared project"):
            p3 = get_object(Project, pid)
        self.assertIsNot(p, p3)
        self.assertEqual(p, p3)
コード例 #3
0
ファイル: test_caching.py プロジェクト: isususi/amcat
    def test_object_cache(self):
        from amcat.models.project import Project

        pid = amcattest.create_test_project().id
        with self.checkMaxQueries(1, "Get project"):
            p = get_object(Project, pid)
        with self.checkMaxQueries(1, "Get cached project"):
            p2 = get_object(Project, pid)
        self.assertIs(p, p2)

        clear_cache(Project)
        with self.checkMaxQueries(1, "Get cleared project"):
            p3 = get_object(Project, pid)
        self.assertIsNot(p, p3)
        self.assertEqual(p, p3)
コード例 #4
0
    def test_get_codes(self):
        """Does get_codes work without using too many queries?"""
        codes = [amcattest.create_test_code(label=l) for l in "abcdef"]
        hiddencodes = [amcattest.create_test_code(label=l) for l in "abcdef"]

        B = amcattest.create_test_codebook(name="A")
        map(B.add_code, codes)
        B.add_code(hiddencodes[0])
        A = amcattest.create_test_codebook(name="A")
        [A.add_code(c, hide=True) for c in hiddencodes]
        A.add_base(B)
        clear_cache(Code)

        with self.checkMaxQueries(2, "Bases for codebooks"):
            list(A.bases)
            list(B.bases)

        with self.checkMaxQueries(2, "Get Code ids"):
            self.assertEqual(set(A.get_code_ids()), set(c.id for c in codes))

        clear_cache(Code)
        with self.checkMaxQueries(2, "Get Codes"):
            self.assertEqual(set(A.get_codes()), set(codes))

        clear_cache(Code)
        with self.checkMaxQueries(2, "Hidden Codes"):
            self.assertEqual(set(A.get_codes(include_hidden=True)),
                             set(codes) | set(hiddencodes))

        with self.checkMaxQueries(0, "Cached codes per codebook"):
            self.assertEqual(set(A.get_codes(include_hidden=True)),
                             set(codes) | set(hiddencodes))
コード例 #5
0
ファイル: get_queries.py プロジェクト: kasperwelbers/amcat
    def todo_test_nqueries(self):
        from amcat.models.coding.code import Code
        from amcat.tools.caching import clear_cache
        from amcat.models import Language

        l = Language.objects.create(id=13, label="query")

        A = amcattest.create_test_codebook(name="A")
        codes = []
        N = 20
        for i in range(N):
            code = amcattest.create_test_code(label="test")
            A.add_code(code)
            code.add_label(l, "query")
            codes.append(code)

        clear_cache(Code)
        with self.checkMaxQueries(7):  # 3 for language, 2 for codes, 1 for bases, 1 for codebook
            t = GetQueries(codebook=A.id).run()
            result = set(tuple(row) for row in t)
        code = codes[3]
        self.assertIn((code.id, "test", "query"), result)
        self.assertEqual(len(result), N)
コード例 #6
0
ファイル: get_queries.py プロジェクト: edisona/amcat
    def test_nqueries(self):
        from amcat.models.coding.code import Code
        from amcat.tools.caching import clear_cache
        from amcat.models import Language
        l = Language.objects.create(id=13, label='query')

        A = amcattest.create_test_codebook(name="A")
        codes = []
        N = 20
        for i in range(N):
            code = amcattest.create_test_code(label="test")
            A.add_code(code)
            code.add_label(l, "query")
            codes.append(code)

        clear_cache(Code)
        with self.checkMaxQueries(
                7):  # 3 for language, 2 for codes, 1 for bases, 1 for codebook
            t = GetQueries(codebook=A.id).run()
            result = set(tuple(row) for row in t)
        code = codes[3]
        self.assertIn((code.id, "test", "query"), result)
        self.assertEqual(len(result), N)
コード例 #7
0
def clear_codebook_cache():
    """Clear the local codebook cache manually, ie in between test runs"""
    clear_cache(Codebook)