Beispiel #1
0
    def testChgrpProjectLinkedToDatasetHard(self):
        """
        P1->D
        P2->D
        ChGrp P1

        See https://trac.openmicroscopy.org.uk/ome/ticket/12452
        """
        client, user = self.new_client_and_user(perms=PRIVATE)
        admin = client.sf.getAdminService()
        target_grp = self.new_group([user], perms=PRIVATE)
        target_gid = target_grp.id.val
        admin.getEventContext()  # Refresh

        query = client.sf.getQueryService()

        p1 = self.make_project(client=client)
        p2 = self.make_project(client=client)
        d = self.make_dataset(client=client)
        self.link(p1, d, client=client)
        self.link(p2, d, client=client)

        hard = ChildOption(includeType=["Dataset"])
        chgrp = Chgrp2(targetObjects={"Project": [p1.id.val]},
                       childOptions=[hard],
                       groupId=target_gid)
        self.doSubmit(chgrp, client)

        ctx = {'omero.group': '-1'}
        assert target_gid == query.get("Project", p1.id.val,
                                       ctx).details.group.id.val
        assert target_gid != query.get("Project", p2.id.val,
                                       ctx).details.group.id.val
        assert target_gid == query.get("Dataset", d.id.val,
                                       ctx).details.group.id.val
Beispiel #2
0
    def testChgrpTwoDatasetsLinkedToSingleImageHard(self):
        """
        D1->I
        D2->I
        ChGrp D1

        See https://trac.openmicroscopy.org.uk/ome/ticket/12452
        """
        client, user = self.new_client_and_user(perms=PRIVATE)
        admin = client.sf.getAdminService()
        target_grp = self.new_group([user], perms=PRIVATE)
        target_gid = target_grp.id.val
        admin.getEventContext()  # Refresh

        query = client.sf.getQueryService()

        d1 = self.make_dataset(client=client)
        d2 = self.make_dataset(client=client)
        i = self.make_image(client=client)
        self.link(d1, i, client=client)
        self.link(d2, i, client=client)

        hard = ChildOption(includeType=["Image"])
        chgrp = Chgrp2(targetObjects={"Dataset": [d1.id.val]},
                       childOptions=[hard],
                       groupId=target_gid)
        self.doSubmit(chgrp, client)

        ctx = {'omero.group': '-1'}
        assert target_gid == query.get("Dataset", d1.id.val,
                                       ctx).details.group.id.val
        assert target_gid != query.get("Dataset", d2.id.val,
                                       ctx).details.group.id.val
        assert target_gid == query.get("Image", i.id.val,
                                       ctx).details.group.id.val
Beispiel #3
0
    def testDeleteProjectWithoutContent(self):
        uuid = self.ctx.sessionUuid

        images = list()
        for i in range(0, 5):
            img = self.new_image(name="test-delete-image-%i" % i)
            tag = omero.model.TagAnnotationI()
            img.linkAnnotation(tag)
            images.append(self.update.saveAndReturnObject(img))

        # create dataset
        dataset = self.make_dataset('DS-test-2936-%s' % uuid)

        # create project
        project = self.make_project('PR-test-2936-%s' % uuid)

        # put dataset in project
        self.link(project, dataset)

        # put image in dataset
        for image in images:
            self.link(dataset, image)

        keep = ChildOption(excludeType=[
            "TagAnnotation", "TermAnnotation", "FileAnnotation", "Dataset",
            "Image"
        ])
        dc = Delete2(targetObjects={'Project': [project.id.val]},
                     childOptions=[keep])
        handle = self.client.sf.submit(dc)
        self.waitOnCmd(self.client, handle)

        assert not self.query.find('Project', project.id.val)
        assert dataset.id.val == self.query.find('Dataset',
                                                 dataset.id.val).id.val

        p = omero.sys.Parameters()
        p.map = {}
        p.map["oid"] = dataset.id

        sql = "select im from Image im "\
              "left outer join fetch im.datasetLinks dil "\
              "left outer join fetch dil.parent d " \
              "where d.id = :oid " \
              "order by im.id asc"
        res = self.query.findAllByQuery(sql, p)
        assert 5 == len(res)
        for e in res:
            if e.id.val not in [i.id.val for i in images]:
                self.assertRaises('Image %i is not in the [%s]' %
                                  (e.id.val, ",".join(images)))
