diff --git a/arkindex/documents/consumers.py b/arkindex/documents/consumers.py index 49723dc9b13d20afb1ab5517cb87937c62e08004..72ac063a385ef4e5ce92187dc55b64b0b8c67e7f 100644 --- a/arkindex/documents/consumers.py +++ b/arkindex/documents/consumers.py @@ -3,7 +3,6 @@ from channels.consumer import SyncConsumer from django.db.models import Q from django.db.models.deletion import Collector from django.db.models.signals import pre_delete -from arkindex_common.enums import MetaType from arkindex.project.tools import disconnect_signal from arkindex.project.triggers import reindex_start from arkindex.dataimport.models import Event, Revision @@ -130,8 +129,6 @@ class MLResultsConsumer(SyncConsumer): # Metadata are not considered ML results so we need to keep them: update them to unlink entities. logger.info('Updating element metadata') MetaData.objects.filter(element__in=elements).update(entity_id=None) - # TODO: Remove MetaType.Entity entirely - MetaData.objects.filter(element__in=elements, type=MetaType.Entity).update(type=MetaType.Text) # We removed transcriptions earlier, which implies removing the links with entities. # All is left is to remove 'lonely' entities. diff --git a/arkindex/documents/migrations/0031_remove_entity_metatype.py b/arkindex/documents/migrations/0031_remove_entity_metatype.py new file mode 100644 index 0000000000000000000000000000000000000000..fbb648b4d7c871fc6b4923cd62e971b05a4a989e --- /dev/null +++ b/arkindex/documents/migrations/0031_remove_entity_metatype.py @@ -0,0 +1,50 @@ +# Generated by Django 2.2 on 2019-12-13 10:28 + +from django.db import migrations +from arkindex_common.enums import EntityType +from enum import Enum + + +def remove_entity_metatype(apps, schema_editor): + MetaData = apps.get_model('documents', 'MetaData') + if not MetaData.objects.exists(): + return + + class OldMetaType(Enum): + Text = 'text' + HTML = 'html' + Date = 'date' + Location = 'location' + Reference = 'reference' + Entity = 'entity' + + # Don't try this at home + MetaData._meta.fields[2].enum = OldMetaType + + MetaData.objects.filter(type=OldMetaType.Entity, entity__type=EntityType.Location).update(type=OldMetaType.Location) + MetaData.objects.filter(type=OldMetaType.Entity, entity__type=EntityType.Date).update(type=OldMetaType.Date) + MetaData.objects.filter(type=OldMetaType.Entity).update(type=OldMetaType.Text) + + +def add_entity_metatype(apps, schema_editor): + MetaData = apps.get_model('documents', 'MetaData') + if not MetaData.objects.exists(): + return + + class OldMetaType(Enum): + Entity = 'entity' + + # Don't try this at home + MetaData._meta.fields[2].enum = OldMetaType + MetaData.objects.exclude(entity__isnull=True).update(type=OldMetaType.Entity) + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0030_rename_classification_best'), + ] + + operations = [ + migrations.RunPython(remove_entity_metatype, add_entity_metatype), + ] diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py index 2535ba99838a4f8cda967c950133a9cb43221235..8a4493fdfe3b61c2d8054b59c5235daa2b9a3fe8 100644 --- a/arkindex/documents/serializers/elements.py +++ b/arkindex/documents/serializers/elements.py @@ -229,7 +229,7 @@ class ElementSerializer(ElementSlimSerializer): def get_metadata(self, obj): return MetaDataLightSerializer( - list(obj.metadatas.all().filter(entity__isnull=True).exclude(type=MetaType.Entity)), + list(obj.metadatas.all().filter(entity__isnull=True)), many=True ).data diff --git a/arkindex/documents/tei.py b/arkindex/documents/tei.py index 0da96c338e1f218848a614489c0cb3f86945f670..65f0ba82daa44f8f9df34f24cbd15fc238b85451 100644 --- a/arkindex/documents/tei.py +++ b/arkindex/documents/tei.py @@ -94,7 +94,7 @@ class TeiParser(BaseTeiParser): for index, xmlmeta in enumerate(metadatas): # Handle entities entity = None - if xmlmeta.type == MetaType.Entity and xmlmeta.entity_type is not None: + if xmlmeta.entity_type is not None: source, _ = DataSource.objects.get_or_create( type=MLToolType.NER, slug='TEI', diff --git a/arkindex/documents/tests/consumers/test_ml_results_consumer.py b/arkindex/documents/tests/consumers/test_ml_results_consumer.py index 6e38dedce4e4625365c7dc2840c75038f050e5b4..afa98755d1be8de6bf362c6d455defe4c6998df7 100644 --- a/arkindex/documents/tests/consumers/test_ml_results_consumer.py +++ b/arkindex/documents/tests/consumers/test_ml_results_consumer.py @@ -36,7 +36,7 @@ class TestMLResultsConsumer(FixtureTestCase): source=source, ) cls.page1.metadatas.create( - type=MetaType.Entity, + type=MetaType.Text, name='something', value='Some entity 1', entity=entity1, @@ -64,7 +64,7 @@ class TestMLResultsConsumer(FixtureTestCase): source=source, ) cls.page2.metadatas.create( - type=MetaType.Entity, + type=MetaType.Text, name='something', value='Some entity 2', entity=entity2, @@ -104,7 +104,7 @@ class TestMLResultsConsumer(FixtureTestCase): self.assertEqual(self.page1.metadatas.count(), 2) self.assertEqual(self.page2.metadatas.count(), 2) - with self.assertNumQueries(17): + with self.assertNumQueries(16): MLResultsConsumer({}).ml_results_delete({'corpus_id': str(self.corpus.id)}) for queryset in querysets: @@ -144,7 +144,7 @@ class TestMLResultsConsumer(FixtureTestCase): for queryset in folder2_querysets: self.assertTrue(queryset.exists()) - with self.assertNumQueries(18): + with self.assertNumQueries(17): MLResultsConsumer({}).ml_results_delete({'element_id': str(self.folder1.id)}) for queryset in folder1_querysets: @@ -158,7 +158,7 @@ class TestMLResultsConsumer(FixtureTestCase): self.assertEqual(metadata.type, MetaType.Text) self.assertIsNone(metadata.entity) metadata = self.page2.metadatas.get(value='Some entity 2') - self.assertEqual(metadata.type, MetaType.Entity) + self.assertEqual(metadata.type, MetaType.Text) self.assertIsNotNone(metadata.entity) get_layer_mock().send.assert_called_once_with('reindex', { diff --git a/arkindex/documents/tests/consumers/test_reindex_consumer.py b/arkindex/documents/tests/consumers/test_reindex_consumer.py index 44c41b98c9dad9788f23cf803ff4311776c37dd8..6274f332c2ed5f8801e146c541aef00f156e6caa 100644 --- a/arkindex/documents/tests/consumers/test_reindex_consumer.py +++ b/arkindex/documents/tests/consumers/test_reindex_consumer.py @@ -16,7 +16,7 @@ class TestReindexConsumer(FixtureTestCase): cls.folder = cls.corpus.elements.get(name='Volume 1') cls.folder.metadatas.create( - type=MetaType.Entity, + type=MetaType.Text, name='something', value='Some entity', entity=cls.corpus.entities.create( diff --git a/arkindex/documents/tests/test_entities.py b/arkindex/documents/tests/test_entities.py index 9bf10b6497309a437c9e9ce28e1de3539d8cef96..bd8d6ab61230131cf32476d1c77280a9dd4993c9 100644 --- a/arkindex/documents/tests/test_entities.py +++ b/arkindex/documents/tests/test_entities.py @@ -70,7 +70,7 @@ class TestSaveEntities(FixtureTestCase): with self.assertRaises(ValidationError): MetaData.objects.create( name='test 1', - type=MetaType.Entity, + type=MetaType.Text, value='Blah', element=element, entity=self.parent, diff --git a/arkindex/documents/tests/test_entities_api.py b/arkindex/documents/tests/test_entities_api.py index 2ee4d7ba680a09921409cffa725f8eaf97836d20..13415c146cfd9c69aa7b4928d9068892e87fcb86 100644 --- a/arkindex/documents/tests/test_entities_api.py +++ b/arkindex/documents/tests/test_entities_api.py @@ -50,7 +50,7 @@ class TestEntitiesAPI(FixtureAPITestCase): ) self.metadata = self.page.metadatas.create( name='test 1', - type=MetaType.Entity, + type=MetaType.Text, value='Blah', element=self.page, entity=self.entity, @@ -485,7 +485,7 @@ class TestEntitiesAPI(FixtureAPITestCase): """ List an element's entities sorted depending on their origin (metadata or transcriptions) """ - md = self.page.metadatas.create(name='some_metadata', type=MetaType.Entity, value='something') + md = self.page.metadatas.create(name='some_metadata', type=MetaType.Location, value='something') md.entity = self.entity_bis md.save() with self.assertNumQueries(10): diff --git a/arkindex/documents/tests/test_tei.py b/arkindex/documents/tests/test_tei.py index bb2a02bf9270da7b4816526df062c2c4999cff6a..da6c3c7fca906e7bc2624527cd0d6d0e02a95c45 100644 --- a/arkindex/documents/tests/test_tei.py +++ b/arkindex/documents/tests/test_tei.py @@ -79,7 +79,7 @@ class TestTeiElement(FixtureTestCase): { 'name': 'location', 'index': 0, - 'type': MetaType.Entity, + 'type': MetaType.Location, 'value': 'Mars', 'entity__name': 'Mars', 'entity__type': EntityType.Location, @@ -87,7 +87,7 @@ class TestTeiElement(FixtureTestCase): { 'name': 'person', 'index': 1, - 'type': MetaType.Entity, + 'type': MetaType.Text, 'value': 'The Chosen One', 'entity__name': 'The Chosen One', 'entity__type': EntityType.Person, @@ -120,7 +120,7 @@ class TestTeiElement(FixtureTestCase): { 'name': 'person', 'index': 0, - 'type': MetaType.Entity, + 'type': MetaType.Text, 'value': 'Someone', 'entity__name': 'Someone', 'entity__type': EntityType.Person, @@ -128,7 +128,7 @@ class TestTeiElement(FixtureTestCase): { 'name': 'place', 'index': 0, - 'type': MetaType.Entity, + 'type': MetaType.Location, 'value': 'Somewhere', 'entity__name': 'Somewhere', 'entity__type': EntityType.Location, @@ -147,7 +147,7 @@ class TestTeiElement(FixtureTestCase): { 'name': 'person', 'index': 0, - 'type': MetaType.Entity, + 'type': MetaType.Text, 'value': 'Someone else', 'entity__name': 'Someone else', 'entity__type': EntityType.Person, @@ -155,7 +155,7 @@ class TestTeiElement(FixtureTestCase): { 'name': 'subject', 'index': 0, - 'type': MetaType.Entity, + 'type': MetaType.Text, 'value': 'Something', 'entity__name': 'Something', 'entity__type': EntityType.Subject,