diff --git a/src/postorius/forms.py b/src/postorius/forms.py
index 4eaf396..ffdc878 100644
--- a/src/postorius/forms.py
+++ b/src/postorius/forms.py
@@ -199,11 +199,13 @@
"""Form fields to join an existing list.
"""
- email = forms.ChoiceField(label=_('Your email address'),
+ email = forms.ChoiceField(
+ label=_('Your email address'),
validators=[validate_email],
widget=forms.Select(),
- error_messages={'required': _('Please enter an email address.'),
- 'invalid': _('Please enter a valid email address.')})
+ error_messages={
+ 'required': _('Please enter an email address.'),
+ 'invalid': _('Please enter a valid email address.')})
display_name = forms.CharField(label=_('Your name (optional)'),
required=False)
@@ -244,8 +246,10 @@
help_text=_('Open: Subscriptions are added automatically\n'
'Confirm: Subscribers need to confirm the subscription '
'using an email sent to them\n'
- 'Moderate: Moderators will have to authorize each subscription manually.\n'
- 'Confirm then Moderate: First subscribers have to confirm, then a moderator '
+ 'Moderate: Moderators will have to authorize '
+ 'each subscription manually.\n'
+ 'Confirm then Moderate: First subscribers have to confirm,'
+ ' then a moderator '
'needs to authorize.'))
@@ -355,7 +359,8 @@
"""
digest_size_threshold = forms.DecimalField(
label=_('Digest size threshold'),
- help_text=_('How big in Kb should a digest be before it gets sent out?'))
+ help_text=_('How big in Kb should a digest be before '
+ 'it gets sent out?'))
class AlterMessagesForm(ListSettingsForm):
@@ -368,16 +373,16 @@
widget=forms.RadioSelect,
required=False,
label=_('Filter content'),
- help_text=_('Should Mailman filter the content of list traffic according '
- 'to the settings below?'))
+ help_text=_('Should Mailman filter the content of list traffic '
+ 'according to the settings below?'))
collapse_alternatives = forms.TypedChoiceField(
coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
widget=forms.RadioSelect,
required=False,
label=_('Collapse alternatives'),
- help_text=_('Should Mailman collapse multipart/alternative to its first '
- 'part content?'))
+ help_text=_('Should Mailman collapse multipart/alternative to '
+ 'its first part content?'))
convert_html_to_plaintext = forms.TypedChoiceField(
coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
@@ -385,15 +390,17 @@
required=False,
label=_('Convert html to plaintext'),
help_text=_('Should Mailman convert text/html parts to plain text? '
- 'This conversion happens after MIME attachments have been stripped.'))
+ 'This conversion happens after MIME attachments '
+ 'have been stripped.'))
anonymous_list = forms.TypedChoiceField(
coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
widget=forms.RadioSelect,
required=False,
label=_('Anonymous list'),
- help_text=_('Hide the sender of a message, replacing it with the list address '
- '(Removes From, Sender and Reply-To fields)'))
+ help_text=_('Hide the sender of a message, '
+ 'replacing it with the list address '
+ '(Removes From, Sender and Reply-To fields)'))
include_rfc2369_headers = forms.TypedChoiceField(
coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
@@ -497,7 +504,8 @@
choices=autorespond_choices,
widget=forms.RadioSelect,
label=_('Autorespond to list owner'),
- help_text=_('Should Mailman send an auto-response to emails sent to the -owner address?'))
+ help_text=_('Should Mailman send an auto-response to '
+ 'emails sent to the -owner address?'))
autoresponse_owner_text = forms.CharField(
label=_('Autoresponse owner text'),
widget=forms.Textarea(),
@@ -507,7 +515,8 @@
choices=autorespond_choices,
widget=forms.RadioSelect,
label=_('Autorespond postings'),
- help_text=_('Should Mailman send an auto-response to mailing list posters?'))
+ help_text=_('Should Mailman send an auto-response to '
+ 'mailing list posters?'))
autoresponse_postings_text = forms.CharField(
label=_('Autoresponse postings text'),
widget=forms.Textarea(),
@@ -568,7 +577,8 @@
widget=forms.RadioSelect(choices=((True, _('Yes')), (False, _('No')))),
required=False,
label=_('Notify admin of membership changes'),
- help_text=_('Should administrator get notices of subscribes and unsubscribes?'))
+ help_text=_('Should administrator get notices of '
+ 'subscribes and unsubscribes?'))
class ListIdentityForm(ListSettingsForm):
@@ -580,7 +590,8 @@
choices=((True, _('Yes')), (False, _('No'))),
widget=forms.RadioSelect,
label=_('Show list on index page'),
- help_text=_('Choose whether to include this list on the list of all lists'))
+ help_text=_('Choose whether to include this list '
+ 'on the list of all lists'))
description = forms.CharField(
label=_('Description'),
help_text=_(
@@ -663,10 +674,8 @@
class ListHeaderMatchForm(forms.Form):
"""Edit a list's header match."""
- HM_ACTION_CHOICES = [
- (None, _("Default antispam action")) ] + [
- a for a in ACTION_CHOICES if a[0] != 'defer'
- ]
+ HM_ACTION_CHOICES = [(None, _("Default antispam action"))] + \
+ [a for a in ACTION_CHOICES if a[0] != 'defer']
header = forms.CharField(
label=_('Header'),
@@ -683,17 +692,18 @@
action = forms.ChoiceField(
label=_('Action'),
error_messages={'invalid': _('Please enter a valid action.')},
- #widget=forms.RadioSelect(),
required=False,
choices=HM_ACTION_CHOICES,
help_text=_('Action to take when a header matches')
)
+
class ListHeaderMatchFormset(forms.BaseFormSet):
def clean(self):
"""Checks that no two header matches have the same order."""
if any(self.errors):
- # Don't bother validating the formset unless each form is valid on its own
+ # Don't bother validating the formset unless
+ # each form is valid on its own
return
orders = []
for form in self.forms:
@@ -702,7 +712,8 @@
except KeyError:
continue
if order in orders:
- raise forms.ValidationError("Header matches must have distinct orders.")
+ raise forms.ValidationError('Header matches must have'
+ ' distinct orders.')
orders.append(order)
@@ -823,14 +834,15 @@
# Check if the address belongs to someone else
if User.objects.filter(email=email).exists():
- raise forms.ValidationError(_('This email is in use.'
- 'Please choose another or contact the administrator'),
- 'error')
+ raise forms.ValidationError(
+ _('This email is in use. Please choose another or contact'
+ ' the administrator'), 'error')
# Check if the email is attached to a user in Mailman
try:
utils.get_client().get_user(email)
- raise forms.ValidationError(_('This email already belongs to a user'), 'error')
+ raise forms.ValidationError(
+ _('This email already belongs to a user'), 'error')
except HTTPError:
pass
return email
diff --git a/src/postorius/migrations/0001_initial.py b/src/postorius/migrations/0001_initial.py
index 9cca4b1..fdffe48 100644
--- a/src/postorius/migrations/0001_initial.py
+++ b/src/postorius/migrations/0001_initial.py
@@ -15,7 +15,8 @@
migrations.CreateModel(
name='AddressConfirmationProfile',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('id', models.AutoField(verbose_name='ID', serialize=False,
+ auto_created=True, primary_key=True)),
('email', models.EmailField(max_length=254)),
('activation_key', models.CharField(max_length=40)),
('created', models.DateTimeField()),
diff --git a/src/postorius/models.py b/src/postorius/models.py
index 1c6d6d0..702a498 100644
--- a/src/postorius/models.py
+++ b/src/postorius/models.py
@@ -259,7 +259,8 @@
The following settings are recognized:
- >>> EMAIL_CONFIRMATION_TEMPLATE = 'postorius/user/address_confirmation_message.txt'
+ >>> EMAIL_CONFIRMATION_TEMPLATE = \
+ 'postorius/user/address_confirmation_message.txt'
>>> EMAIL_CONFIRMATION_FROM = 'postmaster@list.org'
>>> EMAIL_CONFIRMATION_SUBJECT = 'Confirmation needed'
@@ -276,14 +277,14 @@
# Detect the right template path, either from the param,
# the setting or the default
if not template_path:
- template_path = getattr(settings,
- 'EMAIL_CONFIRMATION_TEMPLATE',
- 'postorius/user/address_confirmation_message.txt')
+ template_path = getattr(
+ settings, 'EMAIL_CONFIRMATION_TEMPLATE',
+ 'postorius/user/address_confirmation_message.txt')
# Create a template context (if there is none) containing
# the activation_link and the host_url.
if not template_context:
template_context = {'activation_link': activation_link,
- 'host_url': request.build_absolute_uri("/")}
+ 'host_url': request.build_absolute_uri("/")}
email_subject = getattr(
settings, 'EMAIL_CONFIRMATION_SUBJECT', u'Confirmation needed')
try:
@@ -297,6 +298,7 @@
except AttributeError:
raise ImproperlyConfigured
- send_mail(email_subject, render_to_string(template_path, template_context),
+ send_mail(email_subject,
+ render_to_string(template_path, template_context),
sender_address,
[self.email])
diff --git a/src/postorius/templatetags/bootstrap_tags.py b/src/postorius/templatetags/bootstrap_tags.py
index 827fb16..f1680ad 100644
--- a/src/postorius/templatetags/bootstrap_tags.py
+++ b/src/postorius/templatetags/bootstrap_tags.py
@@ -31,8 +31,10 @@
return field.field.widget.__class__.__name__
-@register.inclusion_tag('postorius/lib/form-horizontal.html', takes_context=True)
-def render_form_horizontal(context, form, size_left=2, size_right=8, button=None):
+@register.inclusion_tag('postorius/lib/form-horizontal.html',
+ takes_context=True)
+def render_form_horizontal(context, form, size_left=2, size_right=8,
+ button=None):
return dict(
form=form,
size_left=size_left,
diff --git a/src/postorius/tests/mailman_api_tests/test_address_activation.py b/src/postorius/tests/mailman_api_tests/test_address_activation.py
index f4341bb..c1e4a96 100644
--- a/src/postorius/tests/mailman_api_tests/test_address_activation.py
+++ b/src/postorius/tests/mailman_api_tests/test_address_activation.py
@@ -38,14 +38,16 @@
def setUp(self):
super(TestAddressActivationForm, self).setUp()
# Create a user and profile.
- self.user = User.objects.create_user('testuser', 'les@example.org', 'testpass')
- self.profile = AddressConfirmationProfile.objects.create(email='les2@example.org',
- user=self.user)
- self.expired = AddressConfirmationProfile.objects.create(email='expired@example.org',
- user=self.user)
+ self.user = User.objects.create_user(
+ 'testuser', 'les@example.org', 'testpass')
+ self.profile = AddressConfirmationProfile.objects.create(
+ email='les2@example.org', user=self.user)
+ self.expired = AddressConfirmationProfile.objects.create(
+ email='expired@example.org', user=self.user)
self.expired.created -= timedelta(weeks=100)
self.expired.save()
- self.mm_user = self.mm_client.create_user('subscribed@example.org', 'password')
+ self.mm_user = self.mm_client.create_user(
+ 'subscribed@example.org', 'password')
def tearDown(self):
self.profile.delete()
@@ -88,8 +90,8 @@
self.user = User.objects.create_user(
username=u'ler_mm', email=u'ler@mailman.mostdesirable.org',
password=u'pwd')
- self.profile = AddressConfirmationProfile.objects.create(email=u'les@example.org',
- user=self.user)
+ self.profile = AddressConfirmationProfile.objects.create(
+ email=u'les@example.org', user=self.user)
# Create a test request object
self.request = RequestFactory().get('/')
@@ -167,7 +169,8 @@
username='ler', email=u'ler@example.org',
password='pwd')
self.mm_user = self.mm_client.create_user('ler@example.org', None)
- self.profile = AddressConfirmationProfile.objects.create(email=u'les@example.org', user=self.user)
+ self.profile = AddressConfirmationProfile.objects.create(
+ email=u'les@example.org', user=self.user)
self.profile.save()
def tearDown(self):
diff --git a/src/postorius/tests/mailman_api_tests/test_domain_new.py b/src/postorius/tests/mailman_api_tests/test_domain_new.py
index c4925bc..6ba6a3e 100644
--- a/src/postorius/tests/mailman_api_tests/test_domain_new.py
+++ b/src/postorius/tests/mailman_api_tests/test_domain_new.py
@@ -57,14 +57,15 @@
post_data = {'mail_host': 'example.com',
'web_host': 'http://example.com',
'description': 'A new Domain.'}
- response = self.client.post(reverse('domain_new'), post_data, follow=True)
+ response = self.client.post(reverse('domain_new'), post_data,
+ follow=True)
self.assertContains(response, 'New Domain registered')
self.assertRedirects(response, reverse('domain_index'))
- a_new_domain = self.mm_client.get_domain('example.com')
+ a_new_domain = self.mm_client.get_domain('example.com')
self.assertEqual(a_new_domain.mail_host, u'example.com')
self.assertEqual(a_new_domain.base_url, u'http://example.com')
self.assertEqual(a_new_domain.owners[0]['user_id'],
- self.mm_client.get_user('su@example.com').user_id)
+ self.mm_client.get_user('su@example.com').user_id)
a_new_domain.delete()
diff --git a/src/postorius/tests/mailman_api_tests/test_list_bans.py b/src/postorius/tests/mailman_api_tests/test_list_bans.py
index 2ae37ea..d9b80c8 100644
--- a/src/postorius/tests/mailman_api_tests/test_list_bans.py
+++ b/src/postorius/tests/mailman_api_tests/test_list_bans.py
@@ -70,12 +70,12 @@
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
self.assertTrue('addban_form' in response.context)
- self.assertContains(response,
- '')
- self.assertContains(response,
- '')
+ self.assertContains(
+ response, '')
+ self.assertContains(
+ response, '')
def test_context_contains_delete_forms(self):
banned = ["banned{}@example.com".format(i) for i in range(1,10)]
@@ -84,11 +84,12 @@
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
for ban in banned:
- self.assertContains(response,
- '' % ban)
- self.assertContains(response,
- ''
+ % ban)
+ self.assertContains(
+ response, '