Пример #1
0
    def create_containers(self, project_name, dataset_name):
        """
        Creates containers with names provided if they don't exist already.
        Returns Project ID and Dataset ID.
        """
        conn = BlitzGateway(self.USER,
                            self.PASSWORD,
                            host=self.HOST,
                            port=self.PORT)
        connected = conn.connect()
        if not connected:
            sys.stderr.write("Server connection error")
            sys.exit(1)

        for g in conn.getGroupsMemberOf():
            if g.getName() == self.GROUP:
                break

        conn.SERVICE_OPTS.setOmeroGroup(g.getId())
        params = omero.sys.Parameters()

        p = conn.getObject("Project",
                           attributes={'name': project_name},
                           params=params)
        d = None
        if p is None:
            p = self.create_project(conn, project_name)
            d = self.create_dataset(conn, dataset_name)
            self.link_dataset(conn, p, d)
        else:
            print "Using existing Project", project_name
            for c in p.listChildren():
                if c.getName() == dataset_name:
                    d = c
                    break

            if d is None:
                d = self.create_dataset(conn, dataset_name)
                self.link_dataset(conn, p, d)
            else:
                print "Using existing Dataset", dataset_name

        conn.seppuku()

        return p.getId(), d.getId()
Пример #2
0
    def group_exists(self, user, group):
        if not self.user_exists(user):
            return False
        else:
            if group in self.known_users[user]:
                print "in Group:", group
                return True
        try:
            try:
                conn = BlitzGateway(user, "ome", host='localhost')
                conn.connect()
                groups = conn.getGroupsMemberOf()
            except:
                return False

            if group in [g.name for g in groups]:
                print "in Group:", group
                self.known_users[user].append(group)
                return True
            else:
                print "is not in Group:", group, "- ignoring."
                return False
        finally:
            conn.seppuku()
Пример #3
0
    def user_exists(self, user):
        if user in self.known_users.keys():
            print "User:"******"root", "omero", host='localhost')
                conn.connect()
                params = omero.sys.Parameters()
                params.theFilter = omero.sys.Filter()
                u = conn.getObject("Experimenter", attributes={'omeName': user}, params=params)
            except:
                print "Error getting user - ignoring."
                return False

            if u is None:
                print "User:"******"does not exist - ignoring."
                return False
            else:
                print "User:", user,
                self.known_users[user] = []
                return True
        finally:
            conn.seppuku()
