diff --git a/girder/girder_large_image/rest/large_image_resource.py b/girder/girder_large_image/rest/large_image_resource.py index 8b8ab0c7d..cb39c054e 100644 --- a/girder/girder_large_image/rest/large_image_resource.py +++ b/girder/girder_large_image/rest/large_image_resource.py @@ -454,7 +454,7 @@ def _deleteCachedImages(self, spec, associatedImages=False, imageKey=None): 'existing or unfinished large images.') .modelParam('id', 'The ID of the folder.', model=Folder, level=AccessType.WRITE, required=True) - .param('createJobs', 'Whether job(s) should be created for each large image.', + .param('force', 'Whether creation job(s) should be forced for each large image.', required=False, default=False, dataType='boolean') .param('localJobs', 'Whether the job(s) created should be local.', required=False, default=False, dataType='boolean') @@ -465,9 +465,7 @@ def _deleteCachedImages(self, spec, associatedImages=False, imageKey=None): ) def createLargeImages(self, folder, params): user = self.getCurrentUser() - createJobs = params.get('createJobs') - if createJobs: - createJobs = 'always' or True + createJobs = 'always' if self.boolParam('force', params, default=False) else True return self.createImagesRecurseOption(folder=folder, createJobs=createJobs, user=user, recurse=params.get('recurse'), localJobs=params.get('localJobs')) @@ -496,7 +494,7 @@ def createImagesRecurseOption(self, folder, createJobs, user, recurse, localJobs ImageItem().getMetadata(item) result['itemsSkipped'] += 1 continue - except TileSourceError: + except (TileSourceError, KeyError): previousFileId = item['largeImage'].get('originalId', item['largeImage']['fileId']) ImageItem().delete(item) diff --git a/girder/test_girder/test_large_image.py b/girder/test_girder/test_large_image.py index ddf13f876..c6072ace1 100644 --- a/girder/test_girder/test_large_image.py +++ b/girder/test_girder/test_large_image.py @@ -254,6 +254,18 @@ def testFolderCreateImages(server, admin, user, fsAssetstore): item = Item().load(itemId, user=admin) # Check that this item became a large image again assert 'largeImage' in item + # Hitting the endpoint again should skip the item + resp = server.request( + method='PUT', path=f'/large_image/folder/{folderId}/tiles', user=admin) + assert utilities.respStatus(resp) == 200 + assert resp.json['itemsSkipped'] == 1 + # If the item's source isn't working, it should be recreated. + item['largeImage']['sourceName'] = 'unknown' + Item().updateItem(item) + resp = server.request( + method='PUT', path=f'/large_image/folder/{folderId}/tiles', user=admin) + assert utilities.respStatus(resp) == 200 + assert resp.json['largeImagesRemovedAndRecreated'] == 1 @pytest.mark.singular()