[X2Go-Commits] python-x2go.git - release/0.4.0.x (branch) updated: 09da9d4f9d045aa59deeef4eb2c6f78ed75c5d7f

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


The branch, release/0.4.0.x 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