Example #1
0
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 ''