intern.resource.boss.resource module
# Copyright 2016 The Johns Hopkins University Applied Physics Laboratory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from intern.resource import Resource from abc import abstractmethod class BossResource(Resource): """Base class for Boss resources. Attributes: name (string): Name of resource. Used as identifier when talking to the Boss API. description (string): Text description of resource. creator (string): Resource creator. raw (dictionary): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ def __init__(self, name, description, creator='', raw={}): """Constructor. Args: name (string): Name of resource. description (string): Description of resource. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ self.name = name self.description = description self.creator = creator self.raw = raw def valid_volume(self): return False @abstractmethod def get_route(self): """Get the route for resource. Returns: (string): A string that can be appended to the location of an endpoint such as 'mycollection/experiment/exp1/channel/chan2' """ assert NotImplemented @abstractmethod def get_list_route(self): """Get the route for listing resources. Returns: (string): A string that can be appended to the location of an endpoint such as 'mycollection/experiment' """ assert NotImplemented @abstractmethod def get_cutout_route(self): """Get the route for cutout operations. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented @abstractmethod def get_reserve_route(self): """Get the route for reserving ids. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented @abstractmethod def get_meta_route(self): """Get the route for metadata operations. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented @abstractmethod def get_dict_route(self): """Get the route in dictionary form. Not all resources will support this operation. Returns: (dict): A dictionary containing the names of the resource components Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented class CollectionResource(BossResource): """Top level container for Boss projects. """ def __init__( self, name, description='', creator='', raw={}): """Constructor. Args: name (string): Collection name. description (optional[string]): Collection description. Defaults to empty. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, creator, raw) def get_route(self): return self.name def get_list_route(self): return '' def get_cutout_route(self): raise RuntimeError('Not supported for collections.') def get_reserve_route(self): raise RuntimeError('Not supported for collections.') def get_meta_route(self): return self.name def get_dict_route(self): return {"collection": self.name} class ExperimentResource(BossResource): """Experiments reside inside a collection and contain channels and layers. Attributes: _coord_frame (string): num_hierarchy_levels (int): hierarchy_method (string): num_time_samples (int): time_step (int): Defaults to 0. time_step_unit (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ def __init__(self, name, collection_name, coord_frame='', description='', num_hierarchy_levels=1, hierarchy_method='anisotropic', num_time_samples=1, creator='', raw={}, time_step=0, time_step_unit='seconds'): """Constructor. Args: name (string): Experiment name. collection_name (string): Collection name. coord_frame (string): Name of coordinate frame used by experiment. Defaults to empty. description (optional[string]): Experiment description. Defaults to empty. num_hierarchy_levels (optional[int]): Defaults to 1. hierarchy_method (optional[string]): 'anisotropic', 'isotropic' Defaults to 'anisotropic'. num_time_samples (optional[int]): Maximum number of time samples for any time series data captured by this experiment. Defaults to 1. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. time_step (optional[int]): Defaults to 0. time_step_unit (optional[string]): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ BossResource.__init__(self, name, description, creator, raw) self.coll_name = collection_name self._valid_hierarchy_methods = ['anisotropic', 'isotropic'] #ToDo: validate data types. self._coord_frame = coord_frame self.num_hierarchy_levels = num_hierarchy_levels self._hierarchy_method = self.validate_hierarchy_method( hierarchy_method) self.num_time_samples = num_time_samples self._valid_time_units = [ '', 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'] self.time_step = time_step self._time_step_unit = self.validate_time_units(time_step_unit) @property def coord_frame(self): if self._coord_frame is '': raise ValueError('Coordinate frame name is blank.') else: return self._coord_frame @coord_frame.setter def coord_frame(self, value): self._coord_frame = value @property def hierarchy_method(self): return self._hierarchy_method @hierarchy_method.setter def hierarchy_method(self, value): """ Args: value (string): Valid values: 'near_iso', 'iso', 'slice' Raises: ValueError """ self._hierarchy_method = self.validate_hierarchy_method(value) @property def time_step_unit(self): return self._time_step_unit @time_step_unit.setter def time_step_unit(self, value): """ Args: value (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds' Raises: ValueError """ self._time_step_unit = self.validate_time_units(value) def get_route(self): return self.coll_name + '/experiment/' + self.name def get_list_route(self): return self.coll_name + '/experiment/' def get_cutout_route(self): raise RuntimeError('Not supported for experiments.') def get_reserve_route(self): raise RuntimeError('Not supported for experiments.') def get_meta_route(self): return self.coll_name + '/' + self.name def validate_hierarchy_method(self, value): lowered = value.lower() if lowered in self._valid_hierarchy_methods: return lowered raise ValueError('{} is not a valid hierarchy method.'.format(value)) def validate_time_units(self, value): lowered = value.lower() if lowered in self._valid_time_units: return lowered raise ValueError('{} is not a valid time unit.'.format(value)) def get_dict_route(self): return {"collection": self.coll_name, "experiment": self.name} class CoordinateFrameResource(BossResource): """ Coordinate frame used by experiment(s). For all ranges, the _stop value is exclusive. This means valid values will be _less than_ the stop value. Attributes: name (string): Coordinate frame name. description (string): Coordinate frame description. Defaults to empty. x_start (int): Minimum x coordinate (defaults to 0). x_stop (int): Maximum x coordinate - exclusive (defaults to 1). y_start (int): Minimum y coordinate (defaults to 0). y_stop (int): Maximum y coordinate - exclusive (defaults to 1). z_start (int): Minimum z coordinate (defaults to 0). z_stop (int): Maximum z coordinate - exclusive (defaults to 1). x_voxel_size (int): Defaults to 1. y_voxel_size (int): Defaults to 1. z_voxel_size (int): Defaults to 1. voxel_unit (string): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'. time_step (int): Defaults to 0. time_step_unit (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ def __init__( self, name, description='', x_start=0, x_stop=1, y_start=0, y_stop=1, z_start=0, z_stop=1, x_voxel_size=1, y_voxel_size=1, z_voxel_size=1, voxel_unit='nanometers', creator='', raw={}): """Constructor. For all ranges, the _stop value is exclusive. This means valid values will be _less than_ the stop value. Args: name (string): Coordinate frame name. description (optional[string]): Coordinate frame description. Defaults to empty. x_start (optional[int]): Minimum x coordinate (defaults to 0). x_stop (optional[int]): Maximum x coordinate - exclusive (defaults to 1). y_start (optional[int]): Minimum y coordinate (defaults to 0). y_stop (optional[int]): Maximum y coordinate - exclusive (defaults to 1). z_start (optional[int]): Minimum z coordinate (defaults to 0). z_stop (optional[int]): Maximum z coordinate - exclusive (defaults to 1). x_voxel_size (optional[int]): Defaults to 1. y_voxel_size (optional[int]): Defaults to 1. z_voxel_size (optional[int]): Defaults to 1. voxel_unit (optional[string]): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, raw=raw) self._valid_voxel_units = [ 'nanometers', 'micrometers', 'millimeters', 'centimeters'] self.x_start = x_start self.x_stop = x_stop self.y_start = y_start self.y_stop = y_stop self.z_start = z_start self.z_stop = z_stop self.x_voxel_size = x_voxel_size self.y_voxel_size = y_voxel_size self.z_voxel_size = z_voxel_size self._voxel_unit = self.validate_voxel_units(voxel_unit) def get_route(self): return self.name def get_list_route(self): return '' def get_cutout_route(self): raise RuntimeError('Not supported for coordinate frames.') def get_reserve_route(self): raise RuntimeError('Not supported for coordinate frames.') def get_meta_route(self): raise RuntimeError('Not supported for coordinate frames.') @property def voxel_unit(self): return self._voxel_unit @voxel_unit.setter def voxel_unit(self, value): """ Args: value (string): Valid values: 'nanometers', 'micrometers', 'millimeters', 'centimeters' Raises: ValueError """ self._voxel_unit = self.validate_voxel_units(value) @property def time_step_unit(self): """ Time step unit now part of Experiment. Raises: TypeError """ raise TypeError('time_step_unit now part of Experiment.') @time_step_unit.setter def time_step_unit(self, value): """ Args: value (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds' Raises: TypeError """ raise TypeError('time_step_unit now part of Experiment.') def validate_voxel_units(self, value): lowered = value.lower() if lowered in self._valid_voxel_units: return lowered raise ValueError('{} is not a valid voxel unit.'.format(value)) def get_dict_route(self): return {"coord": self.name} class PartialChannelResourceError(Exception): """ Indicate that the ChannelResource is not fully initialized for use with the cutout service. """ pass class ChannelResource(BossResource): """ Holds channel data. Attributes: coll_name (string): Name of collection containing this resource. exp_name (string): Name of experiment containing this resource. description (string): Description of channel or layer. default_time_sample (int): base_resolution (int): _type (string): 'image' or 'annotation' _valid_datatypes (list[string]): Allowed data type values (static variable). _datatype (string): _cutout_ready (bool): True if datatype specified during instantiation. """ _valid_datatypes = ['uint8', 'uint16', 'uint64'] _valid_types = ['annotation', 'image'] _valid_downsample_status = ['NOT_DOWNSAMPLED', 'IN_PROGRESS', 'DOWNSAMPLED', "FAILED"] def __init__(self, name, collection_name, experiment_name, type="image", description='', default_time_sample=0, datatype='', base_resolution=0, sources=[], related=[], creator='', downsample_status="NOT_DOWNSAMPLED", raw={}): """Constructor. Note, if the channel _already_ exists in the Boss, you can use the helper method get_channel(), that is part of BossRemote, to instantiate the ChannelResource with all the correct values, using only the names of the collection, experiment, and channel. rmt = BossRemote() channel = rmt.get_channel('myChannel', 'myCollection', 'myExperiment') Args: name (string): Channel name. collection_name (string): Parent collection name. experiment_name (string): Parent experiment name. type (optional[string]): 'image' or 'annotation' description (optional[string]): Layer description. Defaults to empty. default_time_sample (optional[int]): Defaults to 0. datatype (optional[string]): 'uint8', 'uint16', 'uint64' Defaults to 'uint8'. base_resolution (optional[int]): Defaults to 0 (native). sources (optional[list[string]]): Channels this channel was derived from. related (optiona[list[string]]): Channels related to this channel. creator (optional[string]): Resource creator. downsample_status (str): Status indicating if the channel has been downsampled or not raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, creator, raw) self.coll_name = collection_name self.exp_name = experiment_name self._type = self.validate_type(type) # Class is considered fully initialized if datatype set during # initialization. if datatype == '': self._cutout_ready = False # Default to uint8. datatype = 'uint8' else: self._cutout_ready = True self._datatype = self.validate_datatype(datatype) self.sources = sources self.related = related #ToDo: validate data types. self.default_time_sample = default_time_sample self.base_resolution = base_resolution self.downsample_status = self.validate_downsample_status(downsample_status) def get_route(self): return self.coll_name + '/experiment/' + self.exp_name + '/channel/' + self.name def get_list_route(self): return self.coll_name + '/experiment/' + self.exp_name + '/channel/' def get_cutout_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name def get_reserve_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name def get_meta_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name def valid_volume(self): """Channels and layers are valid resources for interacting with the volume service. """ return True @property def cutout_ready(self): """Is this channel fully configured for doing cutouts? Returns: (bool) True if the datatype was explicitly set by the user. """ return self._cutout_ready @property def sources(self): return self._sources @sources.setter def sources(self, value): if isinstance(value, str): self._sources = [value] else: self._sources = value @property def related(self): return self._related @related.setter def related(self, value): if isinstance(value, str): self._related = [value] else: self._related = value @property def type(self): """Channel type. Returns: (string) """ return self._type @type.setter def type(self, value): """ Args: value (string): 'image', 'annotation' Raises: ValueError """ self._type = self.validate_type(value) @property def datatype(self): """Channel bit depth. Returns: (string) """ return self._datatype @datatype.setter def datatype(self, value): """ Args: value (string): 'uint8', 'uint16', 'uint64' Raises: ValueError """ self._datatype = self.validate_datatype(value) self._cutout_ready = True def validate_type(self, value): lowered = value.lower() if lowered in ChannelResource._valid_types: return lowered raise ValueError('{} is not a valid type.'.format(value)) def validate_datatype(self, value): lowered = value.lower() if lowered in ChannelResource._valid_datatypes: return lowered raise ValueError('{} is not a valid data type.'.format(value)) def validate_downsample_status(self, value): lowered = value.upper() if lowered in ChannelResource._valid_downsample_status: return lowered raise ValueError('{} is not a valid downsample status.'.format(value)) def get_dict_route(self): return {"collection": self.coll_name, "experiment": self.exp_name, "channel": self.name}
Classes
class BossResource
Base class for Boss resources.
Attributes:
name (string): Name of resource. Used as identifier when talking to
the Boss API.
description (string): Text description of resource.
creator (string): Resource creator.
raw (dictionary): Holds JSON data returned by the Boss API on a POST (create) or GET operation.
class BossResource(Resource): """Base class for Boss resources. Attributes: name (string): Name of resource. Used as identifier when talking to the Boss API. description (string): Text description of resource. creator (string): Resource creator. raw (dictionary): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ def __init__(self, name, description, creator='', raw={}): """Constructor. Args: name (string): Name of resource. description (string): Description of resource. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ self.name = name self.description = description self.creator = creator self.raw = raw def valid_volume(self): return False @abstractmethod def get_route(self): """Get the route for resource. Returns: (string): A string that can be appended to the location of an endpoint such as 'mycollection/experiment/exp1/channel/chan2' """ assert NotImplemented @abstractmethod def get_list_route(self): """Get the route for listing resources. Returns: (string): A string that can be appended to the location of an endpoint such as 'mycollection/experiment' """ assert NotImplemented @abstractmethod def get_cutout_route(self): """Get the route for cutout operations. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented @abstractmethod def get_reserve_route(self): """Get the route for reserving ids. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented @abstractmethod def get_meta_route(self): """Get the route for metadata operations. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented @abstractmethod def get_dict_route(self): """Get the route in dictionary form. Not all resources will support this operation. Returns: (dict): A dictionary containing the names of the resource components Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented
Ancestors (in MRO)
- BossResource
- intern.resource.resource.Resource
- __builtin__.object
Instance variables
var creator
var description
var name
var raw
Methods
def __init__(
self, name, description, creator='', raw={})
Constructor.
Args:
name (string): Name of resource.
description (string): Description of resource.
creator (optional[string]): Resource creator.
raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation.
def __init__(self, name, description, creator='', raw={}): """Constructor. Args: name (string): Name of resource. description (string): Description of resource. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ self.name = name self.description = description self.creator = creator self.raw = raw
def get_cutout_route(
self)
Get the route for cutout operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
@abstractmethod def get_cutout_route(self): """Get the route for cutout operations. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented
def get_dict_route(
self)
Get the route in dictionary form.
Not all resources will support this operation.
Returns
(dict): A dictionary containing the names of the resource components
Raises
(RuntimeError): if operation not supported by the resource.
@abstractmethod def get_dict_route(self): """Get the route in dictionary form. Not all resources will support this operation. Returns: (dict): A dictionary containing the names of the resource components Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented
def get_list_route(
self)
Get the route for listing resources.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment'
@abstractmethod def get_list_route(self): """Get the route for listing resources. Returns: (string): A string that can be appended to the location of an endpoint such as 'mycollection/experiment' """ assert NotImplemented
def get_meta_route(
self)
Get the route for metadata operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
@abstractmethod def get_meta_route(self): """Get the route for metadata operations. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented
def get_reserve_route(
self)
Get the route for reserving ids.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
@abstractmethod def get_reserve_route(self): """Get the route for reserving ids. Not all resources will support this operation. Returns: (string): A string that can be used as part of a URL. Raises: (RuntimeError): if operation not supported by the resource. """ assert NotImplemented
def get_route(
self)
Get the route for resource.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment/exp1/channel/chan2'
@abstractmethod def get_route(self): """Get the route for resource. Returns: (string): A string that can be appended to the location of an endpoint such as 'mycollection/experiment/exp1/channel/chan2' """ assert NotImplemented
def valid_volume(
self)
def valid_volume(self): return False
class ChannelResource
Holds channel data.
Attributes:
coll_name (string): Name of collection containing this resource.
exp_name (string): Name of experiment containing this resource.
description (string): Description of channel or layer.
default_time_sample (int):
base_resolution (int):
_type (string): 'image' or 'annotation'
_valid_datatypes (list[string]): Allowed data type values (static variable).
_datatype (string):
_cutout_ready (bool): True if datatype specified during instantiation.
class ChannelResource(BossResource): """ Holds channel data. Attributes: coll_name (string): Name of collection containing this resource. exp_name (string): Name of experiment containing this resource. description (string): Description of channel or layer. default_time_sample (int): base_resolution (int): _type (string): 'image' or 'annotation' _valid_datatypes (list[string]): Allowed data type values (static variable). _datatype (string): _cutout_ready (bool): True if datatype specified during instantiation. """ _valid_datatypes = ['uint8', 'uint16', 'uint64'] _valid_types = ['annotation', 'image'] _valid_downsample_status = ['NOT_DOWNSAMPLED', 'IN_PROGRESS', 'DOWNSAMPLED', "FAILED"] def __init__(self, name, collection_name, experiment_name, type="image", description='', default_time_sample=0, datatype='', base_resolution=0, sources=[], related=[], creator='', downsample_status="NOT_DOWNSAMPLED", raw={}): """Constructor. Note, if the channel _already_ exists in the Boss, you can use the helper method get_channel(), that is part of BossRemote, to instantiate the ChannelResource with all the correct values, using only the names of the collection, experiment, and channel. rmt = BossRemote() channel = rmt.get_channel('myChannel', 'myCollection', 'myExperiment') Args: name (string): Channel name. collection_name (string): Parent collection name. experiment_name (string): Parent experiment name. type (optional[string]): 'image' or 'annotation' description (optional[string]): Layer description. Defaults to empty. default_time_sample (optional[int]): Defaults to 0. datatype (optional[string]): 'uint8', 'uint16', 'uint64' Defaults to 'uint8'. base_resolution (optional[int]): Defaults to 0 (native). sources (optional[list[string]]): Channels this channel was derived from. related (optiona[list[string]]): Channels related to this channel. creator (optional[string]): Resource creator. downsample_status (str): Status indicating if the channel has been downsampled or not raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, creator, raw) self.coll_name = collection_name self.exp_name = experiment_name self._type = self.validate_type(type) # Class is considered fully initialized if datatype set during # initialization. if datatype == '': self._cutout_ready = False # Default to uint8. datatype = 'uint8' else: self._cutout_ready = True self._datatype = self.validate_datatype(datatype) self.sources = sources self.related = related #ToDo: validate data types. self.default_time_sample = default_time_sample self.base_resolution = base_resolution self.downsample_status = self.validate_downsample_status(downsample_status) def get_route(self): return self.coll_name + '/experiment/' + self.exp_name + '/channel/' + self.name def get_list_route(self): return self.coll_name + '/experiment/' + self.exp_name + '/channel/' def get_cutout_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name def get_reserve_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name def get_meta_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name def valid_volume(self): """Channels and layers are valid resources for interacting with the volume service. """ return True @property def cutout_ready(self): """Is this channel fully configured for doing cutouts? Returns: (bool) True if the datatype was explicitly set by the user. """ return self._cutout_ready @property def sources(self): return self._sources @sources.setter def sources(self, value): if isinstance(value, str): self._sources = [value] else: self._sources = value @property def related(self): return self._related @related.setter def related(self, value): if isinstance(value, str): self._related = [value] else: self._related = value @property def type(self): """Channel type. Returns: (string) """ return self._type @type.setter def type(self, value): """ Args: value (string): 'image', 'annotation' Raises: ValueError """ self._type = self.validate_type(value) @property def datatype(self): """Channel bit depth. Returns: (string) """ return self._datatype @datatype.setter def datatype(self, value): """ Args: value (string): 'uint8', 'uint16', 'uint64' Raises: ValueError """ self._datatype = self.validate_datatype(value) self._cutout_ready = True def validate_type(self, value): lowered = value.lower() if lowered in ChannelResource._valid_types: return lowered raise ValueError('{} is not a valid type.'.format(value)) def validate_datatype(self, value): lowered = value.lower() if lowered in ChannelResource._valid_datatypes: return lowered raise ValueError('{} is not a valid data type.'.format(value)) def validate_downsample_status(self, value): lowered = value.upper() if lowered in ChannelResource._valid_downsample_status: return lowered raise ValueError('{} is not a valid downsample status.'.format(value)) def get_dict_route(self): return {"collection": self.coll_name, "experiment": self.exp_name, "channel": self.name}
Ancestors (in MRO)
- ChannelResource
- BossResource
- intern.resource.resource.Resource
- __builtin__.object
Instance variables
var base_resolution
var coll_name
var cutout_ready
Is this channel fully configured for doing cutouts?
Returns
(bool) True if the datatype was explicitly set by the user.
var datatype
Channel bit depth.
Returns
(string)
var default_time_sample
var downsample_status
var exp_name
var sources
var type
Channel type.
Returns
(string)
Methods
def __init__(
self, name, collection_name, experiment_name, type='image', description='', default_time_sample=0, datatype='', base_resolution=0, sources=[], related=[], creator='', downsample_status='NOT_DOWNSAMPLED', raw={})
Inheritance:
BossResource
.__init__
Constructor.
Note, if the channel already exists in the Boss, you can use the
helper method get_channel(), that is part of BossRemote, to
instantiate the ChannelResource with all the correct values, using only
the names of the collection, experiment, and channel.
rmt = BossRemote()
channel = rmt.get_channel('myChannel', 'myCollection', 'myExperiment')
Args:
name (string): Channel name.
collection_name (string): Parent collection name.
experiment_name (string): Parent experiment name.
type (optional[string]): 'image' or 'annotation'
description (optional[string]): Layer description. Defaults to empty.
default_time_sample (optional[int]): Defaults to 0.
datatype (optional[string]): 'uint8', 'uint16', 'uint64' Defaults to 'uint8'.
base_resolution (optional[int]): Defaults to 0 (native).
sources (optional[list[string]]): Channels this channel was derived from.
related (optiona[list[string]]): Channels related to this channel.
creator (optional[string]): Resource creator.
downsample_status (str): Status indicating if the channel has been downsampled or not
raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation.
def __init__(self, name, collection_name, experiment_name, type="image", description='', default_time_sample=0, datatype='', base_resolution=0, sources=[], related=[], creator='', downsample_status="NOT_DOWNSAMPLED", raw={}): """Constructor. Note, if the channel _already_ exists in the Boss, you can use the helper method get_channel(), that is part of BossRemote, to instantiate the ChannelResource with all the correct values, using only the names of the collection, experiment, and channel. rmt = BossRemote() channel = rmt.get_channel('myChannel', 'myCollection', 'myExperiment') Args: name (string): Channel name. collection_name (string): Parent collection name. experiment_name (string): Parent experiment name. type (optional[string]): 'image' or 'annotation' description (optional[string]): Layer description. Defaults to empty. default_time_sample (optional[int]): Defaults to 0. datatype (optional[string]): 'uint8', 'uint16', 'uint64' Defaults to 'uint8'. base_resolution (optional[int]): Defaults to 0 (native). sources (optional[list[string]]): Channels this channel was derived from. related (optiona[list[string]]): Channels related to this channel. creator (optional[string]): Resource creator. downsample_status (str): Status indicating if the channel has been downsampled or not raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, creator, raw) self.coll_name = collection_name self.exp_name = experiment_name self._type = self.validate_type(type) # Class is considered fully initialized if datatype set during # initialization. if datatype == '': self._cutout_ready = False # Default to uint8. datatype = 'uint8' else: self._cutout_ready = True self._datatype = self.validate_datatype(datatype) self.sources = sources self.related = related #ToDo: validate data types. self.default_time_sample = default_time_sample self.base_resolution = base_resolution self.downsample_status = self.validate_downsample_status(downsample_status)
def get_cutout_route(
self)
Inheritance:
BossResource
.get_cutout_route
Get the route for cutout operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_cutout_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name
def get_dict_route(
self)
Inheritance:
BossResource
.get_dict_route
Get the route in dictionary form.
Not all resources will support this operation.
Returns
(dict): A dictionary containing the names of the resource components
Raises
(RuntimeError): if operation not supported by the resource.
def get_dict_route(self): return {"collection": self.coll_name, "experiment": self.exp_name, "channel": self.name}
def get_list_route(
self)
Inheritance:
BossResource
.get_list_route
Get the route for listing resources.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment'
def get_list_route(self): return self.coll_name + '/experiment/' + self.exp_name + '/channel/'
def get_meta_route(
self)
Inheritance:
BossResource
.get_meta_route
Get the route for metadata operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_meta_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name
def get_reserve_route(
self)
Inheritance:
BossResource
.get_reserve_route
Get the route for reserving ids.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_reserve_route(self): return self.coll_name + '/' + self.exp_name + '/' + self.name
def get_route(
self)
Inheritance:
BossResource
.get_route
Get the route for resource.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment/exp1/channel/chan2'
def get_route(self): return self.coll_name + '/experiment/' + self.exp_name + '/channel/' + self.name
def valid_volume(
self)
Inheritance:
BossResource
.valid_volume
Channels and layers are valid resources for interacting with the volume service.
def valid_volume(self): """Channels and layers are valid resources for interacting with the volume service. """ return True
def validate_datatype(
self, value)
def validate_datatype(self, value): lowered = value.lower() if lowered in ChannelResource._valid_datatypes: return lowered raise ValueError('{} is not a valid data type.'.format(value))
def validate_downsample_status(
self, value)
def validate_downsample_status(self, value): lowered = value.upper() if lowered in ChannelResource._valid_downsample_status: return lowered raise ValueError('{} is not a valid downsample status.'.format(value))
def validate_type(
self, value)
def validate_type(self, value): lowered = value.lower() if lowered in ChannelResource._valid_types: return lowered raise ValueError('{} is not a valid type.'.format(value))
class CollectionResource
Top level container for Boss projects.
class CollectionResource(BossResource): """Top level container for Boss projects. """ def __init__( self, name, description='', creator='', raw={}): """Constructor. Args: name (string): Collection name. description (optional[string]): Collection description. Defaults to empty. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, creator, raw) def get_route(self): return self.name def get_list_route(self): return '' def get_cutout_route(self): raise RuntimeError('Not supported for collections.') def get_reserve_route(self): raise RuntimeError('Not supported for collections.') def get_meta_route(self): return self.name def get_dict_route(self): return {"collection": self.name}
Ancestors (in MRO)
- CollectionResource
- BossResource
- intern.resource.resource.Resource
- __builtin__.object
Instance variables
Methods
def __init__(
self, name, description='', creator='', raw={})
Inheritance:
BossResource
.__init__
Constructor.
Args:
name (string): Collection name.
description (optional[string]): Collection description. Defaults to empty.
creator (optional[string]): Resource creator.
raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation.
def __init__( self, name, description='', creator='', raw={}): """Constructor. Args: name (string): Collection name. description (optional[string]): Collection description. Defaults to empty. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, creator, raw)
def get_cutout_route(
self)
Inheritance:
BossResource
.get_cutout_route
Get the route for cutout operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_cutout_route(self): raise RuntimeError('Not supported for collections.')
def get_dict_route(
self)
Inheritance:
BossResource
.get_dict_route
Get the route in dictionary form.
Not all resources will support this operation.
Returns
(dict): A dictionary containing the names of the resource components
Raises
(RuntimeError): if operation not supported by the resource.
def get_dict_route(self): return {"collection": self.name}
def get_list_route(
self)
Inheritance:
BossResource
.get_list_route
Get the route for listing resources.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment'
def get_list_route(self): return ''
def get_meta_route(
self)
Inheritance:
BossResource
.get_meta_route
Get the route for metadata operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_meta_route(self): return self.name
def get_reserve_route(
self)
Inheritance:
BossResource
.get_reserve_route
Get the route for reserving ids.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_reserve_route(self): raise RuntimeError('Not supported for collections.')
def get_route(
self)
Inheritance:
BossResource
.get_route
Get the route for resource.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment/exp1/channel/chan2'
def get_route(self): return self.name
class CoordinateFrameResource
Coordinate frame used by experiment(s).
For all ranges, the stop value is exclusive. This means valid values will be _less than the stop value.
Attributes:
name (string): Coordinate frame name.
description (string): Coordinate frame description. Defaults to empty.
x_start (int): Minimum x coordinate (defaults to 0).
x_stop (int): Maximum x coordinate - exclusive (defaults to 1).
y_start (int): Minimum y coordinate (defaults to 0).
y_stop (int): Maximum y coordinate - exclusive (defaults to 1).
z_start (int): Minimum z coordinate (defaults to 0).
z_stop (int): Maximum z coordinate - exclusive (defaults to 1).
x_voxel_size (int): Defaults to 1.
y_voxel_size (int): Defaults to 1.
z_voxel_size (int): Defaults to 1.
voxel_unit (string): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'.
time_step (int): Defaults to 0.
time_step_unit (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'.
class CoordinateFrameResource(BossResource): """ Coordinate frame used by experiment(s). For all ranges, the _stop value is exclusive. This means valid values will be _less than_ the stop value. Attributes: name (string): Coordinate frame name. description (string): Coordinate frame description. Defaults to empty. x_start (int): Minimum x coordinate (defaults to 0). x_stop (int): Maximum x coordinate - exclusive (defaults to 1). y_start (int): Minimum y coordinate (defaults to 0). y_stop (int): Maximum y coordinate - exclusive (defaults to 1). z_start (int): Minimum z coordinate (defaults to 0). z_stop (int): Maximum z coordinate - exclusive (defaults to 1). x_voxel_size (int): Defaults to 1. y_voxel_size (int): Defaults to 1. z_voxel_size (int): Defaults to 1. voxel_unit (string): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'. time_step (int): Defaults to 0. time_step_unit (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ def __init__( self, name, description='', x_start=0, x_stop=1, y_start=0, y_stop=1, z_start=0, z_stop=1, x_voxel_size=1, y_voxel_size=1, z_voxel_size=1, voxel_unit='nanometers', creator='', raw={}): """Constructor. For all ranges, the _stop value is exclusive. This means valid values will be _less than_ the stop value. Args: name (string): Coordinate frame name. description (optional[string]): Coordinate frame description. Defaults to empty. x_start (optional[int]): Minimum x coordinate (defaults to 0). x_stop (optional[int]): Maximum x coordinate - exclusive (defaults to 1). y_start (optional[int]): Minimum y coordinate (defaults to 0). y_stop (optional[int]): Maximum y coordinate - exclusive (defaults to 1). z_start (optional[int]): Minimum z coordinate (defaults to 0). z_stop (optional[int]): Maximum z coordinate - exclusive (defaults to 1). x_voxel_size (optional[int]): Defaults to 1. y_voxel_size (optional[int]): Defaults to 1. z_voxel_size (optional[int]): Defaults to 1. voxel_unit (optional[string]): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, raw=raw) self._valid_voxel_units = [ 'nanometers', 'micrometers', 'millimeters', 'centimeters'] self.x_start = x_start self.x_stop = x_stop self.y_start = y_start self.y_stop = y_stop self.z_start = z_start self.z_stop = z_stop self.x_voxel_size = x_voxel_size self.y_voxel_size = y_voxel_size self.z_voxel_size = z_voxel_size self._voxel_unit = self.validate_voxel_units(voxel_unit) def get_route(self): return self.name def get_list_route(self): return '' def get_cutout_route(self): raise RuntimeError('Not supported for coordinate frames.') def get_reserve_route(self): raise RuntimeError('Not supported for coordinate frames.') def get_meta_route(self): raise RuntimeError('Not supported for coordinate frames.') @property def voxel_unit(self): return self._voxel_unit @voxel_unit.setter def voxel_unit(self, value): """ Args: value (string): Valid values: 'nanometers', 'micrometers', 'millimeters', 'centimeters' Raises: ValueError """ self._voxel_unit = self.validate_voxel_units(value) @property def time_step_unit(self): """ Time step unit now part of Experiment. Raises: TypeError """ raise TypeError('time_step_unit now part of Experiment.') @time_step_unit.setter def time_step_unit(self, value): """ Args: value (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds' Raises: TypeError """ raise TypeError('time_step_unit now part of Experiment.') def validate_voxel_units(self, value): lowered = value.lower() if lowered in self._valid_voxel_units: return lowered raise ValueError('{} is not a valid voxel unit.'.format(value)) def get_dict_route(self): return {"coord": self.name}
Ancestors (in MRO)
- CoordinateFrameResource
- BossResource
- intern.resource.resource.Resource
- __builtin__.object
Instance variables
var time_step_unit
Time step unit now part of Experiment.
Raises
TypeError
var voxel_unit
var x_start
var x_stop
var x_voxel_size
var y_start
var y_stop
var y_voxel_size
var z_start
var z_stop
var z_voxel_size
Methods
def __init__(
self, name, description='', x_start=0, x_stop=1, y_start=0, y_stop=1, z_start=0, z_stop=1, x_voxel_size=1, y_voxel_size=1, z_voxel_size=1, voxel_unit='nanometers', creator='', raw={})
Inheritance:
BossResource
.__init__
Constructor.
For all ranges, the stop value is exclusive. This means valid values will be _less than the stop value.
Args:
name (string): Coordinate frame name.
description (optional[string]): Coordinate frame description. Defaults to empty.
x_start (optional[int]): Minimum x coordinate (defaults to 0).
x_stop (optional[int]): Maximum x coordinate - exclusive (defaults to 1).
y_start (optional[int]): Minimum y coordinate (defaults to 0).
y_stop (optional[int]): Maximum y coordinate - exclusive (defaults to 1).
z_start (optional[int]): Minimum z coordinate (defaults to 0).
z_stop (optional[int]): Maximum z coordinate - exclusive (defaults to 1).
x_voxel_size (optional[int]): Defaults to 1.
y_voxel_size (optional[int]): Defaults to 1.
z_voxel_size (optional[int]): Defaults to 1.
voxel_unit (optional[string]): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'.
creator (optional[string]): Resource creator.
raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation.
def __init__( self, name, description='', x_start=0, x_stop=1, y_start=0, y_stop=1, z_start=0, z_stop=1, x_voxel_size=1, y_voxel_size=1, z_voxel_size=1, voxel_unit='nanometers', creator='', raw={}): """Constructor. For all ranges, the _stop value is exclusive. This means valid values will be _less than_ the stop value. Args: name (string): Coordinate frame name. description (optional[string]): Coordinate frame description. Defaults to empty. x_start (optional[int]): Minimum x coordinate (defaults to 0). x_stop (optional[int]): Maximum x coordinate - exclusive (defaults to 1). y_start (optional[int]): Minimum y coordinate (defaults to 0). y_stop (optional[int]): Maximum y coordinate - exclusive (defaults to 1). z_start (optional[int]): Minimum z coordinate (defaults to 0). z_stop (optional[int]): Maximum z coordinate - exclusive (defaults to 1). x_voxel_size (optional[int]): Defaults to 1. y_voxel_size (optional[int]): Defaults to 1. z_voxel_size (optional[int]): Defaults to 1. voxel_unit (optional[string]): 'nanometers', 'micrometers', 'millimeters', 'centimeters'. Defaults to 'nanometers'. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. """ BossResource.__init__(self, name, description, raw=raw) self._valid_voxel_units = [ 'nanometers', 'micrometers', 'millimeters', 'centimeters'] self.x_start = x_start self.x_stop = x_stop self.y_start = y_start self.y_stop = y_stop self.z_start = z_start self.z_stop = z_stop self.x_voxel_size = x_voxel_size self.y_voxel_size = y_voxel_size self.z_voxel_size = z_voxel_size self._voxel_unit = self.validate_voxel_units(voxel_unit)
def get_cutout_route(
self)
Inheritance:
BossResource
.get_cutout_route
Get the route for cutout operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_cutout_route(self): raise RuntimeError('Not supported for coordinate frames.')
def get_dict_route(
self)
Inheritance:
BossResource
.get_dict_route
Get the route in dictionary form.
Not all resources will support this operation.
Returns
(dict): A dictionary containing the names of the resource components
Raises
(RuntimeError): if operation not supported by the resource.
def get_dict_route(self): return {"coord": self.name}
def get_list_route(
self)
Inheritance:
BossResource
.get_list_route
Get the route for listing resources.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment'
def get_list_route(self): return ''
def get_meta_route(
self)
Inheritance:
BossResource
.get_meta_route
Get the route for metadata operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_meta_route(self): raise RuntimeError('Not supported for coordinate frames.')
def get_reserve_route(
self)
Inheritance:
BossResource
.get_reserve_route
Get the route for reserving ids.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_reserve_route(self): raise RuntimeError('Not supported for coordinate frames.')
def get_route(
self)
Inheritance:
BossResource
.get_route
Get the route for resource.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment/exp1/channel/chan2'
def get_route(self): return self.name
def validate_voxel_units(
self, value)
def validate_voxel_units(self, value): lowered = value.lower() if lowered in self._valid_voxel_units: return lowered raise ValueError('{} is not a valid voxel unit.'.format(value))
class ExperimentResource
Experiments reside inside a collection and contain channels and
layers.
Attributes:
_coord_frame (string):
num_hierarchy_levels (int):
hierarchy_method (string):
num_time_samples (int):
time_step (int): Defaults to 0.
time_step_unit (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'.
class ExperimentResource(BossResource): """Experiments reside inside a collection and contain channels and layers. Attributes: _coord_frame (string): num_hierarchy_levels (int): hierarchy_method (string): num_time_samples (int): time_step (int): Defaults to 0. time_step_unit (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ def __init__(self, name, collection_name, coord_frame='', description='', num_hierarchy_levels=1, hierarchy_method='anisotropic', num_time_samples=1, creator='', raw={}, time_step=0, time_step_unit='seconds'): """Constructor. Args: name (string): Experiment name. collection_name (string): Collection name. coord_frame (string): Name of coordinate frame used by experiment. Defaults to empty. description (optional[string]): Experiment description. Defaults to empty. num_hierarchy_levels (optional[int]): Defaults to 1. hierarchy_method (optional[string]): 'anisotropic', 'isotropic' Defaults to 'anisotropic'. num_time_samples (optional[int]): Maximum number of time samples for any time series data captured by this experiment. Defaults to 1. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. time_step (optional[int]): Defaults to 0. time_step_unit (optional[string]): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ BossResource.__init__(self, name, description, creator, raw) self.coll_name = collection_name self._valid_hierarchy_methods = ['anisotropic', 'isotropic'] #ToDo: validate data types. self._coord_frame = coord_frame self.num_hierarchy_levels = num_hierarchy_levels self._hierarchy_method = self.validate_hierarchy_method( hierarchy_method) self.num_time_samples = num_time_samples self._valid_time_units = [ '', 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'] self.time_step = time_step self._time_step_unit = self.validate_time_units(time_step_unit) @property def coord_frame(self): if self._coord_frame is '': raise ValueError('Coordinate frame name is blank.') else: return self._coord_frame @coord_frame.setter def coord_frame(self, value): self._coord_frame = value @property def hierarchy_method(self): return self._hierarchy_method @hierarchy_method.setter def hierarchy_method(self, value): """ Args: value (string): Valid values: 'near_iso', 'iso', 'slice' Raises: ValueError """ self._hierarchy_method = self.validate_hierarchy_method(value) @property def time_step_unit(self): return self._time_step_unit @time_step_unit.setter def time_step_unit(self, value): """ Args: value (string): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds' Raises: ValueError """ self._time_step_unit = self.validate_time_units(value) def get_route(self): return self.coll_name + '/experiment/' + self.name def get_list_route(self): return self.coll_name + '/experiment/' def get_cutout_route(self): raise RuntimeError('Not supported for experiments.') def get_reserve_route(self): raise RuntimeError('Not supported for experiments.') def get_meta_route(self): return self.coll_name + '/' + self.name def validate_hierarchy_method(self, value): lowered = value.lower() if lowered in self._valid_hierarchy_methods: return lowered raise ValueError('{} is not a valid hierarchy method.'.format(value)) def validate_time_units(self, value): lowered = value.lower() if lowered in self._valid_time_units: return lowered raise ValueError('{} is not a valid time unit.'.format(value)) def get_dict_route(self): return {"collection": self.coll_name, "experiment": self.name}
Ancestors (in MRO)
- ExperimentResource
- BossResource
- intern.resource.resource.Resource
- __builtin__.object
Instance variables
var coll_name
var coord_frame
var hierarchy_method
var num_hierarchy_levels
var num_time_samples
var time_step
var time_step_unit
Methods
def __init__(
self, name, collection_name, coord_frame='', description='', num_hierarchy_levels=1, hierarchy_method='anisotropic', num_time_samples=1, creator='', raw={}, time_step=0, time_step_unit='seconds')
Inheritance:
BossResource
.__init__
Constructor.
Args:
name (string): Experiment name.
collection_name (string): Collection name.
coord_frame (string): Name of coordinate frame used by experiment. Defaults to empty.
description (optional[string]): Experiment description. Defaults to empty.
num_hierarchy_levels (optional[int]): Defaults to 1.
hierarchy_method (optional[string]): 'anisotropic', 'isotropic' Defaults to 'anisotropic'.
num_time_samples (optional[int]): Maximum number of time samples for any time series data captured by this experiment. Defaults to 1.
creator (optional[string]): Resource creator.
raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation.
time_step (optional[int]): Defaults to 0.
time_step_unit (optional[string]): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'.
def __init__(self, name, collection_name, coord_frame='', description='', num_hierarchy_levels=1, hierarchy_method='anisotropic', num_time_samples=1, creator='', raw={}, time_step=0, time_step_unit='seconds'): """Constructor. Args: name (string): Experiment name. collection_name (string): Collection name. coord_frame (string): Name of coordinate frame used by experiment. Defaults to empty. description (optional[string]): Experiment description. Defaults to empty. num_hierarchy_levels (optional[int]): Defaults to 1. hierarchy_method (optional[string]): 'anisotropic', 'isotropic' Defaults to 'anisotropic'. num_time_samples (optional[int]): Maximum number of time samples for any time series data captured by this experiment. Defaults to 1. creator (optional[string]): Resource creator. raw (optional[dictionary]): Holds JSON data returned by the Boss API on a POST (create) or GET operation. time_step (optional[int]): Defaults to 0. time_step_unit (optional[string]): 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'. Defaults to 'seconds'. """ BossResource.__init__(self, name, description, creator, raw) self.coll_name = collection_name self._valid_hierarchy_methods = ['anisotropic', 'isotropic'] #ToDo: validate data types. self._coord_frame = coord_frame self.num_hierarchy_levels = num_hierarchy_levels self._hierarchy_method = self.validate_hierarchy_method( hierarchy_method) self.num_time_samples = num_time_samples self._valid_time_units = [ '', 'nanoseconds', 'microseconds', 'milliseconds', 'seconds'] self.time_step = time_step self._time_step_unit = self.validate_time_units(time_step_unit)
def get_cutout_route(
self)
Inheritance:
BossResource
.get_cutout_route
Get the route for cutout operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_cutout_route(self): raise RuntimeError('Not supported for experiments.')
def get_dict_route(
self)
Inheritance:
BossResource
.get_dict_route
Get the route in dictionary form.
Not all resources will support this operation.
Returns
(dict): A dictionary containing the names of the resource components
Raises
(RuntimeError): if operation not supported by the resource.
def get_dict_route(self): return {"collection": self.coll_name, "experiment": self.name}
def get_list_route(
self)
Inheritance:
BossResource
.get_list_route
Get the route for listing resources.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment'
def get_list_route(self): return self.coll_name + '/experiment/'
def get_meta_route(
self)
Inheritance:
BossResource
.get_meta_route
Get the route for metadata operations.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_meta_route(self): return self.coll_name + '/' + self.name
def get_reserve_route(
self)
Inheritance:
BossResource
.get_reserve_route
Get the route for reserving ids.
Not all resources will support this operation.
Returns
(string): A string that can be used as part of a URL.
Raises
(RuntimeError): if operation not supported by the resource.
def get_reserve_route(self): raise RuntimeError('Not supported for experiments.')
def get_route(
self)
Inheritance:
BossResource
.get_route
Get the route for resource.
Returns
(string): A string that can be appended to the location of an
endpoint such as 'mycollection/experiment/exp1/channel/chan2'
def get_route(self): return self.coll_name + '/experiment/' + self.name
def validate_hierarchy_method(
self, value)
def validate_hierarchy_method(self, value): lowered = value.lower() if lowered in self._valid_hierarchy_methods: return lowered raise ValueError('{} is not a valid hierarchy method.'.format(value))
def validate_time_units(
self, value)
def validate_time_units(self, value): lowered = value.lower() if lowered in self._valid_time_units: return lowered raise ValueError('{} is not a valid time unit.'.format(value))
class PartialChannelResourceError
Indicate that the ChannelResource is not fully initialized for use with
the cutout service.
class PartialChannelResourceError(Exception): """ Indicate that the ChannelResource is not fully initialized for use with the cutout service. """ pass
Ancestors (in MRO)
- PartialChannelResourceError
- exceptions.Exception
- exceptions.BaseException
- __builtin__.object
Class variables
var args
var message