Skip to content

Commit

Permalink
Add tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
manthey committed Aug 9, 2021
1 parent 294c3f7 commit bc076aa
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 2 deletions.
3 changes: 2 additions & 1 deletion girder/girder_large_image/models/image_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,8 @@ def _getAndCacheImageOrData(
saveFile = maxThumbnailFiles > 0
# Make sure we don't exceed the desired number of thumbnails
self.removeThumbnailFiles(item, maxThumbnailFiles - 1)
if saveFile and checkAndCreate != 'nosave':
if (saveFile and checkAndCreate != 'nosave' and (
pickleCache or isinstance(imageData, bytes))):
dataStored = imageData if not pickleCache else pickle.dumps(imageData, protocol=4)
# Save the data as a file
datafile = Upload().uploadFromFile(
Expand Down
33 changes: 32 additions & 1 deletion girder/test_girder/test_tiles_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,7 @@ def testRegions(server, admin, fsAssetstore):
resp = server.request(path='/item/%s/tiles/region' % itemId,
user=admin, isJson=False, params=params)
assert utilities.respStatus(resp) == 200
image = origImage = utilities.getBody(resp, text=False)
image = utilities.getBody(resp, text=False)
assert image[:len(utilities.BigTIFFHeader)] == utilities.BigTIFFHeader


Expand Down Expand Up @@ -1323,3 +1323,34 @@ def testTilesConvertRemote(boundServer, admin, fsAssetstore, girderWorker):
assert tileMetadata['mm_x'] is None
assert tileMetadata['mm_y'] is None
_testTilesZXY(boundServer, admin, itemId, tileMetadata)


@pytest.mark.usefixtures('unbindLargeImage')
@pytest.mark.plugin('large_image')
def testTileFrames(server, admin, fsAssetstore):
file = utilities.uploadExternalFile(
'sample.ome.tif', admin, fsAssetstore)
itemId = str(file['itemId'])
params = {
'width': 200,
'height': 200}
resp = server.request(path='/item/%s/tiles/tile_frames' % itemId,
user=admin, isJson=False, params=params)
assert utilities.respStatus(resp) == 200

params['cache'] = 'true'
resp = server.request(path='/item/%s/tiles/tile_frames' % itemId,
user=admin, isJson=False, params=params)
assert utilities.respStatus(resp) == 200

resp = server.request(path='/item/%s/tiles/tile_frames' % itemId,
user=admin, isJson=False, params=params)
assert utilities.respStatus(resp) == 200

params['encoding'] = 'TILED'
params['frameList'] = '0,2'
resp = server.request(path='/item/%s/tiles/tile_frames' % itemId,
user=admin, isJson=False, params=params)
assert utilities.respStatus(resp) == 200
image = utilities.getBody(resp, text=False)
assert image[:len(utilities.BigTIFFHeader)] == utilities.BigTIFFHeader
2 changes: 2 additions & 0 deletions large_image/tilesource/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1740,6 +1740,8 @@ def _encodeTiledImageFromVips(self, vimg, iterInfo, image, **kwargs):
corner, fill = True, fill.split(':', 1)[1]
color = PIL.ImageColor.getcolor(
fill, ['L', 'LA', 'RGB', 'RGBA'][vimg.bands - 1])
if isinstance(color, int):
color = [color]
lbimage = pyvips.Image.black(maxWidth, maxHeight, bands=vimg.bands)
lbimage = lbimage.cast(vimg.format)
lbimage = lbimage.draw_rect(
Expand Down
53 changes: 53 additions & 0 deletions test/test_source_tiff.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,12 @@ def testThumbnails():
assert width == 180
assert height == 180
assert image != nextimage
nextimage, mimeType = source.getThumbnail(
encoding='PNG', width=180, height=180, fill='corner:black')
(width, height) = struct.unpack('!LL', nextimage[16:24])
assert width == 180
assert height == 180
assert image != nextimage
# Test bad parameters
badParams = [
({'encoding': 'invalid'}, 'Invalid encoding'),
Expand Down Expand Up @@ -763,3 +769,50 @@ def testTilesFromMissingLayer():
with pytest.raises(Exception):
utilities.checkTilesZXY(source, tileMetadata)
utilities.checkTilesZXY(source, tileMetadata, {'sparseFallback': True})


def testTileFrames():
imagePath = datastore.fetch('sample.ome.tif')
source = large_image_source_tiff.open(imagePath)

params = {'encoding': 'PNG', 'output': {'maxWidth': 200, 'maxHeight': 200}}
image, mimeType = source.tileFrames(**params)
assert image[:len(utilities.PNGHeader)] == utilities.PNGHeader
(width, height) = struct.unpack('!LL', image[16:24])
assert width == 400
assert height == 382

params['fill'] = 'corner:black'
image, mimeType = source.tileFrames(**params)
assert image[:len(utilities.PNGHeader)] == utilities.PNGHeader
(width, height) = struct.unpack('!LL', image[16:24])
assert width == 400
assert height == 400

params['framesAcross'] = 3
image, mimeType = source.tileFrames(**params)
assert image[:len(utilities.PNGHeader)] == utilities.PNGHeader
(width, height) = struct.unpack('!LL', image[16:24])
assert width == 600
assert height == 200

params['frameList'] = [0, 2]
image, mimeType = source.tileFrames(**params)
assert image[:len(utilities.PNGHeader)] == utilities.PNGHeader
(width, height) = struct.unpack('!LL', image[16:24])
assert width == 400
assert height == 200

params['frameList'] = [0]
image, mimeType = source.tileFrames(**params)
assert image[:len(utilities.PNGHeader)] == utilities.PNGHeader
(width, height) = struct.unpack('!LL', image[16:24])
assert width == 200
assert height == 200

params.pop('frameList')
params['encoding'] = 'TILED'
image, mimeType = source.tileFrames(**params)
info = tifftools.read_tiff(image)
assert len(info['ifds']) == 3
os.unlink(image)

0 comments on commit bc076aa

Please sign in to comment.