Example #1
0
    def testMapSecurity(self):
        c1 = self.new_client(perms="rwr---")
        u1 = c1.sf.getUpdateService()
        a1 = c1.sf.getAdminService()
        g1 = a1.getEventContext().groupName
        m1 = omero.model.MapAnnotationI()
        m1.setMapValue([NV("foo", "bar")])
        m1 = u1.saveAndReturnObject(m1)

        # Now create another user and try to edit
        c2 = self.new_client(group=g1)
        q2 = c2.sf.getQueryService()
        u2 = c2.sf.getUpdateService()
        m2 = q2.get("MapAnnotation", m1.id.val)
        assert not m2.details.permissions.canEdit()

        # Additions fail
        m2.getMapValue().append(NV("edited-by", str(c2)))
        with pytest.raises(omero.SecurityViolation):
            u2.saveAndReturnObject(m2)

        # Removals fail
        m2.setMapValue([])
        with pytest.raises(omero.SecurityViolation):
            u2.saveAndReturnObject(m2)

        # Also via a None
        m2.setMapValue(None)
        with pytest.raises(omero.SecurityViolation):
            u2.saveAndReturnObject(m2)

        # Alterations fail
        m2.setMapValue([NV("foo", "WRONG")])
        with pytest.raises(omero.SecurityViolation):
            u2.saveAndReturnObject(m2)
    def create_fileset(self, folder):
        fileset = omero.model.FilesetI()
        for f in folder.files():
            entry = omero.model.FilesetEntryI()
            entry.setClientPath(rstring(str(f.abspath())))
            fileset.addFilesetEntry(entry)

        # Fill version info
        system, node, release, version, machine, processor = platform.uname()

        clientVersionInfo = [
            NV('omero.version', omero_version),
            NV('os.name', system),
            NV('os.version', release),
            NV('os.architecture', machine)
        ]
        try:
            clientVersionInfo.append(NV('locale',
                                        locale.getdefaultlocale()[0]))
        except:
            pass

        upload = omero.model.UploadJobI()
        upload.setVersionInfo(clientVersionInfo)
        fileset.linkJob(upload)
        return fileset
 def testEmptyItem(self):
     a = MapAnnotationI()
     a.setMapValue([NV('Name1', 'Value1'), NV('Name2', 'Value2')])
     a = self.update.saveAndReturnObject(a)
     m = self.query.findAllByQuery((
         "from MapAnnotation m "
         "join fetch m.mapValue a "
         "where a.name='Name2'"), None)[0]
     l1 = m.getMapValue()
     assert l1[0] is None
     self.assertNV(l1[1], "Name2", "Value2")
     assert {"Name2": "Value2"} == m.getMapValueAsMap()
Example #4
0
 def testAsMapMethod(self):
     g = omero.model.ExperimenterGroupI()
     g.setConfig(
         [NV("foo", "bar")]
     )
     m = g.getConfigAsMap()
     assert m["foo"] == "bar"
