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

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

parent 1cb327af
No related branches found
No related tags found
No related merge requests found
......@@ -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