git.ithinksw.org
/
philo.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Corrections to has_navigation and navigation_host to use the new NavigationMapper...
[philo.git]
/
philo
/
contrib
/
shipherd
/
models.py
diff --git
a/philo/contrib/shipherd/models.py
b/philo/contrib/shipherd/models.py
index
c8579a2
..
9888378
100644
(file)
--- a/
philo/contrib/shipherd/models.py
+++ b/
philo/contrib/shipherd/models.py
@@
-21,9
+21,15
@@
class NavigationMapper(object, DictMixin):
"""
def __init__(self, node):
self.node = node
"""
def __init__(self, node):
self.node = node
+ self._cache = {}
def __getitem__(self, key):
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]
def navigation(self):
def navigation(self):
@@
-42,21
+48,21
@@
class NavigationManager(models.Manager):
opts = Node._mptt_meta
left = getattr(node, opts.left_attr)
right = getattr(node, opts.right_attr)
opts = Node._mptt_meta
left = getattr(node, opts.left_attr)
right = getattr(node, opts.right_attr)
- tree = getattr(node, opts.tree_id_attr)
+ tree
_id
= getattr(node, opts.tree_id_attr)
kwargs = {
"node__%s__lte" % opts.left_attr: left,
"node__%s__gte" % opts.right_attr: right,
"node__%s" % opts.tree_id_attr: tree_id
}
kwargs = {
"node__%s__lte" % opts.left_attr: left,
"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]
nav = navs[0]
- roots = nav.roots.all()
+ roots = nav.roots.all()
.select_related('target_node')
item_opts = NavigationItem._mptt_meta
by_pk = {}
tree_ids = []
for root in roots:
item_opts = NavigationItem._mptt_meta
by_pk = {}
tree_ids = []
for root in roots:
- by_pk[root.pk] =
pk
+ by_pk[root.pk] =
root
tree_ids.append(getattr(root, item_opts.tree_id_attr))
root._cached_children = []
tree_ids.append(getattr(root, item_opts.tree_id_attr))
root._cached_children = []
@@
-65,7
+71,7
@@
class NavigationManager(models.Manager):
'%s__lt' % item_opts.level_attr: nav.depth,
'%s__gt' % item_opts.level_attr: 0
}
'%s__lt' % item_opts.level_attr: nav.depth,
'%s__gt' % item_opts.level_attr: 0
}
- items = NavigationItem.objects.filter(**kwargs).order_by('level', 'order')
+ items = NavigationItem.objects.filter(**kwargs).
select_related('target_node').
order_by('level', 'order')
for item in items:
by_pk[item.pk] = item
item._cached_children = []
for item in items:
by_pk[item.pk] = item
item._cached_children = []