Example #5
0
    def on_go(self, ctx, args):

        from omero.model import NamedValue as NV

        argc = len(self.tx_cmd.arg_list)
        if argc not in [4, 5]:
            ctx.die(335, "usage: map-set OBJ FIELD KEY [VALUE]")

        field = self.tx_cmd.arg_list[2]
        current = getattr(self.obj, field)
        if current is None:
            setattr(self.obj, field, [])

        if argc == 4:
            name = self.tx_cmd.arg_list[3]
            current = [nv for nv in current if nv and nv.name != name]
            setattr(self.obj, field, current)
        else:
            name, value = self.tx_cmd.arg_list[3:]
            state = None
            for nv in current:
                if nv and nv.name == name:
                    nv.value = value
                    state = "SET"
                    break
            if state != "SET":
                current.append(NV(name, value))

        self.save_and_return(ctx)
 def testMapStringField(self):
     uuid = self.uuid()
     queryService = self.root.getSession().getQueryService()
     updateService = self.root.getSession().getUpdateService()
     group = ExperimenterGroupI()
     group.setName(rstring(uuid))
     group.setLdap(rbool(False))
     group.setConfig([NV("language", "python")])
     group = updateService.saveAndReturnObject(group)
     group = queryService.findByQuery(
         ("select g from ExperimenterGroup g join fetch g.config "
          "where g.id = %s" % group.getId().getValue()), None)
     self.assertNV(group.getConfig()[0], "language", "python")
    def testGroupConfigEdit(self):

        before = [
            NV("a", "b"),
            NV("c", "d"),
            NV("e", "f")
        ]

        remove_one = [
            NV("a", "b"),
            NV("e", "f")
        ]

        swapped = [
            NV("e", "f"),
            NV("a", "b")
        ]

        edited = [
            NV("e", "f"),
            NV("a", "x")
        ]

        root_update = self.root.sf.getUpdateService()

        group = self.new_group()
        group.setConfig(before)
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(before, group.getConfig())

        del group.getConfig()[1]
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(remove_one, group.getConfig())

        old = list(group.getConfig())
        self.assertNVs(old, remove_one)
        group.setConfig([old[1], old[0]])
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(swapped, group.getConfig())

        group.getConfig()[1].value = "x"
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(edited, group.getConfig())
 def testBigKeys(self):
     uuid = self.uuid()
     big = uuid + "X" * 500
     a = MapAnnotationI()
     a.setMapValue([NV(big, big)])
     a = self.update.saveAndReturnObject(a)
     m = self.query.findAllByQuery((
         "from MapAnnotation m "
         "join fetch m.mapValue a "
         "where a.name like :name"),
         omero.sys.ParametersI().addString("name",
                                           uuid + "%")
     )[0]
     l1 = m.getMapValue()
     self.assertNV(l1[0], big, big)
Example #9
0
    def testMapEagerFetch(self):
        m = omero.model.MapAnnotationI()
        m.setMapValue(
            [NV("foo", "bar")]
        )
        m = self.update.saveAndReturnObject(m)
        anns = self.query.findAllByQuery(
            "select m from MapAnnotation m ",
            None)
        self.assertMapAnnotation(anns, m.id.val)

        # Add a second annotation and query both
        c = omero.model.CommentAnnotationI()
        c = self.update.saveAndReturnObject(c)
        anns = self.query.findAllByQuery(
            "select m from Annotation m ",
            None)
        self.assertMapAnnotation(anns, m.id.val)

        # Now place both on an image and retry
        i = omero.model.ImageI()
        i.setName(omero.rtypes.rstring("testMapEagerFetch"))
        i.linkAnnotation(m)
        i.linkAnnotation(c)
        i = self.update.saveAndReturnObject(i)
        imgs = self.query.findByQuery(
            ("select i from Image i join fetch "
             "i.annotationLinks l join fetch l.child "
             "where i.id = :id"),
            omero.sys.ParametersI().addId(i.id.val))
        anns = imgs.linkedAnnotationList()
        self.assertMapAnnotation(anns, m.id.val)

        # And now load via IMetadata
        meta = self.client.sf.getMetadataService()
        anns = meta.loadAnnotations(
            "omero.model.Image",
            [i.id.val],
            [],  # Supported Annotation types
            [],  # Annotator IDs
            None)
        self.assertMapAnnotation(anns[i.id.val], m.id.val)
Example #10
0
    def on_go(self, ctx, args):

        from omero.model import NamedValue as NV

        if len(self.tx_cmd.arg_list) != 5:
            ctx.die(335, "usage: map-set OBJ FIELD KEY VALUE")

        field = self.tx_cmd.arg_list[2]
        current = getattr(self.obj, field)
        if current is None:
            setattr(self.obj, field, [])

        name, value = self.tx_cmd.arg_list[3:]
        state = None
        for nv in current:
            if nv and nv.name == name:
                nv.value = value
                state = "SET"
                break

        if state != "SET":
            current.append(NV(name, value))

        self.save_and_return(ctx)
Example #11
0
 def testPolicyGroupRestriction(self, tmpdir, fixture):
     parts = fixture.cfg.split(",")
     config = [NV("omero.policy.binary_access", x) for x in parts]
     group = self.new_group(perms='rwr---', config=config)
     self.do_restrictions(fixture, tmpdir, group)
