[X2go-Commits] pyhoca-cli.git - master (branch) updated: 0.1.4.1-4-g3e307a9

X2go dev team git-admin at x2go.org
Wed Aug 17 02:02:06 CEST 2011


The branch, master has been updated
       via  3e307a9bfbb2f945dcb8c887b122cd8bb9087b4b (commit)
      from  cde819a720c1ae037c56e2b2f81d0c19a86ca244 (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 -----------------------------------------------------------------
commit 3e307a9bfbb2f945dcb8c887b122cd8bb9087b4b
Author: Mike Gabriel <mike.gabriel at 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).

-----------------------------------------------------------------------

Summary of changes:
 debian/changelog       |    8 ++++-
 pyhoca-cli             |    4 +-
 pyhoca/cli/frontend.py |   87 +++++++++++++++++++++++++++++++++++++++++-------
 3 files changed, 84 insertions(+), 15 deletions(-)

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index d4cdc19..981b6c5 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.gabriel at das-netzwerkteam.de>  Wed, 06 Jul 2011 22:18:01 +0200
 
diff --git a/pyhoca-cli b/pyhoca-cli
index 34fb297..71f7591 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 8931e3d..82487d4 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


hooks/post-receive
-- 
pyhoca-cli.git (Python X2go Client (command line client))

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 "pyhoca-cli.git" (Python X2go Client (command line client)).




More information about the x2go-commits mailing list