def testCachesClear(self): large_image.cache_util.cache._tileCache = None large_image.cache_util.cache._tileLock = None config.setConfig('cache_backend', 'python') self.ExampleWithMetaclass('test') getTileCache() assert cachesInfo()['test']['used'] == 1 cachesClear() assert cachesInfo()['test']['used'] == 0
def cacheClear(self, params): before = cache_util.cachesInfo() cache_util.cachesClear() after = cache_util.cachesInfo() return { 'cacheCleared': datetime.datetime.utcnow(), 'before': before, 'after': after }
def testCachesKeyLock(self): cachesClear() assert cachesInfo()['test']['used'] == 0 starttime = time.time() with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: executor.map(self.ExampleWithMetaclass, [3, 3, 2]) endtime = time.time() # This really should be close to 3 assert endtime - starttime < 6 assert cachesInfo()['test']['used'] == 2
def testInternalMetadata(): import large_image_source_bioformats imagePath = utilities.externaldata('data/HENormalN801.czi.sha512') source = large_image_source_bioformats.BioformatsFileTileSource(imagePath) metadata = source.getInternalMetadata() assert 'sizeColorPlanes' in metadata source = None cachesClear()
def cacheClear(self, params): before = cache_util.cachesInfo() cache_util.cachesClear() after = cache_util.cachesInfo() # Add a small delay to give the memcached time to clear stoptime = time.time() + 5 while time.time() < stoptime and any(after[key]['used'] for key in after): time.sleep(0.1) after = cache_util.cachesInfo() return {'cacheCleared': datetime.datetime.utcnow(), 'before': before, 'after': after}
def testInternalMetadata(): import large_image_source_bioformats imagePath = datastore.fetch('HENormalN801.czi') source = large_image_source_bioformats.open(imagePath) metadata = source.getInternalMetadata() assert 'sizeColorPlanes' in metadata source = None cachesClear()
def testCachesInfo(self): cachesClear() large_image.cache_util.cache._tileCache = None large_image.cache_util.cache._tileLock = None assert cachesInfo()['test']['used'] == 0 assert 'tileCache' not in cachesInfo() self.ExampleWithMetaclass('test') assert cachesInfo()['test']['used'] == 1 config.setConfig('cache_backend', 'python') getTileCache() assert 'tileCache' in cachesInfo() large_image.cache_util.cache._tileCache = None large_image.cache_util.cache._tileLock = None config.setConfig('cache_backend', 'memcached') getTileCache() # memcached shows an items record as well assert 'items' in cachesInfo()['tileCache']
def testTilesFromBioformats(): import large_image_source_bioformats imagePath = utilities.externaldata('data/HENormalN801.czi.sha512') source = large_image_source_bioformats.BioformatsFileTileSource(imagePath) tileMetadata = source.getMetadata() assert tileMetadata['tileWidth'] == 1024 assert tileMetadata['tileHeight'] == 1024 assert tileMetadata['sizeX'] == 50577 assert tileMetadata['sizeY'] == 17417 assert tileMetadata['levels'] == 7 assert tileMetadata['magnification'] == pytest.approx(20, 1) utilities.checkTilesZXY(source, tileMetadata) source = None cachesClear()
def testTilesFromBioformats(): import large_image_source_bioformats imagePath = datastore.fetch('HENormalN801.czi') source = large_image_source_bioformats.open(imagePath) tileMetadata = source.getMetadata() assert tileMetadata['tileWidth'] == 1024 assert tileMetadata['tileHeight'] == 1024 assert tileMetadata['sizeX'] == 50577 assert tileMetadata['sizeY'] == 17417 assert tileMetadata['levels'] == 7 assert tileMetadata['magnification'] == pytest.approx(20, 1) utilities.checkTilesZXY(source, tileMetadata) source = None cachesClear()
def testTilesFromPIL(): # Ensure this test can run in any order cachesClear() imagePath = datastore.fetch('sample_Easy1.png') # Test with different max size options. config.setConfig('max_small_image_size', 100) assert large_image_source_pil.canRead(imagePath) is False # Allow images bigger than our test config.setConfig('max_small_image_size', 2048) assert large_image_source_pil.canRead(imagePath) is True source = large_image_source_pil.open(imagePath) tileMetadata = source.getMetadata() assert tileMetadata['tileWidth'] == 1790 assert tileMetadata['tileHeight'] == 1046 assert tileMetadata['sizeX'] == 1790 assert tileMetadata['sizeY'] == 1046 assert tileMetadata['levels'] == 1 assert tileMetadata['magnification'] is None assert tileMetadata['mm_x'] is None assert tileMetadata['mm_y'] is None utilities.checkTilesZXY(source, tileMetadata)
def testBelowLevelTilesFromOpenJPEG(): from large_image.cache_util import cachesClear imagePath = datastore.fetch('JK-kidney_B-gal_H3_4C_1-500sec.jp2') origMin = large_image_source_openjpeg.OpenjpegFileTileSource._minTileSize origMax = large_image_source_openjpeg.OpenjpegFileTileSource._maxTileSize large_image_source_openjpeg.OpenjpegFileTileSource._minTileSize = 64 large_image_source_openjpeg.OpenjpegFileTileSource._maxTileSize = 64 # Clear the cache to make sure we use our required max tile size. cachesClear() source = large_image_source_openjpeg.open(imagePath) tileMetadata = source.getMetadata() assert tileMetadata['tileWidth'] == 64 assert tileMetadata['tileHeight'] == 64 assert tileMetadata['sizeX'] == 16384 assert tileMetadata['sizeY'] == 14848 assert tileMetadata['levels'] == 9 assert tileMetadata['magnification'] == 40 utilities.checkTilesZXY(source, tileMetadata) large_image_source_openjpeg.OpenjpegFileTileSource._minTileSize = origMin large_image_source_openjpeg.OpenjpegFileTileSource._maxTileSize = origMax cachesClear()
def testTiffClosed(self): # test the Tiff files are properly closed. orig_del = TiledTiffDirectory.__del__ orig_init = TiledTiffDirectory.__init__ self.delCount = 0 self.initCount = 0 def countDelete(*args, **kwargs): self.delCount += 1 orig_del(*args, **kwargs) def countInit(*args, **kwargs): self.initCount += 1 orig_init(*args, **kwargs) imagePath = utilities.externaldata('data/sample_image.ptif.sha512') cachesClear() gc.collect(2) TiledTiffDirectory.__del__ = countDelete TiledTiffDirectory.__init__ = countInit self.initCount = 0 self.delCount = 0 source = large_image.getTileSource(imagePath) assert source is not None assert self.initCount == 12 assert self.delCount < 12 # Create another source; we shouldn't init it again, as it should be # cached. source = large_image.getTileSource(imagePath) assert source is not None assert self.initCount == 12 assert self.delCount < 12 source = None # Clear the cache to free references and force garbage collection cachesClear() gc.collect(2) cachesClear() assert self.delCount == 12