def test_codebook_to_xml(self):
        # Empty codebook
        cb = codebook_to_xml(amcattest.create_test_codebook())

        self.assertEquals(cb.tag, "codebook")
        children = [c.tag for c in cb.iterchildren()]

        for prop in ("project_id", "name", "roots", "id"):
            self.assertTrue(prop in children)

        self.assertFalse(len([c for c in cb.find("roots")]))

        # Codebook with two roots
        cb = codebook_to_xml(amcattest.create_test_codebook_with_codes()[0])
        self.assertEquals([c.find("label").text for c in cb.find("roots")], ["A", "B"])
        self.assertTrue("A1a" in etree.tostring(cb))

        # Test unicode
        cb = amcattest.create_test_codebook_with_codes()[0]
        c = cb.codes[0]
        c.label = u"\u2603"  # It's Mr. Snowman!
        c.save()

        # Shouldn't raise errors
        cb = codebook_to_xml(Codebook.objects.get(id=cb.id))
        etree.tostring(cb)
示例#2
0
    def test_codebook_to_xml(self):
        # Empty codebook
        cb = codebook_to_xml(amcattest.create_test_codebook())

        self.assertEquals(cb.tag, "codebook")
        children = [c.tag for c in cb.iterchildren()]

        for prop in ("project_id", "name", "roots", "id"):
            self.assertTrue(prop in children)

        self.assertFalse(len([c for c in cb.find("roots")]))

        # Codebook with two roots
        cb = codebook_to_xml(amcattest.create_test_codebook_with_codes()[0])
        self.assertEquals([c.find("label").text for c in cb.find("roots")],
                          ["A", "B"])
        self.assertTrue("A1a" in etree.tostring(cb))

        # Test unicode
        cb = amcattest.create_test_codebook_with_codes()[0]
        label = cb.codes[0].labels.all()[0]
        label.label = u"\u2603"  # It's Mr. Snowman!
        label.save()

        # Shouldn't raise errors
        cb = codebook_to_xml(Codebook.objects.get(id=cb.id))
        etree.tostring(cb)
    def test_nqueries(self):
        from amcat.tools import amcatlogging
        amcatlogging.setup()

        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=7)
        articles = list(job.articleset.articles.all())

        log.info(codes)
        amcattest.create_test_coding(codingjob=job, article=articles[0]).update_values({strf:"bla", intf:1, codef:codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[1]).update_values({strf:"bla", intf:1, codef:codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[2]).update_values({strf:"bla", intf:1, codef:codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[3]).update_values({strf:"bla", intf:1, codef:codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[4]).update_values({strf:"bla", intf:1, codef:codes["A1b"].id})

        codingjobs = list(CodingJob.objects.filter(pk__in=[job.id]))
        c = list(codingjobs[0].codings)[0]
        amcatlogging.debug_module('django.db.backends')

        script = self._get_results_script([job], {strf : {}, intf : {}})
        with self.checkMaxQueries(8):
            list(csv.reader(StringIO(script.run())))


        script = self._get_results_script([job], {strf : {}, intf : {}, codef : dict(ids=True)})
        with self.checkMaxQueries(8):
            list(csv.reader(StringIO(script.run())))


        script = self._get_results_script([job], {strf : {}, intf : {}, codef : dict(labels=True)})
        with self.checkMaxQueries(8):
            list(csv.reader(StringIO(script.run())))
示例#4
0
    def test_results(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef, _, _ = amcattest.create_test_schema_with_fields(codebook=codebook,
                                                                                       isarticleschema=True)
        sschema, codebook, sstrf, sintf, scodef, _, _ = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=sschema, articleschema=schema, narticles=5)
        articles = list(job.articleset.articles.all())

        c = amcattest.create_test_coding(codingjob=job, article=articles[0])

        # test simple coding with a codebook code
        c.update_values({strf: "bla", intf: 1, codef: codes["A1b"].id})
        self.assertEqual(self._get_results([job], {strf: {}, intf: {}, codef: dict(ids=True)}),
                         [('bla', 1, codes["A1b"].id)])
        # test multiple codings and parents
        c2 = amcattest.create_test_coding(codingjob=job, article=articles[1])
        c2.update_values({strf: "blx", intf: 1, codef: codes["B1"].id})
        self.assertEqual(set(self._get_results([job], {strf: {}, intf: {}, codef: dict(labels=True, parents=2)})),
                         {('bla', 1, "A", "A1", "A1b"), ('blx', 1, "B", "B1", "B1")})


        # test sentence result
        s = amcattest.create_test_sentence(article=articles[0])
        sc = amcattest.create_test_coding(codingjob=job, article=articles[0], sentence=s)
        sc.update_values({sstrf: "z", sintf: -1, scodef: codes["A"].id})

        self.assertEqual(set(self._get_results([job], {strf: {}, sstrf: {}, sintf: {}}, export_level=2)),
                         {('bla', 'z', -1), ('blx', None, None)})
示例#5
0
    def test_non_unique_label(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()

        codes["A1"].label = "A"
        codes["A1"].save()

        self.assertRaises(DuplicateLabelError, MediumCategory, codebook=codebook)
    def test_nqueries(self):
        from amcat.tools import amcatlogging
        amcatlogging.setup()

        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=7)
        articles = list(job.articleset.articles.all())
        
        amcattest.create_test_coding(codingjob=job, article=articles[0]).update_values({strf:"bla", intf:1, codef:codes["A1b"]})
        amcattest.create_test_coding(codingjob=job, article=articles[1]).update_values({strf:"bla", intf:1, codef:codes["A1b"]})
        amcattest.create_test_coding(codingjob=job, article=articles[2]).update_values({strf:"bla", intf:1, codef:codes["A1b"]})
        amcattest.create_test_coding(codingjob=job, article=articles[3]).update_values({strf:"bla", intf:1, codef:codes["A1b"]})
        amcattest.create_test_coding(codingjob=job, article=articles[4]).update_values({strf:"bla", intf:1, codef:codes["A1b"]})                        

        codingjobs = list(CodingJob.objects.filter(pk__in=[job.id]))
        c = codingjobs[0].codings.all()[0]
        amcatlogging.debug_module('django.db.backends')

        script = self._get_results_script([job], {strf : {}, intf : {}})
        with self.checkMaxQueries(5):
            list(csv.reader(StringIO(script.run())))


        script = self._get_results_script([job], {strf : {}, intf : {}, codef : dict(ids=True)})
        with self.checkMaxQueries(5):
            list(csv.reader(StringIO(script.run())))


        script = self._get_results_script([job], {strf : {}, intf : {}, codef : dict(labels=True)})
        with self.checkMaxQueries(5):
            list(csv.reader(StringIO(script.run())))
示例#7
0
    def test_nqueries(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef, _, _ = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=7)
        articles = list(job.articleset.articles.all())

        log.info(codes)
        amcattest.create_test_coding(codingjob=job, article=articles[0]).update_values(
            {strf: "bla", intf: 1, codef: codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[1]).update_values(
            {strf: "bla", intf: 1, codef: codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[2]).update_values(
            {strf: "bla", intf: 1, codef: codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[3]).update_values(
            {strf: "bla", intf: 1, codef: codes["A1b"].id})
        amcattest.create_test_coding(codingjob=job, article=articles[4]).update_values(
            {strf: "bla", intf: 1, codef: codes["A1b"].id})

        codingjobs = list(CodingJob.objects.filter(pk__in=[job.id]))
        c = list(codingjobs[0].codings)[0]

        script = self._get_results_script([job], {strf: {}, intf: {}})
        with self.checkMaxQueries(9):
            list(csv.reader(StringIO(script.run())))

        script = self._get_results_script([job], {strf: {}, intf: {}, codef: dict(ids=True)})
        with self.checkMaxQueries(9):
            list(csv.reader(StringIO(script.run())))

        script = self._get_results_script([job], {strf: {}, intf: {}, codef: dict(labels=True)})
        with self.checkMaxQueries(9):
            list(csv.reader(StringIO(script.run())))
    def test_results(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef = amcattest.create_test_schema_with_fields(codebook=codebook, isarticleschema=True)
        sschema, codebook, sstrf, sintf, scodef = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=sschema, articleschema=schema, narticles=5)
        articles = list(job.articleset.articles.all())

        c = amcattest.create_test_coding(codingjob=job, article=articles[0])

        # test simple coding with a codebook code
        c.update_values({strf:"bla", intf:1, codef:codes["A1b"].id})
        self.assertEqual(self._get_results([job], {strf : {}, intf : {}, codef : dict(ids=True)}),
                         [('bla', 1, codes["A1b"].id)])
        # test multiple codings and parents
        c2 = amcattest.create_test_coding(codingjob=job, article=articles[1])
        c2.update_values({strf:"blx", intf:1, codef:codes["B1"].id})
        self.assertEqual(set(self._get_results([job], {strf : {}, intf : {}, codef : dict(labels=True, parents=2)})),
                         {('bla', 1, "A", "A1", "A1b"), ('blx', 1, "B", "B1", "B1")})


        # test sentence result
        s = amcattest.create_test_sentence(article=articles[0])
        sc = amcattest.create_test_coding(codingjob=job, article=articles[0], sentence=s)
        sc.update_values({sstrf:"z", sintf:-1, scodef:codes["A"].id})

        self.assertEqual(set(self._get_results([job], {strf : {}, sstrf : {}, sintf : {}}, export_level=2)),
                         {('bla', 'z', -1), ('blx', None, None)})
示例#9
0
    def setUp(self):
        self.de = Language.objects.get(label="de")
        self.nl = Language.objects.get(label="nl")
        self.default = Language.objects.get(id=1)

        self.codebook = amcattest.create_test_codebook_with_codes()[0]
        self.codes_list = sorted(self.codebook.codes.all(), key=lambda c:c.id)
        self.codes_list[0].add_label(self.de, "Ein")
        self.codes_list[1].add_label(self.nl, "Een")
    def setUp(self):
        self.de = Language.objects.get(label="de")
        self.nl = Language.objects.get(label="nl")
        self.default = Language.objects.get(id=1)

        self.codebook = amcattest.create_test_codebook_with_codes()[0]
        self.codes_list = sorted(self.codebook.codes.all(), key=lambda c: c.id)
        self.codes_list[0].add_label(self.de, "Ein")
        self.codes_list[1].add_label(self.nl, "Een")
示例#11
0
    def get_form(self, **kwargs):
        codebook = None

        if "project" in kwargs:
            project = kwargs.pop("project")
        else:
            codebook = amcattest.create_test_codebook_with_codes()[0]
            project = codebook.project

        return project, codebook, SelectionForm(project, data=kwargs)
示例#12
0
    def test_invalid_reference(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        Medium.objects.bulk_create(Medium(name=l) for l in codes)

        # Should raise no error..
        MediumCategory(codebook=codebook)

        # Delete one medium, so one reference doesn't exist
        Medium.objects.all()[0].delete()
        self.assertRaises(InvalidReferenceError, MediumCategory, codebook=codebook)
示例#13
0
    def get_form(self, **kwargs):
        codebook = None

        if "project" in kwargs:
            project = kwargs.pop("project")
        else:
            codebook = amcattest.create_test_codebook_with_codes()[0]
            project = codebook.project

        return project, codebook, SelectionForm(project, data=kwargs)
    def test_clean_tree(self):
        import functools

        o1, o2 = amcattest.create_test_code(), amcattest.create_test_code()
        codebook, codebook_codes = amcattest.create_test_codebook_with_codes()
        schema_with_fields = amcattest.create_test_schema_with_fields(codebook=codebook)

        schema = schema_with_fields[0]
        code_field = schema_with_fields[4]

        c = functools.partial(self.condition, schema)

        tree = parse(c("{code_field.id}=={o1.id}".format(**locals())))
        self.assertRaises(ValidationError, clean_tree, schema, tree)
        tree = parse(c("{code_field.id}=={code.id}".format(code_field=code_field, code=codebook.codes[0])))
        self.assertEquals(clean_tree(schema, tree), None)
        self.assertRaises(ValidationError, clean_tree, amcattest.create_test_schema_with_fields()[0], tree)
示例#15
0
    def test_create_missing(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        Medium.objects.bulk_create(Medium(name=l) for l in codes)

        # Should raise no error..
        MediumCategory(codebook=codebook)

        # Delete one medium, so one reference doesn't exist
        medium = Medium.objects.all()[0]
        medium.delete()
        self.assertRaises(Medium.DoesNotExist, Medium.objects.get, id=medium.id)
        self.assertRaises(Medium.DoesNotExist, Medium.objects.get, name=medium.name)

        # Medium should exist again after instantiating MediumCategory
        MediumCategory(codebook=codebook, create_missing=True)
        self.assertRaises(Medium.DoesNotExist, Medium.objects.get, id=medium.id)
        self.assertEqual(1, Medium.objects.filter(name=medium.name).count())
示例#16
0
    def test_update_values(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef, _, _ = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=7)
        articles = list(job.articleset.articles.all())

        coding = amcattest.create_test_coding(codingjob=job, article=articles[0])
        self.assertEqual(0, coding.values.count())
        coding.update_values({strf: "bla", intf: 1, codef: codes["A1b"].id})
        self.assertEqual(3, coding.values.count())
        self.assertTrue(strf in dict(coding.get_values()))
        self.assertTrue(intf in dict(coding.get_values()))
        self.assertTrue(codef in dict(coding.get_values()))
        self.assertEqual(1, dict(coding.get_values())[intf])

        # Does update_values delete values not present in dict?
        coding.update_values({strf: "blas"})
        self.assertEqual(1, coding.values.count())
        self.assertTrue(strf in dict(coding.get_values()))
        self.assertEqual("blas", dict(coding.get_values())[strf])
示例#17
0
    def test_update_values(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        schema, codebook, strf, intf, codef = amcattest.create_test_schema_with_fields(codebook=codebook)
        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=7)
        articles = list(job.articleset.articles.all())

        coding = amcattest.create_test_coding(codingjob=job, article=articles[0])
        self.assertEqual(0, coding.values.count())
        coding.update_values({strf: "bla", intf: 1, codef: codes["A1b"].id})
        self.assertEqual(3, coding.values.count())
        self.assertTrue(strf in dict(coding.get_values()))
        self.assertTrue(intf in dict(coding.get_values()))
        self.assertTrue(codef in dict(coding.get_values()))
        self.assertEqual(1, dict(coding.get_values())[intf])

        # Does update_values delete values not present in dict?
        coding.update_values({strf: "blas"})
        self.assertEqual(1, coding.values.count())
        self.assertTrue(strf in dict(coding.get_values()))
        self.assertEqual("blas", dict(coding.get_values())[strf])
示例#18
0
    def test_clean_tree(self):
        import functools

        o1, o2 = amcattest.create_test_code(), amcattest.create_test_code()
        codebook, codebook_codes = amcattest.create_test_codebook_with_codes()
        schema_with_fields = amcattest.create_test_schema_with_fields(
            codebook=codebook)

        schema = schema_with_fields[0]
        code_field = schema_with_fields[4]

        c = functools.partial(self.condition, schema)

        tree = parse(c("{code_field.id}=={o1.id}".format(**locals())))
        self.assertRaises(ValidationError, clean_tree, schema, tree)
        tree = parse(
            c("{code_field.id}=={code.id}".format(code_field=code_field,
                                                  code=codebook.codes[0])))
        self.assertEquals(clean_tree(schema, tree), None)
        self.assertRaises(ValidationError, clean_tree,
                          amcattest.create_test_schema_with_fields()[0], tree)
示例#19
0
    def test_aggregate(self):
        codebook, codes = amcattest.create_test_codebook_with_codes()
        Medium.objects.bulk_create(Medium(name=l) for l in codes)

        category = MediumCategory(codebook=codebook)
        value = AverageValue(CodingSchemaField())

        # Should all collapse into 'A'
        medium_A   = Medium.objects.get(name="A")
        medium_A1  = Medium.objects.get(name="A1")
        medium_A1b = Medium.objects.get(name="A1b")

        rows = [
            # Medium        count  average
            [medium_A.id,   1,     Decimal(1)  ],
            [medium_A1.id,  2,     Decimal(2)  ],
            [medium_A1b.id, 1,     Decimal(3)]
        ]

        self.assertEqual(
            set(map(tuple, category.aggregate([category], value, rows))),
            {(medium_A.id, 4, Decimal(2))}
        )