[X2Go-Commits] [python-x2go] 01/01: Handle duplicate profile names gracefully (i.e. append a " (1)", " (2)", ... to the session profile name). (Fixes: #500).

git-admin at x2go.org git-admin at x2go.org
Wed Sep 10 12:04:26 CEST 2014


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

x2go pushed a commit to branch master
in repository python-x2go.

commit 7cb2ca7325a2d46142d6a0e380ad89f164792307
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Wed Sep 10 12:04:15 2014 +0200

    Handle duplicate profile names gracefully (i.e. append a " (1)", " (2)", ... to the session profile name). (Fixes: #500).
---
 debian/changelog               |    2 ++
 x2go/backends/profiles/base.py |   21 +++++++++++++++++++--
 x2go/backends/profiles/file.py |    8 +++++++-
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index e437449..c8be003 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -90,6 +90,8 @@ python-x2go (0.5.0.0-0x2go1) UNRELEASED; urgency=low
     - Clean up terminal sessions properly when the clean_sessions() method
       of the control session has got called.
     - Don't use compression on  TeKi sshfs mounts.
+    - Handle duplicate profile names gracefully (i.e. append a " (1)",
+      " (2)", ... to the session profile name). (Fixes: #500).
   * debian/control:
     + Add dependencies: python-requests, python-simplejson.
   * python-x2go.spec:
diff --git a/x2go/backends/profiles/base.py b/x2go/backends/profiles/base.py
index c19571f..2855d09 100644
--- a/x2go/backends/profiles/base.py
+++ b/x2go/backends/profiles/base.py
@@ -124,6 +124,24 @@ class X2GoSessionProfiles():
         """
         self.session_profiles = self. _populate_session_profiles()
 
+        # scan for duplicate profile names and handle them...
+        scan_profile_names = {}
+        for profile_id in self.session_profiles.keys():
+            profile_name = self.to_profile_name(profile_id)
+            if profile_name not in scan_profile_names.keys():
+                scan_profile_names[profile_name] = [profile_id]
+            else:
+                scan_profile_names[profile_name].append(profile_id)
+        _duplicates = {}
+        for profile_name in scan_profile_names.keys():
+            if len(scan_profile_names[profile_name]) > 1:
+                _duplicates[profile_name] = scan_profile_names[profile_name]
+        for profile_name in _duplicates.keys():
+            i = 1
+            for profile_id in _duplicates[profile_name]:
+                self.update_value(None, 'name', '{name} ({i})'.format(name=profile_name, i=i), profile_id=profile_id)
+                i += 1
+
     def _populate_session_profiles(self):
         """\
         Inherit from this class and provide the backend specific way of loading /
@@ -558,10 +576,9 @@ class X2GoSessionProfiles():
                 raise X2GoProfileException('profile name for profile id %s must not be empty' % profile_id)
             else:
                 if profile_name != current_profile_name:
-                    try: del self._cached_profile_ids[profile_id]
-                    except KeyError: pass
                     if profile_name in self.profile_names:
                         raise X2GoProfileException('a profile of name ,,%s\'\' already exists' % profile_name)
+                    self._cached_profile_ids[profile_id] = profile_name
 
         if option == 'export' and type(value) == types.DictType:
             _strvalue = '"'
diff --git a/x2go/backends/profiles/file.py b/x2go/backends/profiles/file.py
index 39e7da1..913267d 100644
--- a/x2go/backends/profiles/file.py
+++ b/x2go/backends/profiles/file.py
@@ -85,13 +85,16 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles, inifiles.X2GoIniFile):
 
         """
         session_profiles = [ p for p in self.iniConfig.sections() if p not in self._non_profile_sections and p != 'none' ]
+        _session_profiles_dict = {}
         for session_profile in session_profiles:
             for key, default_value in self.defaultSessionProfile.iteritems():
                 if not self.iniConfig.has_option(session_profile, key):
                     self._storeValue(session_profile, key, default_value)
             # update cached meta type session profile information
             self.get_profile_metatype(session_profile)
-        return session_profiles
+            _session_profiles_dict[session_profile] = self.get_profile_config(session_profile)
+
+        return _session_profiles_dict
 
     def _is_mutable(self, profile_id):
         return True
@@ -105,11 +108,14 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles, inifiles.X2GoIniFile):
 
     def _delete_profile(self, profile_id):
         self.iniConfig.remove_section(profile_id)
+        try: del self.session_profiles[profile_id]
+        except KeyError: pass
 
     def _update_value(self, profile_id, option, value):
         if option == 'host':
             value = ','.join(value)
         self._X2GoIniFile__update_value(profile_id, option, value)
+        self.session_profiles[profile_id][option] = value
 
     def _get_profile_parameter(self, profile_id, option, key_type):
         return self.get(profile_id, option, key_type)

--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/python-x2go.git


More information about the x2go-commits mailing list