def add_hitcount(*models): hitcounts_lookups, content_types = get_lookups(models) cache = get_cache() hitcounts_lookups = {content_type: [i for i in id_list if (i, content_type.pk) not in cache] for content_type, id_list in hitcounts_lookups.iteritems()} hitcounts_lookups = {content_type: id_list for content_type, id_list in hitcounts_lookups.iteritems() if id_list} for model, content_type in zip(models, content_types): for obj in model: obj.display_count = cache.get((obj.pk, content_type.pk), None) if not hitcounts_lookups: return '' hitcount_q = Q() for content_type, ids in hitcounts_lookups.iteritems(): hitcount_q = hitcount_q | Q(content_type=content_type, object_id__in=ids) hitcounts = HitCount.objects.all().\ filter(hitcount_q).\ values_list('object_id', 'content_type_id', 'hits') hitcounts_dict = {h[:2]: h[2] for h in hitcounts} for model, content_type in zip(models, content_types): for obj in model: key = (obj.pk, content_type.pk) count = cache.get(key, hitcounts_dict.get(key)) obj.display_count = count cache[key] = count set_cache(cache) return ''
def add_discussion_attributes(context, *models): discussion_lookups, content_types = get_lookups(models) user = context['user'] if 'user' in context and context['user'].is_authenticated else None discussion_lookups = { content_type: id_list for content_type, id_list in discussion_lookups.items() if id_list } if not discussion_lookups: return '' headers_filter = Q() for content_type, id_list in discussion_lookups.items(): headers_filter |= Q(content_type=content_type, object_id__in=id_list) headers = (RootHeader.objects .filter(headers_filter) .values('id', 'object_id', 'content_type_id', 'last_comment', 'comment_count', 'is_locked') ) headers_dict = {(obj['object_id'], obj['content_type_id']): obj for obj in headers} if user is not None: load_user_discussion_attributes(headers, user) for model, content_type in zip(models, content_types): for obj in model: if not obj: continue if hasattr(obj, 'last_comment'): continue header = headers_dict.get((obj.pk, content_type.pk), {}) cache_data = { 'last_comment': header.get('last_comment', None), 'comment_count': header.get('comment_count', 0), 'is_locked': header.get('is_locked', False), 'rootheader_id': header.get('id', None), 'discussion_display_time': header.get('time', None), 'discusison_watch': None, 'new_comments': None, } copy_attributes(obj, cache_data) obj.discussion_watch = header.get('watch', None) if obj.last_comment and obj.discussion_display_time: obj.new_comments = obj.discussion_display_time < obj.last_comment else: obj.new_comments = None return ''
def add_hitcount(*models): hitcounts_lookups, content_types = get_lookups(models) hitcounts_lookups = { content_type: [i for i in id_list if (i, content_type.pk) not in cache.cache] for content_type, id_list in hitcounts_lookups.items() } hitcounts_lookups = { content_type: id_list for content_type, id_list in hitcounts_lookups.items() if id_list } for model, content_type in zip(models, content_types): for obj in model: obj.display_count = cache.cache.get((obj.pk, content_type.pk), None) if not hitcounts_lookups: return '' hitcount_q = Q() for content_type, ids in hitcounts_lookups.items(): hitcount_q = hitcount_q | Q(content_type=content_type, object_id__in=ids) hitcounts = HitCount.objects.all().\ filter(hitcount_q).\ values_list('object_id', 'content_type_id', 'hits') hitcounts_dict = {h[:2]: h[2] for h in hitcounts} for model, content_type in zip(models, content_types): for obj in model: key = (obj.pk, content_type.pk) count = cache.cache.get(key, hitcounts_dict.get(key)) obj.display_count = count cache.cache[key] = count cache.save() return ''
def add_discussion_attributes(context, *models): discussion_lookups, content_types = get_lookups(models) # odstránenie prázdnych #discussion_lookups = {content_type: [i for i in id_list if (i, content_type.pk) not in cache] for content_type, id_list in discussion_lookups.iteritems()} discussion_lookups = {content_type: id_list for content_type, id_list in discussion_lookups.iteritems() if id_list} if not discussion_lookups: return '' discussion_q = Q() for content_type, ids in discussion_lookups.iteritems(): discussion_q = discussion_q | Q(content_type=content_type, object_id__in=ids) headers = RootHeader.objects \ .filter(discussion_q) \ .values('id', 'object_id', 'content_type_id', 'last_comment', 'comment_count', 'is_locked') headers_dict = {(h['object_id'], h['content_type_id']): h for h in headers} if 'user' in context and context['user'].is_authenticated(): load_user_discussion_attributes(headers, context['user']) for model, content_type in zip(models, content_types): for obj in model: key = (obj.pk, content_type.pk) header = headers_dict.get(key, {}) obj.last_comment = header.get('last_comment', None) obj.comment_count = header.get('comment_count', 0) obj.is_locked = header.get('is_locked', False) obj.rootheader_id = header.get('id', None) obj.discussion_display_time = header.get('time', None) obj.discussion_watch = header.get('watch', None) if obj.last_comment and obj.discussion_display_time: obj.new_comments = obj.discussion_display_time < obj.last_comment else: obj.new_comments = None return ''