Пример #1
0
 def _get_args(self, n_articles):
     s = amcattest.create_test_set(articles=n_articles)
     u = amcattest.create_test_user()
     uschema = amcattest.create_test_schema()
     aschema = amcattest.create_test_schema(isarticleschema=True)
     return dict(project=s.project.id,
                 articleset=s.id,
                 coder=u.id,
                 articleschema=aschema.id,
                 unitschema=uschema.id,
                 insertuser=u.id)
Пример #2
0
    def _get_args(self, n_articles):
        s = amcattest.create_test_set(articles=n_articles)
        u = amcattest.create_test_user()
        uschema = amcattest.create_test_schema()
        aschema = amcattest.create_test_schema(isarticleschema=True)

        return {
            "project": s.project.id,
            "articleset": s.id,
            "coder": u.id,
            "articleschema": aschema.id,
            "unitschema": uschema.id,
            "insertuser": u.id,
        }
Пример #3
0
    def _get_args(self, n_articles):
        s = amcattest.create_test_set(articles=n_articles)
        u = amcattest.create_test_user()
        uschema = amcattest.create_test_schema()
        aschema = amcattest.create_test_schema(isarticleschema=True)

        return {
            "project": s.project.id,
            "articleset": s.id,
            "coder": u.id,
            "articleschema": aschema.id,
            "unitschema": uschema.id,
            "insertuser": u.id,
        }
Пример #4
0
    def setUp(self):
        from amcat.models.coding.coding import CodingValue
        # create a coding job set with a sensible schema and some articles to 'code'
        self.schema = amcattest.create_test_schema()
        self.codebook = amcattest.create_test_codebook()
        self.code = amcattest.create_test_code(label="CODED")
        self.codebook.add_code(self.code)

        texttype = CodingSchemaFieldType.objects.get(pk=1)
        inttype = CodingSchemaFieldType.objects.get(pk=2)
        codetype = CodingSchemaFieldType.objects.get(pk=5)

        create = CodingSchemaField.objects.create
        self.textfield = create(codingschema=self.schema,
                                fieldnr=1,
                                fieldtype=texttype,
                                label="Text")
        self.intfield = create(codingschema=self.schema,
                               fieldnr=2,
                               fieldtype=inttype,
                               label="Number")
        self.codefield = create(codingschema=self.schema,
                                fieldnr=3,
                                fieldtype=codetype,
                                label="Code",
                                codebook=self.codebook)

        self.users = [amcattest.create_test_user() for _x in range(2)]

        self.articles, self.jobs, self.asets = [], [], []
        for i, user in enumerate([0, 0, 0, 0, 1]):
            aset = amcattest.create_test_set(articles=2 * (i + 1))
            self.articles += list(aset.articles.all())
            self.asets.append(aset)
            job = amcattest.create_test_job(articleschema=self.schema,
                                            unitschema=self.schema,
                                            coder=self.users[user],
                                            articleset=aset)
            self.jobs.append(job)

        self.an1 = Coding.objects.create(codingjob=self.jobs[0],
                                         article=self.articles[0])
        self.an2 = Coding.objects.create(codingjob=self.jobs[0],
                                         article=self.articles[1])
        self.an2.set_status(STATUS_COMPLETE)
        self.an2.comments = 'Makkie!'
        self.an2.save()

        sent = amcattest.create_test_sentence()
        self.sa1 = Coding.objects.create(codingjob=self.jobs[0],
                                         article=self.articles[0],
                                         sentence=sent)
        self.sa2 = Coding.objects.create(codingjob=self.jobs[0],
                                         article=self.articles[0],
                                         sentence=sent)
        create = CodingValue.objects.create
        create(coding=self.sa1, field=self.intfield, intval=1)
        create(coding=self.sa1, field=self.textfield, strval="bla")
        create(coding=self.sa2, field=self.textfield, strval="blx")
        create(coding=self.sa1, field=self.codefield, intval=self.code.id)
Пример #5
0
    def test_unicode(self):
        """Test whether the export can handle unicode in column names and cell values"""
        schema = amcattest.create_test_schema(isarticleschema=True)
        s1 = 'S1 \xc4\u0193 \u02a2 \u038e\u040e'
        s2 = 'S2 \u053e\u06a8 \u090c  \u0b8f\u0c8a'
        f = CodingSchemaField.objects.create(codingschema=schema,
                                             fieldnr=1,
                                             label=s1,
                                             fieldtype_id=1,
                                             codebook=None)

        job = amcattest.create_test_job(unitschema=schema,
                                        articleschema=schema,
                                        narticles=5)

        articles = list(job.articleset.articles.all())
        amcattest.create_test_coding(
            codingjob=job, article=articles[0]).update_values({f: s2})

        # test csv
        s = self._get_results_script([job], {f: {}}, export_format='csv')

        data = base64.b64decode(s.run()['data']).decode('utf-8')
        table = [[cell for cell in row] for row in csv.reader(StringIO(data))]
        self.assertEqual(table, [[s1], [s2]])

        # test json
        s = self._get_results_script([job], {f: {}}, export_format='json')
        self.assertEqual(json.loads(s.run()),
                         [[s2]])  # json export has no header (?)