Пример #4
0
class OMEROConnectionManager:
    ''' Basic management of an OMERO Connection. Methods which make use of
        a connection will attempt to connect if connect was not already
        successfuly executed '''

    def __init__(self, config_file=None):

        # Set the connection as not established
        self.conn = None

        self.SUUID = None
        self.HOST = None
        self.PORT = None
        self.USERNAME = None
        self.PASSWORD = None

        # If config_file not specified, first see if there's an active OMERO
        # CLI session.
        if config_file is None:
            store = SessionsStore()
            session_props = store.get_current()
            self.HOST, self.USERNAME, self.SUUID, self.PORT = session_props

        # config_file specified, or no active session. Continue with reading
        # connection params from the config file.
        if config_file is not None or self.SUUID is None:

            # Normalize file path.
            if config_file is None:
                config_file = '~/.omero/config'
            config_file = os.path.expanduser(config_file)

            # Check config file exists.
            if not (os.path.exists(config_file)
                    and os.path.isfile(config_file)):
                sys.stderr.write('No active OMERO CLI session and '
                                 'configuration file {} does not '
                                 'exist\n'.format(config_file))
                sys.exit(1)

            # Check permisisons on config file.
            if os.stat(config_file).st_mode & 0077:
                sys.stderr.write('Configuration file contains private '
                                 'credentials and must not be accessible by '
                                 'other users. Please run:\n\n'
                                 '    chmod 600 {}\n\n'.format(config_file))
                sys.exit(1)

            # Read the credentials file.
            config = ConfigParser.RawConfigParser()
            config.read(config_file)
            self.HOST = config.get('OMEROCredentials', 'host')
            self.PORT = config.getint('OMEROCredentials', 'port')
            self.USERNAME = config.get('OMEROCredentials', 'username')
            self.PASSWORD = config.get('OMEROCredentials', 'password')

    def connect(self):
        ''' Create an OMERO Connection '''

        # If connection already established just return it
        if self.conn is not None:
            return self.conn

        # Initialize the connection. At least HOST and PORT will be defined,
        # but USERNAME and PASSWORD may be None if we are connecting to an
        # existing session via its uuid.
        self.conn = BlitzGateway(username=self.USERNAME,
                                 passwd=self.PASSWORD,
                                 host=self.HOST,
                                 port=self.PORT)

        # Connect. If USERNAME and PASSWORD are None then SUUID must be
        # defined.
        connected = self.conn.connect(sUuid=self.SUUID)

        # Check that the connection was established
        if not connected:
            sys.stderr.write('Error: Connection not available, '
                             'please check your user name and password.\n')
            sys.exit(1)
        return self.conn

    def disconnect(self):
        ''' Terminate the OMERO Connection '''
        self.conn.seppuku(softclose=True)
        self.conn = None

    def hql_query(self, query, params=None):
        ''' Execute the given HQL query and return the results. Optionally
            accepts a parameters object.
            For conveniance, will unwrap the OMERO types '''

        # Connect if not already connected
        if self.conn is None:
            self.connect()

        if params is None:
            params = ParametersI()

        # Set OMERO Group to -1 to query across all available data
        self.conn.SERVICE_OPTS.setOmeroGroup(-1)

        # Get the Query Service
        qs = self.conn.getQueryService()

        # Execute the query
        rows = qs.projection(query, params, self.conn.SERVICE_OPTS)

        # Unwrap the query results
        unwrapped_rows = []
        for row in rows:
            unwrapped_row=[]
            for column in row:
                if column is None:
                    unwrapped_row.append(None)
                else:
                    unwrapped_row.append(column.val)
            unwrapped_rows.append(unwrapped_row)

        return unwrapped_rows

    def __del__(self):
        self.disconnect()
Пример #5
0
class OMEROConnectionManager(object):
    ''' Basic management of an OMERO Connection. Methods which make use of
        a connection will attempt to connect if connection was not already
        successfuly executed '''
    def __init__(self, config_file=Path.home() / '.omero' / 'config'):

        self.config_file = config_file

        # Set the connection as not established
        self.conn = None

    def connect(self):
        ''' Create an OMERO Connection '''

        # If connection already established just return it
        if self.conn is not None:
            return self.conn

        params = get_params_from_session()

        if params is None:
            params = get_params_from_config_file(self.config_file)

        # Initialize the connection. At least HOST and PORT will be defined,
        # but USERNAME and PASSWORD may be None if we are connecting to an
        # existing session via its uuid.
        self.conn = BlitzGateway(username=params.get('username'),
                                 passwd=params.get('password'),
                                 host=params['host'],
                                 port=params['port'])

        # Connect. If USERNAME and PASSWORD are None then SUUID must be
        # defined.
        connected = self.conn.connect(sUuid=params.get('suuid'))

        # Check that the connection was established
        if not connected:
            sys.stderr.write('Error: Connection not available, '
                             'please check your user name and password.\n')
            sys.exit(1)
        return self.conn

    def disconnect(self):
        ''' Terminate the OMERO Connection '''
        if self.conn:
            self.conn.seppuku(softclose=True)
            self.conn = None

    def hql_query(self, query, params=None):
        ''' Execute the given HQL query and return the results. Optionally
            accepts a parameters object.
            For conveniance, will unwrap the OMERO types '''

        # Connect if not already connected
        if self.conn is None:
            self.connect()

        if params is None:
            params = ParametersI()

        # Set OMERO Group to -1 to query across all available data
        self.conn.SERVICE_OPTS.setOmeroGroup(-1)

        # Get the Query Service
        qs = self.conn.getQueryService()

        # Execute the query
        rows = qs.projection(query, params, self.conn.SERVICE_OPTS)

        # Unwrap the query results
        unwrapped_rows = []
        for row in rows:
            unwrapped_row = []
            for column in row:
                if column is None:
                    unwrapped_row.append(None)
                else:
                    unwrapped_row.append(column.val)
            unwrapped_rows.append(unwrapped_row)

        return unwrapped_rows

    def __del__(self):
        self.disconnect()
