Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions omero_marshal/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def get_encoder(t):


def get_decoder(t):
t = get_full_type(t)
try:
return DECODERS[t]
except KeyError:
Expand Down Expand Up @@ -77,6 +78,15 @@ def get_schema_version(version):
SPW_SCHEMA_URL = '%s/%s/%s' % (BASE_URL, SPW_NS, SCHEMA_VERSION)


def get_full_type(t):
if t.startswith("http"):
return t
elif t.startswith("omero:"):
return '%s/OMERO/%s#%s' % (BASE_URL, SCHEMA_VERSION, t[6:])
else:
return '%s/OME/%s#%s' % (BASE_URL, SCHEMA_VERSION, t)


class MarshallingCtx(object):

def __init__(self, encoders, decoders):
Expand All @@ -91,6 +101,7 @@ def get_encoder(self, t):
return None

def get_decoder(self, t):
t = get_full_type(t)
try:
return self.decoders[t]
except KeyError:
Expand Down
2 changes: 2 additions & 0 deletions omero_marshal/decode/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ def to_unit(self, v):
if v is None:
return None
unit = v['@type'][v['@type'].rfind('#') + 1:]
if unit.startswith("omero:"):
unit = unit[6:]
unit = getattr(omero.model, unit)
return unit(
float(v['Value']),
Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/acquisitionmode.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class AcquisitionModeDecoder(EnumDecoder):

TYPE = 'TBD#AcquisitionMode'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#AcquisitionMode'

OMERO_CLASS = AcquisitionModeI

Expand Down
3 changes: 2 additions & 1 deletion omero_marshal/decode/decoders/checksum_algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@

class ChecksumAlgorithmDecoder(EnumDecoder):

TYPE = 'TBD#ChecksumAlgorithm'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#' \
'ChecksumAlgorithm'

OMERO_CLASS = ChecksumAlgorithmI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/contrastmethod.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class ContrastMethodDecoder(EnumDecoder):

TYPE = 'TBD#ContrastMethod'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#ContrastMethod'

OMERO_CLASS = ContrastMethodI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/details.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class DetailsDecoder(Decoder):

TYPE = 'TBD#Details'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#Details'

OMERO_CLASS = DetailsI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/dimensionorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class DimensionOrderDecoder(EnumDecoder):

TYPE = 'TBD#DimensionOrder'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#DimensionOrder'

OMERO_CLASS = DimensionOrderI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/externalinfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class ExternalInfoDecoder(Decoder):

TYPE = 'TBD#ExternalInfo'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#ExternalInfo'

OMERO_CLASS = ExternalInfoI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/format.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class FormatDecoder(EnumDecoder):

TYPE = 'TBD#Format'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#Format'

OMERO_CLASS = FormatI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/illumination.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class IlluminationDecoder(EnumDecoder):

TYPE = 'TBD#Illumination'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#IlluminationType'

OMERO_CLASS = IlluminationI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/original_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class OriginalFileDecoder(Decoder):

TYPE = 'TBD#OriginalFile'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#OriginalFile'

OMERO_CLASS = OriginalFileI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class PermissionsDecoder(Decoder):

TYPE = 'TBD#Permissions'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#Permissions'

OMERO_CLASS = PermissionsI

Expand Down
3 changes: 2 additions & 1 deletion omero_marshal/decode/decoders/photometricinterpretation.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@

class PhotometricInterpretationDecoder(EnumDecoder):

TYPE = 'TBD#PhotometricInterpretation'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#' \
'PhotometricInterpretation'

OMERO_CLASS = PhotometricInterpretationI

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/decode/decoders/pixelstype.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class PixelsTypeDecoder(EnumDecoder):

TYPE = 'TBD#PixelsType'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#PixelType'

OMERO_CLASS = PixelsTypeI

Expand Down
42 changes: 31 additions & 11 deletions omero_marshal/encode/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@
# jason@glencoesoftware.com.
#


# Needed to avoid import errors when this is the first import
import omero.all # noqa
from omero import RType
from omero_model_UnitBase import UnitBase
from omero.rtypes import unwrap


BASE_CONTEXT = "http://www.openmicroscopy.org/Schemas/OME/2016-06#"
OMERO_CONTEXT = "http://www.openmicroscopy.org/Schemas/OMERO/2016-06#"


class Encoder(object):

TYPE = ''
Expand All @@ -35,22 +38,39 @@ def set_if_not_none(self, v, key, value):
v[key] = value

def encode_unit(self, v, key, value):
v[key] = {
'@type': 'TBD#%s' % value.__class__.__name__,
'Unit': value.getUnit().name,
'Symbol': value.getSymbol(),
'Value': value.getValue()
}

def encode(self, obj):
v = {'@type': self.TYPE}
k = value.__class__.__name__
if k in ("LengthI", "TimeI"):
v[key] = {
'@type': 'omero:%s' % k,
'Unit': value.getUnit().name,
'Symbol': value.getSymbol(),
'Value': value.getValue()
}
else:
raise Exception("unhandled unit: %s" % k)

def encode(self, obj, include_context=None):

if self.TYPE.startswith(BASE_CONTEXT):
v = {'@type': self.TYPE.split('#')[-1]}
elif self.TYPE.startswith(OMERO_CONTEXT):
v = {'@type': "omero:" + self.TYPE.split('#')[-1]}
else:
raise Exception("unknown prefix: %s" % self.TYPE)

if include_context is None or include_context:
v['@context'] = {
"@vocab": BASE_CONTEXT,
"omero": OMERO_CONTEXT,
}

if hasattr(obj, 'id'):
obj_id = unwrap(obj.id)
if obj_id is not None:
v['@id'] = obj_id
if hasattr(obj, 'details') and obj.details is not None:
encoder = self.ctx.get_encoder(obj.details.__class__)
v['omero:details'] = encoder.encode(obj.details)
v['omero:details'] = encoder.encode(obj.details, False)

return v

Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/encode/encoders/acquisitionmode.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class AcquisitionModeEncoder(EnumEncoder):

TYPE = 'TBD#AcquisitionMode'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#AcquisitionMode'


encoder = (AcquisitionModeI, AcquisitionModeEncoder)
5 changes: 3 additions & 2 deletions omero_marshal/encode/encoders/affinetransform.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ class AffineTransform201501Encoder(Encoder):

TYPE = 'http://www.openmicroscopy.org/Schemas/ROI/2015-01#AffineTransform'

def encode(self, obj):
v = super(AffineTransform201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(AffineTransform201501Encoder, self).encode(
obj, include_context)
self.set_if_not_none(v, 'A00', obj.getA00())
self.set_if_not_none(v, 'A10', obj.getA10())
self.set_if_not_none(v, 'A01', obj.getA01())
Expand Down
10 changes: 5 additions & 5 deletions omero_marshal/encode/encoders/annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ class Annotation201501Encoder(Encoder):

TYPE = 'http://www.openmicroscopy.org/Schemas/SA/2015-01#Annotation'

def encode(self, obj):
v = super(Annotation201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(Annotation201501Encoder, self).encode(obj, include_context)
self.set_if_not_none(v, 'Description', obj.description)
self.set_if_not_none(v, 'Namespace', obj.ns)
return v
Expand All @@ -63,15 +63,15 @@ class Annotatable201501Encoder(Encoder):

TYPE = 'http://www.openmicroscopy.org/Schemas/SA/2015-01#AnnotationRef'

def encode(self, obj):
v = super(Annotatable201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(Annotatable201501Encoder, self).encode(obj, include_context)
if obj.isAnnotationLinksLoaded() and obj.sizeOfAnnotationLinks() > 0:
annotations = list()
for annotation_link in obj.copyAnnotationLinks():
annotation = annotation_link.child
annotation_encoder = self.ctx.get_encoder(annotation.__class__)
annotations.append(
annotation_encoder.encode(annotation)
annotation_encoder.encode(annotation, False)
)
v['Annotations'] = annotations
return v
Expand Down
5 changes: 3 additions & 2 deletions omero_marshal/encode/encoders/boolean_annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ class BooleanAnnotation201501Encoder(AnnotationEncoder):
TYPE = 'http://www.openmicroscopy.org/Schemas/SA/2015-01' \
'#BooleanAnnotation'

def encode(self, obj):
v = super(BooleanAnnotation201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(BooleanAnnotation201501Encoder, self).encode(
obj, include_context)
self.set_if_not_none(v, 'Value', obj.boolValue)
return v

Expand Down
12 changes: 6 additions & 6 deletions omero_marshal/encode/encoders/channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ class Channel201501Encoder(AnnotatableEncoder):

TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2015-01#Channel'

def encode(self, obj):
v = super(Channel201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(Channel201501Encoder, self).encode(obj, include_context)
color = self.rgba_to_int(obj.red, obj.green, obj.blue, obj.alpha)
self.set_if_not_none(v, 'Color', color)
self.set_if_not_none(v, 'omero:lookupTable', obj.lookupTable)
Expand Down Expand Up @@ -49,19 +49,19 @@ def encode(self, obj):
contrast_method_encoder = \
self.ctx.get_encoder(contrast_method.__class__)
v['ContrastMethod'] = \
contrast_method_encoder.encode(contrast_method)
contrast_method_encoder.encode(contrast_method, False)
illumination = logical_channel.illumination
if illumination is not None and illumination.isLoaded():
illumination_encoder = \
self.ctx.get_encoder(illumination.__class__)
v['Illumination'] = \
illumination_encoder.encode(illumination)
illumination_encoder.encode(illumination, False)
acquisition_mode = logical_channel.mode
if acquisition_mode is not None and acquisition_mode.isLoaded():
acquisition_mode_encoder = \
self.ctx.get_encoder(acquisition_mode.__class__)
v['AcquisitionMode'] = \
acquisition_mode_encoder.encode(acquisition_mode)
acquisition_mode_encoder.encode(acquisition_mode, False)
photometric_interpretation = \
logical_channel.photometricInterpretation
if photometric_interpretation is not None \
Expand All @@ -70,7 +70,7 @@ def encode(self, obj):
self.ctx.get_encoder(photometric_interpretation.__class__)
v['omero:photometricInterpretation'] = \
photometric_interpretation_encoder.encode(
photometric_interpretation
photometric_interpretation, False
)
return v

Expand Down
3 changes: 2 additions & 1 deletion omero_marshal/encode/encoders/checksum_algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@

class ChecksumAlgorithmEncoder(EnumEncoder):

TYPE = 'TBD#ChecksumAlgorithm'
TYPE = 'http://www.openmicroscopy.org/Schemas/OMERO/2016-06#' \
'ChecksumAlgorithm'


encoder = (ChecksumAlgorithmI, ChecksumAlgorithmEncoder)
5 changes: 3 additions & 2 deletions omero_marshal/encode/encoders/comment_annotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ class CommentAnnotation201501Encoder(TextAnnotationEncoder):
TYPE = 'http://www.openmicroscopy.org/Schemas/SA/2015-01' \
'#CommentAnnotation'

def encode(self, obj):
v = super(CommentAnnotation201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(CommentAnnotation201501Encoder, self).encode(
obj, include_context)
return v


Expand Down
2 changes: 1 addition & 1 deletion omero_marshal/encode/encoders/contrastmethod.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class ContrastMethodEncoder(EnumEncoder):

TYPE = 'TBD#ContrastMethod'
TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2016-06#ContrastMethod'


encoder = (ContrastMethodI, ContrastMethodEncoder)
6 changes: 3 additions & 3 deletions omero_marshal/encode/encoders/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ class Dataset201501Encoder(AnnotatableEncoder):

TYPE = 'http://www.openmicroscopy.org/Schemas/OME/2015-01#Dataset'

def encode(self, obj):
v = super(Dataset201501Encoder, self).encode(obj)
def encode(self, obj, include_context=None):
v = super(Dataset201501Encoder, self).encode(obj, include_context)
self.set_if_not_none(v, 'Name', obj.name)
self.set_if_not_none(v, 'Description', obj.description)
if obj.isImageLinksLoaded() and obj.sizeOfImageLinks() > 0:
Expand All @@ -28,7 +28,7 @@ def encode(self, obj):
image = image_link.child
image_encoder = self.ctx.get_encoder(image.__class__)
images.append(
image_encoder.encode(image)
image_encoder.encode(image, False)
)
v['Images'] = images
return v
Expand Down
Loading