From patchwork Wed Mar 16 22:53:45 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Guessing project based on email address Date: Wed, 16 Mar 2011 12:53:45 -0000 From: Guilherme Salgado X-Patchwork-Id: 87325 Message-Id: <1300316025.2866.89.camel@feioso> To: Jeremy Kerr Cc: patchwork@lists.ozlabs.org On Wed, 2011-03-09 at 08:11 -0300, Guilherme Salgado wrote: [...] > > > > Also, if this was configurable (PATCHWORK_FALLBACK_TO_LISTEMAIL perhaps?), I'd > > be much happier :) I've just changed it to only fallback to list email when the setting above is True (the default value is False). The patch for that is attached. diff --git a/apps/patchwork/bin/parsemail.py b/apps/patchwork/bin/parsemail.py index a29c32f..10b7e9f 100755 --- a/apps/patchwork/bin/parsemail.py +++ b/apps/patchwork/bin/parsemail.py @@ -24,6 +24,7 @@ import re import datetime import time import operator +import settings from email import message_from_file try: from email.header import Header, decode_header @@ -105,7 +106,7 @@ def find_project_by_list_address(mail): def find_project(mail): project = find_project_by_listid(mail) - if project is None: + if project is None and settings.PATCHWORK_FALLBACK_TO_LISTEMAIL: project = find_project_by_list_address(mail) return project diff --git a/apps/patchwork/tests/patchparser.py b/apps/patchwork/tests/patchparser.py index d2eabb9..d141412 100644 --- a/apps/patchwork/tests/patchparser.py +++ b/apps/patchwork/tests/patchparser.py @@ -20,6 +20,7 @@ import unittest import os from email import message_from_string +import settings from patchwork.models import Project, Person, Patch, Comment from patchwork.tests.utils import read_patch, read_mail, create_email, defaults @@ -303,6 +304,9 @@ class MultipleProjectPatchCommentTest(MultipleProjectPatchTest): class EmailProjectGuessing(unittest.TestCase): """Projects are guessed based on List-Id headers or recipient addresses""" def setUp(self): + self.orig_fallback_to_listemail = \ + settings.PATCHWORK_FALLBACK_TO_LISTEMAIL + settings.PATCHWORK_FALLBACK_TO_LISTEMAIL = False self.project = Project(linkname = 'test-project-1', name = 'Project 1', listid = '1.example.com', listemail='1@example.com') self.project.save() @@ -320,18 +324,27 @@ class EmailProjectGuessing(unittest.TestCase): 'bar-foo@bar.foo.example.com'], emails) + def testDoNotFallbackToEmailAddressWhenNotConfiguredTo(self): + self.assertFalse(settings.PATCHWORK_FALLBACK_TO_LISTEMAIL) + email = MIMEText('') + email['To'] = '"First dev list" <1@example.com>' + project = find_project(email) + self.assertEquals(None, project) + def testNoListId(self): email = MIMEText('') project = find_project(email) self.assertEquals(project, None) def testNoListIdWithListEmailAsRecipient(self): + settings.PATCHWORK_FALLBACK_TO_LISTEMAIL = True email = MIMEText('') email['To'] = '"First dev list" <1@example.com>' project = find_project(email) self.assertEquals(self.project, project) def testNoListIdWithListEmailAsCC(self): + settings.PATCHWORK_FALLBACK_TO_LISTEMAIL = True email = MIMEText('') email['CC'] = ('"First maintainer , ' '"First dev list" <1@example.com>') @@ -371,6 +384,8 @@ class EmailProjectGuessing(unittest.TestCase): self.assertEquals(project, self.project) def tearDown(self): + settings.PATCHWORK_FALLBACK_TO_LISTEMAIL = \ + self.orig_fallback_to_listemail self.project.delete() diff --git a/apps/settings.py b/apps/settings.py index 84a262c..29e3351 100644 --- a/apps/settings.py +++ b/apps/settings.py @@ -101,6 +101,9 @@ INSTALLED_APPS = ( DEFAULT_PATCHES_PER_PAGE = 100 DEFAULT_FROM_EMAIL = 'Patchwork ' +# If set to True, this will cause the parsemail script to lookup projects +# by email address when one cannot be found by list ID. +PATCHWORK_FALLBACK_TO_LISTEMAIL = False ACCOUNT_ACTIVATION_DAYS = 7