Skip to content
Snippets Groups Projects
Commit 62956eae authored by Erwan Rouchet's avatar Erwan Rouchet Committed by Bastien Abadie
Browse files

Sort metadata

parent 756d6fdc
No related branches found
No related tags found
No related merge requests found
......@@ -513,3 +513,28 @@ class MetaData(models.Model):
unique_together = (
('element', 'name'),
)
def is_single_line(self):
return self.type != MetaType.HTML and not self.is_list() and len(self.value.splitlines()) <= 1
def is_list(self):
# TODO: Remove is_list when we move to Entities
return self.name.lower() in ('persons', 'places', 'subjects')
def __eq__(self, other):
if not isinstance(other, MetaData):
return False
return (self.is_single_line(), self.type == MetaType.HTML, self.is_list(), self.name) == (
other.is_single_line(), other.type == MetaType.HTML, other.is_list(), self.name)
def __gt__(self, other):
if self.is_single_line():
return self.name.__gt__(other.name)
if self.type == MetaType.HTML:
return other.is_single_line()
if self.is_list():
return other.is_single_line() or other.type == MetaType.HTML
return True
def __ge__(self, other):
return self.__eq__(other) or self.__gt__(other)
......@@ -112,7 +112,10 @@ class ActSerializer(serializers.ModelSerializer):
read_only=True,
)
children = ElementLightSerializer(source='child_elements', read_only=True, many=True)
metadatas = MetaDataSerializer(read_only=True, many=True)
metadata = serializers.SerializerMethodField()
def get_metadata(self, obj):
return MetaDataSerializer(sorted(list(obj.metadatas.all())), many=True).data
class Meta:
model = Act
......@@ -122,7 +125,7 @@ class ActSerializer(serializers.ModelSerializer):
'number',
'parents',
'children',
'metadatas',
'metadata',
)
read_only_fields = ('id', )
......
......@@ -59,7 +59,7 @@ class TestAct(FixtureAPITestCase):
'type': 'surface',
}
],
'metadatas': []}
'metadata': []}
)
def test_act_metadatas(self):
......@@ -68,7 +68,7 @@ class TestAct(FixtureAPITestCase):
# No metadatas in api
response = self.client.get(reverse('api:act-edit', kwargs={'pk': self.act.id}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertListEqual(response.json()['metadatas'], [])
self.assertListEqual(response.json()['metadata'], [])
# Create some metadatas
metas = [
......@@ -81,7 +81,7 @@ class TestAct(FixtureAPITestCase):
response = self.client.get(reverse('api:act-edit', kwargs={'pk': self.act.id}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertListEqual(
response.json()['metadatas'],
response.json()['metadata'],
[{'id': str(metas[1].id),
'name': 'origin',
'type': 'date',
......
from arkindex.documents.models import MetaData, MetaType
from django.test import TestCase
class TestMetaData(TestCase):
def test_sort(self):
data = [
MetaData(name="persons", type=MetaType.Text, value='a'),
MetaData(name="location", type=MetaType.Location, value='somewhere'),
MetaData(name="summary", type=MetaType.HTML, value='<a>a</a>'),
MetaData(name="places", type=MetaType.Text, value='a\na'),
MetaData(name="something", type=MetaType.Text, value='in one line'),
MetaData(name="other thing", type=MetaType.Text, value='in\nmultiple\nlines'),
MetaData(name="subjects", type=MetaType.Text, value='a\na\na'),
MetaData(name="date", type=MetaType.Date, value='1337-04-02'),
]
data = sorted(data)
self.assertListEqual(
[m.name for m in data],
['date', 'location', 'something', 'summary', 'persons', 'places', 'subjects', 'other thing'],
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment