[X2Go-Commits] python-x2go.git - brokerclient (branch) updated: 09da9d4f9d045aa59deeef4eb2c6f78ed75c5d7f

X2Go dev team git-admin at x2go.org
Tue Jan 7 16:19:39 CET 2014


The branch, brokerclient has been updated
       via  09da9d4f9d045aa59deeef4eb2c6f78ed75c5d7f (commit)
      from  1b39b26c782a431bea3dc99d3dab61edceb253cc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 x2go/backends/control/_stdout.py |    6 +++++-
 x2go/client.py                   |   29 ++++++++++++++++++--------
 x2go/registry.py                 |   42 +++++++++++++++++++++++---------------
 x2go/session.py                  |    6 ++++--
 4 files changed, 55 insertions(+), 28 deletions(-)

The diff of changes is:
diff --git a/x2go/backends/control/_stdout.py b/x2go/backends/control/_stdout.py
index 4e67d88..b7bbbd8 100644
--- a/x2go/backends/control/_stdout.py
+++ b/x2go/backends/control/_stdout.py
@@ -472,7 +472,11 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
                 try:
                     _listsessions = self._list_backend(_stdout_read, info_backend=self._info_backend).sessions
                     _success = True
-                except:
+                except KeyError:
+                    gevent.sleep(1)
+                except IndexError:
+                    gevent.sleep(1)
+                except ValueError:
                     gevent.sleep(1)
 
             # update internal variables when list_sessions() is called
diff --git a/x2go/client.py b/x2go/client.py
index 3e247d4..a959342 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -1265,7 +1265,7 @@ class X2goClient(object):
             _session_list = self.listsessions_cache.list_sessions(session_uuid)
 
         if update_sessionregistry:
-            self.session_registry.update_status(profile_name=self.get_session_profile_name(session_uuid), session_list=_session_list)
+            self.update_sessionregistry_status_by_profile_name(profile_name=self.get_session_profile_name(session_uuid), session_list=_session_list)
 
         if register_sessions:
             self.session_registry.register_available_server_sessions(profile_name=self.get_session_profile_name(session_uuid),
@@ -1415,18 +1415,24 @@ class X2goClient(object):
             self.__update_cache_all_profiles()
     __disconnect_profile = disconnect_profile
 
-    def update_sessionregistry_status_by_profile_name(self, profile_name):
+    def update_sessionregistry_status_by_profile_name(self, profile_name, session_list=None):
         """\
         STILL UNDOCUMENTED
 
         """
         session_uuids = self.client_registered_sessions_of_profile_name(profile_name)
         if session_uuids:
-            session_list = self.list_sessions(session_uuids[0],
-                                              update_sessionregistry=False, 
-                                              register_sessions=False,
-                                             )
-            self.session_registry.update_status(profile_name=profile_name, session_list=session_list)
+            if session_list is None:
+                session_list = self.list_sessions(session_uuids[0],
+                                                  update_sessionregistry=False, 
+                                                  register_sessions=False,
+                                                 )
+            try:
+                self.session_registry.update_status(profile_name=profile_name, session_list=session_list)
+            except x2go_exceptions.X2goControlSessionException:
+                self.disconnect_profile(profile_name)
+                self.HOOK_on_control_session_death(profile_name)
+                return False
     __update_sessionregistry_status_by_profile_name = update_sessionregistry_status_by_profile_name
 
 
@@ -1459,8 +1465,8 @@ class X2goClient(object):
             try:
                 self.listsessions_cache.update(profile_name)
             except x2go_exceptions.X2goControlSessionException:
-                self.HOOK_on_control_session_death(profile_name)
                 self.disconnect_profile(profile_name)
+                self.HOOK_on_control_session_death(profile_name)
                 return False
     __update_cache_by_profile_name = update_cache_by_profile_name
 
@@ -1495,7 +1501,12 @@ class X2goClient(object):
                                               update_sessionregistry=False,
                                               register_sessions=False,
                                              )
-            self.session_registry.register_available_server_sessions(profile_name, session_list=session_list)
+            try:
+                self.session_registry.register_available_server_sessions(profile_name, session_list=session_list)
+            except x2go_exceptions.X2goControlSessionException:
+                self.disconnect_profile(profile_name)
+                self.HOOK_on_control_session_death(profile_name)
+                return False
     __register_available_server_sessions_by_profile_name = register_available_server_sessions_by_profile_name
 
     def register_available_server_sessions_by_session_uuid(self, session_uuid):
