Ejemplo n.º 1
0
 def test_screen_decoder(self, screen):
     encoder = get_encoder(screen.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(screen)
     v = decoder.decode(v)
     self.assert_screen(v)
     assert v.sizeOfPlateLinks() == 0
 def test_roi_with_shapes_and_annotations(self,
                                          roi_with_shapes_and_annotations):
     encoder = get_encoder(roi_with_shapes_and_annotations.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi_with_shapes_and_annotations)
     v = decoder.decode(v)
     self.assert_roi_with_shapes(v, has_annotations=True)
Ejemplo n.º 3
0
 def test_well_color_decoder(self, color, well):
     """Test different combinations of r, g, b, a."""
     well.red = rint(color[0])
     well.green = rint(color[1])
     well.blue = rint(color[2])
     well.alpha = rint(color[3])
     encoder = get_encoder(well.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(well)
     # Check we get the expected Integer
     assert v.get('Color') == color[4]
     v = decoder.decode(v)
     # If red is None, all are None
     if color[0] is None:
         assert v.red is None
         assert v.green is None
         assert v.blue is None
         assert v.alpha is None
     elif color[3] is None:
         # alpha None -> 255 by default
         assert v.red.val == color[0]
         assert v.green.val == color[1]
         assert v.blue.val == color[2]
         assert v.alpha.val == 255
     else:
         # Otherwise, all preserved
         assert v.red.val == color[0]
         assert v.green.val == color[1]
         assert v.blue.val == color[2]
         assert v.alpha.val == color[3]
 def test_roi_with_shapes_and_annotations(
         self, roi_with_shapes_and_annotations):
     encoder = get_encoder(roi_with_shapes_and_annotations.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi_with_shapes_and_annotations)
     v = decoder.decode(v)
     self.assert_roi_with_shapes(v, has_annotations=True)
Ejemplo n.º 5
0
 def test_decoder(self, mask):
     encoder = get_encoder(mask.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(mask)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 8
 def test_screen_decoder(self, screen):
     encoder = get_encoder(screen.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(screen)
     v = decoder.decode(v)
     self.assert_screen(v)
     assert v.sizeOfPlateLinks() == 0
 def test_project_decoder(self, project):
     encoder = get_encoder(project.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(project)
     v = decoder.decode(v)
     self.assert_project(v)
     assert v.sizeOfDatasetLinks() == 0
Ejemplo n.º 8
0
 def test_base_decoder(self, roi):
     encoder = get_encoder(roi.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi)
     v = decoder.decode(v)
     self.assert_roi(v)
     self.assert_externalInfo(v.details.externalInfo)
Ejemplo n.º 9
0
    def test_project_validation(self, user_A):
        """
        Test to demonstrate details bug on encode->decode.

        Test illustrates the ValidationException we see when
        Project is encoded to dict then decoded back to Project
        and saved.
        No exception is seen if the original Project is simply
        saved without encode & decode OR if the details are unloaded
        before saving
        """
        conn = get_connection(user_A)
        project = ProjectI()
        project.name = rstring('test_project_validation')
        project = conn.getUpdateService().saveAndReturnObject(project)

        # Saving original Project again is OK
        conn.getUpdateService().saveObject(project)

        # encode and decode before Save raises Validation Exception
        project_json = get_encoder(project.__class__).encode(project)
        decoder = get_decoder(project_json['@type'])
        p = decoder.decode(project_json)
        with pytest.raises(ValidationException):
            conn.getUpdateService().saveObject(p)

        p = decoder.decode(project_json)
        # Unloading details allows Save without exception
        p.unloadDetails()
        conn.getUpdateService().saveObject(p)
Ejemplo n.º 10
0
 def test_project_decoder(self, project):
     encoder = get_encoder(project.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(project)
     v = decoder.decode(v)
     self.assert_project(v)
     assert v.sizeOfDatasetLinks() == 0
Ejemplo n.º 11
0
 def test_base_decoder(self, roi):
     encoder = get_encoder(roi.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi)
     v = decoder.decode(v)
     self.assert_roi(v)
     self.assert_externalInfo(v.details.externalInfo)
Ejemplo n.º 12
0
 def test_decoder(self, polygon):
     encoder = get_encoder(polygon.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(polygon)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 5L
     assert v.points.val == '0,0 1,2 3,5'
 def test_decoder(self, polygon):
     encoder = get_encoder(polygon.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(polygon)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 5L
     assert v.points.val == '0,0 1,2 3,5'
Ejemplo n.º 14
0
 def test_permissions_cannot_delete(self, permissions_cannot_delete):
     encoder = get_encoder(permissions_cannot_delete.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(permissions_cannot_delete)
     v = decoder.decode(v)
     assert v.canLink()
     assert v.canEdit()
     assert not v.canDelete()
     assert v.canAnnotate()
Ejemplo n.º 15
0
 def test_permissions_cannot_delete(self, permissions_cannot_delete):
     encoder = get_encoder(permissions_cannot_delete.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(permissions_cannot_delete)
     v = decoder.decode(v)
     assert v.canLink()
     assert v.canEdit()
     assert not v.canDelete()
     assert v.canAnnotate()
Ejemplo n.º 16
0
 def test_decoder(self, opt_unit_label):
     encoder = get_encoder(opt_unit_label.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(opt_unit_label)
     v = decoder.decode(v)
     self.assert_shape(v, has_unit_information=False)
     assert v.id.val == 7L
     assert v.x.__class__ is RDoubleI
     assert v.x.val == 1.0
     assert v.y.__class__ is RDoubleI
     assert v.y.val == 2.0
Ejemplo n.º 17
0
    def test_project_with_datasets_and_images_decoder(
            self, project_with_datasets_and_images):
        encoder = get_encoder(project_with_datasets_and_images.__class__)
        decoder = get_decoder(encoder.TYPE)
        v = encoder.encode(project_with_datasets_and_images)
        v = decoder.decode(v)
        assert v.id.val == 1L
        assert v.name.val == 'the_name'
        assert v.description.val == 'the_description'
        assert v.sizeOfDatasetLinks() == 2

        dataset_1, dataset_2 = v.linkedDatasetList()

        assert dataset_1.id.val == 1L
        assert dataset_1.name.val == 'dataset_name_1'
        assert dataset_1.description.val == 'dataset_description_1'
        image_1, image_2 = dataset_1.linkedImageList()
        assert image_1.id.val == 1L
        assert image_1.acquisitionDate.val == 1L
        assert image_1.archived.val is False
        assert image_1.description.val == 'image_description_1'
        assert image_1.name.val == 'image_name_1'
        assert image_1.partial.val is False
        assert image_1.format.id.val == 1L
        assert image_1.format.value.val == 'PNG'
        assert image_2.id.val == 2L
        assert image_2.acquisitionDate.val == 1L
        assert image_2.archived.val is False
        assert image_2.description.val == 'image_description_2'
        assert image_2.name.val == 'image_name_2'
        assert image_2.partial.val is False
        assert image_2.format.id.val == 1L
        assert image_2.format.value.val == 'PNG'

        assert dataset_2.id.val == 2L
        assert dataset_2.name.val == 'dataset_name_2'
        assert dataset_2.description.val == 'dataset_description_2'
        image_3, image_4 = dataset_2.linkedImageList()
        assert image_3.id.val == 3L
        assert image_3.acquisitionDate.val == 1L
        assert image_3.archived.val is False
        assert image_3.description.val == 'image_description_3'
        assert image_3.name.val == 'image_name_3'
        assert image_3.partial.val is False
        assert image_3.format.id.val == 1L
        assert image_3.format.value.val == 'PNG'
        assert image_4.id.val == 4L
        assert image_4.acquisitionDate.val == 1L
        assert image_4.archived.val is False
        assert image_4.description.val == 'image_description_4'
        assert image_4.name.val == 'image_name_4'
        assert image_4.partial.val is False
        assert image_4.format.id.val == 1L
        assert image_4.format.value.val == 'PNG'
Ejemplo n.º 18
0
    def test_base_decoder_from_string(self):
        data_as_string = """{
    "@type": "http://www.openmicroscopy.org/Schemas/ROI/2015-01#ROI",
    "@id": 1,
    "Name": "the_name",
    "Description": "the_description"
}"""
        data = json.loads(data_as_string)
        decoder = get_decoder(data['@type'])
        v = decoder.decode(data)
        self.assert_roi(v)
Ejemplo n.º 19
0
 def test_decoder(self, polyline):
     encoder = get_encoder(polyline.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(polyline)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 4L
     assert v.points.val == '0,0 1,2 3,5'
     if SCHEMA_VERSION != '2015-01':
         assert v.markerStart.val == 'Arrow'
         assert v.markerEnd.val == 'Arrow'
Ejemplo n.º 20
0
 def test_screen_with_plates_decoder(self, screen_with_plates):
     encoder = get_encoder(screen_with_plates.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(screen_with_plates)
     v = decoder.decode(v)
     self.assert_screen(v)
     assert v.id.val == 4L
     assert v.sizeOfPlateLinks() == 2
     plate_1, plate_2 = v.linkedPlateList()
     self.assert_plate(plate_1, 5L)
     self.assert_plate(plate_2, 6L)
    def test_project_with_datasets_and_images_decoder(
            self, project_with_datasets_and_images):
        encoder = get_encoder(project_with_datasets_and_images.__class__)
        decoder = get_decoder(encoder.TYPE)
        v = encoder.encode(project_with_datasets_and_images)
        v = decoder.decode(v)
        assert v.id.val == 1L
        assert v.name.val == 'the_name'
        assert v.description.val == 'the_description'
        assert v.sizeOfDatasetLinks() == 2

        dataset_1, dataset_2 = v.linkedDatasetList()

        assert dataset_1.id.val == 1L
        assert dataset_1.name.val == 'dataset_name_1'
        assert dataset_1.description.val == 'dataset_description_1'
        image_1, image_2 = dataset_1.linkedImageList()
        assert image_1.id.val == 1L
        assert image_1.acquisitionDate.val == 1L
        assert image_1.archived.val is False
        assert image_1.description.val == 'image_description_1'
        assert image_1.name.val == 'image_name_1'
        assert image_1.partial.val is False
        assert image_1.format.id.val == 1L
        assert image_1.format.value.val == 'PNG'
        assert image_2.id.val == 2L
        assert image_2.acquisitionDate.val == 1L
        assert image_2.archived.val is False
        assert image_2.description.val == 'image_description_2'
        assert image_2.name.val == 'image_name_2'
        assert image_2.partial.val is False
        assert image_2.format.id.val == 1L
        assert image_2.format.value.val == 'PNG'

        assert dataset_2.id.val == 2L
        assert dataset_2.name.val == 'dataset_name_2'
        assert dataset_2.description.val == 'dataset_description_2'
        image_3, image_4 = dataset_2.linkedImageList()
        assert image_3.id.val == 3L
        assert image_3.acquisitionDate.val == 1L
        assert image_3.archived.val is False
        assert image_3.description.val == 'image_description_3'
        assert image_3.name.val == 'image_name_3'
        assert image_3.partial.val is False
        assert image_3.format.id.val == 1L
        assert image_3.format.value.val == 'PNG'
        assert image_4.id.val == 4L
        assert image_4.acquisitionDate.val == 1L
        assert image_4.archived.val is False
        assert image_4.description.val == 'image_description_4'
        assert image_4.name.val == 'image_name_4'
        assert image_4.partial.val is False
        assert image_4.format.id.val == 1L
        assert image_4.format.value.val == 'PNG'
Ejemplo n.º 22
0
 def test_decoder(self, label):
     encoder = get_encoder(label.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(label)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 7L
     assert v.x.__class__ is RDoubleI
     assert v.x.val == 1.0
     assert v.y.__class__ is RDoubleI
     assert v.y.val == 2.0
 def test_decoder(self, label):
     encoder = get_encoder(label.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(label)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 7L
     assert v.x.__class__ is RDoubleI
     assert v.x.val == 1.0
     assert v.y.__class__ is RDoubleI
     assert v.y.val == 2.0
Ejemplo n.º 24
0
 def test_decoder(self, point):
     encoder = get_encoder(point.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(point)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 3L
     assert v.cx.__class__ is RDoubleI
     assert v.cx.val == 1.0
     assert v.cy.__class__ is RDoubleI
     assert v.cy.val == 2.0
 def test_decoder(self, point):
     encoder = get_encoder(point.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(point)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 3L
     assert v.cx.__class__ is RDoubleI
     assert v.cx.val == 1.0
     assert v.cy.__class__ is RDoubleI
     assert v.cy.val == 2.0
Ejemplo n.º 26
0
 def test_decoder(self, polyline):
     encoder = get_encoder(polyline.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(polyline)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 4L
     assert v.points.val == '0,0 1,2 3,5'
     if SCHEMA_VERSION != '2015-01':
         assert v.markerStart.val == 'Arrow'
         assert v.markerEnd.val == 'Arrow'
    def test_base_decoder_from_string(self):
        data_as_string = """{
    "@type": "http://www.openmicroscopy.org/Schemas/ROI/2015-01#ROI",
    "@id": 1,
    "Name": "the_name",
    "Description": "the_description"
}"""
        data = json.loads(data_as_string)
        decoder = get_decoder(data['@type'])
        v = decoder.decode(data)
        self.assert_roi(v)
 def test_screen_with_plates_decoder(self, screen_with_plates):
     encoder = get_encoder(screen_with_plates.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(screen_with_plates)
     v = decoder.decode(v)
     self.assert_screen(v)
     assert v.id.val == 4L
     assert v.sizeOfPlateLinks() == 2
     plate_1, plate_2 = v.linkedPlateList()
     self.assert_plate(plate_1, 5L)
     self.assert_plate(plate_2, 6L)
Ejemplo n.º 29
0
 def test_decoder(self, opt_unit_label):
     encoder = get_encoder(opt_unit_label.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(opt_unit_label)
     v = decoder.decode(v)
     self.assert_shape(v, has_unit_information=False)
     assert v.id.val == 7L
     assert v.x.__class__ is RDoubleI
     assert v.x.val == 1.0
     assert v.y.__class__ is RDoubleI
     assert v.y.val == 2.0
Ejemplo n.º 30
0
 def test_decoder(self, line):
     encoder = get_encoder(line.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(line)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 6L
     assert v.x1.__class__ is RDoubleI
     assert v.x1.val == 0.0
     assert v.y1.__class__ is RDoubleI
     assert v.y1.val == 0.0
     assert v.x2.__class__ is RDoubleI
     assert v.x2.val == 1.0
     assert v.y2.__class__ is RDoubleI
     assert v.y2.val == 2.0
 def test_decoder(self, line):
     encoder = get_encoder(line.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(line)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 6L
     assert v.x1.__class__ is RDoubleI
     assert v.x1.val == 0.0
     assert v.y1.__class__ is RDoubleI
     assert v.y1.val == 0.0
     assert v.x2.__class__ is RDoubleI
     assert v.x2.val == 1.0
     assert v.y2.__class__ is RDoubleI
     assert v.y2.val == 2.0
 def test_shape_decoder(self, point, translation_transform):
     encoder = get_encoder(point.__class__)
     decoder = get_decoder(encoder.TYPE)
     if SCHEMA_VERSION == '2015-01':
         point.transform = translation_transform.svg_transform
     else:
         point.transform = translation_transform
     v = encoder.encode(point)
     v = decoder.decode(v)
     t = v.transform
     if SCHEMA_VERSION == '2015-01':
         assert t.val == 'matrix(1.0 0.0 0.0 1.0 3.0 4.0)'
     else:
         assert t.id.val == 8L
         self.assert_translation_transform(t)
Ejemplo n.º 33
0
    def _save_object(self, request, conn, object_json, **kwargs):
        """Here we handle the saving for PUT and POST."""
        # Try to get group from request, OR from details below...
        group = getIntOrDefault(request, 'group', None)
        decoder = None
        objType = object_json['@type']
        decoder = get_decoder(objType)
        # If we are passed incomplete object, or decoder couldn't be found...
        if decoder is None:
            raise BadRequestError('No decoder found for type: %s' % objType)

        # Any marshal errors most likely due to invalid input. status=400
        try:
            obj = decoder.decode(object_json)
        except Exception:
            msg = 'Error in decode of json data by omero_marshal'
            raise BadRequestError(msg, traceback.format_exc())

        if group is None:
            try:
                # group might be None or unloaded
                group = obj.getDetails().group.id.val
            except AttributeError:
                # Instead of default stack trace, give nicer message:
                msg = ("Specify Group in omero:details or "
                       "query parameters ?group=:id")
                raise BadRequestError(msg)

        # If owner was unloaded (E.g. from get() above) or if missing
        # ome.model.meta.Experimenter.ldap (not supported by omero_marshal)
        # then saveObject() will give ValidationException.
        # Therefore we ignore any details for now:
        obj.unloadDetails()

        # TODO: Unlink children for Projects, Datasets and Screens to avoid
        # breaking links. See PR #4930
        if hasattr(obj, 'unloadDatasetLinks'):
            obj.unloadDatasetLinks()
        if hasattr(obj, 'unloadImageLinks'):
            obj.unloadImageLinks()
        if hasattr(obj, 'unloadPlateLinks'):
            obj.unloadPlateLinks()

        conn.SERVICE_OPTS.setOmeroGroup(group)
        obj = conn.getUpdateService().saveAndReturnObject(
            obj, conn.SERVICE_OPTS)
        encoder = get_encoder(obj.__class__)
        return {'data': encoder.encode(obj)}
 def test_project_with_datasets_decoder(self, project_with_datasets):
     encoder = get_encoder(project_with_datasets.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(project_with_datasets)
     v = decoder.decode(v)
     assert v.id.val == 1L
     assert v.name.val == 'the_name'
     assert v.description.val == 'the_description'
     assert v.sizeOfDatasetLinks() == 2
     dataset_1, dataset_2 = v.linkedDatasetList()
     assert dataset_1.id.val == 1L
     assert dataset_1.name.val == 'dataset_name_1'
     assert dataset_1.description.val == 'dataset_description_1'
     assert dataset_2.id.val == 2L
     assert dataset_2.name.val == 'dataset_name_2'
     assert dataset_2.description.val == 'dataset_description_2'
Ejemplo n.º 35
0
 def test_project_with_datasets_decoder(self, project_with_datasets):
     encoder = get_encoder(project_with_datasets.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(project_with_datasets)
     v = decoder.decode(v)
     assert v.id.val == 1L
     assert v.name.val == 'the_name'
     assert v.description.val == 'the_description'
     assert v.sizeOfDatasetLinks() == 2
     dataset_1, dataset_2 = v.linkedDatasetList()
     assert dataset_1.id.val == 1L
     assert dataset_1.name.val == 'dataset_name_1'
     assert dataset_1.description.val == 'dataset_description_1'
     assert dataset_2.id.val == 2L
     assert dataset_2.name.val == 'dataset_name_2'
     assert dataset_2.description.val == 'dataset_description_2'
 def test_shape_decoder(self, point, rotation_transform):
     encoder = get_encoder(point.__class__)
     decoder = get_decoder(encoder.TYPE)
     if SCHEMA_VERSION == '2015-01':
         point.transform = rotation_transform.svg_transform
     else:
         point.transform = rotation_transform
     v = encoder.encode(point)
     v = decoder.decode(v)
     t = v.transform
     if SCHEMA_VERSION == '2015-01':
         assert t.val == (
             'matrix(0.707106781187 0.707106781187 -0.707106781187 '
             '0.707106781187 85.3553390593 -6.06601717798)')
     else:
         assert t.id.val == 8L
         self.assert_rotation_transform(t)
Ejemplo n.º 37
0
 def test_decoder(self, point):
     encoder = get_encoder(point.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(point)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 3L
     if SCHEMA_VERSION == '2016-06':
         assert v.x.__class__ is RDoubleI
         assert v.x.val == 1.0
         assert v.y.__class__ is RDoubleI
         assert v.y.val == 2.0
     else:
         assert v.cx.__class__ is RDoubleI
         assert v.cx.val == 1.0
         assert v.cy.__class__ is RDoubleI
         assert v.cy.val == 2.0
Ejemplo n.º 38
0
 def test_decoder(self, point):
     encoder = get_encoder(point.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(point)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 3L
     if SCHEMA_VERSION == '2016-06':
         assert v.x.__class__ is RDoubleI
         assert v.x.val == 1.0
         assert v.y.__class__ is RDoubleI
         assert v.y.val == 2.0
     else:
         assert v.cx.__class__ is RDoubleI
         assert v.cx.val == 1.0
         assert v.cy.__class__ is RDoubleI
         assert v.cy.val == 2.0
Ejemplo n.º 39
0
 def test_decoder(self, line):
     encoder = get_encoder(line.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(line)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 6L
     assert v.x1.__class__ is RDoubleI
     assert v.x1.val == 0.0
     assert v.y1.__class__ is RDoubleI
     assert v.y1.val == 0.0
     assert v.x2.__class__ is RDoubleI
     assert v.x2.val == 1.0
     assert v.y2.__class__ is RDoubleI
     assert v.y2.val == 2.0
     if SCHEMA_VERSION != '2015-01':
         assert v.markerStart.val == 'Arrow'
         assert v.markerEnd.val == 'Arrow'
Ejemplo n.º 40
0
 def test_decoder(self, line):
     encoder = get_encoder(line.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(line)
     v = decoder.decode(v)
     self.assert_shape(v)
     assert v.id.val == 6L
     assert v.x1.__class__ is RDoubleI
     assert v.x1.val == 0.0
     assert v.y1.__class__ is RDoubleI
     assert v.y1.val == 0.0
     assert v.x2.__class__ is RDoubleI
     assert v.x2.val == 1.0
     assert v.y2.__class__ is RDoubleI
     assert v.y2.val == 2.0
     if SCHEMA_VERSION != '2015-01':
         assert v.markerStart.val == 'Arrow'
         assert v.markerEnd.val == 'Arrow'
Ejemplo n.º 41
0
 def test_roi_decoder_registered(self):
     decoder = get_decoder('%s#ROI' % ROI_SCHEMA_URL)
     assert decoder is not None
Ejemplo n.º 42
0
    def test_image_pixels_decoder(self, image_pixels):
        encoder = get_encoder(image_pixels.__class__)
        decoder = get_decoder(encoder.TYPE)
        v = encoder.encode(image_pixels)
        v = decoder.decode(v)
        self.assert_image(v)

        pixels = v.getPrimaryPixels()
        assert pixels.id.val == 1L
        assert pixels.methodology.val == 'methodology'
        assert pixels.physicalSizeX.getUnit() == UnitsLength.MICROMETER
        assert pixels.physicalSizeX.getValue() == 1.0
        assert pixels.physicalSizeY.getUnit() == UnitsLength.MICROMETER
        assert pixels.physicalSizeY.getValue() == 2.0
        assert pixels.physicalSizeZ.getUnit() == UnitsLength.MICROMETER
        assert pixels.physicalSizeZ.getValue() == 3.0
        assert pixels.sha1.val == '61ee8b5601a84d5154387578466c8998848ba089'
        assert pixels.significantBits.val == 16
        assert pixels.sizeX.val == 1
        assert pixels.sizeY.val == 2
        assert pixels.sizeZ.val == 3
        assert pixels.sizeC.val == 4
        assert pixels.sizeT.val == 5
        assert pixels.timeIncrement.getUnit() == UnitsTime.MILLISECOND
        assert pixels.timeIncrement.getValue() == 1.0
        assert pixels.waveIncrement.val == 2.0
        assert pixels.waveStart.val == 1
        assert pixels.dimensionOrder.id.val == 1L
        assert pixels.dimensionOrder.value.val == 'XYZCT'
        assert pixels.pixelsType.id.val == 1L
        assert pixels.pixelsType.value.val == 'bit'

        channel_1, channel_2 = pixels.copyChannels()
        assert channel_1.id.val == 1L
        assert channel_1.alpha.val == 255
        assert channel_1.blue.val == 0
        assert channel_1.green.val == 255
        assert channel_1.red.val == 0
        assert channel_1.lookupTable.val == 'rainbow'
        logical_channel_1 = channel_1.logicalChannel
        assert logical_channel_1.id.val == 1L
        assert logical_channel_1.emissionWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_1.emissionWave.getValue() == 509.0
        assert logical_channel_1.excitationWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_1.excitationWave.getValue() == 488.0
        assert logical_channel_1.fluor.val == 'GFP'
        assert logical_channel_1.name.val == 'GFP/488'
        assert logical_channel_1.ndFilter.val == 1.0
        assert logical_channel_1.pinHoleSize.getUnit() == UnitsLength.NANOMETER
        assert logical_channel_1.pinHoleSize.getValue() == 1.0
        assert logical_channel_1.pockelCellSetting.val == 0
        assert logical_channel_1.samplesPerPixel.val == 2
        assert logical_channel_1.contrastMethod.value.val == 'Fluorescence'
        assert logical_channel_1.illumination.value.val == 'Transmitted'
        assert logical_channel_1.mode.value.val == 'WideField'
        assert logical_channel_1.photometricInterpretation.value.val == 'RGB'

        assert channel_2.id.val == 2L
        assert channel_2.alpha.val == 255
        assert channel_2.blue.val == 255
        assert channel_2.green.val == 0
        assert channel_2.red.val == 0
        assert channel_2.lookupTable.val == 'rainbow'
        logical_channel_2 = channel_2.logicalChannel
        assert logical_channel_2.id.val == 2L
        assert logical_channel_2.emissionWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_2.emissionWave.getValue() == 470.0
        assert logical_channel_2.excitationWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_2.excitationWave.getValue() == 405.0
        assert logical_channel_2.fluor.val == 'DAPI'
        assert logical_channel_2.name.val == 'DAPI/405'
        assert logical_channel_2.ndFilter.val == 1.0
        assert logical_channel_2.pinHoleSize.getUnit() == UnitsLength.NANOMETER
        assert logical_channel_2.pinHoleSize.getValue() == 2.0
        assert logical_channel_2.pockelCellSetting.val == 0
        assert logical_channel_2.samplesPerPixel.val == 2
        assert logical_channel_2.contrastMethod.value.val == 'Fluorescence'
        assert logical_channel_2.illumination.value.val == 'Transmitted'
        assert logical_channel_2.mode.value.val == 'WideField'
        assert logical_channel_2.photometricInterpretation.value.val == 'RGB'
Ejemplo n.º 43
0
 def test_image_decoder(self, image):
     encoder = get_encoder(image.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(image)
     v = decoder.decode(v)
     self.assert_image(v)
Ejemplo n.º 44
0
 def test_decoder(self, rectangle):
     encoder = get_encoder(rectangle.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(rectangle)
     v = decoder.decode(v)
     self.assert_rectangle(v)
 def test_image_decoder(self, image):
     encoder = get_encoder(image.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(image)
     v = decoder.decode(v)
     self.assert_image(v)
    def test_image_pixels_decoder(self, image_pixels):
        encoder = get_encoder(image_pixels.__class__)
        decoder = get_decoder(encoder.TYPE)
        v = encoder.encode(image_pixels)
        v = decoder.decode(v)
        self.assert_image(v)

        pixels = v.getPrimaryPixels()
        assert pixels.id.val == 1L
        assert pixels.methodology.val == 'methodology'
        assert pixels.physicalSizeX.getUnit() == UnitsLength.MICROMETER
        assert pixels.physicalSizeX.getValue() == 1.0
        assert pixels.physicalSizeY.getUnit() == UnitsLength.MICROMETER
        assert pixels.physicalSizeY.getValue() == 2.0
        assert pixels.physicalSizeZ.getUnit() == UnitsLength.MICROMETER
        assert pixels.physicalSizeZ.getValue() == 3.0
        assert pixels.sha1.val == '61ee8b5601a84d5154387578466c8998848ba089'
        assert pixels.significantBits.val == 16
        assert pixels.sizeX.val == 1
        assert pixels.sizeY.val == 2
        assert pixels.sizeZ.val == 3
        assert pixels.sizeC.val == 4
        assert pixels.sizeT.val == 5
        assert pixels.timeIncrement.getUnit() == UnitsTime.MILLISECOND
        assert pixels.timeIncrement.getValue() == 1.0
        assert pixels.waveIncrement.val == 2.0
        assert pixels.waveStart.val == 1
        assert pixels.dimensionOrder.id.val == 1L
        assert pixels.dimensionOrder.value.val == 'XYZCT'
        assert pixels.pixelsType.id.val == 1L
        assert pixels.pixelsType.value.val == 'bit'

        channel_1, channel_2 = pixels.copyChannels()
        assert channel_1.id.val == 1L
        assert channel_1.alpha.val == 255
        assert channel_1.blue.val == 255
        assert channel_1.green.val == 255
        assert channel_1.red.val == 255
        assert channel_1.lookupTable.val == 'rainbow'
        logical_channel_1 = channel_1.logicalChannel
        assert logical_channel_1.id.val == 1L
        assert logical_channel_1.emissionWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_1.emissionWave.getValue() == 509.0
        assert logical_channel_1.excitationWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_1.excitationWave.getValue() == 488.0
        assert logical_channel_1.fluor.val == 'GFP'
        assert logical_channel_1.name.val == 'GFP/488'
        assert logical_channel_1.ndFilter.val == 1.0
        assert logical_channel_1.pinHoleSize.getUnit() == UnitsLength.NANOMETER
        assert logical_channel_1.pinHoleSize.getValue() == 1.0
        assert logical_channel_1.pockelCellSetting.val == 0
        assert logical_channel_1.samplesPerPixel.val == 2
        assert logical_channel_1.contrastMethod.value.val == 'Fluorescence'
        assert logical_channel_1.illumination.value.val == 'Transmitted'
        assert logical_channel_1.mode.value.val == 'WideField'
        assert logical_channel_1.photometricInterpretation.value.val == 'RGB'

        assert channel_2.id.val == 2L
        assert channel_2.alpha.val == 255
        assert channel_2.blue.val == 255
        assert channel_2.green.val == 0
        assert channel_2.red.val == 255
        assert channel_2.lookupTable.val == 'rainbow'
        logical_channel_2 = channel_2.logicalChannel
        assert logical_channel_2.id.val == 2L
        assert logical_channel_2.emissionWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_2.emissionWave.getValue() == 470.0
        assert logical_channel_2.excitationWave.getUnit() \
            == UnitsLength.NANOMETER
        assert logical_channel_2.excitationWave.getValue() == 405.0
        assert logical_channel_2.fluor.val == 'DAPI'
        assert logical_channel_2.name.val == 'DAPI/405'
        assert logical_channel_2.ndFilter.val == 1.0
        assert logical_channel_2.pinHoleSize.getUnit() == UnitsLength.NANOMETER
        assert logical_channel_2.pinHoleSize.getValue() == 2.0
        assert logical_channel_2.pockelCellSetting.val == 0
        assert logical_channel_2.samplesPerPixel.val == 2
        assert logical_channel_2.contrastMethod.value.val == 'Fluorescence'
        assert logical_channel_2.illumination.value.val == 'Transmitted'
        assert logical_channel_2.mode.value.val == 'WideField'
        assert logical_channel_2.photometricInterpretation.value.val == 'RGB'
Ejemplo n.º 47
0
 def test_decoder(self, ellipse):
     encoder = get_encoder(ellipse.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(ellipse)
     v = decoder.decode(v)
     self.assert_ellipse(v)
Ejemplo n.º 48
0
 def test_encoder_with_annotations(self, ellipse_with_annotations):
     encoder = get_encoder(ellipse_with_annotations.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(ellipse_with_annotations)
     v = decoder.decode(v)
     self.assert_ellipse(v, has_annotations=True)
 def test_decoder(self, rectangle):
     encoder = get_encoder(rectangle.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(rectangle)
     v = decoder.decode(v)
     self.assert_rectangle(v)
 def test_encoder_with_annotations(self, ellipse_with_annotations):
     encoder = get_encoder(ellipse_with_annotations.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(ellipse_with_annotations)
     v = decoder.decode(v)
     self.assert_ellipse(v, has_annotations=True)
 def test_decoder(self, ellipse):
     encoder = get_encoder(ellipse.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(ellipse)
     v = decoder.decode(v)
     self.assert_ellipse(v)
Ejemplo n.º 52
0
def persist_rois(request, conn=None, **kwargs):
    if not request.method == 'POST':
        return JsonResponse({"errors": ["Use HTTP POST to send data!"]})

    try:
        rois_dict = json.loads(request.body)
    except Exception as e:
        return JsonResponse({"errors": ["Failed to load json: " + repr(e)]})

    # some preliminary checks are following...
    image_id = rois_dict.get('imageId', None)
    if image_id is None:
        return JsonResponse({"errors": ["No image id provided!"]})
    rois = rois_dict.get('rois', None)
    if rois is None:
        return JsonResponse({"errors": ["Could not find rois object!"]})

    # get the associated image and an instance of the update service
    image = conn.getObject("Image", image_id, opts=conn.SERVICE_OPTS)
    if image is None:
        return JsonResponse({"errors": ["Could not find associated image!"]})

    # prepare services
    update_service = conn.getUpdateService()
    if update_service is None:
        return JsonResponse({"errors": ["Could not get update service!"]})

    # when persisting we use the specific group context
    conn.SERVICE_OPTS['omero.group'] = image.getDetails().getGroup().getId()

    # for id syncing
    ids_to_sync = {}
    # keep track of errors
    errors = []

    # insert new ones
    try:
        new = rois.get('new', [])
        new_count = len(new)
        if new_count > 0:
            decoded_rois = []
            for n in new:
                new_roi = {
                    "@type":
                    "http://www.openmicroscopy.org/Schemas/OME/2016-06#ROI",
                    "shapes": [n]
                }
                decoder = omero_marshal.get_decoder(new_roi.get("@type"))
                decoded_roi = decoder.decode(new_roi)
                decoded_roi.setImage(image._obj)
                decoded_rois.append(decoded_roi)
            decoded_rois = update_service.saveAndReturnArray(
                decoded_rois, conn.SERVICE_OPTS)
            # sync ids
            for r in range(new_count):
                ids_to_sync[new[r]['oldId']] = \
                    str(decoded_rois[r].getId().getValue()) + ':' + \
                    str(decoded_rois[r].getShape(0).getId().getValue())
    except Exception as marshal_or_persistence_exception:
        errors.append('Error persisting new rois: ' +
                      repr(marshal_or_persistence_exception))

    # modify existing ones
    try:
        modified = rois.get('modified', [])
        modified_count = len(modified)
        if modified_count > 0:
            decoded_shapes = []
            for m in modified:
                decoder = omero_marshal.get_decoder(m.get("@type"))
                decoded_shapes.append(decoder.decode(m))
            update_service.saveArray(decoded_shapes, conn.SERVICE_OPTS)
        # set ids after successful modification
        for r in range(modified_count):
            ids_to_sync[modified[r]['oldId']] = modified[r]['oldId']
    except Exception as marshal_or_persistence_exception:
        errors.append('Error modifying rois: ' +
                      repr(marshal_or_persistence_exception))

    # delete entire (empty) rois
    try:
        empty_rois = rois.get('empty_rois', {})
        empty_rois_ids = [int(k) for k in list(empty_rois.keys())]
        if (len(empty_rois_ids) > 0):
            conn.deleteObjects("Roi", empty_rois_ids, wait=True)
        # set ids after successful deletion,
        for e in empty_rois:
            for s in empty_rois[e]:
                ids_to_sync[s] = s
    except Exception as deletion_exception:
        errors.append('Error deleting empty rois: ' + repr(deletion_exception))

    # remove individual shapes (so as to not punch holes into shape index)
    try:
        deleted = rois.get('deleted', {})
        deleted_rois_ids = deleted.keys()
        if len(deleted_rois_ids) > 0:
            rois_service = conn.getRoiService()
            rois_to_be_updated = []
            for d in deleted_rois_ids:
                r = rois_service.findByRoi(int(d), None,
                                           conn.SERVICE_OPTS).rois[0]
                for s in r.copyShapes():
                    roi_shape_id = str(d) + ':' + str(s.getId().getValue())
                    if roi_shape_id in deleted[d]:
                        r.removeShape(s)
                rois_to_be_updated.append(r)
            update_service.saveArray(rois_to_be_updated, conn.SERVICE_OPTS)
            # set ids after successful deletion,
            for d in deleted:
                for s in deleted[d]:
                    ids_to_sync[s] = s
    except Exception as deletion_exception:
        errors.append('Error deleting shapes: ' + repr(deletion_exception))

    # prepare response
    ret = {'ids': ids_to_sync}
    if len(errors) > 0:
        ret['errors'] = errors

    return JsonResponse(ret)
Ejemplo n.º 53
0
 def test_null_string(self):
     data = json.loads(self.AS_STRING)
     data['Description'] = None
     decoder = get_decoder(data['@type'])
     v = decoder.decode(data)
     assert v.description is None
 def test_roi_decoder_registered(self):
     decoder = get_decoder("http://www.openmicroscopy.org/Schemas/ROI/2015-01#ROI")
     assert decoder is not None
Ejemplo n.º 55
0
 def test_base_decoder_from_string(self):
     data = json.loads(self.AS_STRING)
     decoder = get_decoder(data['@type'])
     v = decoder.decode(data)
     self.assert_roi(v)
 def test_roi_with_shapes(self, roi_with_shapes):
     encoder = get_encoder(roi_with_shapes.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi_with_shapes)
     v = decoder.decode(v)
     self.assert_roi_with_shapes(v)
 def test_base_decoder(self, roi):
     encoder = get_encoder(roi.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi)
     v = decoder.decode(v)
     self.assert_roi(v)
Ejemplo n.º 58
0
 def test_roi_with_shapes(self, roi_with_shapes):
     encoder = get_encoder(roi_with_shapes.__class__)
     decoder = get_decoder(encoder.TYPE)
     v = encoder.encode(roi_with_shapes)
     v = decoder.decode(v)
     self.assert_roi_with_shapes(v)