Beispiel #4
0
    def testDeleteProjectWithEmptyDatasetLinkedToAnotherProjectHard(self):
        """
        P1->D
        P2->D
        Delete P1

        See https://trac.openmicroscopy.org.uk/ome/ticket/12452
        """
        p1 = self.make_project()
        p2 = self.make_project()
        d = self.make_dataset()
        self.link(p1, d)
        self.link(p2, d)

        hard = ChildOption(includeType=["Dataset"])
        delete = Delete2(targetObjects={"Project": [p1.id.val]},
                         childOptions=[hard])
        self.doSubmit(delete, self.client)

        assert self.query.find("Project", p2.id.val)
        assert not self.query.find("Project", p1.id.val)
        assert not self.query.find("Dataset", d.id.val)
    def testChgrpProjectWithDatasetLinkedToImageWithOtherDatasetHard(self):
        """
        P->D1->I
           D2->I
        ChGrp P

        See https://trac.openmicroscopy.org/ome/ticket/12452
        """
        client, user = self.new_client_and_user(perms=PRIVATE)
        admin = client.sf.getAdminService()
        target_grp = self.new_group([user], perms=PRIVATE)
        target_gid = target_grp.id.val
        admin.getEventContext()  # Refresh

        query = client.sf.getQueryService()

        p = self.make_project(client=client)
        d1 = self.make_dataset(client=client)
        d2 = self.make_dataset(client=client)
        i = self.make_image(client=client)
        self.link(d1, i, client=client)
        self.link(d2, i, client=client)
        self.link(p, d1, client=client)

        hard = ChildOption(includeType=["Image"])
        chgrp = Chgrp2(targetObjects={"Project": [p.id.val]},
                       childOptions=[hard],
                       groupId=target_gid)
        self.do_submit(chgrp, client)

        ctx = {'omero.group': native_str('-1')}
        assert target_gid == query.get("Project", p.id.val,
                                       ctx).details.group.id.val
        assert target_gid == query.get("Dataset", d1.id.val,
                                       ctx).details.group.id.val
        assert target_gid != query.get("Dataset", d2.id.val,
                                       ctx).details.group.id.val
        assert target_gid == query.get("Image", i.id.val,
                                       ctx).details.group.id.val
Beispiel #6
0
    def testDeleteDatasetWithImageLinkedToAnotherDatasetHard(self):
        """
        D1->I
        D2->I
        Delete D1

        See https://trac.openmicroscopy.org.uk/ome/ticket/12452
        """

        d1 = self.make_dataset()
        d2 = self.make_dataset()
        i = self.make_image()
        self.link(d1, i)
        self.link(d2, i)

        hard = ChildOption(includeType=["Image"])
        delete = Delete2(targetObjects={"Dataset": [d1.id.val]},
                         childOptions=[hard])
        self.doSubmit(delete, self.client)

        assert not self.query.find("Dataset", d1.id.val)
        assert self.query.find("Dataset", d2.id.val)
        assert not self.query.find("Image", i.id.val)
Beispiel #7
0
    def test3639(self):
        uuid = self.ctx.sessionUuid

        images = list()
        for i in range(0, 5):
            images.append(self.make_image())

        p = omero.sys.Parameters()
        p.map = {}
        p.map["oids"] = rlist([rlong(s.id.val) for s in images])

        # create dataset
        dataset = self.make_dataset('DS-test-2936-%s' % uuid)

        # put image in dataset
        for image in images:
            self.link(dataset, image)

        # log in as group owner:
        client_o, owner = self.new_client_and_user(group=self.group,
                                                   owner=True)
        query_o = client_o.sf.getQueryService()

        handlers = list()
        keep = ChildOption(excludeType=["Image"])
        dc = Delete2(targetObjects={'Dataset': [dataset.id.val]},
                     childOptions=[keep])
        handlers.append(str(client_o.sf.submit(dc)))

        imageToDelete = images[2].id.val
        dc2 = Delete2(targetObjects={'Image': [imageToDelete]})
        handlers.append(str(client_o.sf.submit(dc2)))

        def _formatReport(delete_handle):
            """
            Added as workaround to the changes made in #3006.
            """
            delete_report = delete_handle.getResponse()
            rv = []
            if isinstance(delete_report, omero.cmd.ERR):
                rv.append(str(delete_report))
            if len(rv) > 0:
                return "; ".join(rv)
            return None

        failure = list()
        in_progress = 0
        r = None

        while (len(handlers) > 0):
            for cbString in handlers:
                try:
                    with pytest.raises(Ice.ObjectNotExistException):
                        handle = omero.cmd.HandlePrx.checkedCast(
                            client_o.ic.stringToProxy(cbString))
                        cb = omero.callbacks.CmdCallbackI(client_o, handle)
                        if not cb.block(500):  # ms.
                            # No errors possible if in progress(
                            # (since no response)
                            print "in progress", _formatReport(handle)
                            in_progress += 1
                        else:
                            rsp = cb.getResponse()
                            if isinstance(rsp, omero.cmd.ERR):
                                r = _formatReport(handle)
                                if r is not None:
                                    failure.append(r)
                                else:
                                    failure.append("No report!!!")
                            else:
                                r = _formatReport(handle)
                                if r is not None:
                                    failure.append(r)
                                cb.close(True)  # Close handle
                            handlers.remove(cbString)
                except Exception:
                    if r is not None:
                        failure.append(traceback.format_exc())

        if len(failure) > 0:
            assert False, ";".join(failure)
        assert not query_o.find('Dataset', dataset.id.val)