diff --git a/x2go/registry.py b/x2go/registry.py
index daf2bb8..fd40b39 100644
--- a/x2go/registry.py
+++ b/x2go/registry.py
@@ -369,53 +369,59 @@ class X2goSessionRegistry(object):
         else:
             raise X2goSessionException('no session of name ,,%s\'\' registered' % session_name)
 
-    def _sessionsWithState(self, state, return_objects=True, return_profile_names=False):
+    def _sessionsWithState(self, state, return_objects=True, return_profile_names=False, return_profile_ids=False):
         sessions = [ ts for ts in self.registry.values() if eval('ts.%s' % state) ]
-        if return_objects:
-            return sessions
-        elif return_profile_names:
+        if return_profile_names:
             profile_names = []
             for session in sessions:
                 if session.profile_name not in profile_names:
                     profile_names.append(session.profile_name)
             return profile_names
+        elif return_profile_ids:
+            profile_ids = []
+            for session in sessions:
+                if session.profile_id not in profile_ids:
+                    profile_ids.append(session.profile_id)
+            return profile_ids
+        elif return_objects:
+            return sessions
         else:
             return [s.get_uuid() for s in sessions ]
 
-    def connected_sessions(self, return_objects=True, return_profile_names=False):
+    def connected_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
         """\
         STILL UNDOCUMENTED
 
         """
-        return self._sessionsWithState('connected', return_objects=return_objects, return_profile_names=return_profile_names)
+        return self._sessionsWithState('connected', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
 
-    def virgin_sessions(self, return_objects=True, return_profile_names=False):
+    def virgin_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
         """\
         STILL UNDOCUMENTED
 
         """
-        return self._sessionsWithState('virgin', return_objects=return_objects, return_profile_names=return_profile_names)
+        return self._sessionsWithState('virgin', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
 
-    def running_sessions(self, return_objects=True, return_profile_names=False):
+    def running_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
         """\
         STILL UNDOCUMENTED
 
         """
-        return self._sessionsWithState('running', return_objects=return_objects, return_profile_names=return_profile_names)
+        return self._sessionsWithState('running', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
 
-    def suspended_sessions(self, return_objects=True, return_profile_names=False):
+    def suspended_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
         """\
         STILL UNDOCUMENTED
 
         """
-        return self._sessionsWithState('suspended', return_objects=return_objects, return_profile_names=return_profile_names)
+        return self._sessionsWithState('suspended', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
 
-    def terminated_sessions(self, return_objects=True, return_profile_names=False):
+    def terminated_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
         """\
         STILL UNDOCUMENTED
 
         """
-        return self._sessionsWithState('terminated', return_objects=return_objects, return_profile_names=return_profile_names)
+        return self._sessionsWithState('terminated', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
 
     @property
     def has_running_sessions(self):
@@ -526,9 +532,13 @@ class X2goSessionRegistry(object):
         return [ c for c in self.control_sessions.values() if c.is_connected() ]
 
     @property
-    def connected_profiles(self):
+    def connected_profiles(self, use_paramiko=False):
         """\
         STILL UNDOCUMENTED
 
         """
-        return [ p for p in self.control_sessions.keys() if self.control_sessions[p].is_connected() ]
+        if use_paramiko:
+            return [ p for p in self.control_sessions.keys() if self.control_sessions[p].is_connected() ]
+        else:
+            return self.connected_sessions(return_profile_ids=True)
+
diff --git a/x2go/session.py b/x2go/session.py
index 8668fc9..5ff6cef 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -460,13 +460,15 @@ class X2goSession(object):
             try:
                 session_list = self.control_session.list_sessions()
                 self.connected = True
-            except X2goControlSessionException:
+            except X2goControlSessionException, e:
                 self.connected = False
                 self.running = None
                 self.suspended = None
                 self.terminated = None
+                raise e
         try:
-            _session_info = session_list[self.get_session_name()]
+            _session_name = self.get_session_name()
+            _session_info = session_list[_session_name]
             self.running = _session_info.is_running()
             self.suspended = _session_info.is_suspended()
             if not self.virgin:


hooks/post-receive
-- 
python-x2go.git (Python X2Go Client API)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-x2go.git" (Python X2Go Client API).




More information about the x2go-commits mailing list