This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to annotated tag 0.1.4.2
in repository x2goclient.

commit 3e307a9bfbb2f945dcb8c887b122cd8bb9087b4b
Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de>
Date:   Wed Aug 17 02:03:22 2011 +0200

    Multiple achievements with this commit...
    
    1. Translate cmd line options into python-x2go options
    2. Allow ,,ALL'' as session name when suspending -> will suspend all 
sessions of the connecting user.
    3. Allow ,,ALL'' as session name when terminating -> will terminate all 
sessions of the connecting user.
    4. Allow ,,NEWEST'' and ,,OLDEST'' as session name when resuming (closes 
upstream issue #86).
---
 debian/changelog       |  8 ++++-
 pyhoca-cli             |  4 +--
 pyhoca/cli/frontend.py | 87 +++++++++++++++++++++++++++++++++++++++++++-------
 3 files changed, 84 insertions(+), 15 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index d4cdc19b..981b6c5c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,13 @@
 pyhoca-cli (0.1.4.2-0~x2go1) UNRELEASED; urgency=low
 
   * New upstream version (0.1.4.2):
-    - nothing yet
+    - Translate cmd line options into python-x2go options
+    - Allow ,,ALL'' as session name when suspending -> will suspend
+      all sessions of the connecting user.
+    - Allow ,,ALL'' as session name when terminating -> will terminate
+      all sessions of the connecting user.
+    - Allow ,,NEWEST'' and ,,OLDEST'' as session name when resuming (closes
+      upstream issue #86).
 
  -- Mike Gabriel <mike.gabr...@das-netzwerkteam.de>  Wed, 06 Jul 2011 22:18:01 
+0200
 
diff --git a/pyhoca-cli b/pyhoca-cli
index 34fb2977..71f75916 100755
--- a/pyhoca-cli
+++ b/pyhoca-cli
@@ -220,9 +220,9 @@ Possible values for the --pack NX option are:
 
     if not (a.session_profile or a.list_profiles):
 
-        # the --server options is required for most operations
+        # the --server (or --session-profile) option is required for most 
operations
         if not a.server:
-            runtime_error ("argument --server is required", parser=p, 
exitcode=1)
+            runtime_error ("argument --server (or --session-profile) is 
required", parser=p, exitcode=1)
 
         # check for mutual exclusiveness of -N, -R, -S, -T and -L, -N is 
default if none of them is set
         if bool(a.new) + bool(a.resume) + bool(a.share_desktop) + 
bool(a.suspend) + bool(a.terminate) + bool(a.list_sessions) + 
bool(a.list_desktops) + bool(a.list_profiles)> 1:
diff --git a/pyhoca/cli/frontend.py b/pyhoca/cli/frontend.py
index 8931e3de..82487d47 100644
--- a/pyhoca/cli/frontend.py
+++ b/pyhoca/cli/frontend.py
@@ -166,6 +166,24 @@ class PyHocaCLI(x2go.X2goClient):
             self.logger('command from session profile to run is: %s' % 
self.session_registry(self.x2go_session_hash).get_session_cmd(), 
loglevel=x2go.loglevel_DEBUG, )
         self._X2goClient__start_session(s_hash)
 
+    def _auto_resume_newest(self, s_hash):
+        session_infos = self._X2goClient__list_sessions(s_hash)
+        if session_infos:
+            newest_session_name = 
x2go.utils.session_names_by_timestamp(session_infos)[-1]
+            self._pyhoca_logger("Resuming newest X2go session %s..." % 
newest_session_name, loglevel=x2go.loglevel_NOTICE, )
+            self._X2goClient__resume_session(s_hash, newest_session_name)
+            return True
+        return False
+
+    def _auto_resume_oldest(self, s_hash):
+        session_infos = self._X2goClient__list_sessions(s_hash)
+        if session_infos:
+            oldest_session_name = 
x2go.utils.session_names_by_timestamp(session_infos)[0]
+            self._pyhoca_logger("Resuming oldest X2go session %s..." % 
oldest_session_name, loglevel=x2go.loglevel_NOTICE, )
+            self._X2goClient__resume_session(s_hash, oldest_session_name)
+            return True
+        return False
+
     def resume_session(self, s_hash):
         """\
         STILL UNDOCUMENTED
@@ -173,7 +191,11 @@ class PyHocaCLI(x2go.X2goClient):
         # resume a running session
         self.logger('resuming X2go session: %s' % self.args.resume, 
loglevel=x2go.loglevel_INFO, )
         available_sessions = self._X2goClient__list_sessions(s_hash)
-        if self.args.resume in available_sessions.keys():
+        if available_sessions and self.args.resume == 'OLDEST':
+            self._auto_resume_oldest(s_hash)
+        elif available_sessions and self.args.resume == 'NEWEST':
+            self._auto_resume_newest(s_hash)
+        elif self.args.resume in available_sessions.keys():
             self._X2goClient__resume_session(s_hash, self.args.resume)
         else:
             self._runtime_error('requested session not available on X2go 
server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=20)
@@ -199,26 +221,54 @@ class PyHocaCLI(x2go.X2goClient):
         # send a suspend request to a session
         self.logger('requesting X2go session suspend of session: %s' % 
self.args.suspend, loglevel=x2go.loglevel_INFO, )
         available_sessions = self._X2goClient__list_sessions(s_hash)
-        if self.args.suspend in available_sessions.keys():
-            self._X2goClient__suspend_session(s_hash, self.args.suspend)
+
+        if self.args.suspend == "ALL":
+            _session_names = available_sessions
         else:
-            self._runtime_error('requested session not available on X2go 
server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=21)
+            _session_names = [ self.args.suspend ]
+
+        for _session_name in _session_names:
+            if _session_name in available_sessions.keys():
+                self._X2goClient__suspend_session(s_hash, _session_name)
+                self._pyhoca_logger("X2go session %s has been suspended" % 
_session_name, loglevel=x2go.loglevel_NOTICE, )
+            else:
+                _server = self.args.server
+                _remote_ssh_port = self.args.remote_ssh_port
+                if not self.args.server and self.args.session_profile:
+                    _server = 
self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile),
 'host')
+                    _remote_ssh_port = 
self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile),
 'sshport')
+                self._runtime_error('session %s not available on X2go server 
[%s]:%s' % (_session_name, _server, _remote_ssh_port), exitcode=21)
 
     def terminate_session(self, s_hash):
         """\
         STILL UNDOCUMENTED
+
         """
         # send a terminate request to a session
         self.logger('requesting X2go session terminate of session: %s' % 
self.args.terminate, loglevel=x2go.loglevel_INFO, )
         available_sessions = self._X2goClient__list_sessions(s_hash)
-        if self.args.terminate in available_sessions.keys():
-            self._X2goClient__terminate_session(s_hash, self.args.terminate)
+
+        if self.args.terminate == "ALL":
+            _session_names = available_sessions
         else:
-            self._runtime_error('requested session not available on X2go 
server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=22)
+            _session_names = [ self.args.terminate ]
+
+        for _session_name in _session_names:
+            if _session_name in available_sessions.keys():
+                self._X2goClient__terminate_session(s_hash, _session_name)
+                self._pyhoca_logger("X2go session %s has been terminated" % 
_session_name, loglevel=x2go.loglevel_NOTICE, )
+            else:
+                _server = self.args.server
+                _remote_ssh_port = self.args.remote_ssh_port
+                if not self.args.server and self.args.session_profile:
+                    _server = 
self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile),
 'host')
+                    _remote_ssh_port = 
self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile),
 'sshport')
+                self._runtime_error('session %s not available on X2go server 
[%s]:%s' % (_session_name, _server, _remote_ssh_port), exitcode=22)
 
     def __init__(self, args, logger=None, liblogger=None):
         """\
         STILL UNDOCUMENTED
+
         """
         self.args = args
         if logger is None:
@@ -238,12 +288,25 @@ class PyHocaCLI(x2go.X2goClient):
 
         if self.args.session_profile:
 
+            _cmdlineopt_to_sessionopt = {
+                'command': 'cmd',
+                'kb_layout': 'kblayout',
+                'kb_type': 'kbtype',
+                'sound': 'snd_system',
+                'ssh_privkey': 'key_filename',
+                'server': 'hostname',
+                'remote_ssh_port': 'port',
+            }
+
             # override session profile options by option values from the arg 
parser
             kwargs={}
             if hasattr(self.args, 'parser'):
                 for a, v in self.args._get_kwargs():
                     if v != self.args.parser.get_default(a):
-                        kwargs[a] = v
+                        try:
+                            kwargs[_cmdlineopt_to_sessionopt[a]] = v
+                        except KeyError:
+                            kwargs[a] = v
 
             # setup up the session profile based X2go session
             self.x2go_session_hash = 
self._X2goClient__register_session(profile_name=self.args.session_profile,
@@ -359,14 +422,13 @@ class PyHocaCLI(x2go.X2goClient):
             elif self.args.new:
                 self.new_session(self.x2go_session_hash)
 
-            # finally call the MainLoop of PyHocaCLI
             if not (self.args.new or self.args.resume or 
self.args.share_desktop or self.args.session_profile):
                 sys.exit(0)
 
-            # give the session some time to come up...
-            # no CTRL-C is allowed during this phase...
+            if self.args.resume or self.args.new:
+                self._pyhoca_logger("give the X2go session some time to come 
up...", loglevel=x2go.loglevel_NOTICE, )
+
             i=0
-            self._pyhoca_logger("give the X2go session some time to come 
up...", loglevel=x2go.loglevel_NOTICE, )
             while i < self.args.time_to_wait:
                 time.sleep(1)
                 i+=1
@@ -381,6 +443,7 @@ class PyHocaCLI(x2go.X2goClient):
                     self._pyhoca_logger("Press CTRL+C to end desktop sharing 
for this session...", loglevel=x2go.loglevel_NOTICE, )
                 else:
                     self._pyhoca_logger("Press CTRL+C to suspend the running 
session...", loglevel=x2go.loglevel_NOTICE, )
+
                 try:
 
                     session_duration = 0

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on 
/srv/git/code.x2go.org/x2goclient.git
_______________________________________________
x2go-commits mailing list
x2go-commits@lists.x2go.org
https://lists.x2go.org/listinfo/x2go-commits

Reply via email to