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
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
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)))
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
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)
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)