class TestMapAnnotation(lib.ITest):

    def assertNV(self, nv, name, value):
        assert name == nv.name
        assert value == nv.value

    def assertNVs(self, nvl1, nvl2):
        for i in range(max(len(nvl1), len(nvl2))):
            assert nvl1[i].name == nvl2[i].name
            assert nvl1[i].value == nvl2[i].value

    def testMapStringField(self):
        uuid = self.uuid()
        queryService = self.root.getSession().getQueryService()
        updateService = self.root.getSession().getUpdateService()
        group = ExperimenterGroupI()
        group.setName(rstring(uuid))
        group.setLdap(rbool(False))
        group.setConfig([NV("language", "python")])
        group = updateService.saveAndReturnObject(group)
        group = queryService.findByQuery(
            ("select g from ExperimenterGroup g join fetch g.config "
             "where g.id = %s" % group.getId().getValue()), None)
        self.assertNV(group.getConfig()[0], "language", "python")

    @pytest.mark.parametrize("data", (
        ([NV("a", "")], [NV("a", "")]),
        ([NV("a", "b")], [NV("a", "b")]),
    ))
    def testGroupConfigA(self, data):

        save_value, expect_value = data

        LOAD = ("select g from ExperimenterGroup g "
                "left outer join fetch g.config where g.id = :id")

        queryService = self.root.sf.getQueryService()
        updateService = self.root.sf.getUpdateService()
        params = omero.sys.ParametersI()

        def load_group(id):
            params.addId(id)
            return queryService.findByQuery(LOAD, params)

        group = self.new_group()
        gid = group.id.val
        group.config = save_value

        updateService.saveObject(group)
        group = load_group(gid)
        config = unwrap(group.config)

        self.assertNVs(expect_value, config)

        name, value = unwrap(queryService.projection(
            """
            select m.name, m.value from ExperimenterGroup g
            left outer join g.config m where m.name = 'a'
            and g.id = :id
            """, omero.sys.ParametersI().addId(gid))[0])

        self.assertNV(expect_value[0], name, value)

    def testGroupConfigEdit(self):

        before = [
            NV("a", "b"),
            NV("c", "d"),
            NV("e", "f")
        ]

        remove_one = [
            NV("a", "b"),
            NV("e", "f")
        ]

        swapped = [
            NV("e", "f"),
            NV("a", "b")
        ]

        edited = [
            NV("e", "f"),
            NV("a", "x")
        ]

        root_update = self.root.sf.getUpdateService()

        group = self.new_group()
        group.setConfig(before)
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(before, group.getConfig())

        del group.getConfig()[1]
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(remove_one, group.getConfig())

        old = list(group.getConfig())
        self.assertNVs(old, remove_one)
        group.setConfig([old[1], old[0]])
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(swapped, group.getConfig())

        group.getConfig()[1].value = "x"
        group = root_update.saveAndReturnObject(group)
        self.assertNVs(edited, group.getConfig())

    def testEmptyItem(self):
        a = MapAnnotationI()
        a.setMapValue([NV('Name1', 'Value1'), NV('Name2', 'Value2')])
        a = self.update.saveAndReturnObject(a)
        m = self.query.findAllByQuery((
            "from MapAnnotation m "
            "join fetch m.mapValue a "
            "where a.name='Name2'"), None)[0]
        l1 = m.getMapValue()
        assert l1[0] is None
        self.assertNV(l1[1], "Name2", "Value2")
        assert {"Name2": "Value2"} == m.getMapValueAsMap()

    def testBigKeys(self):
        uuid = self.uuid()
        big = uuid + "X" * 500
        a = MapAnnotationI()
        a.setMapValue([NV(big, big)])
        a = self.update.saveAndReturnObject(a)
        m = self.query.findAllByQuery((
            "from MapAnnotation m "
            "join fetch m.mapValue a "
            "where a.name like :name"),
            omero.sys.ParametersI().addString("name",
                                              uuid + "%")
        )[0]
        l1 = m.getMapValue()
        self.assertNV(l1[0], big, big)