git.ithinksw.org
/
philo.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'optimization' into develop
[philo.git]
/
philo
/
utils
/
entities.py
diff --git
a/philo/utils/entities.py
b/philo/utils/entities.py
index
c7b14b7
..
830276e
100644
(file)
--- a/
philo/utils/entities.py
+++ b/
philo/utils/entities.py
@@
-89,18
+89,21
@@
class AttributeMapper(object, DictMixin):
value_lookups.setdefault(a.value_content_type_id, []).append(a.value_object_id)
self._attributes_cache[a.key] = a
value_lookups.setdefault(a.value_content_type_id, []).append(a.value_object_id)
self._attributes_cache[a.key] = a
- values_bulk =
{}
+ values_bulk =
dict(((ct_pk, SimpleLazyObject(partial(ContentType.objects.get_for_id(ct_pk).model_class().objects.in_bulk, pks))) for ct_pk, pks in value_lookups.items()))
- for ct_pk, pks in value_lookups.items():
- values_bulk[ct_pk] = ContentType.objects.get_for_id(ct_pk).model_class().objects.in_bulk(pks)
+ cache = {}
- self._cache.update(dict([
- (
- a.key,
- SimpleLazyObject(partial(getattr, values_bulk[a.value_content_type_id].get(a.value_object_id), 'value', None))
-
) for a in attributes])
)
+ for a in attributes:
+ cache[a.key] = SimpleLazyObject(partial(self._lazy_value_from_bulk, values_bulk, a))
+ a._value_cache = cache[a.key]
+
+
self._cache.update(cache
)
self._cache_filled = True
self._cache_filled = True
+ def _lazy_value_from_bulk(self, bulk, attribute):
+ v = bulk[attribute.value_content_type_id].get(attribute.value_object_id)
+ return getattr(v, 'value', None)
+
def clear_cache(self):
"""Clears the cache."""
self._cache = {}
def clear_cache(self):
"""Clears the cache."""
self._cache = {}