[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: baa434a6db77809e7172d7811221f7e3d21ac33d
X2Go dev team
git-admin at x2go.org
Wed Jan 8 15:25:36 CET 2014
The branch, build-baikal has been updated
via baa434a6db77809e7172d7811221f7e3d21ac33d (commit)
from af69549053bc2d447ecdd415ec3bb7bcf7e75e68 (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 | 2 +
x2go/backends/terminal/_stdout.py | 6 +--
x2go/client.py | 42 ++++++++++--------
x2go/registry.py | 88 ++++++++++++++++++++++---------------
x2go/session.py | 4 +-
5 files changed, 83 insertions(+), 59 deletions(-)
The diff of changes is:
diff --git a/x2go/backends/control/_stdout.py b/x2go/backends/control/_stdout.py
index 011b5d4..52e157b 100644
--- a/x2go/backends/control/_stdout.py
+++ b/x2go/backends/control/_stdout.py
@@ -489,6 +489,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
if session_name is not None:
if self.is_running(session_name):
self.suspend(session_name)
+ gevent.sleep(3)
while not _terminal.ok():
@@ -527,6 +528,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
"""
if raw:
+ (stdin, stdout, stderr) = self._x2go_exec_command("x2golistsessions")
return stdout.read(), stderr.read()
else:
diff --git a/x2go/backends/terminal/_stdout.py b/x2go/backends/terminal/_stdout.py
index cb6edbc..a021b6b 100644
--- a/x2go/backends/terminal/_stdout.py
+++ b/x2go/backends/terminal/_stdout.py
@@ -353,16 +353,16 @@ class X2goTerminalSessionSTDOUT(object):
Currently supported audio protocols:
- - Pulse Audio
+ - PulseAudio
- Esound
"""
_tunnel = None
if self.reverse_tunnels[self.session_info.name]['snd'][1] is None:
if self.params.snd_system == 'pulse':
- self.logger('initializing Pulse Audio sound support in X2go session', loglevel=log.loglevel_INFO)
+ self.logger('initializing PulseAudio sound support in X2go session', loglevel=log.loglevel_INFO)
###
- ### PULSE AUDIO
+ ### PULSEAUDIO
###
# setup pulse client config file on X2go server
cmd_line = "echo 'default-server=localhost:%s'>%s/.pulse-client.conf;" % (self.session_info.snd_port, self.session_info.remote_container) + \
diff --git a/x2go/client.py b/x2go/client.py
index 9b92f1e..46a96f2 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -290,6 +290,8 @@ class X2goClient(object):
self.logger('HOOK_on_session_has_resumed_by_me (session_uuid: %s, profile_name: %s): suspended session %s has been resumed by this application' % (session_uuid, profile_name, session_name), loglevel=log.loglevel_NOTICE)
def HOOK_on_session_has_resumed_by_other(self, session_uuid='UNKNOWN', profile_name='UNKNOWN', session_name='UNKNOWN'):
self.logger('HOOK_on_session_has_resumed_by_other (session_uuid: %s, profile_name: %s): suspended session %s has been resumed by other application' % (session_uuid, profile_name, session_name), loglevel=log.loglevel_NOTICE)
+ def HOOK_on_found_session_running_after_connect(self, session_uuid='UNKNOWN', profile_name='UNKNOWN', session_name='UNKNOWN'):
+ self.logger('HOOK_found_session_running_after_connect (session_uuid: %s, profile_name: %s): running session %s has been found after connecting to session profile %s' % (session_uuid, profile_name, session_name, profile_name), loglevel=log.loglevel_NOTICE)
def HOOK_on_session_has_been_suspended(self, session_uuid='UNKNOWN', profile_name='UNKNOWN', session_name='UNKNOWN'):
self.logger('HOOK_on_session_has_been_suspended (session_uuid: %s, profile_name: %s): session %s has been suspended' % (session_uuid, profile_name, session_name), loglevel=log.loglevel_NOTICE)
def HOOK_on_session_has_terminated(self, session_uuid='UNKNOWN', profile_name='UNKNOWN', session_name='UNKNOWN'):
@@ -1017,12 +1019,12 @@ class X2goClient(object):
### Provide access to the X2goClient's session registry
###
- def client_connected_sessions(self, return_objects=False, return_profile_names=False):
+ def client_connected_sessions(self, return_objects=False, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.connected_sessions(return_objects=return_objects, return_profile_names=return_profile_names)
+ return self.session_registry.connected_sessions(return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
__client_connected_sessions = client_connected_sessions
@property
@@ -1034,12 +1036,12 @@ class X2goClient(object):
return self.session_registry.has_connected_sessions
__client_has_connected_sessions = client_has_connected_sessions
- def client_associated_sessions(self, return_objects=False, return_profile_names=False):
+ def client_associated_sessions(self, return_objects=False, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.associated_sessions(return_objects=return_objects, return_profile_names=return_profile_names)
+ return self.session_registry.associated_sessions(return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
__client_associated_sessions = client_associated_sessions
@property
@@ -1051,12 +1053,12 @@ class X2goClient(object):
return self.session_registry.has_associated_sessions
__client_has_associated_sessions = client_has_associated_sessions
- def client_running_sessions(self, return_objects=False, return_profile_names=False):
+ def client_running_sessions(self, return_objects=False, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.running_sessions(return_objects=return_objects, return_profile_names=return_profile_names)
+ return self.session_registry.running_sessions(return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
__client_running_sessions = client_running_sessions
@property
@@ -1068,12 +1070,12 @@ class X2goClient(object):
return self.session_registry.has_running_sessions
__client_has_running_sessions = client_has_running_sessions
- def client_suspended_sessions(self, return_objects=False, return_profile_names=False):
+ def client_suspended_sessions(self, return_objects=False, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.running_sessions(return_objects=return_objects, return_profile_names=return_profile_names)
+ return self.session_registry.running_sessions(return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
__client_suspended_sessions = client_suspended_sessions
@property
@@ -1086,12 +1088,12 @@ class X2goClient(object):
__client_has_suspended_sessions = client_has_suspended_sessions
@property
- def client_registered_sessions(self, return_objects=True, return_profile_names=False):
+ def client_registered_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.registered_sessions(return_objects=return_objects, return_profile_names=return_profile_names)
+ return self.session_registry.registered_sessions(return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
__client_registered_sessions = client_registered_sessions
@property
@@ -1127,28 +1129,28 @@ class X2goClient(object):
return self.client_registered_session_of_name(session_name) is not None
__client_has_registered_session_of_name = client_registered_session_of_name
- def client_registered_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def client_registered_sessions_of_profile_name(self, profile_name, return_objects=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.registered_sessions_of_profile_name(profile_name, return_objects=return_objects)
+ return self.session_registry.registered_sessions_of_profile_name(profile_name, return_objects=return_objects, return_session_names=return_session_names)
__client_registered_sessions_of_profile_name = client_registered_sessions_of_profile_name
- def client_connected_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def client_connected_sessions_of_profile_name(self, profile_name, return_objects=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.connected_sessions_of_profile_name(profile_name, return_objects=return_objects)
+ return self.session_registry.connected_sessions_of_profile_name(profile_name, return_objects=return_objects, return_session_names=return_session_names)
__client_connected_sessions_of_profile_name = client_connected_sessions_of_profile_name
- def client_associated_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def client_associated_sessions_of_profile_name(self, profile_name, return_objects=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self.session_registry.associated_sessions_of_profile_name(profile_name, return_objects=return_objects)
+ return self.session_registry.associated_sessions_of_profile_name(profile_name, return_objects=return_objects, return_session_names=return_session_names)
__client_associated_sessions_of_profile_name = client_associated_sessions_of_profile_name
###
@@ -1273,7 +1275,8 @@ class X2goClient(object):
profile_name=None, profile_id=None,
no_cache=False, refresh_cache=False,
update_sessionregistry=True,
- register_sessions=False):
+ register_sessions=False,
+ raw=False):
"""\
Use the X2go session registered under C{session_uuid} to
retrieve a list of running or suspended X2go sessions on the
@@ -1306,6 +1309,9 @@ class X2goClient(object):
else:
raise x2go_exceptions.X2goClientException('must either specify session UUID or profile name')
+ if raw:
+ return self.session_registry(session_uuid).list_sessions(raw=raw)
+
if not self.use_listsessions_cache or no_cache:
_session_list = self.session_registry(session_uuid).list_sessions()
elif refresh_cache:
@@ -1473,7 +1479,7 @@ class X2goClient(object):
STILL UNDOCUMENTED
"""
- session_uuids = self.client_registered_sessions_of_profile_name(profile_name)
+ session_uuids = self.client_registered_sessions_of_profile_name(profile_name, return_objects=False)
if session_uuids:
if session_list is None:
session_list = self.list_sessions(session_uuids[0],
diff --git a/x2go/registry.py b/x2go/registry.py
index 0f7ace3..b028f7b 100644
--- a/x2go/registry.py
+++ b/x2go/registry.py
@@ -179,7 +179,10 @@ class X2goSessionRegistry(object):
# as a new session
self.client_instance.HOOK_on_session_has_started_by_me(session_uuid=_session_uuid, profile_name=_profile_name, session_name=_session_name)
else:
- if _last_status['suspended']:
+ if not _last_status['connected']:
+ # from a suspended state
+ self.client_instance.HOOK_on_found_session_running_after_connect(session_uuid=_session_uuid, profile_name=_profile_name, session_name=_session_name)
+ elif _last_status['suspended']:
# from a suspended state
self.client_instance.HOOK_on_session_has_resumed_by_other(session_uuid=_session_uuid, profile_name=_profile_name, session_name=_session_name)
else:
@@ -240,11 +243,12 @@ class X2goSessionRegistry(object):
# this if clause catches problems when x2golistsessions commands give weird results
if not self.has_session_of_session_name(session_name):
- self.register(server, profile_id, profile_name,
- session_name=session_name,
- virgin=False, running=False, suspended=True, terminated=None,
- **kwargs
- )
+ session_uuid = self.register(server, profile_id, profile_name,
+ session_name=session_name,
+ virgin=False, running=False, suspended=True, terminated=None,
+ **kwargs
+ )
+ self(session_uuid).connected = True
self.update_status(profile_name=profile_name, session_list=session_list)
def register(self, server, profile_id, profile_name,
@@ -291,6 +295,7 @@ class X2goSessionRegistry(object):
except: pass
self(session_uuid).update_params(_params)
+
self.logger('using already initially-registered yet-unused session %s' % session_uuid, log.loglevel_NOTICE)
return session_uuid
@@ -373,9 +378,11 @@ 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, return_profile_ids=False):
+ def _sessionsWithState(self, state, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
if state == 'associated':
sessions = [ ts for ts in self.registry.values() if ts.has_terminal_session() ]
+ elif state == 'registered':
+ sessions = [ ts for ts in self.registry.values() ]
else:
sessions = [ ts for ts in self.registry.values() if eval('ts.%s' % state) ]
if return_profile_names:
@@ -390,52 +397,58 @@ class X2goSessionRegistry(object):
if session.profile_id not in profile_ids:
profile_ids.append(session.profile_id)
return profile_ids
+ elif return_session_names:
+ session_names = []
+ for session in sessions:
+ if session.session_name not in session_names:
+ session_names.append(session.session_name)
+ return session_names
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, return_profile_ids=False):
+ def connected_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self._sessionsWithState('connected', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
+ return self._sessionsWithState('connected', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
- def associated_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
+ def associated_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self._sessionsWithState('associated', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
+ return self._sessionsWithState('associated', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
- def virgin_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
+ def virgin_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self._sessionsWithState('virgin', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
+ return self._sessionsWithState('virgin', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
- def running_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
+ def running_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self._sessionsWithState('running', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
+ return self._sessionsWithState('running', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
- def suspended_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
+ def suspended_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self._sessionsWithState('suspended', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
+ return self._sessionsWithState('suspended', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
- def terminated_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False):
+ def terminated_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- return self._sessionsWithState('terminated', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids)
+ return self._sessionsWithState('terminated', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
@property
def has_running_sessions(self):
@@ -453,21 +466,12 @@ class X2goSessionRegistry(object):
"""
return self.suspended_sessions and len(self.suspended_sessions) > 0
- def registered_sessions(self, return_objects=True, return_profile_names=False):
+ def registered_sessions(self, return_objects=True, return_profile_names=False, return_profile_ids=False, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
- if return_objects:
- return self.registry.values()
- elif return_profile_names:
- profile_names = []
- for session in self.registry.values():
- if session.profile_name not in profile_names:
- profile_names.append(profile_name)
- return profile_names
- else:
- return self.registry.keys()
+ return self._sessionsWithState('registered', return_objects=return_objects, return_profile_names=return_profile_names, return_profile_ids=return_profile_ids, return_session_names=return_session_names)
@property
def non_running_sessions(self):
@@ -477,27 +481,31 @@ class X2goSessionRegistry(object):
"""
return [ s for s in self.registry.values() if s not in self.running_sessions() ]
- def connected_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def connected_sessions_of_profile_name(self, profile_name, return_objects=True, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
if return_objects:
return self.connected_sessions() and [ s for s in self.connected_sessions() if s.profile_name == profile_name ]
+ elif return_session_names:
+ return self.connected_sessions() and [ s.session_name for s in self.connected_sessions() if s.profile_name == profile_name ]
else:
return self.connected_sessions() and [ s.get_uuid() for s in self.connected_sessions() if s.profile_name == profile_name ]
- def associated_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def associated_sessions_of_profile_name(self, profile_name, return_objects=True, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
if return_objects:
return self.associated_sessions() and [ s for s in self.associated_sessions() if s.profile_name == profile_name ]
+ elif return_session_names:
+ return self.associated_sessions() and [ s.session_name for s in self.associated_sessions() if s.profile_name == profile_name ]
else:
return self.associated_sessions() and [ s.get_uuid() for s in self.associated_sessions() if s.profile_name == profile_name ]
- def registered_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def registered_sessions_of_profile_name(self, profile_name, return_objects=True, return_session_names=False):
"""\
STILL UNDOCUMENTED
@@ -505,34 +513,42 @@ class X2goSessionRegistry(object):
if return_objects:
return self.registered_sessions() and [ s for s in self.registered_sessions() if s.profile_name == profile_name ]
+ elif return_session_names:
+ return self.registered_sessions() and [ s.session_name for s in self.registered_sessions() if s.profile_name == profile_name ]
else:
return self.registered_sessions() and [ s.get_uuid() for s in self.registered_sessions() if s.profile_name == profile_name ]
- def virgin_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def virgin_sessions_of_profile_name(self, profile_name, return_objects=True, return_session_names=False):
if return_objects:
return self.virgin_sessions() and [ s for s in self.virgin_sessions() if s.profile_name == profile_name ]
+ elif return_session_names:
+ return self.virgin_sessions() and [ s.session_name for s in self.virgin_sessions() if s.profile_name == profile_name ]
else:
return self.virgin_sessions() and [ s.get_uuid() for s in self.virgin_sessions() if s.profile_name == profile_name ]
- def running_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def running_sessions_of_profile_name(self, profile_name, return_objects=True, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
if return_objects:
return self.running_sessions() and [ s for s in self.running_sessions() if s.profile_name == profile_name ]
+ elif return_session_names:
+ return self.running_sessions() and [ s.session_name for s in self.running_sessions() if s.profile_name == profile_name ]
else:
return self.running_sessions() and [ s.get_uuid() for s in self.running_sessions() if s.profile_name == profile_name ]
- def suspended_sessions_of_profile_name(self, profile_name, return_objects=False):
+ def suspended_sessions_of_profile_name(self, profile_name, return_objects=True, return_session_names=False):
"""\
STILL UNDOCUMENTED
"""
if return_objects:
return self.suspended_sessions() and [ s for s in self.suspended_sessions() if s.profile_name == profile_name ]
+ elif return_session_names:
+ return self.suspended_sessions() and [ s.session_name for s in self.suspended_sessions() if s.profile_name == profile_name ]
else:
return self.suspended_sessions() and [ s.get_uuid() for s in self.suspended_sessions() if s.profile_name == profile_name ]
diff --git a/x2go/session.py b/x2go/session.py
index d54de5c..2f2ea79 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -484,14 +484,14 @@ class X2goSession(object):
self._X2goSession__disconnect()
__clean_sessions = clean_sessions
- def list_sessions(self):
+ def list_sessions(self, raw=False):
"""\
STILL UNDOCUMENTED
"""
if not self.is_alive():
self._X2goSession__disconnect()
- return self.control_session.list_sessions()
+ return self.control_session.list_sessions(raw=raw)
__list_sessions = list_sessions
def update_status(self, session_list=None):
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