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()
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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)
Example #10
0
    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()
Example #13
0
    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())
Example #14
0
    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
 def createProjectAs(self, user):
     """ Adds a Project. """
     project = ProjectI()
     project.name = rstring(user + "_" + self.proj_name)
     project = self.updateServices[user].saveAndReturnObject(project)
     return project