Пример #6
0
                    print "Add des (%s)" % (KEY)
                    obj.setDescription(omero.rtypes.rstring(KEY))
                elif ANN == 'tag':
                    print "Add tag (%s)" % (KEY)
                    addTag(conn, obj, KEY)
                elif ANN == 'map':
                    print "Add map-annotation (%s, %s)" % (KEY, VAL)
                    addMapAnnotation(conn, obj, "Metadata", [[KEY, VAL]])
                else:
                    sys.stderr.write("Error: Command does not exist")
                    sys.exit(1)
            if COM == 'del':
                if ANN == 'des':
                    print "Del des"
                    obj.setDescription(omero.rtypes.rstring(""))
                elif ANN == 'tag':
                    print "Del tag"
                    deleteAllTagAnnotation(conn, obj)
                elif ANN == 'map':
                    print "Del map"
                    deleteAllMapAnnotation(conn, obj)
                else:
                    sys.stderr.write("Error: Command does not exist")
                    sys.exit(1)

            printAnnotation(conn, obj)

    finally:
        #conn._closeSession()
        conn.seppuku()
Пример #7
0
class TestConfig(lib.ITest):
    def setup_method(self, method):
        # prepare session
        self.r = RequestFactory().get('/rand')
        middleware = SessionMiddleware()
        middleware.process_request(self.r)
        self.r.session.save()
        self.rs = self.root.sf.getConfigService()
        self.conn = BlitzGateway(client_obj=self.new_client())

    def teardown_method(self, method):
        self.conn.seppuku()
        self.r.session.flush()

    def testDefaultConfig(self):
        """ Test loading default config """
        deprecated = [
            'omero.client.ui.menu.dropdown.everyone',
            'omero.client.ui.menu.dropdown.leaders',
            'omero.client.ui.menu.dropdown.colleagues'
        ]
        default = self.rs.getClientConfigDefaults()
        login_required(default_view).load_server_settings(self.conn, self.r)
        s = {"omero": {"client": self.r.session.get('server_settings', {})}}
        ss = self.r.session['server_settings']
        # assert if alias gives the same value as deprecated
        # rather then ${property}
        for d in deprecated:
            ds = d.split(".")
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == default[d]
            # workaround for alias as getClientConfigDefaults returns
            # ${property} rather then value
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == \
                self.conn.getConfigService().getConfigValue(
                    default['%s.label' % d][2:-1])

        # compare keys in default and config loaded by decorator
        a = filter(lambda x: x not in (set(default.keys()) - set(deprecated)),
                   set(flattenProperties(s).keys()))
        assert a == ['omero.client.email']

    def testDefaultConfigConversion(self):
        default = self.rs.getClientConfigDefaults()

        # bool
        key1 = 'omero.client.ui.tree.orphans.enabled'
        self.rs.setConfigValue(key1, default[key1])

        key11 = 'omero.client.ui.tree.orphans.name'
        self.rs.setConfigValue(key11, default[key11])

        # digit
        key2 = 'omero.client.viewer.roi_limit'
        self.rs.setConfigValue(key2, default[key2])

        login_required(default_view).load_server_settings(self.conn, self.r)
        ss = self.r.session['server_settings']

        assert isinstance(ss['ui']['tree']['orphans']['enabled'], bool)
        assert ss['ui']['tree']['orphans']['enabled'] == bool(default[key1])

        assert isinstance(ss['ui']['tree']['orphans']['name'], str)
        assert ss['ui']['tree']['orphans']['name'] == default[key11]

        assert isinstance(ss['viewer']['roi_limit'], int)
        assert ss['viewer']['roi_limit'] == json.loads(default[key2])

    @pytest.mark.parametrize("prop", [
        "colleagues", "leaders", "everyone", "colleagues.label",
        "leaders.label", "everyone.label"
    ])
    @pytest.mark.parametrize("label", ["foo"])
    def testUpgradeDropdownMenuConfig(self, prop, label):
        """ Test if alias loads deprecated property value """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            self.rs.setConfigValue(key, label)
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            prop = prop.replace(".label", "")
            assert s['ui']['menu']['dropdown'][prop]['label'] == label
        finally:
            self.rs.setConfigValue(key, d[key])

    def mock_getClientSettings(self, monkeypatch, default):
        def get_clientSettings(*args, **kwargs):
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                if n in default:
                    del default[n]
            return default

        monkeypatch.setattr(omero.gateway.BlitzGateway, 'getClientSettings',
                            get_clientSettings)

    @pytest.mark.parametrize("prop", ["colleagues", "leaders", "everyone"])
    @pytest.mark.parametrize("label", ["foo"])
    def testOldDropdownMenuConfig(self, monkeypatch, prop, label):
        """ Test against older server with monkeypatch """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            if label is not None:
                self.rs.setConfigValue(key, label)
            self.mock_getClientSettings(monkeypatch,
                                        self.rs.getClientConfigValues())
            # validate old config
            ocs = self.conn.getClientSettings()
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                assert n not in ocs
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            if label is not None:
                assert s['ui']['menu']['dropdown'][prop]['label'] == label
            else:
                assert s['ui']['menu']['dropdown'][prop]['label'] == d[key]
        finally:
            self.rs.setConfigValue(key, d[key])
    groupData = terms[pid]
    groupName = groupData['name']
    groupDesc = groupData['def']
    tg = createTagGroup(groupName, groupDesc)
    childNames = []
    childDescs = []
    for cid in groupData['children']:
        cData = terms[cid]
        childNames.append(cData['name'])
        childDescs.append(cData['def'])
    createAndSaveTags(childNames, childDescs, tg)


