"""Base data structures for the SDK."""
[docs]class RecordCollection(object):
"""
Class for handling query records.
Attributes:
records (list of :class:`Record <helios.core.structure.Record>`):
Raw record data for debugging purposes.
"""
def __init__(self, records=None):
self._records = records or []
@property
def failed(self):
"""Records for queries that failed."""
return [x for x in self._records if not x.ok]
@property
def succeeded(self):
"""Records for queries that succeeded."""
return [x for x in self._records if x.ok]
[docs]class Record(object):
"""
Individual query record.
Args:
message (tuple): Original message. This will be a namedtuple containing
all the inputs for an individual call within a batch job.
query (str): API query.
content: Returned content. To be defined by method.
error (exception): Exception that occurred, if any.
"""
def __init__(self, message=None, query=None, content=None, error=None):
self.message = message
self.query = query
self.content = content
self.error = error
@property
def ok(self):
"""
Check if failure occurred.
Returns:
bool: False if error occurred, and True otherwise.
"""
if self.error:
return False
return True
[docs]class ImageRecord(Record):
"""
Record class for images.
Args:
message (tuple): Original message. This will be a namedtuple containing
all the inputs for an individual call within a batch job.
query (str): API query.
content (numpy.ndarray): Image as a Numpy ndarray.
error (exception): Exception that occurred, if any.
name (str): Name of image.
output_file (str): Full path to image file that was written.
"""
def __init__(self, message=None, query=None, content=None, error=None,
name=None, output_file=None):
super(ImageRecord, self).__init__(message=message, query=query,
content=content, error=error)
self.name = name
self.output_file = output_file
[docs]class ImageCollection(object):
"""
Stores all image content and associated metadata.
Attributes:
image_data (list of ndarray): All image data.
"""
def __init__(self, image_data, records):
self.image_data = image_data
self.records = RecordCollection(records=records)
@property
def output_files(self):
"""Full paths to all saved images."""
return [x.output_file for x in self.records.succeeded]
@property
def image_names(self):
"""Names of all images."""
return [x.name for x in self.records.succeeded]