diff --git a/src/postorius/auth/decorators.py b/src/postorius/auth/decorators.py index 0f12b55..16292e0 100644 --- a/src/postorius/auth/decorators.py +++ b/src/postorius/auth/decorators.py @@ -24,6 +24,7 @@ from postorius.models import (Domain, List, Member, MailmanUser, MailmanApiError, Mailman404Error) + def basic_auth_login(fn): def wrapper(*args, **kwargs): request = args[0] @@ -31,7 +32,8 @@ print 'already logged in' if not request.user.is_authenticated(): if request.META.has_key('HTTP_AUTHORIZATION'): - authmeth, auth = request.META['HTTP_AUTHORIZATION'].split(' ', 1) + authmeth, auth = request.META['HTTP_AUTHORIZATION'].split(' ', + 1) if authmeth.lower() == 'basic': auth = auth.strip().decode('base64') username, password = auth.split(':', 1) diff --git a/src/postorius/context_processors.py b/src/postorius/context_processors.py index ce7bf6c..d7a18f2 100644 --- a/src/postorius/context_processors.py +++ b/src/postorius/context_processors.py @@ -23,7 +23,9 @@ def postorius(request): """Add template variables to context. """ - # Use a template so that the page header/footer is suppressed when requested via AJAX + # Use a template so that the page header/footer is suppressed when + # requested via AJAX + if request.is_ajax(): template_to_extend = "postorius/base_ajax.html" else: diff --git a/src/postorius/doc/conf.py b/src/postorius/doc/conf.py index d308e7c..f49af68 100644 --- a/src/postorius/doc/conf.py +++ b/src/postorius/doc/conf.py @@ -3,7 +3,8 @@ # Postorius documentation build configuration file, created by # sphinx-quickstart on Wed Aug 17 15:43:10 2011. # -# This file is execfile()d with the current directory set to its containing dir. +# This file is execfile()d with the current directory set to its +# containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. @@ -11,7 +12,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import sys +import os # add dummy settings environment variable so sphinx can import from Postorius. os.environ['DJANGO_SETTINGS_MODULE'] = 'postorius.doc.settings' @@ -22,17 +24,17 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. +# documentation root, use os.path.abspath to make it absolute, like shown here #sys.path.insert(0, os.path.abspath('.')) -# -- General configuration ----------------------------------------------------- - +# -- General configuration ---------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.viewcode'] +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +# extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo', +# 'sphinx.ext.coverage', 'sphinx.ext.viewcode'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -73,7 +75,8 @@ # directories to ignore when looking for source files. exclude_patterns = ['_build'] -# The reST default role (used for this markup: `text`) to use for all documents. +# The reST default role (used for this markup: `text`) to use for all +# documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. @@ -94,7 +97,7 @@ #modindex_common_prefix = [] -# -- Options for HTML output --------------------------------------------------- +# -- Options for HTML output -------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. @@ -174,7 +177,7 @@ htmlhelp_basename = 'postoriusdoc' -# -- Options for LaTeX output -------------------------------------------------- +# -- Options for LaTeX output ------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' @@ -183,10 +186,10 @@ #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). +# (source start file, target name, title, author, documentclass [howto/manual]) latex_documents = [ - ('index', 'postoriusweb.tex', u'Postorius Documentation', - u'Mailman Coders', 'manual'), + ('index', 'postoriusweb.tex', u'Postorius Documentation', + u'Mailman Coders', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -213,7 +216,7 @@ #latex_domain_indices = True -# -- Options for manual page output -------------------------------------------- +# -- Options for manual page output ------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). @@ -223,7 +226,7 @@ ] -# -- Options for Epub output --------------------------------------------------- +# -- Options for Epub output -------------------------------------------------- # Bibliographic Dublin Core info. epub_title = u'postorius' diff --git a/src/postorius/doc/settings.py b/src/postorius/doc/settings.py index a7e4dd1..4809130 100755 --- a/src/postorius/doc/settings.py +++ b/src/postorius/doc/settings.py @@ -16,5 +16,5 @@ # You should have received a copy of the GNU General Public License along with # Postorius. If not, see . -"""This is just an empty settings file to make Sphinx able to export +"""This is just an empty settings file to make Sphinx able to export the DJANGO_SETTINGS_MODULE env variable before building the docs.""" diff --git a/src/postorius/forms.py b/src/postorius/forms.py index 1213269..2abfd18 100644 --- a/src/postorius/forms.py +++ b/src/postorius/forms.py @@ -214,26 +214,26 @@ required=False, label= _('Include RFC2369 headers'), help_text=_( - 'Yes is highly recommended. RFC 2369 defines a set of List-* ' - 'headers that are normally added to every message sent to the list ' - 'membership. These greatly aid end-users who are using standards ' - 'compliant mail readers. They should normally always be enabled. ' - 'However, not all mail readers are standards compliant yet, and if ' - 'you have a large number of members who are using non-compliant ' - 'mail readers, they may be annoyed at these headers. You should ' - 'first try to educate your members as to why these headers exist, ' - 'and how to hide them in their mail clients. As a last resort you ' - 'can disable these headers, but this is not recommended ' - '(and in fact, your ability to disable these headers may ' - 'eventually go away).')) + 'Yes is highly recommended. RFC 2369 defines a set of List-* ' + 'headers that are normally added to every message sent to the ' + 'list membership. These greatly aid end-users who are using ' + 'standards compliant mail readers. They should normally always ' + 'be enabled. However, not all mail readers are standards ' + 'compliant yet, and if you have a large number of members who are ' + 'using non-compliant mail readers, they may be annoyed at these ' + 'headers. You should first try to educate your members as to why ' + 'these headers exist, and how to hide them in their mail clients. ' + 'As a last resort you can disable these headers, but this is not ' + 'recommended (and in fact, your ability to disable these headers ' + 'may eventually go away).')) allow_list_posts = forms.TypedChoiceField( choices=choices, widget=forms.RadioSelect, label=_("Include the list post header"), help_text=_( - "This can be set to no for announce lists that do not wish to " - "include the List-Post header because posting to the list is " - "discouraged."), + "This can be set to no for announce lists that do not wish to " + "include the List-Post header because posting to the list is " + "discouraged."), ) archive_policy_choices = ( ("public", _("Public Archives")), @@ -255,8 +255,8 @@ widget=forms.RadioSelect, label=_('Autorespond to list owner'), help_text=( - 'Should Mailman send an auto-response to emails sent to the ' - '-owner address?')) + '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(), @@ -267,7 +267,7 @@ widget=forms.RadioSelect, label=_('Autorespond postings'), help_text=( - 'Should Mailman send an auto-response to mailing list posters?')) + 'Should Mailman send an auto-response to mailing list posters?')) autoresponse_postings_text = forms.CharField( label=_('Autoresponse postings text'), widget=forms.Textarea(), @@ -278,10 +278,10 @@ widget=forms.RadioSelect, label=_('Autorespond requests'), help_text=( - 'Should Mailman send an auto-response to emails sent to the ' - '-request address? If you choose yes, decide whether you want ' - 'Mailman to discard the original email, or forward it on to the ' - 'system as a normal mail command.')) + 'Should Mailman send an auto-response to emails sent to the ' + '-request address? If you choose yes, decide whether you want ' + 'Mailman to discard the original email, or forward it on to the ' + 'system as a normal mail command.')) autoresponse_request_text = forms.CharField( label=_('Autoresponse request text'), widget=forms.Textarea(), @@ -290,10 +290,10 @@ autoresponse_grace_period = forms.CharField( label=_('Autoresponse grace period'), help_text=( - 'Number of days between auto-responses to either the mailing list ' - 'or -request/-owner address from the same poster. Set to zero ' - '(or negative) for no grace period (i.e. auto-respond to every ' - 'message).')) + 'Number of days between auto-responses to either the mailing list ' + 'or -request/-owner address from the same poster. Set to zero ' + '(or negative) for no grace period (i.e. auto-respond to every ' + 'message).')) # This doesn't make sense as a configurable, so we're leaving it out # bounces_address = forms.EmailField( # label=_('Bounces Address'), @@ -304,7 +304,7 @@ widget=forms.RadioSelect, label=_('Advertise the existance of this list?'), help_text=( - 'Choose whether to include this list on the list of all lists')) + 'Choose whether to include this list on the list of all lists')) filter_content = forms.TypedChoiceField( coerce=lambda x: x == 'True', choices=((True, _('Yes')), (False, _('No'))), @@ -312,8 +312,8 @@ required=False, label=_('Filter content'), help_text=( - 'Should Mailman filter the content of list traffic according to ' - 'the settings below?')) + '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'))), @@ -321,8 +321,8 @@ required=False, label=_('Collapse alternatives'), help_text=( - 'Should Mailman collapse multipart/alternative to its first part ' - 'content?')) + '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'))), @@ -330,8 +330,8 @@ 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.')) + 'Should Mailman convert text/html parts to plain text? This ' + 'conversion happens after MIME attachments have been stripped.')) action_choices = ( ("hold", _("Hold for moderator")), ("reject", _("Reject (with notification)")), @@ -346,15 +346,15 @@ required=True, choices=action_choices, help_text=( - 'Default action to take when a member posts to the list. ' - 'Hold -- This holds the message for approval by the list ' - 'moderators.' - 'Reject -- this automatically rejects the message by sending a ' - 'bounce notice to the post\'s author. The text of the bounce ' - 'notice can be configured by you. ' - 'Discard -- this simply discards the message, with no notice ' - 'sent to the post\'s author. ' - 'Accept --accepts any postings to the list by default. ' + 'Default action to take when a member posts to the list. ' + 'Hold -- This holds the message for approval by the list ' + 'moderators.' + 'Reject -- this automatically rejects the message by sending a ' + 'bounce notice to the post\'s author. The text of the bounce ' + 'notice can be configured by you. ' + 'Discard -- this simply discards the message, with no notice ' + 'sent to the post\'s author. ' + 'Accept --accepts any postings to the list by default. ' 'Defer -- Defers any postings to the list by default. ')) default_nonmember_action = forms.ChoiceField( widget=forms.RadioSelect(), @@ -365,17 +365,17 @@ required=True, choices=action_choices, help_text=( - 'When a post from a non-member is received, the message\'s sender ' - 'is matched against the list of explicitly accepted, held, ' - 'rejected (bounced), and discarded addresses. ' - 'If no match is found, then this action is taken.')) + 'When a post from a non-member is received, the message\'s sender ' + 'is matched against the list of explicitly accepted, held, ' + 'rejected (bounced), and discarded addresses. ' + 'If no match is found, then this action is taken.')) description = forms.CharField( label=_('Description'), help_text=( 'This description is used when the mailing list is listed with ' - 'other mailing lists, or in headers, and so forth. It should be ' - 'as succinct as you can get it, while still identifying what the ' - 'list is.'), + 'other mailing lists, or in headers, and so forth. It should be ' + 'as succinct as you can get it, while still identifying what the ' + 'list is.'), widget=forms.Textarea()) digest_size_threshold = forms.DecimalField( label=_('Digest size threshold'), @@ -394,8 +394,8 @@ required=False, help_text=_( 'Should any existing Reply-To: header found in the original ' - 'message be stripped? If so, this will be done regardless of ' - 'whether an explict Reply-To: header is added by Mailman or not.') + 'message be stripped? If so, this will be done regardless of ' + 'whether an explict Reply-To: header is added by Mailman or not.') ) generic_nonmember_action = forms.IntegerField( label=_('Generic nonmember action'), @@ -409,11 +409,11 @@ 'invalid': _('Please enter a valid domain name.')}, required=True, help_text=( - "The \"host_name\" is the preferred name for email to " - "'mailman-related addresses on this host, and generally should be " - "the mail host's exchanger address, if any. This setting can be " - "useful for selecting among alternative names of a host that " - "has multiple addresses.")) + "The \"host_name\" is the preferred name for email to " + "'mailman-related addresses on this host, and generally should be " + "the mail host's exchanger address, if any. This setting can be " + "useful for selecting among alternative names of a host that " + "has multiple addresses.")) # informational, not editable # next_digest_number = forms.IntegerField( # label=_('Next digest number'), @@ -456,35 +456,37 @@ ("point_to_list", _("Reply goes to list")), ("explicit_header", _("Explicit Reply-to header set"))), help_text=( - 'Where are replies to list messages directed? No Munging is strongly ' - 'recommended for most mailing lists. \nThis option controls what ' - 'Mailman does to the Reply-To: header in messages flowing through ' - 'this mailing list. When set to No Munging, no Reply-To: header is ' - 'added by Mailman, although if one is present in the original ' - 'message, it is not stripped. Setting this value to either Reply to ' - 'List or Explicit Reply causes Mailman to insert a specific Reply-To: ' - 'header in all messages, overriding the header in the original ' - 'message if necessary (Explicit Reply inserts the value of ' - 'reply_to_address). There are many reasons not to introduce or ' - 'override the Reply-To: header. One is that some posters depend on ' - 'their own Reply-To: settings to convey their valid return address. ' - 'Another is that modifying Reply-To: makes it much more difficult to ' - 'send private replies. See `Reply-To\' Munging Considered Harmful for ' - 'a general discussion of this issue. See Reply-To Munging Considered ' - 'Useful for a dissenting opinion.Some mailing lists have restricted ' - 'posting privileges, with a parallel list devoted to discussions. ' - 'Examples are `patches\' or `checkin\' lists, where software changes ' - 'are posted by a revision control system, but discussion about the ' - 'changes occurs on a developers mailing list. To support these types ' - 'of mailing lists, select Explicit Reply and set the Reply-To: ' - 'address option to point to the parallel list. ')) + 'Where are replies to list messages directed? No Munging is ' + 'strongly recommended for most mailing lists. \nThis option ' + 'controls what Mailman does to the Reply-To: header in messages ' + 'flowing through this mailing list. When set to No Munging, no ' + 'Reply-To: header is ' + 'added by Mailman, although if one is present in the original ' + 'message, it is not stripped. Setting this value to either Reply ' + 'to List or Explicit Reply causes Mailman to insert a specific ' + 'Reply-To: header in all messages, overriding the header in the ' + 'original message if necessary (Explicit Reply inserts the value ' + 'of reply_to_address). There are many reasons not to introduce or ' + 'override the Reply-To: header. One is that some posters depend ' + 'on their own Reply-To: settings to convey their valid return ' + 'address. Another is that modifying Reply-To: makes it much more ' + 'difficult to send private replies. See `Reply-To\' Munging ' + 'Considered Harmful for a general discussion of this issue. ' + 'See Reply-To Munging Considered Useful for a dissenting opinion. ' + 'Some mailing lists have restricted ' + 'posting privileges, with a parallel list devoted to discussions. ' + 'Examples are `patches\' or `checkin\' lists, where software ' + 'changes are posted by a revision control system, but discussion ' + 'about the changes occurs on a developers mailing list. To ' + 'support these types of mailing lists, select Explicit Reply and ' + 'set the Reply-To: address option to point to the parallel list.')) reply_to_address = forms.CharField( label=_('Explicit reply-to address'), required=False, help_text=_( 'This option allows admins to set an explicit Reply-to address. ' - 'It is only used if the reply-to is set to use an explicitly set ' - 'header'), + 'It is only used if the reply-to is set to use an explicitly set ' + 'header'), ) # informational, not editable # request_address = forms.EmailField( @@ -497,16 +499,16 @@ required=False, label=_('Send welcome message'), help_text=( - 'Send welcome message to newly subscribed members? ' - 'Turn this off only if you plan on subscribing people manually ' - 'and don\'t want them to know that you did so. This option is most ' - 'useful for transparently migrating lists from some other mailing ' - 'list manager to Mailman.')) + 'Send welcome message to newly subscribed members? ' + 'Turn this off only if you plan on subscribing people manually ' + 'and don\'t want them to know that you did so. This option is ' + 'most useful for transparently migrating lists from some other ' + 'mailing list manager to Mailman.')) welcome_message_uri = forms.CharField( label=_('URI for the welcome message'), help_text=_( 'If a welcome message is to be sent to subscribers, you can ' - 'specify a URI that gives the text of this message.'), + 'specify a URI that gives the text of this message.'), ) # tko - look this up # scheme = forms.CharField( @@ -517,41 +519,42 @@ label=_("Acceptable aliases"), required=False, help_text=( - 'Alias names which qualify as explicit to or cc destination names ' - 'for this list. Alternate addresses that are acceptable when ' - '`require_explicit_destination\' is enabled. This option takes a ' - 'list of regular expressions, one per line, which is matched against ' - 'every recipient address in the message. The matching is performed ' - 'with Python\'s re.match() function, meaning they are anchored to ' - 'the start of the string.')) + 'Alias names which qualify as explicit to or cc destination names ' + 'for this list. Alternate addresses that are acceptable when ' + '`require_explicit_destination\' is enabled. This option takes a ' + 'list of regular expressions, one per line, which is matched ' + 'against every recipient address in the message. The matching is ' + 'performed with Python\'s re.match() function, meaning they are ' + 'anchored to the start of the string.')) admin_immed_notify = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Admin immed notify'), help_text=( - 'Should the list moderators get immediate notice of new requests, ' - 'as well as daily notices about collected ones? List moderators ' - '(and list administrators) are sent daily reminders of requests ' - 'pending approval, like subscriptions to a moderated list, ' - 'or postings that are being held for one reason or another. ' - 'Setting this option causes notices to be sent immediately on the ' - 'arrival of new requests as well. ')) + 'Should the list moderators get immediate notice of new requests, ' + 'as well as daily notices about collected ones? List moderators ' + '(and list administrators) are sent daily reminders of requests ' + 'pending approval, like subscriptions to a moderated list, ' + 'or postings that are being held for one reason or another. ' + 'Setting this option causes notices to be sent immediately on the ' + 'arrival of new requests as well. ')) admin_notify_mchanges = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Notify admin of membership changes'), help_text=( - 'Should administrator get notices of subscribes and unsubscribes?')) + 'Should administrator get notices of subscribes and unsubscribes?' + )) administrivia = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Administrivia'), help_text=( - 'Administrivia tests will check postings to see whether it\'s ' - 'really meant as an administrative request (like subscribe, ' - 'unsubscribe, etc), and will add it to the the administrative ' - 'requests queue, notifying the administrator of the new request, ' - 'in the process.')) + 'Administrivia tests will check postings to see whether it\'s ' + 'really meant as an administrative request (like subscribe, ' + 'unsubscribe, etc), and will add it to the the administrative ' + 'requests queue, notifying the administrator of the new request, ' + 'in the process.')) anonymous_list = forms.TypedChoiceField( coerce=lambda x: x == 'True', choices=((True, _('Yes')), (False, _('No'))), @@ -559,8 +562,8 @@ 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)')) + 'Hide the sender of a message, replacing it with the list address ' + '(Removes From, Sender and Reply-To fields)')) # Informational field, not needed. # created_at = forms.IntegerField( # label=_('Created at'), @@ -717,7 +720,7 @@ class UserPreferences(FieldsetForm): """ - Form handling the user's global, address and subscription based preferences. + Form handling the user's global, address and subscription based preferences """ choices = ((True, _('Yes')), (False, _('No'))) @@ -733,55 +736,58 @@ required=False, label=_('Delivery status'), help_text=_( - 'Set this option to Enabled to receive messages posted to this ' - 'mailing list. Set it to Disabled if you want to stay subscribed, ' - 'but don\'t want mail delivered to you for a while (e.g. you\'re ' - 'going on vacation). If you disable mail delivery, don\'t forget to ' - 're-enable it when you come back; it will not be automatically ' - 're-enabled.')) + 'Set this option to Enabled to receive messages posted to this ' + 'mailing list. Set it to Disabled if you want to stay subscribed, ' + 'but don\'t want mail delivered to you for a while (e.g. you\'re ' + 'going on vacation). If you disable mail delivery, don\'t forget ' + 'to re-enable it when you come back; it will not be automatically ' + 're-enabled.')) delivery_mode = forms.ChoiceField( widget=forms.Select(), choices=delivery_mode_choices, required=False, label=_('Delivery mode'), help_text=_( - 'If you select summary digests , you\'ll get posts bundled together ' - '(usually one per day but possibly more on busy lists), instead of ' - 'singly when they\'re sent. Your mail reader may or may not support ' - 'MIME digests. In general MIME digests are preferred, but if you ' - 'have a problem reading them, select plain text digests.')) + 'If you select summary digests , you\'ll get posts bundled ' + 'together (usually one per day but possibly more on busy lists), ' + 'instead of singly when they\'re sent. Your mail reader may or ' + 'may not support MIME digests. In general MIME digests are ' + 'preferred, but if you have a problem reading them, select ' + 'plain text digests.')) receive_own_postings = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Receive own postings'), help_text=_( - 'Ordinarily, you will get a copy of every message you post to the ' - 'list. If you don\'t want to receive this copy, set this option to No' - )) + 'Ordinarily, you will get a copy of every message you post to the ' + 'list. If you don\'t want to receive this copy, set this option ' + 'to No.' + )) acknowledge_posts = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Acknowledge posts'), help_text=_( - 'Receive acknowledgement mail when you send mail to the list?')) + 'Receive acknowledgement mail when you send mail to the list?')) hide_address = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Hide address'), help_text=_( - 'When someone views the list membership, your email address is ' - 'normally shown (in an obscured fashion to thwart spam harvesters). ' - 'If you do not want your email address to show up on this ' - 'membership roster at all, select Yes for this option.')) + 'When someone views the list membership, your email address is ' + 'normally shown (in an obscured fashion to thwart spam ' + 'harvesters). ' + 'If you do not want your email address to show up on this ' + 'membership roster at all, select Yes for this option.')) receive_list_copy = forms.BooleanField( widget=forms.RadioSelect(choices=choices), required=False, label=_('Receive list copy'), help_text=_( - 'When you are listed explicitly in the To: or Cc: headers of a ' - 'list message, you can opt to not receive another copy from the ' - 'mailing list. Select Yes to avoid receiving copies from the ' - 'mailing list; select No to receive copies. ')) + 'When you are listed explicitly in the To: or Cc: headers of a ' + 'list message, you can opt to not receive another copy from the ' + 'mailing list. Select Yes to avoid receiving copies from the ' + 'mailing list; select No to receive copies. ')) class Meta: diff --git a/src/postorius/tests/test_auth_decorators.py b/src/postorius/tests/test_auth_decorators.py index 2017819..0ebf9e6 100644 --- a/src/postorius/tests/test_auth_decorators.py +++ b/src/postorius/tests/test_auth_decorators.py @@ -138,7 +138,8 @@ request.user = User.objects.create_superuser('su2', 'su@sodo.org', 'pwd') return_value = dummy_function_mod_req(request, - fqdn_listname='foolist@example.org') + fqdn_listname= + 'foolist@example.org') self.assertEqual(return_value, True) @patch.object(Client, 'get_list') @@ -167,7 +168,8 @@ request.user = User.objects.create_user('les cl3', 'les@primus.org', 'pwd') return_value = dummy_function_mod_req(request, - fqdn_listname='foolist@example.org') + fqdn_listname= + 'foolist@example.org') self.assertEqual(return_value, True) @patch.object(Client, 'get_list') @@ -182,5 +184,6 @@ request.user = User.objects.create_user('les cl4', 'les@primus.org', 'pwd') return_value = dummy_function_mod_req(request, - fqdn_listname='foolist@example.org') + fqdn_listname= + 'foolist@example.org') self.assertEqual(return_value, True) diff --git a/src/postorius/urls.py b/src/postorius/urls.py index 8c147d9..b365ccf 100644 --- a/src/postorius/urls.py +++ b/src/postorius/urls.py @@ -44,24 +44,31 @@ ListUnsubscribeView.as_view( ), name='list_unsubscribe'), url(r'^subscriptions$', - 'list_subscriptions', name='list_subscriptions'), + 'list_subscriptions', + name='list_subscriptions'), url(r'^mass_subscribe/$', ListMassSubsribeView.as_view( ), name='mass_subscribe'), url(r'^delete$', 'list_delete', name='list_delete'), url(r'^held_messages/(?P[^/]+)/' - 'accept$', 'accept_held_message', name='accept_held_message'), + 'accept$', 'accept_held_message', + name='accept_held_message'), url(r'^held_messages/(?P[^/]+)/' - 'discard$', 'discard_held_message', name='discard_held_message'), + 'discard$', 'discard_held_message', + name='discard_held_message'), url(r'^held_messages/(?P[^/]+)/' - 'defer$', 'defer_held_message', name='defer_held_message'), + 'defer$', 'defer_held_message', + name='defer_held_message'), url(r'^held_messages/(?P[^/]+)/' - 'reject$', 'reject_held_message', name='reject_held_message'), + 'reject$', 'reject_held_message', + name='reject_held_message'), url(r'^held_messages$', - 'list_held_messages', name='list_held_messages'), + 'list_held_messages', + name='list_held_messages'), url(r'^settings/(?P[^/]+)?' - '(?:/(?P.*))?$', 'list_settings', + '(?:/(?P.*))?$', + 'list_settings', name='list_settings'), ) diff --git a/src/postorius/utils.py b/src/postorius/utils.py index 587f6c4..21fbe35 100644 --- a/src/postorius/utils.py +++ b/src/postorius/utils.py @@ -44,5 +44,6 @@ """ return render_to_response( 'postorius/errors/generic.html', - {'error': "Mailman REST API not available. Please start Mailman core."}, + {'error': "Mailman REST API not available. " + "Please start Mailman core."}, context_instance=RequestContext(request))