[kupfer: 47/51] Speed up puid lookup by only constructing the source index once



commit 719d14db9ff9385976076f0ec54f11a015f82ea0
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Sun Jan 10 03:51:28 2010 +0100

    Speed up puid lookup by only constructing the source index once

 kupfer/core/data.py |    8 ++++++--
 kupfer/puid.py      |    4 ++--
 2 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/kupfer/core/data.py b/kupfer/core/data.py
index d4af223..7bd8a24 100644
--- a/kupfer/core/data.py
+++ b/kupfer/core/data.py
@@ -415,14 +415,17 @@ class SourceController (pretty.OutputMixin):
 		if len(self.sources) == 1:
 			root_catalog, = self.sources
 		elif len(self.sources) > 1:
-			firstlevel = self._pre_root
+			firstlevel = self._firstlevel
 			root_catalog = sources.MultiSource(firstlevel)
 		else:
 			root_catalog = None
 		return root_catalog
 
 	@property
-	def _pre_root(self):
+	def _firstlevel(self):
+		firstlevel = getattr(self, "_pre_root", None)
+		if firstlevel:
+			return firstlevel
 		sourceindex = set(self.sources)
 		kupfer_sources = sources.SourcesSource(self.sources)
 		sourceindex.add(kupfer_sources)
@@ -431,6 +434,7 @@ class SourceController (pretty.OutputMixin):
 		firstlevel = []
 		firstlevel.append(sources.SourcesSource(sourceindex))
 		firstlevel.extend(set(self.toplevel_sources))
+		self._pre_root = firstlevel
 		return firstlevel
 
 	@classmethod
diff --git a/kupfer/puid.py b/kupfer/puid.py
index a6b32b8..dd0fe9a 100644
--- a/kupfer/puid.py
+++ b/kupfer/puid.py
@@ -97,10 +97,10 @@ def resolve_unique_id(puid, excluding=None):
 			pretty.print_debug(__name__, type(exc).__name__, exc)
 			return None
 	sc = data.GetSourceController()
-	obj = _find_obj_in_catalog(puid, sc._pre_root)
+	obj = _find_obj_in_catalog(puid, sc._firstlevel)
 	if obj is not None:
 		return obj
-	other_sources = set(sc.sources) - set(sc._pre_root)
+	other_sources = set(sc.sources) - set(sc._firstlevel)
 	obj = _find_obj_in_catalog(puid, other_sources)
 	return obj
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]