def testProjectionPermissions(self, fixture): writer = self.writer(fixture) reader = self.reader(fixture) project = ProjectI() project.name = rstring("testProjectPermissions") project = writer.saveAndReturnObject(project) try: perms = unwrap(reader.projection( "select p.details.permissions from Project p where p.id = :id", ParametersI().addId(project.id.val)))[0][0] except IndexError: # No permissions were returned. assert not fixture.canRead else: self.assertPerms(perms, fixture)
def testProjectionPermissions(self, fixture): writer = self.writer(fixture) reader = self.reader(fixture) project = ProjectI() project.name = rstring("testProjectPermissions") project = writer.saveAndReturnObject(project) try: perms = unwrap( reader.projection( "select p.details.permissions from Project p where p.id = :id", ParametersI().addId(project.id.val)))[0][0] assert fixture.canRead except IndexError: # No permissions were returned. assert not fixture.canRead else: self.assertPerms(perms, fixture)
def test1069(self): unique = rstring(self.uuid()) project = ProjectI() project.name = unique project.description = rstring("NOTME") project = self.client.sf.getUpdateService().saveAndReturnObject(project) self.index(project) search = self.client.sf.createSearchService() search.onlyType("Project") search.bySomeMustNone([unique.val], [], ["NOTME"]) assert not search.hasNext() search.bySomeMustNone([unique.val], [], ["NOTME","SOMETHINGELSE"]) assert not search.hasNext() search.bySomeMustNone([unique.val], [], []) assert search.hasNext()
def testLinkingInPrivateGroup(self): uuid = self.uuid() group = self.new_group(perms="rw----") client, user = self.new_client_and_user(group=group, admin=True) update = client.sf.getUpdateService() project = ProjectI() project.setName(rstring("project1_%s" % uuid)) project = update.saveAndReturnObject(project) dataset = DatasetI() dataset.setName(rstring("dataset1_%s" % uuid)) dataset = update.saveAndReturnObject(dataset) links = [] l = ProjectDatasetLinkI() l.setChild(dataset) l.setParent(project) links.append(l) update.saveAndReturnArray(links)
def test1069(self): unique = rstring(self.uuid()) project = ProjectI() project.name = unique project.description = rstring("NOTME") project = self.client.sf.getUpdateService().saveAndReturnObject(project) self.index(project) search = self.client.sf.createSearchService() search.onlyType("Project") search.bySomeMustNone([unique.val], [], ["NOTME"]) self.assert_( not search.hasNext() ) search.bySomeMustNone([unique.val], [], ["NOTME","SOMETHINGELSE"]) self.assert_( not search.hasNext() ) search.bySomeMustNone([unique.val], [], []) self.assert_( search.hasNext() )
def testProjectionPermissionsWorkaround(self, fixture): writer = self.writer(fixture) reader = self.reader(fixture) project = ProjectI() project.name = rstring("testProjectPermissions") project = writer.saveAndReturnObject(project) group = project.details.group.id.val owner = project.details.owner.id.val key = (group, owner) try: if key in self._cache: # In pytest, this is never actually reached, # since each test is a new instance, but this # would be the performance speed up needed in # clients. See #12474 assert False else: proj = unwrap( reader.projection( "select p from Project p where p.id = :id", ParametersI().addId(project.id.val), {"omero:group": str(group)}))[0][0] assert fixture.canRead perms = proj.details.permissions value = { "perms": str(perms), "canAnnotate": perms.canAnnotate(), "canDelete": perms.canDelete(), "canEdit": perms.canEdit(), "canLink": perms.canLink(), } self._cache[key] = value except IndexError: # No permissions were returned. assert not fixture.canRead else: self.assertPerms(self._cache[key], fixture)
def test1072(self): #create two users where both are in the same active group admin = self.root.sf.getAdminService() uuid = admin.getEventContext().sessionUuid new_gr = self.new_group(perms="rwr---") c1, test_user = self.new_client_and_user(new_gr) c2, test_user2 = self.new_client_and_user(new_gr) #login as user1 update = c1.sf.getUpdateService() pr1 = ProjectI() pr1.setName(rstring('test1072-pr1-%s' % (uuid))) pr1 = update.saveAndReturnObject(pr1) pr1.unload() #datasets ds1 = DatasetI() ds1.setName(rstring('test1072-ds1-%s' % (uuid))) ds1 = update.saveAndReturnObject(ds1) ds1.unload() pdl1 = ProjectDatasetLinkI() pdl1.setParent(pr1) pdl1.setChild(ds1) update.saveObject(pdl1) #login as user2 pojos = c2.sf.getContainerService() assert c2.sf.getAdminService().getEventContext() #print c1.sf.getAdminService().getEventContext() p = omero.sys.ParametersI() p.grp( rlong(c2.sf.getAdminService().getEventContext().groupId) ) pojos.loadContainerHierarchy("Project",None, p)
def testProjectionPermissionsWorkaround(self, fixture): writer = self.writer(fixture) reader = self.reader(fixture) project = ProjectI() project.name = rstring("testProjectPermissions") project = writer.saveAndReturnObject(project) group = project.details.group.id.val owner = project.details.owner.id.val key = (group, owner) try: if key in self._cache: # In pytest, this is never actually reached, # since each test is a new instance, but this # would be the performance speed up needed in # clients. See #12474 assert False else: proj = unwrap(reader.projection( "select p from Project p where p.id = :id", ParametersI().addId(project.id.val), {"omero:group": str(group)}))[0][0] assert fixture.canRead perms = proj.details.permissions value = { "perms": str(perms), "canAnnotate": perms.canAnnotate(), "canDelete": perms.canDelete(), "canEdit": perms.canEdit(), "canLink": perms.canLink(), } self._cache[key] = value except IndexError: # No permissions were returned. assert not fixture.canRead else: self.assertPerms(self._cache[key], fixture)
def test1072(self): #create two users where both are in the same active group admin = self.root.sf.getAdminService() uuid = admin.getEventContext().sessionUuid new_gr = self.new_group(perms="rwr---") c1, test_user = self.new_client_and_user(new_gr) c2, test_user2 = self.new_client_and_user(new_gr) #login as user1 update = c1.sf.getUpdateService() pr1 = ProjectI() pr1.setName(rstring('test1072-pr1-%s' % (uuid))) pr1 = update.saveAndReturnObject(pr1) pr1.unload() #datasets ds1 = DatasetI() ds1.setName(rstring('test1072-ds1-%s' % (uuid))) ds1 = update.saveAndReturnObject(ds1) ds1.unload() pdl1 = ProjectDatasetLinkI() pdl1.setParent(pr1) pdl1.setChild(ds1) update.saveObject(pdl1) #login as user2 pojos = c2.sf.getContainerService() self.assert_(c2.sf.getAdminService().getEventContext()) #print c1.sf.getAdminService().getEventContext() p = omero.sys.ParametersI() p.grp(rlong(c2.sf.getAdminService().getEventContext().groupId)) pojos.loadContainerHierarchy("Project", None, p)
def test1071(self): uuid = self.root.sf.getAdminService().getEventContext().sessionUuid pojos = self.root.sf.getContainerService() query = self.root.sf.getQueryService() update = self.root.sf.getUpdateService() #projects pr1 = ProjectI() pr1.setName(rstring('test1071-pr1-%s' % (uuid))) pr1 = update.saveAndReturnObject(pr1) pr1.unload() pr2 = ProjectI() pr2.setName(rstring('test1071-pr2-%s' % (uuid))) pr2 = update.saveAndReturnObject(pr2) pr2.unload() #datasets ds1 = DatasetI() ds1.setName(rstring('test1071-ds1-%s' % (uuid))) ds1 = update.saveAndReturnObject(ds1) ds1.unload() ds2 = DatasetI() ds2.setName(rstring('test1071-ds2-%s' % (uuid))) ds2 = update.saveAndReturnObject(ds2) ds2.unload() ds3 = DatasetI() ds3.setName(rstring('test1071-ds3-%s' % (uuid))) ds3 = update.saveAndReturnObject(ds3) ds3.unload() #images im2 = ImageI() im2.setName(rstring('test1071-im2-%s' % (uuid))) im2.acquisitionDate = rtime(0) im2 = update.saveAndReturnObject(im2) im2.unload() #links # # im2 -> ds3 # +-> ds2 --> pr2 # | \ # \-> ds1 --> pr1 # pdl1 = ProjectDatasetLinkI() pdl1.setParent(pr1) pdl1.setChild(ds1) update.saveObject(pdl1) pdl2 = ProjectDatasetLinkI() pdl2.setParent(pr1) pdl2.setChild(ds2) update.saveObject(pdl2) pdl3 = ProjectDatasetLinkI() pdl3.setParent(pr2) pdl3.setChild(ds2) update.saveObject(pdl3) dil4 = DatasetImageLinkI() dil4.setParent(ds1) dil4.setChild(im2) update.saveObject(dil4) dil5 = DatasetImageLinkI() dil5.setParent(ds2) dil5.setChild(im2) update.saveObject(dil5) dil6 = DatasetImageLinkI() dil6.setParent(ds3) dil6.setChild(im2) update.saveObject(dil6) #test: hier = pojos.findContainerHierarchies("Project", [long(im2.id.val)], None) assert 3 == len(hier), "len of hier != 3: %s" % [type(x) for x in hier] for c in hier: if c.id.val == pr1.id.val and isinstance(c, ProjectI): assert c.sizeOfDatasetLinks() == 2, "length 2 != " + str(c.sizeOfDatasetLinks()) for pdl in c.copyDatasetLinks(): assert pdl.child.sizeOfImageLinks() == 1 for dil in pdl.child.copyImageLinks(): assert dil.child.id.val == im2.id.val elif c.id.val == pr2.id.val and isinstance(c, ProjectI): assert c.sizeOfDatasetLinks() == 1 elif c.id.val == ds3.id.val and isinstance(c, DatasetI): assert c.sizeOfImageLinks() == 1
def test1071_1(self): admin = self.root.sf.getAdminService() common_group = self.new_group(perms="rwrw--") c1 = self.new_client(common_group) c2 = self.new_client(common_group) c1_pojos = c1.sf.getContainerService() c1_query = c1.sf.getQueryService() c1_update = c1.sf.getUpdateService() c1_uuid = c1.sf.getAdminService().getEventContext().sessionUuid c2_pojos = c2.sf.getContainerService() c2_query = c2.sf.getQueryService() c2_update = c2.sf.getUpdateService() c2_uuid = c2.sf.getAdminService().getEventContext().sessionUuid #projects pr1 = ProjectI() pr1.setName(rstring('test1071-pr1-%s' % (c1_uuid))) pr1 = c1_update.saveAndReturnObject(pr1) pr1.unload() pr2 = ProjectI() pr2.setName(rstring('test1071-pr2-%s' % (c2_uuid))) pr2 = c2_update.saveAndReturnObject(pr2) pr2.unload() #datasets ds1 = DatasetI() ds1.setName(rstring('test1071-ds1-%s' % (c1_uuid))) ds1 = c1_update.saveAndReturnObject(ds1) ds1.unload() ds2 = DatasetI() ds2.setName(rstring('test1071-ds2-%s' % (c2_uuid))) ds2 = c2_update.saveAndReturnObject(ds2) ds2.unload() #images im2 = ImageI() im2.setName(rstring('test1071-im2-%s' % (c2_uuid))) im2.acquisitionDate = rtime(0) im2 = c2_update.saveAndReturnObject(im2) im2.unload() #links # im2 owned by u2 # # im2 -> ds2 --> pr2 (owned by u2) # | # \-> ds1 --> pr1 (owned by u1) # pdl1 = ProjectDatasetLinkI() pdl1.setParent(pr1) pdl1.setChild(ds1) c1_update.saveObject(pdl1) pdl2 = ProjectDatasetLinkI() pdl2.setParent(pr2) pdl2.setChild(ds2) c2_update.saveObject(pdl2) dil2 = DatasetImageLinkI() dil2.setParent(ds2) dil2.setChild(im2) c2_update.saveObject(dil2) dil1 = DatasetImageLinkI() dil1.setParent(ds1) dil1.setChild(im2) c1_update.saveObject(dil1) #test: hier = c2_pojos.findContainerHierarchies("Project", [long(im2.id.val)], None) assert 2 == len(hier), "size of hier != 2: %s" % [type(x) for x in hier] for c in hier: if c.id.val == pr1.id.val and isinstance(c, ProjectI): assert 1 == c.sizeOfDatasetLinks() for pdl in c.copyDatasetLinks(): assert 1 == pdl.child.sizeOfImageLinks() for dil in pdl.child.copyImageLinks(): assert dil.child.id.val == im2.id.val elif c.id.val == pr2.id.val and isinstance(c, ProjectI): assert 1 == c.sizeOfDatasetLinks() elif c.id.val == ds3.id.val and isinstance(c, DatasetI): assert 1 == c.sizeOfImageLinks()
def test1071_1(self): admin = self.root.sf.getAdminService() common_group = self.new_group(perms="rwrw--") c1 = self.new_client(common_group) c2 = self.new_client(common_group) c1_pojos = c1.sf.getContainerService() c1_query = c1.sf.getQueryService() c1_update = c1.sf.getUpdateService() c1_uuid = c1.sf.getAdminService().getEventContext().sessionUuid c2_pojos = c2.sf.getContainerService() c2_query = c2.sf.getQueryService() c2_update = c2.sf.getUpdateService() c2_uuid = c2.sf.getAdminService().getEventContext().sessionUuid #projects pr1 = ProjectI() pr1.setName(rstring('test1071-pr1-%s' % (c1_uuid))) pr1 = c1_update.saveAndReturnObject(pr1) pr1.unload() pr2 = ProjectI() pr2.setName(rstring('test1071-pr2-%s' % (c2_uuid))) pr2 = c2_update.saveAndReturnObject(pr2) pr2.unload() #datasets ds1 = DatasetI() ds1.setName(rstring('test1071-ds1-%s' % (c1_uuid))) ds1 = c1_update.saveAndReturnObject(ds1) ds1.unload() ds2 = DatasetI() ds2.setName(rstring('test1071-ds2-%s' % (c2_uuid))) ds2 = c2_update.saveAndReturnObject(ds2) ds2.unload() #images im2 = ImageI() im2.setName(rstring('test1071-im2-%s' % (c2_uuid))) im2.acquisitionDate = rtime(0) im2 = c2_update.saveAndReturnObject(im2) im2.unload() #links # im2 owned by u2 # # im2 -> ds2 --> pr2 (owned by u2) # | # \-> ds1 --> pr1 (owned by u1) # pdl1 = ProjectDatasetLinkI() pdl1.setParent(pr1) pdl1.setChild(ds1) c1_update.saveObject(pdl1) pdl2 = ProjectDatasetLinkI() pdl2.setParent(pr2) pdl2.setChild(ds2) c2_update.saveObject(pdl2) dil2 = DatasetImageLinkI() dil2.setParent(ds2) dil2.setChild(im2) c2_update.saveObject(dil2) dil1 = DatasetImageLinkI() dil1.setParent(ds1) dil1.setChild(im2) c1_update.saveObject(dil1) #test: hier = c2_pojos.findContainerHierarchies("Project", [long(im2.id.val)], None) self.assertEquals(2, len(hier), "size of hier != 2: %s" % [type(x) for x in hier]) for c in hier: if c.id.val == pr1.id.val and isinstance(c, ProjectI): self.assertEquals(1, c.sizeOfDatasetLinks()) for pdl in c.copyDatasetLinks(): self.assertEquals(1, pdl.child.sizeOfImageLinks()) for dil in pdl.child.copyImageLinks(): self.assert_(dil.child.id.val == im2.id.val) elif c.id.val == pr2.id.val and isinstance(c, ProjectI): self.assertEquals(1, c.sizeOfDatasetLinks()) elif c.id.val == ds3.id.val and isinstance(c, DatasetI): self.assertEquals(1, c.sizeOfImageLinks())
def test1071(self): uuid = self.root.sf.getAdminService().getEventContext().sessionUuid pojos = self.root.sf.getContainerService() query = self.root.sf.getQueryService() update = self.root.sf.getUpdateService() #projects pr1 = ProjectI() pr1.setName(rstring('test1071-pr1-%s' % (uuid))) pr1 = update.saveAndReturnObject(pr1) pr1.unload() pr2 = ProjectI() pr2.setName(rstring('test1071-pr2-%s' % (uuid))) pr2 = update.saveAndReturnObject(pr2) pr2.unload() #datasets ds1 = DatasetI() ds1.setName(rstring('test1071-ds1-%s' % (uuid))) ds1 = update.saveAndReturnObject(ds1) ds1.unload() ds2 = DatasetI() ds2.setName(rstring('test1071-ds2-%s' % (uuid))) ds2 = update.saveAndReturnObject(ds2) ds2.unload() ds3 = DatasetI() ds3.setName(rstring('test1071-ds3-%s' % (uuid))) ds3 = update.saveAndReturnObject(ds3) ds3.unload() #images im2 = ImageI() im2.setName(rstring('test1071-im2-%s' % (uuid))) im2.acquisitionDate = rtime(0) im2 = update.saveAndReturnObject(im2) im2.unload() #links # # im2 -> ds3 # +-> ds2 --> pr2 # | \ # \-> ds1 --> pr1 # pdl1 = ProjectDatasetLinkI() pdl1.setParent(pr1) pdl1.setChild(ds1) update.saveObject(pdl1) pdl2 = ProjectDatasetLinkI() pdl2.setParent(pr1) pdl2.setChild(ds2) update.saveObject(pdl2) pdl3 = ProjectDatasetLinkI() pdl3.setParent(pr2) pdl3.setChild(ds2) update.saveObject(pdl3) dil4 = DatasetImageLinkI() dil4.setParent(ds1) dil4.setChild(im2) update.saveObject(dil4) dil5 = DatasetImageLinkI() dil5.setParent(ds2) dil5.setChild(im2) update.saveObject(dil5) dil6 = DatasetImageLinkI() dil6.setParent(ds3) dil6.setChild(im2) update.saveObject(dil6) #test: hier = pojos.findContainerHierarchies("Project", [long(im2.id.val)], None) self.assertEquals(3, len(hier), "len of hier != 3: %s" % [type(x) for x in hier]) for c in hier: if c.id.val == pr1.id.val and isinstance(c, ProjectI): self.assert_(c.sizeOfDatasetLinks() == 2, "length 2 != " + str(c.sizeOfDatasetLinks())) for pdl in c.copyDatasetLinks(): self.assert_(pdl.child.sizeOfImageLinks() == 1) for dil in pdl.child.copyImageLinks(): self.assert_(dil.child.id.val == im2.id.val) elif c.id.val == pr2.id.val and isinstance(c, ProjectI): self.assert_(c.sizeOfDatasetLinks() == 1) elif c.id.val == ds3.id.val and isinstance(c, DatasetI): self.assert_(c.sizeOfImageLinks() == 1)
def createProjectAs(self, user): """ Adds a Project. """ project = ProjectI() project.name = rstring(user + "_" + self.proj_name) project = self.updateServices[user].saveAndReturnObject(project) return project