Пример #6
0
    def test_unicode_excel(self):
        """Test whether the export can handle unicode in column names and cell values"""
        try:
            import openpyxl
        except ImportError:
            raise unittest.SkipTest(
                "OpenPyxl not installed, skipping excel test")

        schema = amcattest.create_test_schema(isarticleschema=True)
        s1 = u'S1 \xc4\u0193 \u02a2 \u038e\u040e'
        s2 = u'S2 \u053e\u06a8 \u090c  \u0b8f\u0c8a'
        f = CodingSchemaField.objects.create(codingschema=schema,
                                             fieldnr=1,
                                             label=s1,
                                             fieldtype_id=1,
                                             codebook=None)

        job = amcattest.create_test_job(unitschema=schema,
                                        articleschema=schema,
                                        narticles=5)

        articles = list(job.articleset.articles.all())
        coding = amcattest.create_test_coding(codingjob=job,
                                              article=articles[0])
        coding.update_values({f: s2})

        # test excel, can't test content but we can test output and no error
        s = self._get_results_script([job], {f: {}}, export_format='xlsx')
        self.assertTrue(s.run())
Пример #7
0
 def test_create_field(self):
     """Can we create a schema field object on a schema"""
     fieldtype = CodingSchemaFieldType.objects.get(pk=1)
     a = amcattest.create_test_schema()
     f = CodingSchemaField.objects.create(codingschema=a,
                                          fieldnr=1,
                                          fieldtype=fieldtype)
     self.assertIsNotNone(f)
Пример #8
0
    def test_create_codingjob_batches(self):
        a = amcattest.create_test_set(10)

        cj = CodingJob()
        cj.project = a.project
        cj.name = "foo"
        cj.unitschema = amcattest.create_test_schema(project=a.project)
        cj.articleschema = amcattest.create_test_schema(isarticleschema=True, project=a.project)
        cj.coder = amcattest.create_test_user()
        cj.insertuser = amcattest.create_test_user()

        arts = a.articles.all().values_list("id", flat=True)

        cjs = create_codingjob_batches(cj, arts, 2)
        self.assertEqual(5, len(cjs))

        cjs = create_codingjob_batches(cj, arts, 3)
        self.assertEqual(4, len(cjs))
Пример #9
0
    def test_create_codingjob_batches(self):
        a = amcattest.create_test_set(10)

        cj = CodingJob()
        cj.project = a.project
        cj.name = "foo"
        cj.unitschema = amcattest.create_test_schema(project=a.project)
        cj.articleschema = amcattest.create_test_schema(isarticleschema=True,
                                                        project=a.project)
        cj.coder = amcattest.create_test_user()
        cj.insertuser = amcattest.create_test_user()

        arts = a.articles.all().values_list("id", flat=True)

        cjs = create_codingjob_batches(cj, arts, 2)
        self.assertEqual(5, len(cjs))

        cjs = create_codingjob_batches(cj, arts, 3)
        self.assertEqual(4, len(cjs))
Пример #10
0
 def test_create(self):
     """Can we create an coding?"""
     schema2 = amcattest.create_test_schema()
     j = amcattest.create_test_job(unitschema=self.schema, articleschema=schema2)
     a = amcattest.create_test_coding(codingjob=j)
     self.assertIsNotNone(a)
     self.assertIn(a.coded_article.article, j.articleset.articles.all())
     self.assertEqual(a.schema, schema2)
     a2 = amcattest.create_test_coding(codingjob=j,
                                       sentence=amcattest.create_test_sentence())
     self.assertEqual(a2.schema, self.schema)
Пример #11
0
 def test_create(self):
     """Can we create an coding?"""
     schema2 = amcattest.create_test_schema()
     j = amcattest.create_test_job(unitschema=self.schema, articleschema=schema2)
     a = amcattest.create_test_coding(codingjob=j)
     self.assertIsNotNone(a)
     self.assertIn(a.article, j.articleset.articles.all())
     self.assertEqual(a.schema, schema2)
     a2 = amcattest.create_test_coding(codingjob=j,
                                           sentence=amcattest.create_test_sentence())
     self.assertEqual(a2.schema, self.schema)
