You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by ke...@apache.org on 2019/03/14 18:25:21 UTC
[allura] branch master updated (4b3cc44 -> 6dd6f6f)
This is an automated email from the ASF dual-hosted git repository.
kentontaylor pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git.
from 4b3cc44 [#8271] remove unused CommitRunDoc and CommitRunBuilder
new 2f5b3ff [#8272] remove a dead function
new 6dd6f6f [#8272] make per-forum feeds not create a potentially gigantic $in query by default
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
Allura/allura/controllers/discuss.py | 14 ++++++++++++--
Allura/allura/controllers/feed.py | 9 +++++++++
Allura/allura/model/artifact.py | 2 ++
ForgeDiscussion/forgediscussion/model/forum.py | 10 ----------
ForgeDiscussion/forgediscussion/tests/test_app.py | 5 ++++-
5 files changed, 27 insertions(+), 13 deletions(-)
[allura] 01/02: [#8272] remove a dead function
Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kentontaylor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git
commit 2f5b3ff894892fdfbc770f3ee0e137341e6a867d
Author: Dave Brondsema <da...@brondsema.net>
AuthorDate: Wed Mar 13 14:41:03 2019 -0400
[#8272] remove a dead function
---
ForgeDiscussion/forgediscussion/model/forum.py | 10 ----------
ForgeDiscussion/forgediscussion/tests/test_app.py | 5 ++++-
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/ForgeDiscussion/forgediscussion/model/forum.py b/ForgeDiscussion/forgediscussion/model/forum.py
index ce54156..481fe92 100644
--- a/ForgeDiscussion/forgediscussion/model/forum.py
+++ b/ForgeDiscussion/forgediscussion/model/forum.py
@@ -59,16 +59,6 @@ class Forum(M.Discussion):
def thread_class(cls):
return ForumThread
- @LazyProperty
- def sorted_threads(self):
- threads = self.thread_class().query.find(dict(discussion_id=self._id))
- threads = threads.sort([('last_post_date', pymongo.DESCENDING)]).all()
- sorted_threads = chain(
- (t for t in threads if 'Announcement' in t.flags),
- (t for t in threads if 'Sticky' in t.flags and 'Announcement' not in t.flags),
- (t for t in threads if 'Sticky' not in t.flags and 'Announcement' not in t.flags))
- return list(sorted_threads)
-
@property
def parent(self):
return Forum.query.get(_id=self.parent_id)
diff --git a/ForgeDiscussion/forgediscussion/tests/test_app.py b/ForgeDiscussion/forgediscussion/tests/test_app.py
index 39df2f0..90f83bf 100644
--- a/ForgeDiscussion/forgediscussion/tests/test_app.py
+++ b/ForgeDiscussion/forgediscussion/tests/test_app.py
@@ -22,6 +22,7 @@
import tempfile
import json
import os
+from operator import attrgetter
from nose.tools import assert_equal
from pylons import tmpl_context as c
@@ -69,7 +70,9 @@ class TestBulkExport(TestDiscussionApiBase):
def test_export_with_attachments(self):
project = M.Project.query.get(shortname='test')
discussion = project.app_instance('discussion')
- post = Forum.query.get(shortname='general').sorted_threads[0].first_post
+ thread = sorted(Forum.query.get(shortname='general').threads,
+ key=attrgetter('last_post_date'))[-1]
+ post = thread.first_post
test_file1 = FieldStorage()
test_file1.name = 'file_info'
test_file1.filename = 'test_file'
[allura] 02/02: [#8272] make per-forum feeds not create a
potentially gigantic $in query by default
Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kentontaylor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git
commit 6dd6f6f6b4363240b5ac72ee6bd0b022132a4332
Author: Dave Brondsema <da...@brondsema.net>
AuthorDate: Wed Mar 13 14:42:27 2019 -0400
[#8272] make per-forum feeds not create a potentially gigantic $in query by default
---
Allura/allura/controllers/discuss.py | 14 ++++++++++++--
Allura/allura/controllers/feed.py | 9 +++++++++
Allura/allura/model/artifact.py | 2 ++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/Allura/allura/controllers/discuss.py b/Allura/allura/controllers/discuss.py
index 662c085..fdc89cc 100644
--- a/Allura/allura/controllers/discuss.py
+++ b/Allura/allura/controllers/discuss.py
@@ -19,6 +19,7 @@ from urllib import unquote
from datetime import datetime
import logging
+import pymongo
from tg import expose, redirect, validate, request, flash, response
from tg.decorators import with_trailing_slash, without_trailing_slash, before_render, before_validate
from decorator import decorator
@@ -118,9 +119,18 @@ class DiscussionController(BaseController, FeedController):
Overrides :meth:`allura.controllers.feed.FeedController.get_feed`.
"""
+ def query(since, until, page, limit, **kwargs):
+ if not since and not until and not page:
+ # simplest default case, so make the threads list shorter by grabbing only needed ones
+ discussion_threads = self.discussion.thread_class().query.find(dict(
+ discussion_id=self.discussion._id,
+ num_replies={'$gt': 0}, # exclude empty threads (spam/deleted) like ForumController does
+ )).sort([('last_post_date', pymongo.DESCENDING)]).limit(limit)
+ else:
+ discussion_threads = self.discussion.threads
+ return dict(ref_id={'$in': [t.index_id() for t in discussion_threads]})
return FeedArgs(
- dict(ref_id={'$in': [t.index_id()
- for t in self.discussion.threads]}),
+ query,
'Recent posts to %s' % self.discussion.name,
self.discussion.url())
diff --git a/Allura/allura/controllers/feed.py b/Allura/allura/controllers/feed.py
index 7aaa789..2fef9f3 100644
--- a/Allura/allura/controllers/feed.py
+++ b/Allura/allura/controllers/feed.py
@@ -35,6 +35,15 @@ class FeedArgs(object):
"""
def __init__(self, query, title, url, description=None):
+ """
+ :param query: mongo criteria to query the Feed collection.
+ Pagination & filter criteria will be added in automatically
+ Can be a function to return criteria, which will be passed args (since, until, page, limit) for
+ advanced optimization.
+ :param title: feed title
+ :param url: feed's own url
+ :param description: feed description
+ """
self.query = query
self.title = title
self.url = url
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 8f9c5b6..bf0716c 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -968,6 +968,8 @@ class Feed(MappedClass):
feed = RssFeed(**d)
limit, page = h.paging_sanitizer(limit or 10, page)
query = defaultdict(dict)
+ if callable(q):
+ q = q(since, until, page, limit)
query.update(q)
if since is not None:
query['pubdate']['$gte'] = since