diff --git a/cloudvolume/cloudvolume.py b/cloudvolume/cloudvolume.py index 4ab30cb9..85e7eab9 100644 --- a/cloudvolume/cloudvolume.py +++ b/cloudvolume/cloudvolume.py @@ -70,7 +70,7 @@ def __new__(cls, compress:CompressType=None, compress_level:Optional[int]=None, non_aligned_writes:bool=False, parallel:ParallelType=1, delete_black_uploads:bool=False, background_color:int=0, green_threads:bool=False, use_https:bool=False, - max_redirects:int=10, mesh_dir:Optional[str]=None, skel_dir:Optional[str]=None, + max_redirects:int=10, mesh_dir:Optional[str]=None, skel_dir:Optional[str]=None, segment_prop_dir:Optional[str]=None, agglomerate:bool=False, secrets:SecretsType=None, spatial_index_db:Optional[str]=None, lru_bytes:int = 0, cache_locking:bool = True, lru_encoding:str = "same", @@ -217,6 +217,8 @@ def __new__(cls, file, use this one. secrets: (dict) provide per-instance authorization tokens. If not provided, defaults to looking in .cloudvolume/secrets for necessary tokens. + segment_prop_dir: (str) if not None, override the info['segment_properties'] + key before pulling the segment properties info file. skel_dir: (str) if not None, override the info['skeletons'] key before pulling the skeleton info file. spatial_index_db: (str) A path to an sqlite3 or mysql database that follows diff --git a/cloudvolume/datasource/precomputed/metadata.py b/cloudvolume/datasource/precomputed/metadata.py index 7d46baa9..9f92bfdf 100644 --- a/cloudvolume/datasource/precomputed/metadata.py +++ b/cloudvolume/datasource/precomputed/metadata.py @@ -79,7 +79,8 @@ def check_for_placeholder_scale(self, mip:int): def create_info(cls, num_channels, layer_type, data_type, encoding, resolution, voxel_offset, volume_size, - mesh=None, skeletons=None, chunk_size=(128,128,64), + mesh=None, skeletons=None, segment_properties=None, + chunk_size=(128,128,64), compressed_segmentation_block_size=(8,8,8), max_mip=0, factor=Vec(2,2,1), redirect=None, encoding_level=None, encoding_effort=None, @@ -99,6 +100,7 @@ def create_info(cls, Optional: mesh: (str) name of mesh directory, typically "mesh" skeletons: (str) name of skeletons directory, typically "skeletons" + segment_properties: (str) name of segment properties directory, typically "segment_properties" chunk_size: int (x,y,z), dimensions of each downloadable 3D image chunk in voxels compressed_segmentation_block_size: (x,y,z) dimensions of each compressed sub-block (only used when encoding is 'compressed_segmentation') @@ -153,6 +155,9 @@ def create_info(cls, if skeletons: info['skeletons'] = 'skeletons' if not isinstance(skeletons, string_types) else skeletons + + if segment_properties: + info['segment_properties'] = 'segment_properties' if not isinstance(segment_properties, string_types) else segment_properties return info @@ -881,4 +886,4 @@ def unlock_mips(self, mips): raise exceptions.WriteLockReleaseError(msg) def locked_mips(self): - return set([ i for i, scale in enumerate(self.info['scales']) if scale.get('locked', False) ]) \ No newline at end of file + return set([ i for i, scale in enumerate(self.info['scales']) if scale.get('locked', False) ]) diff --git a/cloudvolume/frontends/precomputed.py b/cloudvolume/frontends/precomputed.py index d0d715df..68618372 100644 --- a/cloudvolume/frontends/precomputed.py +++ b/cloudvolume/frontends/precomputed.py @@ -38,7 +38,7 @@ def warn(text): class CloudVolumePrecomputed(object): def __init__(self, meta, cache, config, - image=None, mesh=None, skeleton=None, + image=None, mesh=None, skeleton=None, segment_properties=None mip=0 ): self.config = config @@ -48,6 +48,7 @@ def __init__(self, self.image = image self.mesh = mesh self.skeleton = skeleton + self.segment_properties = segment_properties self.green_threads = self.config.green # display warning message @@ -216,7 +217,8 @@ def __setstate__(self, d): def create_new_info(cls, num_channels, layer_type, data_type, encoding, resolution, voxel_offset, volume_size, - mesh=None, skeletons=None, chunk_size=(64,64,64), + mesh=None, skeletons=None, segment_properties= None, + chunk_size=(64,64,64), compressed_segmentation_block_size=(8,8,8), max_mip=0, factor=Vec(2,2,1), redirect=None, *args, **kwargs @@ -236,6 +238,7 @@ def create_new_info(cls, Optional: mesh: (str) name of mesh directory, typically "mesh" skeletons: (str) name of skeletons directory, typically "skeletons" + segment_properties: (str) name of segment properties directory, typically "segment_properties" chunk_size: int (x,y,z), dimensions of each downloadable 3D image chunk in voxels compressed_segmentation_block_size: (x,y,z) dimensions of each compressed sub-block (only used when encoding is 'compressed_segmentation') @@ -249,7 +252,7 @@ def create_new_info(cls, return PrecomputedMetadata.create_info( num_channels, layer_type, data_type, encoding, resolution, voxel_offset, volume_size, - mesh, skeletons, chunk_size, + mesh, skeletons, segment_properties, chunk_size, compressed_segmentation_block_size, max_mip, factor, *args, **kwargs