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

Commit

Permalink
CSCFAIRMETA-163: [ADD] refresh_dir_content returns added files (#535)
Browse files Browse the repository at this point in the history
- If new version is created, API returns also the created dataset
- Fixed tests to test also the return value
  • Loading branch information
tompulli authored Feb 17, 2020
1 parent 1345142 commit 798a285
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
15 changes: 8 additions & 7 deletions src/metax_api/api/rpc/base/views/dataset_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ def change_cumulative_state(self, request):
def refresh_directory_content(self, request):
cr_identifier = request.query_params.get('cr_identifier', False)
dir_identifier = request.query_params.get('dir_identifier', False)

if not cr_identifier:
raise Http400('Query param \'cr_identifier\' missing.')
if not dir_identifier:
Expand All @@ -134,14 +135,14 @@ def refresh_directory_content(self, request):

cr.request = request

if cr.refresh_directory_content(dir_identifier):
return_status = status.HTTP_200_OK
data = { 'new_version_created': self.get_serializer(cr).data['new_version_created'] }
else:
return_status = status.HTTP_204_NO_CONTENT
data = None
new_version, n_added_files = cr.refresh_directory_content(dir_identifier)

return Response(data=data, status=return_status)
data = { 'number_of_files_added': n_added_files }

if new_version:
data['new_version_created'] = self.get_serializer(cr).data['new_version_created']

return Response(data=data, status=status.HTTP_200_OK)

@list_route(methods=['post'], url_path="fix_deprecated")
def fix_deprecated(self, request):
Expand Down
4 changes: 2 additions & 2 deletions src/metax_api/models/catalog_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -2236,7 +2236,7 @@ def refresh_directory_content(self, dir_identifier):

if not added_file_ids:
_logger.info('no change in directory content')
return False
return (False, 0)

_logger.info(f'refreshing directory adds {len(added_file_ids)} files to dataset')
self.date_modified = get_tz_aware_now_without_micros()
Expand All @@ -2261,7 +2261,7 @@ def refresh_directory_content(self, dir_identifier):
super().save()
self.add_post_request_callable(RabbitMQPublishRecord(self, 'update'))

return True if self.cumulative_state != self.CUMULATIVE_STATE_YES else False
return (self.cumulative_state != self.CUMULATIVE_STATE_YES, len(added_file_ids))

def _find_new_files_added_to_dir(self, dir):
sql_insert_newly_frozen_files_by_dir_path = '''
Expand Down
10 changes: 8 additions & 2 deletions src/metax_api/tests/api/rpc/base/views/dataset_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ def test_refresh_adds_new_files(self):
self._freeze_files_to_root()
response = self.client.post(self.url % (cr_id, dir_id), format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
self.assertEqual(response.data['number_of_files_added'], 2)

new_version = CatalogRecord.objects.get(id=response.data['new_version_created']['id'])
file_size_after = new_version.research_dataset['total_files_byte_size']
Expand All @@ -258,6 +259,7 @@ def test_refresh_adds_new_files(self):
self._freeze_new_files()
response = self.client.post(self.url % (new_version.identifier, dir_id), format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
self.assertEqual(response.data['number_of_files_added'], 2)

new_version = CatalogRecord.objects.get(id=response.data['new_version_created']['id'])
self.assertEqual(new_version.files.count(), new_version.previous_dataset_version.files.count() + 2)
Expand All @@ -276,6 +278,7 @@ def test_adding_parent_dir_allows_refreshes_to_child_dirs(self):

response = self.client.post(self.url % (cr_id, frozen_dir.identifier), format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
self.assertEqual(response.data['number_of_files_added'], 2)

new_version = CatalogRecord.objects.get(id=response.data['new_version_created']['id'])
self.assertEqual(new_version.files.count(), new_version.previous_dataset_version.files.count() + 2)
Expand All @@ -291,6 +294,7 @@ def test_refresh_adds_new_files_multiple_locations(self):
self._freeze_files_to_root()
response = self.client.post(self.url % (cr_id, dir_id), format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
self.assertEqual(response.data['number_of_files_added'], 4)

new_version = CatalogRecord.objects.get(id=response.data['new_version_created']['id'])
self.assertEqual(new_version.files.count(), new_version.previous_dataset_version.files.count() + 4)
Expand All @@ -308,7 +312,8 @@ def test_refresh_adds_no_new_files_from_upper_dirs(self):

self._freeze_files_to_root()
response = self.client.post(self.url % (cr_id, dir_id), format="json")
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT, response.data)
self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
self.assertEqual(response.data['number_of_files_added'], 0)

cr_after = CatalogRecord.objects.get(identifier=cr_id)
self.assertEqual(cr_after.next_dataset_version, None, 'should not have new dataset version')
Expand All @@ -330,7 +335,8 @@ def test_refresh_with_cumulative_state_yes(self):
self._freeze_new_files()
self._freeze_files_to_root()
response = self.client.post(self.url % (cr_id, dir_id), format="json")
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT, response.data)
self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
self.assertEqual(response.data['number_of_files_added'], 4)

cr_after = CatalogRecord.objects.get(identifier=cr_id)
file_size_after = cr_after.research_dataset['total_files_byte_size']
Expand Down

0 comments on commit 798a285

Please sign in to comment.