Пример #12
0
    def _create_job(self, fieldtypes):
        """Create a job whose schemas contain the given fields"""
        schema = amcattest.create_test_schema()

        for i, t in enumerate(fieldtypes):
            CodingSchemaField.objects.create(codingschema=schema,
                                             fieldnr=i,
                                             fieldtype=t,
                                             label="field%i" % i,
                                             codebook=self.codebook)
        return amcattest.create_test_job(articleschema=schema,
                                         unitschema=schema)
Пример #13
0
 def test_get_schemas(self):
     """Does get_schemas give the right results in the face of multiply imported schemas??"""
     p = amcattest.create_test_project()
     p2 = amcattest.create_test_project()
     p3 = amcattest.create_test_project()
     from django import forms
     cs = amcattest.create_test_schema(project=p)
     p.codingschemas.add(cs)
     p2.codingschemas.add(cs)
     class TestForm(forms.Form):
         c = forms.ModelChoiceField(queryset=p.get_codingschemas())
     
     self.assertEqual(len(p.get_codingschemas().filter(pk=cs.id)), 1)
     self.assertEqual(len(p2.get_codingschemas().filter(pk=cs.id)), 1)
     self.assertEqual(len(p3.get_codingschemas().filter(pk=cs.id)), 0)
Пример #14
0
    def test_get_schemas(self):
        """Does get_schemas give the right results in the face of multiply imported schemas??"""
        p = amcattest.create_test_project()
        p2 = amcattest.create_test_project()
        p3 = amcattest.create_test_project()
        from django import forms
        cs = amcattest.create_test_schema(project=p)
        p.codingschemas.add(cs)
        p2.codingschemas.add(cs)
        class TestForm(forms.Form):
            c = forms.ModelChoiceField(queryset=p.get_codingschemas())

        self.assertEqual(len(p.get_codingschemas().filter(pk=cs.id)), 1)
        self.assertEqual(len(p2.get_codingschemas().filter(pk=cs.id)), 1)
        self.assertEqual(len(p3.get_codingschemas().filter(pk=cs.id)), 0)
Пример #15
0
    def setUp(self):
        from amcat.models.coding.coding import CodingValue
        # create a coding job set with a sensible schema and some articles to 'code'
        self.schema = amcattest.create_test_schema()
        self.codebook = amcattest.create_test_codebook()
        self.code = amcattest.create_test_code(label="CODED")
        self.codebook.add_code(self.code)
        

        texttype = CodingSchemaFieldType.objects.get(pk=1)
        inttype = CodingSchemaFieldType.objects.get(pk=2)
        codetype = CodingSchemaFieldType.objects.get(pk=5)

        create = CodingSchemaField.objects.create
        self.textfield = create(codingschema=self.schema, fieldnr=1, fieldtype=texttype, 
                                label="Text")
        self.intfield = create(codingschema=self.schema,  fieldnr=2, fieldtype=inttype, 
                               label="Number")
        self.codefield = create(codingschema=self.schema, fieldnr=3, fieldtype=codetype, 
                                label="Code", codebook=self.codebook)

        self.users = [amcattest.create_test_user() for _x in range(2)]

        self.articles, self.jobs, self.asets = [], [], []
        for i, user in enumerate([0, 0, 0, 0, 1]):
            aset = amcattest.create_test_set(articles=2 * (i+1))
            self.articles += list(aset.articles.all())
            self.asets.append(aset)
            job = amcattest.create_test_job(articleschema=self.schema, unitschema=self.schema,
                                            coder = self.users[user], articleset=aset)
            self.jobs.append(job)
                    
        self.an1 = Coding.objects.create(codingjob=self.jobs[0], article=self.articles[0])
        self.an2 = Coding.objects.create(codingjob=self.jobs[0], article=self.articles[1])
        self.an2.set_status(STATUS_COMPLETE)
        self.an2.comments = 'Makkie!'
        self.an2.save()

        sent = amcattest.create_test_sentence()
        self.sa1 = Coding.objects.create(codingjob=self.jobs[0], article=self.articles[0], 
                                             sentence=sent)
        self.sa2 = Coding.objects.create(codingjob=self.jobs[0], article=self.articles[0], 
                                             sentence=sent)
        create = CodingValue.objects.create
        create(coding=self.sa1, field=self.intfield, intval=1)
        create(coding=self.sa1, field=self.textfield, strval="bla")
        create(coding=self.sa2, field=self.textfield, strval="blx")
        create(coding=self.sa1, field=self.codefield, intval=self.code.id)
