From 89fa0158605d69790c701331b4853816aa83306e Mon Sep 17 00:00:00 2001 From: David Manthey Date: Tue, 11 Feb 2020 09:34:47 -0500 Subject: [PATCH] Add an endpoint to list Girder tile sources. --- CHANGELOG.md | 5 ++++ README.rst | 2 +- .../rest/large_image_resource.py | 27 +++++++++++++++++++ girder/test_girder/test_large_image.py | 8 ++++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28363c800..e511c3daf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## Unreleased + +### Features +- Added a GET large_image/sources endpoint to list versions of all installed sources + ## Version 1.0.2 ### Features diff --git a/README.rst b/README.rst index 4d3b3ea4d..7bbde4c7f 100644 --- a/README.rst +++ b/README.rst @@ -74,7 +74,7 @@ Migration from Girder 2 to Girder 3 If you are migrating a Girder 2 instance with Large Image to Girder 3, you need to do a one time database update. Specifically, one of the tile sources' internal name changed. Access the Girder Mongo database. The command for this in a simple installation is:: - + mongo girder Update the tile source name by issuing the Mongo command:: diff --git a/girder/girder_large_image/rest/large_image_resource.py b/girder/girder_large_image/rest/large_image_resource.py index 603c02c67..c030cd7d1 100644 --- a/girder/girder_large_image/rest/large_image_resource.py +++ b/girder/girder_large_image/rest/large_image_resource.py @@ -20,6 +20,7 @@ import datetime import json import psutil +import sys import time from six.moves import range @@ -38,6 +39,7 @@ from large_image import cache_util from .. import constants +from .. import girder_tilesource from ..models.image_item import ImageItem @@ -217,6 +219,7 @@ def __init__(self): self.route('GET', ('cache', ), self.cacheInfo) self.route('PUT', ('cache', 'clear'), self.cacheClear) self.route('GET', ('settings',), self.getPublicSettings) + self.route('GET', ('sources',), self.listSources) self.route('GET', ('thumbnails',), self.countThumbnails) self.route('PUT', ('thumbnails',), self.createThumbnails) self.route('DELETE', ('thumbnails',), self.deleteThumbnails) @@ -409,3 +412,27 @@ def deleteIncompleteTiles(self, params): ImageItem().delete(item) result['removed'] += 1 return result + + @describeRoute( + Description('List all Girder tile sources with associated extensions, ' + 'mime types, and versions. Lower values indicate a ' + 'higher priority for an extension of mime type with that ' + 'source.') + ) + @access.public + def listSources(self, params): + results = {} + for key, source in girder_tilesource.AvailableGirderTileSources.items(): + results[key] = {} + results[key]['extensions'] = { + k if k else 'default': v for k, v in source.extensions.items()} + results[key]['mimeTypes'] = { + k if k else 'default': v for k, v in source.mimeTypes.items()} + for cls in source.__mro__: + try: + if sys.modules[cls.__module__].__version__: + results[key]['version'] = sys.modules[cls.__module__].__version__ + break + except Exception: + pass + return results diff --git a/girder/test_girder/test_large_image.py b/girder/test_girder/test_large_image.py index 9bd0ece05..1daab11b9 100644 --- a/girder/test_girder/test_large_image.py +++ b/girder/test_girder/test_large_image.py @@ -311,3 +311,11 @@ def testAssociateImageCaching(server, admin, user, fsAssetstore): resp = server.request(path='/large_image/associated_images', user=admin) assert utilities.respStatus(resp) == 200 assert resp.json == 0 + + +@pytest.mark.usefixtures('unbindLargeImage') +@pytest.mark.plugin('large_image') +def testListSources(server): + resp = server.request(path='/large_image/sources') + assert resp.json['tiff']['extensions']['tiff'] > 0 + assert resp.json['tiff']['version'] is not None