diff --git a/dev-requirements.txt b/dev-requirements.txt
index 56cf461..e3d882a 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -1,5 +1,4 @@
tox
mock
-django-nose
coverage==3.7.1
vcrpy
diff --git a/setup.py b/setup.py
index 0ae9bdf..8dcca73 100644
--- a/setup.py
+++ b/setup.py
@@ -39,7 +39,7 @@
packages=find_packages('src'),
package_dir={'': 'src'},
include_package_data=True,
- install_requires=['django>=1.5',
+ install_requires=['django>=1.5, <1.8',
'django-browserid',
'mailmanclient']
)
diff --git a/src/postorius/models.py b/src/postorius/models.py
index c21147b..de42e39 100644
--- a/src/postorius/models.py
+++ b/src/postorius/models.py
@@ -26,6 +26,7 @@
from datetime import datetime, timedelta
from django.conf import settings
from django.contrib.auth.models import User
+from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.core.mail import send_mail
from django.db import models
@@ -261,8 +262,8 @@
The following settings are recognized:
>>> EMAIL_CONFIRMATION_TEMPLATE = 'postorius/address_confirmation_message.txt'
- >>> EMAIL_CONFIRMATION_FROM = 'Confirmation needed'
- >>> EMAIL_CONFIRMATION_SUBJECT = 'postmaster@list.org'
+ >>> EMAIL_CONFIRMATION_FROM = 'postmaster@list.org'
+ >>> EMAIL_CONFIRMATION_SUBJECT = 'Confirmation needed'
:param request: The HTTP request object.
:type request: HTTPRequest
@@ -289,7 +290,18 @@
{'activation_link': activation_link, 'host_url': host_url})
email_subject = getattr(
settings, 'EMAIL_CONFIRMATION_SUBJECT', u'Confirmation needed')
+ try:
+ sender_address = getattr(settings, 'EMAIL_CONFIRMATION_FROM')
+ except AttributeError:
+ # settings.EMAIL_CONFIRMATION_FROM is not defined, fallback
+ # settings.DEFAULT_EMAIL_FROM as mentioned in the django
+ # docs. If that also fails, raise a `ImproperlyConfigured` Error.
+ try:
+ sender_address = getattr(settings, 'DEFAULT_FROM_EMAIL')
+ except AttributeError:
+ raise ImproperlyConfigured
+
send_mail(email_subject,
get_template(template_path).render(template_context),
- getattr(settings, 'EMAIL_CONFIRMATION_FROM'),
+ sender_address,
[self.email])
diff --git a/src/postorius/templates/postorius/login.html b/src/postorius/templates/postorius/login.html
index a139223..d469816 100644
--- a/src/postorius/templates/postorius/login.html
+++ b/src/postorius/templates/postorius/login.html
@@ -20,7 +20,8 @@
-
+
+
@@ -38,22 +39,5 @@
{% endblock %}
{% block additionaljs %}
-
-
-
-
-
-
-
+ {% browserid_js %}
{% endblock additionaljs %}
diff --git a/src/postorius/templates/postorius/user_address_activation_sent.html b/src/postorius/templates/postorius/user_address_activation_sent.html
index 72cb84f..a369f77 100644
--- a/src/postorius/templates/postorius/user_address_activation_sent.html
+++ b/src/postorius/templates/postorius/user_address_activation_sent.html
@@ -7,4 +7,3 @@
{% trans 'Email address activation sent' %}
{% trans "A confirmation link has been sent to the email address you submitted. Please check your email account and click on the confirmation link to add this address for your account." %}
{% endblock main %}
-
diff --git a/src/postorius/tests/mailman_api_tests/test_list_members.py b/src/postorius/tests/mailman_api_tests/test_list_members.py
index 9bb7984..21884d5 100644
--- a/src/postorius/tests/mailman_api_tests/test_list_members.py
+++ b/src/postorius/tests/mailman_api_tests/test_list_members.py
@@ -18,7 +18,7 @@
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
-from django.test import Client, SimpleTestCase
+from django.test import Client, TestCase
from django.test.utils import override_settings
from urllib2 import HTTPError
@@ -37,7 +37,7 @@
@override_settings(**API_CREDENTIALS)
-class ListMembersAccessTest(SimpleTestCase):
+class ListMembersAccessTest(TestCase):
"""Tests for the list members page.
Tests permissions and creation of list owners and moderators.
@@ -109,7 +109,7 @@
@override_settings(**API_CREDENTIALS)
-class AddOwnerTest(SimpleTestCase):
+class AddOwnerTest(TestCase):
"""Tests for the list members page.
Tests creation of list owners.
@@ -143,7 +143,7 @@
@override_settings(**API_CREDENTIALS)
-class AddModeratorTest(SimpleTestCase):
+class AddModeratorTest(TestCase):
"""Tests for the list members page.
Tests creation of moderators.
diff --git a/src/postorius/urls.py b/src/postorius/urls.py
index c4da4ac..aade8d5 100644
--- a/src/postorius/urls.py
+++ b/src/postorius/urls.py
@@ -42,7 +42,7 @@
ListSummaryView.as_view(
), name='list_summary'),
url(r'^subscribe$',
- ListSubsribeView.as_view(
+ ListSubscribeView.as_view(
), name='list_subscribe'),
url(r'^unsubscribe/(?P
[^/]+)$',
ListUnsubscribeView.as_view(
@@ -51,7 +51,7 @@
'list_subscriptions',
name='list_subscriptions'),
url(r'^mass_subscribe/$',
- ListMassSubsribeView.as_view(
+ ListMassSubscribeView.as_view(
), name='mass_subscribe'),
url(r'^delete$',
'list_delete', name='list_delete'),
diff --git a/src/postorius/views/list.py b/src/postorius/views/list.py
index bfdb4f5..d233b14 100644
--- a/src/postorius/views/list.py
+++ b/src/postorius/views/list.py
@@ -22,10 +22,10 @@
from django.contrib.auth.decorators import (login_required,
user_passes_test)
from django.core.urlresolvers import reverse
-from django.core.validators import validate_email
-from django.core.exceptions import ValidationError
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext
+from django.core.validators import validate_email
+from django.core.exceptions import ValidationError
from django.utils.decorators import method_decorator
from django.utils.translation import gettext as _
from urllib2 import HTTPError
@@ -190,7 +190,7 @@
context_instance=RequestContext(request))
-class ListSubsribeView(MailingListView):
+class ListSubscribeView(MailingListView):
"""Subscribe a mailing list."""
@@ -233,11 +233,11 @@
return redirect('list_summary', self.mailing_list.list_id)
-class ListMassSubsribeView(MailingListView):
+class ListMassSubscribeView(MailingListView):
"""Mass subscription."""
- @method_decorator(list_moderator_required)
+ @method_decorator(list_owner_required)
def get(self, request, *args, **kwargs):
form = ListMassSubscription()
return render_to_response('postorius/lists/mass_subscribe.html',
@@ -252,7 +252,7 @@
emails = request.POST["emails"].splitlines()
for email in emails:
try:
- validate_email(email)
+ validate_email(email)
self.mailing_list.subscribe(address=email)
messages.success(request,
'The address %s has been subscribed to %s.' %
@@ -267,7 +267,6 @@
email)
return redirect('mass_subscribe', self.mailing_list.list_id)
-
def _get_choosable_domains(request):
try:
domains = Domain.objects.all()
diff --git a/src/postorius/views/views.py b/src/postorius/views/views.py
deleted file mode 100644
index 1a9ca2d..0000000
--- a/src/postorius/views/views.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 1998-2015 by the Free Software Foundation, Inc.
-#
-# This file is part of Postorius.
-#
-# Postorius is free software: you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or (at your option)
-# any later version.
-#
-# Postorius is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-# more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# Postorius. If not, see .
-
-
-import re
-import sys
-import json
-import logging
-
-
-from django.conf import settings
-from django.contrib import messages
-from django.contrib.auth import logout, authenticate, login
-from django.contrib.auth.decorators import (login_required,
- permission_required,
- user_passes_test)
-from django.contrib.auth.forms import (AuthenticationForm, PasswordResetForm,
- SetPasswordForm, PasswordChangeForm)
-from django.contrib.auth.models import User
-from django.core.urlresolvers import reverse
-from django.http import HttpResponse, HttpResponseRedirect
-from django.shortcuts import render_to_response, redirect
-from django.template import Context, loader, RequestContext
-from django.utils.decorators import method_decorator
-from django.utils.translation import gettext as _
-from urllib2 import HTTPError
-
-from postorius import utils
-from postorius.models import (Domain, List, Member, MailmanUser,
- MailmanApiError, Mailman404Error)
-from postorius.forms import *
-from postorius.auth.decorators import *
-from postorius.views.generic import MailingListView, MailmanUserView
-
-
-logger = logging.getLogger(__name__)
diff --git a/testing/test_settings.py b/testing/test_settings.py
index 5cc5f93..155f454 100755
--- a/testing/test_settings.py
+++ b/testing/test_settings.py
@@ -149,13 +149,6 @@
return email.rsplit('@', 1)[0]
BROWSERID_USERNAME_ALGO = username
-TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
-NOSE_ARGS = [
- '--with-coverage',
- '--cover-package=postorius',
- '--cover-erase',
- '--cover-html',
-]
# Set VCR_RECORD_MODE to 'all' to re-record all API responses.
# (Remember to use an empty mailman database!)
diff --git a/tox.ini b/tox.ini
index cf34015..bb2acfd 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,37 +1,23 @@
[tox]
-envlist = py27-django{1.5,1.6,1.7}
+envlist = py27-django{16,17,18}
[testenv]
usedevelop = True
+deps =
+ -rdev-requirements.txt
+ django16: Django>=1.6,<1.7
+ django17: Django>=1.6,<1.8
+ django18: Django==1.8
commands =
django-admin.py test --settings=testing.test_settings {posargs:postorius}
setenv =
PYTHONPATH = {toxinidir}
-[base]
-deps =
- -rdev-requirements.txt
-
-[testenv:py27-django1.5]
-deps =
- {[base]deps}
- Django<1.6
-
-[testenv:py27-django1.6]
-deps =
- {[base]deps}
- Django<1.7
-
-[testenv:py27-django1.7]
-deps =
- {[base]deps}
- Django==1.7
-
[testenv:record]
basepython = python2.7
deps =
- {[base]deps}
- Django==1.7
+ -rdev-requirements.txt
+ Django==1.8
setenv =
PYTHONPATH = {toxinidir}
POSTORIUS_VCR_RECORD_MODE = all