From: Stephen Burrows Date: Fri, 24 Jun 2011 18:39:58 +0000 (-0400) Subject: Added a local cache to NavigationMapper - avoids some unpickling costs. X-Git-Tag: philo-0.9.1^2~7^2^2~1^2 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/481e1489d1e8824e7d602e88fc1bfdd8ca140c5c Added a local cache to NavigationMapper - avoids some unpickling costs. --- diff --git a/philo/contrib/shipherd/models.py b/philo/contrib/shipherd/models.py index c299a14..3655e51 100644 --- a/philo/contrib/shipherd/models.py +++ b/philo/contrib/shipherd/models.py @@ -27,13 +27,12 @@ class NavigationMapper(object, DictMixin): self._cache = {} def __getitem__(self, key): - return Navigation.objects.get_for_node(self.node, key) - #if key not in self._cache: - # try: - # self._cache[key] = Navigation.objects.get_for_node(self.node, key) - # except Navigation.DoesNotExist: - # self._cache[key] = None - #return self._cache[key] + if key not in self._cache: + try: + self._cache[key] = Navigation.objects.get_for_node(self.node, key) + except Navigation.DoesNotExist: + self._cache[key] = None + return self._cache[key] def navigation(self): @@ -62,7 +61,7 @@ class NavigationManager(models.Manager): "node__%s__gte" % opts.right_attr: right, "node__%s" % opts.tree_id_attr: tree_id } - navs = self.filter(key=key, **kwargs).order_by('-node__%s' % opts.level_attr) + navs = self.filter(key=key, **kwargs).select_related('node').order_by('-node__%s' % opts.level_attr) nav = navs[0] roots = nav.roots.all().select_related('target_node').order_by('order') item_opts = NavigationItem._mptt_meta