[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 0.2.0.10-74-g2067913
X2Go dev team
git-admin at x2go.org
Wed Jan 8 15:31:22 CET 2014
The branch, build-baikal has been updated
via 20679137ce0388c27829cd4948afd33414abe494 (commit)
from da000f3c040a8217ebdfc10e6d25065a1b887810 (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/session.py | 118 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 101 insertions(+), 17 deletions(-)
The diff of changes is:
diff --git a/x2go/session.py b/x2go/session.py
index 678b222..964c26d 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -1703,7 +1703,36 @@ class X2goSession(object):
"""
self._lock.acquire()
+ try:
+ _retval = self._resume(session_name=session_name, session_list=session_list, cmd=cmd, progress_event=progress_event)
+ except:
+ raise
+ finally:
+ self._lock.release()
+ return _retval
+
+ def _resume(self, session_name=None, session_list=None, cmd=None, progress_event=None):
+ """\
+ Resume or continue a suspended / running X2Go session on the
+ remote X2Go server.
+
+ @param session_name: the server-side name of an X2Go session
+ @type session_name: C{str}
+ @param session_list: a session list to avoid a server-side session list query
+ @type session_list: C{dict}
+ @param cmd: if starting a new session, manually hand over the command to be launched in
+ the new session
+ @type cmd: C{str}
+ @param progress_event: a C{thread.Event} object that notifies a status object like the one in
+ L{utils.ProgressStatus}.
+ @type progress_event: C{obj}
+
+ @return: returns C{True} if resuming the session has been successful, C{False} otherwise
+ @rtype: C{bool}
+ @raise Exception: any exception that occurs during published application menu retrieval is passed through
+
+ """
# initialize a dummy event to avoid many if clauses further down in the code
self.reset_progress_status()
_dummy_event = threading.Event()
@@ -1738,9 +1767,7 @@ class X2goSession(object):
if self.is_running():
try:
- self._lock.release()
self.suspend()
- self._lock.acquire()
self._progress_status = 10
progress_event.set()
@@ -1764,7 +1791,6 @@ class X2goSession(object):
self._progress_status = -1
progress_event.set()
- self._lock.release()
raise
if cmd is not None:
@@ -1789,7 +1815,6 @@ class X2goSession(object):
self._progress_status = -1
progress_event.set()
- self._lock.release()
return False
self._progress_status = 30
@@ -1875,7 +1900,6 @@ class X2goSession(object):
progress_event.set()
self.has_terminal_session() and self.terminal_session.session_info_unprotect()
- self._lock.release()
return True
else:
@@ -1884,7 +1908,6 @@ class X2goSession(object):
self._progress_status = -1
progress_event.set()
- self._lock.release()
return False
else:
@@ -1893,7 +1916,6 @@ class X2goSession(object):
progress_event.set()
self._X2goSession__disconnect()
- self._lock.release()
return False
__resume = resume
@@ -1946,7 +1968,43 @@ class X2goSession(object):
"""
self._lock.acquire()
+ try:
+ _retval = self._share_desktop(desktop=desktop, user=user, display=display, share_mode=share_mode, check_desktop_list=check_desktop_list, progress_event=progress_event)
+ except:
+ raise
+ finally:
+ self._lock.release()
+ return _retval
+
+ def _share_desktop(self, desktop=None, user=None, display=None, share_mode=0, check_desktop_list=True, progress_event=None):
+ """\
+ Share an already running X2Go session on the remote X2Go server locally. The shared session may be either
+ owned by the same user or by a user that grants access to his/her desktop session by the local user.
+
+ @param desktop: desktop ID of a sharable desktop in format <user>@<display>
+ @type desktop: C{str}
+ @param user: user name and display number can be given separately, here give the
+ name of the user who wants to share a session with you.
+ @type user: C{str}
+ @param display: user name and display number can be given separately, here give the
+ number of the display that a user allows you to be shared with.
+ @type display: C{str}
+ @param share_mode: desktop sharing mode, 0 is VIEW-ONLY, 1 is FULL-ACCESS.
+ @type share_mode: C{int}
+ @param check_desktop_list: check if the given desktop is available on the X2Go server; handle with care as
+ the server-side C{x2golistdesktops} command might block client I/O.
+ @type check_desktop_list: C{bool}
+ @param progress_event: a C{thread.Event} object that notifies a status object like the one in
+ L{utils.ProgressStatus}.
+ @type progress_event: C{obj}
+
+ @return: returns C{True} if starting the session has been successful, C{False} otherwise
+ @rtype: C{bool}
+ @raise X2goDesktopSharingException: if the given desktop ID is not an available desktop session on the remote server
+ @raise X2goSessionException: if the available desktop session appears to be dead, in fact
+
+ """
# initialize a dummy event to avoid many if clauses further down in the code
self.reset_progress_status()
_dummy_event = threading.Event()
@@ -2015,7 +2073,6 @@ class X2goSession(object):
self._progress_status = 100
progress_event.set()
- self._lock.release()
return self.running
else:
self.terminal_session = None
@@ -2030,7 +2087,6 @@ class X2goSession(object):
self._X2goSession__disconnect()
- self._lock.release()
return False
__share_desktop = share_desktop
@@ -2045,6 +2101,24 @@ class X2goSession(object):
"""
self._lock.acquire()
+ try:
+ _retval = self._suspend()
+ except:
+ raise
+ finally:
+ self._lock.release()
+ return _retval
+
+ def _suspend(self):
+ """\
+ Suspend this X2Go session.
+
+ @return: returns C{True} if suspending the session has been successful, C{False} otherwise
+ @rtype: C{bool}
+
+ @raise X2goSessionException: if the session could not be suspended
+
+ """
if self.is_alive():
if self.has_terminal_session():
@@ -2064,7 +2138,6 @@ class X2goSession(object):
self.session_cleanup()
del self.terminal_session
self.terminal_session = None
- self._lock.release()
return True
elif self.has_control_session() and self.session_name:
@@ -2076,17 +2149,14 @@ class X2goSession(object):
self.faulty = False
self.active = False
self.session_cleanup()
- self._lock.release()
return True
else:
- self._lock.release()
raise x2go_exceptions.X2goSessionException('cannot suspend session')
else:
self._X2goSession__disconnect()
- self._lock.release()
return False
__suspend = suspend
@@ -2101,6 +2171,24 @@ class X2goSession(object):
"""
self._lock.acquire()
+ try:
+ _retval = self._terminate()
+ except:
+ raise
+ finally:
+ self._lock.release()
+ return _retval
+
+ def _terminate(self):
+ """\
+ Terminate this X2Go session.
+
+ @return: returns C{True} if terminating the session has been successful, C{False} otherwise
+ @rtype: C{bool}
+
+ @raise X2goSessionException: if the session could not be terminated
+
+ """
if self.is_alive():
if self.has_terminal_session():
@@ -2119,7 +2207,6 @@ class X2goSession(object):
self.session_cleanup()
del self.terminal_session
self.terminal_session = None
- self._lock.release()
return True
elif self.has_control_session() and self.session_name:
@@ -2131,16 +2218,13 @@ class X2goSession(object):
self.faulty = False
self.active = False
self.session_cleanup()
- self._lock.release()
return True
else:
- self._lock.release()
raise x2go_exceptions.X2goSessionException('cannot terminate session')
else:
self._X2goSession__disconnect()
- self._lock.release()
return False
__terminate = terminate
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