f.close()
 
conn.seppuku()

# -------- IF we just want to create Tags without Tag-Groups, we can do this... ---------
# names = []
# defs = []
# f = open("gene_ontology.1_2.obo.txt", "r")
# for l in f.readlines():
#     if l.startswith("name:"):
#         names.append(l.strip()[6:])
#     elif l.startswith("def:"):
#         defs.append(l.strip()[5:])
# f.close()

# # names = names[:20]
# # defs = defs[:20]
Пример #9
0
class TestConfig(lib.ITest):

    def setup_method(self, method):
        # prepare session
        self.r = RequestFactory().get('/rand')
        middleware = SessionMiddleware()
        middleware.process_request(self.r)
        self.r.session.save()
        self.rs = self.root.sf.getConfigService()
        self.conn = BlitzGateway(client_obj=self.new_client())

    def teardown_method(self, method):
        self.conn.seppuku()
        self.r.session.flush()

    def testDefaultConfig(self):
        """ Test loading default config """
        deprecated = [
            'omero.client.ui.menu.dropdown.everyone',
            'omero.client.ui.menu.dropdown.leaders',
            'omero.client.ui.menu.dropdown.colleagues'
        ]
        default = self.rs.getClientConfigDefaults()
        login_required(default_view).load_server_settings(self.conn, self.r)
        s = {"omero": {"client": self.r.session.get('server_settings', {})}}
        ss = self.r.session['server_settings']
        # assert if alias gives the same value as deprecated
        # rather then ${property}
        for d in deprecated:
            ds = d.split(".")
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == default[d]
            # workaround for alias as getClientConfigDefaults returns
            # ${property} rather then value
            assert ss['ui']['menu']['dropdown'][ds[-1]]['label'] == \
                self.conn.getConfigService().getConfigValue(
                    default['%s.label' % d][2:-1])

        # compare keys in default and config loaded by decorator
        a = filter(lambda x: x not in (
            set(default.keys()) - set(deprecated)),
            set(flattenProperties(s).keys()))
        assert a == ['omero.client.email']

    def testDefaultConfigConversion(self):
        default = self.rs.getClientConfigDefaults()

        # bool
        key1 = 'omero.client.ui.tree.orphans.enabled'
        self.rs.setConfigValue(key1, default[key1])

        key11 = 'omero.client.ui.tree.orphans.name'
        self.rs.setConfigValue(key11, default[key11])

        # digit
        key2 = 'omero.client.viewer.roi_limit'
        self.rs.setConfigValue(key2, default[key2])

        login_required(default_view).load_server_settings(self.conn, self.r)
        ss = self.r.session['server_settings']

        assert isinstance(ss['ui']['tree']['orphans']['enabled'], bool)
        assert ss['ui']['tree']['orphans']['enabled'] == bool(default[key1])

        assert isinstance(ss['ui']['tree']['orphans']['name'], str)
        assert ss['ui']['tree']['orphans']['name'] == default[key11]

        assert isinstance(ss['viewer']['roi_limit'], int)
        assert ss['viewer']['roi_limit'] == json.loads(default[key2])

    @pytest.mark.parametrize("prop", ["colleagues", "leaders", "everyone",
                                      "colleagues.label", "leaders.label",
                                      "everyone.label"])
    @pytest.mark.parametrize("label", ["foo"])
    def testUpgradeDropdownMenuConfig(self, prop, label):
        """ Test if alias loads deprecated property value """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            self.rs.setConfigValue(key, label)
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            prop = prop.replace(".label", "")
            assert s['ui']['menu']['dropdown'][prop]['label'] == label
        finally:
            self.rs.setConfigValue(key, d[key])

    def mock_getClientSettings(self, monkeypatch, default):
        def get_clientSettings(*args, **kwargs):
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                if n in default:
                    del default[n]
            return default
        monkeypatch.setattr(omero.gateway.BlitzGateway,
                            'getClientSettings',
                            get_clientSettings)

    @pytest.mark.parametrize("prop", ["colleagues", "leaders", "everyone"])
    @pytest.mark.parametrize("label", ["foo"])
    def testOldDropdownMenuConfig(self, monkeypatch, prop, label):
        """ Test against older server with monkeypatch """
        d = self.rs.getClientConfigDefaults()
        key = "omero.client.ui.menu.dropdown.%s" % prop
        try:
            if label is not None:
                self.rs.setConfigValue(key, label)
            self.mock_getClientSettings(monkeypatch,
                                        self.rs.getClientConfigValues())
            # validate old config
            ocs = self.conn.getClientSettings()
            not_exist = [
                'omero.client.ui.menu.dropdown.everyone.label',
                'omero.client.ui.menu.dropdown.leaders.label',
                'omero.client.ui.menu.dropdown.colleagues.label',
                'omero.client.ui.tree.orphans.enabled',
                'omero.client.viewer.initial_zoom_level'
            ]
            for n in not_exist:
                assert n not in ocs
            # test load_server_settings directly
            login_required(default_view).load_server_settings(
                self.conn, self.r)
            s = self.r.session.get('server_settings', {})
            if label is not None:
                assert s['ui']['menu']['dropdown'][prop]['label'] == label
            else:
                assert s['ui']['menu']['dropdown'][prop]['label'] == d[key]
        finally:
            self.rs.setConfigValue(key, d[key])