You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2016/12/22 17:32:08 UTC
[2/2] allura git commit: [#8021] record spam-check results to database
[#8021] record spam-check results to database
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/ca8b5962
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/ca8b5962
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/ca8b5962
Branch: refs/heads/master
Commit: ca8b596217a38ceadaae0b0d531420a7a69aca04
Parents: da54abd
Author: Dave Brondsema <da...@brondsema.net>
Authored: Mon Dec 19 13:49:43 2016 -0500
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Thu Dec 22 12:31:54 2016 -0500
----------------------------------------------------------------------
Allura/allura/lib/spam/__init__.py | 11 ++++++++
Allura/allura/lib/spam/akismetfilter.py | 2 +-
Allura/allura/lib/spam/mollomfilter.py | 3 +--
Allura/allura/model/artifact.py | 20 ++++++++++++++
.../allura/tests/unit/spam/test_spam_filter.py | 28 +++++++++++++++++++-
AlluraTest/alluratest/controller.py | 3 ++-
6 files changed, 62 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/ca8b5962/Allura/allura/lib/spam/__init__.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/spam/__init__.py b/Allura/allura/lib/spam/__init__.py
index 3d4fe7f..8e68c5f 100644
--- a/Allura/allura/lib/spam/__init__.py
+++ b/Allura/allura/lib/spam/__init__.py
@@ -18,6 +18,7 @@
import logging
from allura.lib.helpers import exceptionless
+from allura.model.artifact import SpamCheckResult
log = logging.getLogger(__name__)
@@ -40,6 +41,16 @@ class SpamFilter(object):
def submit_ham(self, text, artifact=None, user=None, content_type='comment', **kw):
log.info("No spam checking enabled")
+ def record_result(self, result, artifact, user):
+ filter_name = self.__class__.__name__.replace('SpamFilter', '').lower()
+ log.info("spam=%s (%s): %s" % (str(result), filter_name, artifact.url() if artifact else ''))
+ r = SpamCheckResult(
+ ref=artifact.ref,
+ project_id=artifact.project_id,
+ user=user,
+ result=result,
+ )
+
@classmethod
def get(cls, config, entry_points):
"""
http://git-wip-us.apache.org/repos/asf/allura/blob/ca8b5962/Allura/allura/lib/spam/akismetfilter.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/spam/akismetfilter.py b/Allura/allura/lib/spam/akismetfilter.py
index e5ef1b8..7a87bd9 100644
--- a/Allura/allura/lib/spam/akismetfilter.py
+++ b/Allura/allura/lib/spam/akismetfilter.py
@@ -89,7 +89,7 @@ class AkismetSpamFilter(SpamFilter):
request=request,
),
build_data=False)
- log.info("spam=%s (akismet): %s" % (str(res), artifact.url() if artifact else text))
+ self.record_result(res, artifact, user)
return res
def submit_spam(self, text, artifact=None, user=None, content_type='comment'):
http://git-wip-us.apache.org/repos/asf/allura/blob/ca8b5962/Allura/allura/lib/spam/mollomfilter.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/spam/mollomfilter.py b/Allura/allura/lib/spam/mollomfilter.py
index 88a34c8..533186b 100644
--- a/Allura/allura/lib/spam/mollomfilter.py
+++ b/Allura/allura/lib/spam/mollomfilter.py
@@ -75,7 +75,6 @@ class MollomSpamFilter(SpamFilter):
# Should be able to send url, but can't right now due to a bug in
# the PyMollom lib
# kw['url'] = url
- log_msg = url
user = user or c.user
if user:
kw['authorName'] = user.display_name or user.username
@@ -88,7 +87,7 @@ class MollomSpamFilter(SpamFilter):
cc = self.service.checkContent(**kw)
res = cc['spam'] == 2
artifact.spam_check_id = cc.get('session_id', '')
- log.info("spam=%s (mollom): %s" % (str(res), log_msg))
+ self.record_result(res, artifact, user)
return res
def submit_spam(self, text, artifact=None, user=None, content_type='comment', **kw):
http://git-wip-us.apache.org/repos/asf/allura/blob/ca8b5962/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 523a7ad..a7fe848 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -1071,3 +1071,23 @@ class MovedArtifact(Artifact):
'AppConfig', if_missing=lambda: c.app.config._id)
app_config = RelationProperty('AppConfig')
moved_to_url = FieldProperty(str, required=True, allow_none=False)
+
+
+class SpamCheckResult(MappedClass):
+ class __mongometa__:
+ session = main_orm_session
+ name = 'spam_check_result'
+ indexes = [
+ ('project_id', 'result'),
+ ('user_id', 'result'),
+ ]
+
+ _id = FieldProperty(S.ObjectId)
+ ref_id = ForeignIdProperty('ArtifactReference')
+ ref = RelationProperty('ArtifactReference', via='ref_id')
+ project_id = ForeignIdProperty('Project')
+ project = RelationProperty('Project', via='project_id')
+ user_id = ForeignIdProperty('User')
+ user = RelationProperty('User', via='user_id')
+ timestamp = FieldProperty(datetime, if_missing=datetime.utcnow)
+ result = FieldProperty(bool)
http://git-wip-us.apache.org/repos/asf/allura/blob/ca8b5962/Allura/allura/tests/unit/spam/test_spam_filter.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/spam/test_spam_filter.py b/Allura/allura/tests/unit/spam/test_spam_filter.py
index 1d96c7f..9d603f8 100644
--- a/Allura/allura/tests/unit/spam/test_spam_filter.py
+++ b/Allura/allura/tests/unit/spam/test_spam_filter.py
@@ -20,7 +20,14 @@
import mock
import unittest
+from ming.odm import ThreadLocalORMSession
+from nose.tools import assert_equal
+
from allura.lib.spam import SpamFilter
+from allura import model as M
+from allura.model.artifact import SpamCheckResult
+from alluratest.controller import setup_basic_test
+from forgewiki import model as WM
class MockFilter(SpamFilter):
@@ -53,6 +60,25 @@ class TestSpamFilter(unittest.TestCase):
config = {'spam.method': 'mock'}
entry_points = {'mock': MockFilter}
checker = SpamFilter.get(config, entry_points)
- result = checker.check()
+ result = checker.check('this is our text')
self.assertFalse(result)
self.assertTrue(log.exception.called)
+
+
+class TestSpamFilterFunctional(object):
+
+ def setUp(self):
+ setup_basic_test()
+
+ def test_record_result(self):
+ config = {}
+ artifact = WM.Page.query.get()
+ user = M.User.query.get(username='test-user')
+
+ SpamFilter(config).record_result(True, artifact, user)
+ ThreadLocalORMSession.flush_all()
+
+ results = SpamCheckResult.query.find().all()
+ assert_equal(len(results), 1)
+ assert_equal(results[0].result, True)
+ assert_equal(results[0].user.username, 'test-user')
http://git-wip-us.apache.org/repos/asf/allura/blob/ca8b5962/AlluraTest/alluratest/controller.py
----------------------------------------------------------------------
diff --git a/AlluraTest/alluratest/controller.py b/AlluraTest/alluratest/controller.py
index 6b50f33..eae6fba 100644
--- a/AlluraTest/alluratest/controller.py
+++ b/AlluraTest/alluratest/controller.py
@@ -81,7 +81,8 @@ setup_config_test.__test__ = False
def setup_basic_test(config=None, app_name=DFL_APP_NAME):
'''
- Create clean environment for running tests.
+ Create clean environment for running tests, includes mongodb connection with "mim" (mongo-in-memory) and sample
+ data created.
A lightweight alternative is setup_config_test which doesn't bootstrap app data.
'''