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

Merge branch 'thumbnails-on-folders' into 'master'

Add thumbnail URLs on folders only and give PUT URLs to bots

See merge request !481
parents 1cb327af 415339af
No related branches found
No related tags found
1 merge request!481Add thumbnail URLs on folders only and give PUT URLs to bots
......@@ -65,13 +65,17 @@ class ElementSlimSerializer(serializers.ModelSerializer):
"""
type = serializers.SlugRelatedField(slug_field='slug', source='new_type', read_only=True)
corpus = CorpusLightSerializer(read_only=True)
thumbnail_url = serializers.URLField(source='thumbnail.s3_url', read_only=True)
thumbnail_put_url = serializers.URLField(source='thumbnail.s3_put_url', read_only=True)
thumbnail_url = serializers.SerializerMethodField(read_only=True)
thumbnail_put_url = serializers.SerializerMethodField(read_only=True)
zone = ZoneSerializer(read_only=True)
def get_s3_put_url(self, element):
def get_thumbnail_url(self, element):
if element.new_type.folder:
return element.thumbnail.s3_url
def get_thumbnail_put_url(self, element):
user = self.context['request'].user
if element.zone.image.server.is_local and user.is_authenticated and (user.is_admin or user.is_internal):
if user.is_authenticated and (user.is_admin or user.is_internal) and element.new_type.folder:
return element.thumbnail.s3_put_url
class Meta:
......
......@@ -42,6 +42,8 @@ class TestElementsAPI(FixtureAPITestCase):
self.assertEqual(data['name'], 'Volume 1')
self.assertEqual(data['corpus']['id'], str(self.corpus.id))
self.assertEqual(data['type'], 'volume')
self.assertEqual(data['thumbnail_url'], self.vol.thumbnail.s3_url)
self.assertIsNone(data['thumbnail_put_url'])
self.assertEqual(len(data['classifications']), 1)
cl = data['classifications'][0]
......@@ -49,6 +51,42 @@ class TestElementsAPI(FixtureAPITestCase):
self.assertEqual(cl['source']['id'], str(classification.source.id))
self.assertEqual(cl['ml_class']['id'], str(classification.ml_class.id))
def test_get_element_thumbnail_folder(self):
"""
Check getting an element only gives a thumbnail URL with folders
"""
self.assertTrue(self.vol.new_type.folder)
response = self.client.get(reverse('api:element-retrieve', kwargs={'pk': str(self.vol.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
data = response.json()
self.assertEqual(data['thumbnail_url'], self.vol.thumbnail.s3_url)
self.assertIsNone(data['thumbnail_put_url'])
self.assertFalse(self.page.new_type.folder)
response = self.client.get(reverse('api:element-retrieve', kwargs={'pk': str(self.page.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
data = response.json()
self.assertIsNone(data['thumbnail_url'])
self.assertIsNone(data['thumbnail_put_url'])
def test_get_element_thumbnail_put_internal(self):
"""
Check getting an element only gives a thumbnail PUT URL to bots for folders
"""
user = User.objects.create_internal_user('internal@internal.fr')
self.assertTrue(user.is_internal)
self.client.force_login(user)
self.assertTrue(self.vol.new_type.folder)
response = self.client.get(reverse('api:element-retrieve', kwargs={'pk': str(self.vol.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.json()['thumbnail_put_url'], self.vol.thumbnail.s3_put_url)
self.assertFalse(self.page.new_type.folder)
response = self.client.get(reverse('api:element-retrieve', kwargs={'pk': str(self.page.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIsNone(response.json()['thumbnail_put_url'])
def test_patch_element_unverified(self):
"""
Check patching an element with an unverified email is not possible
......@@ -622,6 +660,6 @@ class TestElementsAPI(FixtureAPITestCase):
"public": self.corpus.public,
},
"thumbnail_url": nested_volume.thumbnail.s3_url,
"thumbnail_put_url": nested_volume.thumbnail.s3_put_url,
"thumbnail_put_url": None,
}
])
......@@ -115,8 +115,8 @@ class TestEntitiesAPI(FixtureAPITestCase):
'name': self.corpus.name,
'public': self.corpus.public
},
'thumbnail_url': e.thumbnail.s3_url,
'thumbnail_put_url': e.thumbnail.s3_put_url,
'thumbnail_url': None,
'thumbnail_put_url': None,
'zone': {
'id': str(e.zone.id),
'url': e.zone.url,
......
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