global _COUNTERS, _COUNTER_TIME
# First, check that we have a valid and recent version of the counters.
if getmtime(settings.CATALOGUE_COUNTERS_FILE) > _COUNTER_TIME:
- with open(settings.CATALOGUE_COUNTERS_FILE) as f:
- _COUNTERS = cPickle.load(f)
+ for i in xrange(10):
+ try:
+ with open(settings.CATALOGUE_COUNTERS_FILE) as f:
+ _COUNTERS = cPickle.load(f)
+ except (EOFError, ValueError):
+ if i < 9:
+ continue
+ else:
+ raise
+ else:
+ break
tagids = tuple(sorted(t.pk for t in tags))
try:
def count_for_book(book, count_by_combination=None, parent_combinations=None):
if not parent_combinations:
parent_combinations = set()
- tags = sorted(tuple(t.pk for t in book.tags.filter(category__in=('author', 'genre', 'epoch', 'kind'))))
+ tags = sorted(book.tags.filter(category__in=('author', 'genre', 'epoch', 'kind')).values_list('pk', flat=True))
combs = list(combinations(tags))
for c in combs:
if c not in parent_combinations: