Skip to content
Snippets Groups Projects
Commit 777f50bc authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Sort metadata for nicer display

See merge request !103
parents 756d6fdc 62956eae
No related branches found
No related tags found
1 merge request!103Sort metadata
......@@ -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