diff --git a/girder/girder_large_image/__init__.py b/girder/girder_large_image/__init__.py index 56b6d29e3..8e4ddbbf9 100644 --- a/girder/girder_large_image/__init__.py +++ b/girder/girder_large_image/__init__.py @@ -140,7 +140,7 @@ def checkForLargeImageFiles(event): mimeType = file.get('mimeType') if mimeType in girder_tilesource.KnownMimeTypes: possible = True - exts = [ext.split()[0] for ext in file.get('exts')] + exts = [ext.split()[0] for ext in file.get('exts') if ext] if set(exts[-2:]).intersection(girder_tilesource.KnownExtensions): possible = True if not file.get('itemId') or not possible: diff --git a/girder/girder_large_image/girder_tilesource.py b/girder/girder_large_image/girder_tilesource.py index eef3d2e72..b0b3ebe08 100644 --- a/girder/girder_large_image/girder_tilesource.py +++ b/girder/girder_large_image/girder_tilesource.py @@ -148,7 +148,7 @@ def getGirderTileSourceName(item, file=None, *args, **kwargs): loadGirderTileSources() if not file: file = File().load(item['largeImage']['fileId'], force=True) - extensions = [entry.lower().split()[0] for entry in file['exts']] + extensions = [entry.lower().split()[0] for entry in file['exts'] if entry] sourceList = [] for sourceName in AvailableGirderTileSources: if not getattr(AvailableGirderTileSources[sourceName], 'girderSource', False): diff --git a/girder/test_girder/test_tiles_rest.py b/girder/test_girder/test_tiles_rest.py index 0bcf2a207..992c82002 100644 --- a/girder/test_girder/test_tiles_rest.py +++ b/girder/test_girder/test_tiles_rest.py @@ -1129,3 +1129,33 @@ def testTilesInternalMetadata(server, admin, fsAssetstore): itemId = str(file['itemId']) resp = server.request(path='/item/%s/tiles/internal_metadata' % itemId) assert resp.json['tilesource'] == 'tiff' + + +@pytest.mark.usefixtures('unbindLargeImage') # noqa +@pytest.mark.usefixtures('girderWorker') # noqa +@pytest.mark.plugin('large_image') +def testTilesFromMultipleDotName(boundServer, admin, fsAssetstore, girderWorker): # noqa + # Unicode file names shouldn't cause problems when generating tiles. + file = utilities.uploadTestFile('yb10kx5k.png', admin, fsAssetstore) + # Our normal testing method doesn't pass through the unicode name + # properly, so just change it after upload. + file = File().load(file['_id'], force=True) + file['name'] = 'A name with...dots.png' + file = File().save(file) + fileId = str(file['_id']) + + itemId = str(file['itemId']) + item = Item().load(itemId, force=True) + item['name'] = 'A name with...dots.png' + item = Item().save(item) + + tileMetadata = _postTileViaHttp(boundServer, admin, itemId, fileId) + assert tileMetadata['tileWidth'] == 256 + assert tileMetadata['tileHeight'] == 256 + assert tileMetadata['sizeX'] == 10000 + assert tileMetadata['sizeY'] == 5000 + assert tileMetadata['levels'] == 7 + assert tileMetadata['magnification'] is None + assert tileMetadata['mm_x'] is None + assert tileMetadata['mm_y'] is None + _testTilesZXY(boundServer, admin, itemId, tileMetadata)