-def changes_wall(max_len):
- qs = Chunk.change_model.objects.filter(revision__gt=-1).order_by('-created_at')
- qs = qs.defer('patch')
- qs = qs.select_related('author', 'tree', 'tree__book__title')
- qs = qs[:max_len]
- for item in qs:
- tag = 'stage' if item.tags.count() else 'change'
- chunk = item.tree
- w = WallItem(tag)
- w.title = chunk.pretty_name()
- w.summary = item.description
- w.url = reverse('wiki_editor',
- args=[chunk.book.slug, chunk.slug]) + '?diff=%d' % item.revision
- w.timestamp = item.created_at
- w.user = item.author
- w.email = item.author_email
- yield w
-
-
-def published_wall(max_len):
- qs = Book.objects.exclude(last_published=None).order_by('-last_published')
- qs = qs[:max_len]
- for item in qs:
- w = WallItem('publish')
- w.title = item.title
- w.summary = item.title
- w.url = chunk.book.get_absolute_url()
- w.timestamp = item.last_published
- w.user = item.last_published_by
- yield w
-
-
-def comments_wall(max_len):
- qs = Comment.objects.filter(is_public=True).select_related().order_by('-submit_date')
- qs = qs[:max_len]
- for item in qs:
- w = WallItem('comment')
- w.title = item.content_object
- w.summary = item.comment
- w.url = item.content_object.get_absolute_url()
- w.timestamp = item.submit_date
- w.user = item.user
- w.email = item.user_email
- yield w
-
-
-def big_wall(max_len, *args):
- """
- Takes some WallItem iterators and zips them into one big wall.
- Input iterators must already be sorted by timestamp.
- """
- subwalls = []
- for w in args:
- try:
- subwalls.append([next(w), w])
- except StopIteration:
- pass