Skip to content
This repository was archived by the owner on Sep 16, 2022. It is now read-only.

Commit 019542d

Browse files
author
Hannu Kamarainen
committed
CSCMETAX-395: [FIX] Datasets api /datasets/pid/files now also supports ?file_fields=x,y,z parameter
1 parent 8a816a2 commit 019542d

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

src/metax_api/api/rest/base/views/dataset_view.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,14 @@ def files_get(self, request, pk=None):
211211
params['removed'] = True
212212
manager = 'objects_unfiltered'
213213

214-
files = [ FileSerializer(f).data for f in catalog_record.files(manager=manager).filter(**params) ]
214+
file_fields = []
215+
if 'file_fields' in request.query_params:
216+
file_fields = request.query_params['file_fields'].split(',')
217+
218+
files = [
219+
FileSerializer(f, only_fields=file_fields).data
220+
for f in catalog_record.files(manager=manager).filter(**params).only(*file_fields)
221+
]
215222

216223
return Response(data=files, status=status.HTTP_200_OK)
217224

src/metax_api/tests/api/rest/base/views/datasets/read.py

+22-3
Original file line numberDiff line numberDiff line change
@@ -519,14 +519,33 @@ def test_directory_details_populated(self):
519519
self.assertEqual(response.data['research_dataset']['directories'][1]['details']['file_count'], 20)
520520

521521

522-
class CatalogRecordApiReadRemovedFiles(CatalogRecordApiReadCommon):
522+
class CatalogRecordApiReadFiles(CatalogRecordApiReadCommon):
523523

524524
"""
525-
Test use of query parameter removed_files=bool in /datasets/pid/files, which should return
526-
only deleted files.
525+
Test /datasets/pid/files api
527526
"""
528527

528+
def test_get_files(self):
529+
file_count = CatalogRecord.objects.get(pk=1).files.count()
530+
response = self.client.get('/rest/datasets/1/files')
531+
self.assertEqual(response.status_code, status.HTTP_200_OK)
532+
self.assertEqual(len(response.data), file_count)
533+
534+
def test_get_files_specified_fields_only(self):
535+
"""
536+
Test use of query parameter ?file_fields=x,y,z
537+
"""
538+
response = self.client.get('/rest/datasets/1/files?file_fields=identifier,file_path')
539+
self.assertEqual(response.status_code, status.HTTP_200_OK)
540+
self.assertEqual(len(response.data[0].keys()), 2)
541+
self.assertEqual('identifier' in response.data[0], True)
542+
self.assertEqual('file_path' in response.data[0], True)
543+
529544
def test_removed_query_param(self):
545+
"""
546+
Test use of query parameter removed_files=bool in /datasets/pid/files, which should return
547+
only deleted files.
548+
"""
530549
response = self.client.get('/rest/datasets/1/files')
531550
file_ids_before = set([ f['id'] for f in response.data ])
532551
obj = File.objects.get(pk=1)

swagger/swagger.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,11 @@ paths:
10371037
description: Persistent ID of dataset OR the internal pk
10381038
required: true
10391039
type: string
1040+
- name: file_fields
1041+
in: query
1042+
description: Comma-separated list of field names to retrieve for files
1043+
required: false
1044+
type: string
10401045
- name: removed_files
10411046
in: query
10421047
description: return only deleted files

0 commit comments

Comments
 (0)