class OpRESTfulBlockwiseFilesetReader(Operator): """ Adapter that provides an operator interface to the BlockwiseFileset class for reading ONLY. """ name = "OpRESTfulBlockwiseFilesetReader" DescriptionFilePath = InputSlot(stype="filestring") Output = OutputSlot() class MissingDatasetError(Exception): pass def __init__(self, *args, **kwargs): super(OpRESTfulBlockwiseFilesetReader, self).__init__(*args, **kwargs) self._blockwiseFileset = None def setupOutputs(self): if not os.path.exists(self.DescriptionFilePath.value): raise OpRESTfulBlockwiseFilesetReader.MissingDatasetError( "Dataset description not found: {}".format( self.DescriptionFilePath.value)) # Load up the class that does the real work self._blockwiseFileset = RESTfulBlockwiseFileset( self.DescriptionFilePath.value) # Check for errors in the description file localDescription = self._blockwiseFileset.compositeDescription.local_description axes = localDescription.axes assert False not in [ a in "txyzc" for a in axes ], "Unknown axis type. Known axes: txyzc Your axes:".format(axes) self.Output.meta.shape = tuple(localDescription.view_shape) self.Output.meta.dtype = localDescription.dtype self.Output.meta.axistags = vigra.defaultAxistags( str(localDescription.axes)) drange = localDescription.drange if drange is not None: self.Output.meta.drange = drange def execute(self, slot, subindex, roi, result): assert slot == self.Output, "Unknown output slot" self._blockwiseFileset.readData((roi.start, roi.stop), result) return result def propagateDirty(self, slot, subindex, roi): assert slot == self.DescriptionFilePath, "Unknown input slot." self.Output.setDirty(slice(None)) def cleanUp(self): import sys if self._blockwiseFileset is not None: self._blockwiseFileset.close() super(OpRESTfulBlockwiseFilesetReader, self).cleanUp()
class OpRESTfulBlockwiseFilesetReader(Operator): """ Adapter that provides an operator interface to the BlockwiseFileset class for reading ONLY. """ name = "OpRESTfulBlockwiseFilesetReader" DescriptionFilePath = InputSlot(stype="filestring") Output = OutputSlot() class MissingDatasetError(Exception): pass def __init__(self, *args, **kwargs): super(OpRESTfulBlockwiseFilesetReader, self).__init__(*args, **kwargs) self._blockwiseFileset = None def setupOutputs(self): if not os.path.exists(self.DescriptionFilePath.value): raise OpRESTfulBlockwiseFilesetReader.MissingDatasetError( "Dataset description not found: {}".format(self.DescriptionFilePath.value) ) # Load up the class that does the real work self._blockwiseFileset = RESTfulBlockwiseFileset(self.DescriptionFilePath.value) # Check for errors in the description file localDescription = self._blockwiseFileset.compositeDescription.local_description axes = localDescription.axes assert False not in [a in "txyzc" for a in axes], "Unknown axis type. Known axes: txyzc Your axes:".format( axes ) self.Output.meta.shape = tuple(localDescription.view_shape) self.Output.meta.dtype = localDescription.dtype self.Output.meta.axistags = vigra.defaultAxistags(str(localDescription.axes)) drange = localDescription.drange if drange is not None: self.Output.meta.drange = drange def execute(self, slot, subindex, roi, result): assert slot == self.Output, "Unknown output slot" self._blockwiseFileset.readData((roi.start, roi.stop), result) return result def propagateDirty(self, slot, subindex, roi): assert slot == self.DescriptionFilePath, "Unknown input slot." self.Output.setDirty(slice(None)) def cleanUp(self): import sys if self._blockwiseFileset is not None: self._blockwiseFileset.close() super(OpRESTfulBlockwiseFilesetReader, self).cleanUp()
def test_4_OffsetDownload(self): volume = RESTfulBlockwiseFileset(self.descriptionFilePath) slicing = numpy.s_[20:40, 20:40, 20:40] roi = sliceToRoi(slicing, volume.description.shape) data = volume.readData(roi) assert data.shape == (20, 20, 20) assert volume.getBlockStatus(([20, 20, 20])) == BlockwiseFileset.BLOCK_AVAILABLE offsetVolume = RESTfulBlockwiseFileset(self.descriptionFilePath_offset) offsetSlicing = numpy.s_[20:40, 0:20, 20:40] # Note middle slice is offset (see view_origin in setup_class) offsetRoi = sliceToRoi(offsetSlicing, offsetVolume.description.shape) offsetData = offsetVolume.readData(offsetRoi) assert offsetData.shape == (20, 20, 20) assert offsetVolume.getBlockStatus(([20, 0, 20])) == BlockwiseFileset.BLOCK_AVAILABLE # Data should be the same assert (offsetData == data).all()
def test_1_SingleDownload(self): volume = RESTfulBlockwiseFileset(self.descriptionFilePath) slicing = numpy.s_[0:20, 0:20, 0:20] roi = sliceToRoi(slicing, volume.description.shape) data = volume.readData(roi) assert data.shape == (20, 20, 20) assert volume.getBlockStatus(([0, 0, 0])) == BlockwiseFileset.BLOCK_AVAILABLE
def test_4_OffsetDownload(self): volume = RESTfulBlockwiseFileset(self.descriptionFilePath) slicing = numpy.s_[20:40, 20:40, 20:40] roi = sliceToRoi(slicing, volume.description.shape) data = volume.readData(roi) assert data.shape == (20, 20, 20) assert volume.getBlockStatus( ([20, 20, 20])) == BlockwiseFileset.BLOCK_AVAILABLE offsetVolume = RESTfulBlockwiseFileset(self.descriptionFilePath_offset) offsetSlicing = numpy.s_[ 20:40, 0:20, 20: 40] # Note middle slice is offset (see view_origin in setupClass) offsetRoi = sliceToRoi(offsetSlicing, offsetVolume.description.shape) offsetData = offsetVolume.readData(offsetRoi) assert offsetData.shape == (20, 20, 20) assert offsetVolume.getBlockStatus( ([20, 0, 20])) == BlockwiseFileset.BLOCK_AVAILABLE # Data should be the same assert (offsetData == data).all()