[X2Go-Commits] [python-x2go] 01/01: Speed-optimize session profile ID <-> name mapping.

git-admin at x2go.org git-admin at x2go.org
Thu Mar 20 00:43:38 CET 2014


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

x2go pushed a commit to annotated tag CVix/1.99.3
in repository python-x2go.

commit 66cecf3095c26e005ad6b0608b1c1ff280b1a4d0
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Wed Mar 19 15:26:37 2014 +0100

    Speed-optimize session profile ID <-> name mapping.
---
 debian/changelog               |    1 +
 x2go/backends/profiles/base.py |   45 +++++++++++++++++++++++-----------------
 2 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 4052101..d2bb58a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -12,6 +12,7 @@ python-x2go (0.5.0.0-0x2go1) UNRELEASED; urgency=low
     - Provide session profile backend for a http broker.
     - Make session profile backends more unicode robust.
     - X2GoSessionProfile.get_server_hostname must return unicode objects.
+    - Speed-optimize session profile ID <-> name mapping.
   * 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 002124d..3aff841 100644
--- a/x2go/backends/profiles/base.py
+++ b/x2go/backends/profiles/base.py
@@ -60,8 +60,8 @@ class X2GoSessionProfiles():
         """
         self.defaultValues = {}
         self._profile_metatypes = {}
-        self._cached_profile_ids = []
-        self._cached_profile_names = []
+        self._cached_profile_ids = {}
+        self.__useexports = {}
         self._profiles_need_profile_id_renewal = []
         self.write_user_config = False
 
@@ -257,12 +257,11 @@ class X2GoSessionProfiles():
 
             self._delete_profile(profile_id)
 
-            try: self._cached_profile_ids.remove(profile_id)
+            try: del self._cached_profile_ids[profile_id]
             except ValueError: pass
             self.add_profile(profile_id=None, force_add=True, **_config)
         self._profiles_need_profile_id_renewal = []
-        self._cached_profile_ids = []
-        self._cached_profile_names = []
+        self._cached_profile_ids = {}
 
         return self._write()
 
@@ -307,7 +306,11 @@ class X2GoSessionProfiles():
         """
         _profile_id = profile_id or self.check_profile_id_or_name(profile_id_or_name)
         _profile_config = {}
-        for option in self._get_profile_options(_profile_id):
+        if parameter is None:
+            parameters = self._get_profile_options(_profile_id)
+        else:
+            parameters = [parameter]
+        for option in parameters:
             value = self._get_profile_parameter(_profile_id, option, key_type=self.get_profile_option_type(option))
 
             if option == 'export':
@@ -362,6 +365,11 @@ class X2GoSessionProfiles():
         except X2GoProfileException:
             return False
 
+    def _update_profile_ids_cache(self):
+        for p in self._get_profile_ids():
+            if p not in self._non_profile_sections:
+                self._cached_profile_ids[p] = self.to_profile_name(p)
+
     @property
     def profile_ids(self):
         """\
@@ -369,8 +377,8 @@ class X2GoSessionProfiles():
 
         """
         if not self._cached_profile_ids:
-            self._cached_profile_ids = [ s for s in self._get_profile_ids() if s not in self._non_profile_sections ]
-        return self._cached_profile_ids
+            self._update_profile_ids_cache()
+        return self._cached_profile_ids.keys()
 
     def _get_profile_ids(self):
         """\
@@ -402,9 +410,9 @@ class X2GoSessionProfiles():
         Render a list of all profile names found in the session profiles configuration.
 
         """
-        if not self._cached_profile_names:
-            self._cached_profile_names = [ self.to_profile_name(p) for p in self.profile_ids ]
-        return  self._cached_profile_names
+        if not self._cached_profile_ids:
+            self._update_profile_ids_cache()
+        return  self._cached_profile_ids.values()
 
     def has_profile_name(self, profile_name):
         """\
@@ -430,7 +438,7 @@ class X2GoSessionProfiles():
         @rtype: C{str}
 
         """
-        _profile_ids = [ p for p in self.profile_ids if self.to_profile_name(p) == profile_name ]
+        _profile_ids = [ p for p in self.profile_ids if self._cached_profile_ids[p] == profile_name ]
         if len(_profile_ids) == 1:
             return unicode(_profile_ids[0])
         elif len(_profile_ids) == 0:
@@ -449,10 +457,10 @@ class X2GoSessionProfiles():
         @rtype: C{str}
 
         """
-        _profile_config = self.get_profile_config(profile_id=profile_id)
-        if _profile_config.has_key('name'):
-            return unicode(_profile_config['name'])
-        else:
+        try:
+            _profile_name = self.get_profile_config(profile_id=profile_id, parameter='name')
+            return unicode(_profile_name)
+        except:
             return u''
 
     def add_profile(self, profile_id=None, force_add=False, **kwargs):
@@ -485,7 +493,6 @@ class X2GoSessionProfiles():
             self.update_value(None, key, value, profile_id=profile_id)
 
         self._cached_profile_ids = []
-        self._cached_profile_names = []
 
         return unicode(profile_id)
 
@@ -553,8 +560,8 @@ class X2GoSessionProfiles():
             value = _strvalue
 
         if option == 'host':
-            _config = self.get_profile_config(profile_id=profile_id)
-            if _config.has_key('host') and _config['host'] != value:
+            _host = self.get_profile_config(profile_id=profile_id, parameter='host')
+            if _host != value:
                 self._profiles_need_profile_id_renewal.append(profile_id)
             if type(value) is types.TupleType:
                 value = list(value)

--
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