Пример #16
0
 def test_update_values(self):
     """Does update_values on an coding work?"""
     a = amcattest.create_test_coding(codingjob=self.job)
     self.assertEqual(_valuestr(a), "")
     a.set_value(self.intfield, 12)
     self.assertEqual(_valuestr(a), "number:12")
     a.update_values({self.strfield:"bla"})
     self.assertEqual(_valuestr(a), "text:bla")
     a.update_values({self.strfield:None, self.intfield:"999", self.codefield:self.c})
     
     self.assertEqual(_valuestr(a), "code:CODED;number:999")
     
     newfield = CodingSchemaField.objects.create(
         codingschema=amcattest.create_test_schema(),
         label="text", fieldtype=self.strfield.fieldtype)
     self.assertRaises(ValueError, a.update_values, {newfield : "3"})
Пример #17
0
    def test_unicode_excel(self):        
        """Test whether the export can handle unicode in column names and cell values"""
        try:
            import openpyxl
        except ImportError:
            raise unittest.SkipTest("OpenPyxl not installed, skipping excel test")
        
        schema = amcattest.create_test_schema(isarticleschema=True)
        s1 = u'S1 \xc4\u0193 \u02a2 \u038e\u040e'
        s2 = u'S2 \u053e\u06a8 \u090c  \u0b8f\u0c8a'
        f = CodingSchemaField.objects.create(codingschema=schema, fieldnr=1, label=s1,
                                             fieldtype_id=1, codebook=None)

        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=5)

        articles = list(job.articleset.articles.all())
        amcattest.create_test_coding(codingjob=job, article=articles[0]).update_values({f:s2})
        
        # test excel, can't test content but we can test output and no error        
        s = self._get_results_script([job], {f : {}}, export_format='xlsx')
        self.assertTrue(s.run())
Пример #18
0
    def test_update_values(self):
        """Does update_values on an coding work?"""
        a = amcattest.create_test_coding(codingjob=self.job)
        self.assertEqual(_valuestr(a), "")
        a.set_value(self.intfield, 12)
        self.assertEqual(_valuestr(a), "number:12")
        a.update_values({self.strfield: "bla"})
        self.assertEqual(_valuestr(a), "text:'bla'")
        a.update_values({
            self.strfield: None,
            self.intfield: "999",
            self.codefield: self.c
        })

        self.assertEqual(_valuestr(a), "code:<Code: CODED>;number:999")

        newfield = CodingSchemaField.objects.create(
            codingschema=amcattest.create_test_schema(),
            label="text",
            fieldtype=self.strfield.fieldtype)
        self.assertRaises(ValueError, a.update_values, {newfield: "3"})
Пример #19
0
    def test_unicode(self):
        """Test whether the export can handle unicode in column names and cell values"""
        schema = amcattest.create_test_schema(isarticleschema=True)
        s1 = u'S1 \xc4\u0193 \u02a2 \u038e\u040e'
        s2 = u'S2 \u053e\u06a8 \u090c  \u0b8f\u0c8a'
        f = CodingSchemaField.objects.create(codingschema=schema, fieldnr=1, label=s1,
                                             fieldtype_id=1, codebook=None)

        job = amcattest.create_test_job(unitschema=schema, articleschema=schema, narticles=5)

        articles = list(job.articleset.articles.all())
        amcattest.create_test_coding(codingjob=job, article=articles[0]).update_values({f:s2})
        
        # test csv
        s = self._get_results_script([job], {f : {}}, export_format='csv')
        table = [[cell.decode('utf-8') for cell in row] for row in csv.reader(StringIO(s.run()))]
        self.assertEqual(table, [[s1], [s2]])

        # test json
        s = self._get_results_script([job], {f : {}}, export_format='json')
        self.assertEqual(json.loads(s.run()), [[s2]]) # json export has no header (?)
Пример #20
0
 def test_create(self):
     """Test whether coding schema objects can be created"""
     s = amcattest.create_test_schema(name='test')
     self.assertEqual(s.name, 'test')
Пример #21
0
 def test_create(self):
     """Test whether coding schema objects can be created"""
     s = amcattest.create_test_schema(name='test')
     self.assertEqual(s.name, 'test')
Пример #22
0
 def _get_args(self, n_articles):
     s = amcattest.create_test_set(articles=n_articles)
     u = amcattest.create_test_user()
     uschema = amcattest.create_test_schema()
     aschema = amcattest.create_test_schema(isarticleschema=True)
     return dict(project=s.project.id, articleset=s.id, coder=u.id, articleschema=aschema.id, unitschema=uschema.id, insertuser=u.id)
 def test_create_field(self):
     """Can we create a schema field object on a schema"""
     fieldtype = CodingSchemaFieldType.objects.get(pk=1)
     a = amcattest.create_test_schema()
     f = CodingSchemaField.objects.create(codingschema=a, fieldnr=1, fieldtype=fieldtype)
     self.assertIsNotNone(f)