diff --git a/src/omero/gateway/__init__.py b/src/omero/gateway/__init__.py index 2a4f1fdfb..4583303ca 100644 --- a/src/omero/gateway/__init__.py +++ b/src/omero/gateway/__init__.py @@ -1477,7 +1477,7 @@ class _BlitzGateway (object): def __init__(self, username=None, passwd=None, client_obj=None, group=None, clone=False, try_super=False, host=None, port=None, - extra_config=None, secure=False, anonymous=True, + extra_config=None, secure=None, anonymous=True, useragent=None, userip=None): """ Create the connection wrapper. @@ -1525,7 +1525,31 @@ def __init__(self, username=None, passwd=None, client_obj=None, group=None, self.ice_config = [os.path.abspath(str(x)) for x in [_f for _f in self.ice_config if _f]] self.host = host + if self.c is not None: + hc = self.c.getProperty("omero.host") + if self.host is None: + self.host = hc + elif hc != self.host: + raise Exception("hosts %s and %s do not match" % (hc, self.host)) self.port = port + if self.c is not None: + pc = self.c.getProperty("omero.port") + if self.port is None: + self.port = pc + elif pc != self.port: + raise Exception("ports %s and %s do not match" % (pc, self.port)) + if self.c is None: + if secure is None: + secure = False + else: + cs = self.c.isSecure() + if secure is None: + secure = cs + else: + # Check that the values match + if secure != cs: + raise Exception("Secure flag %s and %s do not match" % (secure, cs)) + self.secure = secure self.useragent = useragent self.userip = userip @@ -1533,6 +1557,11 @@ def __init__(self, username=None, passwd=None, client_obj=None, group=None, self._sessionUuid = None self._session_cb = None self._session = None + if self.c is not None: + try: + self._sessionUuid = self.c.getSessionId() + except omero.ClientError: # no session available + pass self._lastGroupId = None self._anonymous = anonymous self._defaultOmeroGroup = None @@ -1936,6 +1965,7 @@ def close(self, hard=True): # pragma: no cover oldC = None self.c = None self._session = None + self._sessionUuid = None self._proxies = NoProxies() logger.info("closed connection (uuid=%s)" % str(self._sessionUuid)) @@ -2029,7 +2059,7 @@ def isSecure(self): Returns 'True' if the underlying omero.clients.BaseClient is connected using SSL """ - return hasattr(self.c, 'isSecure') and self.c.isSecure() or False + return self.secure def _getSessionId(self): return self.c.getSessionId() @@ -2082,8 +2112,11 @@ def _resetOmeroClient(self): logger.debug(self.ice_config) if self.c is not None: - self.c.__del__() - self.c = None + try: + self.c.__del__() + self.c = None + except omero.ClientError: # no session available + pass if self.host is not None: if self.port is not None: @@ -2125,6 +2158,15 @@ def connect(self, sUuid=None): logger.debug("Ooops. no self._c") return False try: + try: + sid = self.c.getSessionId() + # we have a session already from the client + if sUuid is None or sid == sUuid: + logger.debug('connected via client') + return True + except omero.ClientError: # no session available + pass + if self._sessionUuid is None and sUuid: self._sessionUuid = sUuid if self._sessionUuid is not None: diff --git a/src/omero/gateway/scripts/dbhelpers.py b/src/omero/gateway/scripts/dbhelpers.py index b00f4bd92..b6baedd64 100644 --- a/src/omero/gateway/scripts/dbhelpers.py +++ b/src/omero/gateway/scripts/dbhelpers.py @@ -96,7 +96,8 @@ def login(self, groupname=None): if groupname is None: groupname = self.groupname client = omero.gateway.BlitzGateway( - self.name, self.passwd, group=groupname, try_super=self.admin) + username=self.name, passwd=self.passwd, + group=groupname, try_super=self.admin) if not client.connect(): print("Can not connect") return None