s."""
output = ""
#Adding Errors
- try: output += str(self.errors["NON_FIELD_ERRORS"])
- except: pass
+ try:
+ output += str(self.errors["NON_FIELD_ERRORS"])
+ except:
+ pass
#create the fieldsets
for index in range(len(self.layout)):
output += self.create_fieldset(self.layout[index])
@@ -61,9 +65,10 @@
it should include.
"""
# Create the divs in each fieldset by calling create_divs.
- return u'
' % (
+ field[0],
self.create_divs(field[1:]))
-
+
def create_divs(self, fields):
"""Create a
for each field."""
output = ""
@@ -73,17 +78,18 @@
field_instance = self.fields[field]
except KeyError:
# could not create the instance so throw an exception
- # msg on a separate line since the line got too long
+ # msg on a separate line since the line got too long
# otherwise
msg = "Could not resolve form field '%s'." % field
raise FieldsetError(msg)
- # create a bound field containing all the necessary fields
+ # create a bound field containing all the necessary fields
# from the form
bound_field = BoundField(self, field_instance, field)
- output += '
%(label)s%(help_text)s%(errors)s%(field)s
\n' % \
- {'class': bound_field.name,
- 'label': bound_field.label,
- 'help_text': bound_field.help_text,
- 'errors': bound_field.errors,
- 'field': unicode(bound_field)}
+ output += '
%(label)s%(help_text)s%' \
+ '(errors)s%(field)s
\n' % \
+ {'class': bound_field.name,
+ 'label': bound_field.label,
+ 'help_text': bound_field.help_text,
+ 'errors': bound_field.errors,
+ 'field': unicode(bound_field)}
return output
diff --git a/src/postorius/forms.py b/src/postorius/forms.py
index b340d01..69d2f47 100644
--- a/src/postorius/forms.py
+++ b/src/postorius/forms.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright (C) 1998-2012 by the Free Software Foundation, Inc.
+# Copyright (C) 2012 by the Free Software Foundation, Inc.
#
# This file is part of Postorius.
#
@@ -21,31 +21,28 @@
from django.utils.translation import gettext as _
from fieldset_forms import FieldsetForm
-#Fieldsets for use within the views
+
class DomainNew(FieldsetForm):
- """
+ """
Form field to add a new domain
"""
mail_host = forms.CharField(
- label = _('Mail Host'),
- error_messages = {'required': _('Please a domain name'),
- 'invalid': _('Please enter a valid domain name.')},
- required = True
- )
+ label=_('Mail Host'),
+ error_messages={'required': _('Please a domain name'),
+ 'invalid': _('Please enter a valid domain name.')},
+ required=True)
web_host = forms.CharField(
- label = _('Web Host'),
- error_messages = {'required': _('Please a domain name'),
- 'invalid': _('Please enter a valid domain name.')},
- required = True
- )
+ label=_('Web Host'),
+ error_messages={'required': _('Please a domain name'),
+ 'invalid': _('Please enter a valid domain name.')},
+ required=True)
description = forms.CharField(
- label = _('Description'),
- required = False
- )
+ label=_('Description'),
+ required=False)
info = forms.CharField(
- label = _('Information'),
- required = False
- )
+ label=_('Information'),
+ required=False)
+
def clean_mail_host(self):
mail_host = self.cleaned_data['mail_host']
try:
@@ -56,85 +53,78 @@
def clean_web_host(self):
web_host = self.cleaned_data['web_host']
- try:
+ try:
validate_email('mail@' + web_host)
- except:
+ except:
raise forms.ValidationError(_("Please enter a valid Web Host"))
return web_host
-
+
class Meta:
"""
Class to handle the automatic insertion of fieldsets and divs.
-
- To use it: add a list for each wished fieldset. The first item in
- the list should be the wished name of the fieldset, the following
+
+ To use it: add a list for each wished fieldset. The first item in
+ the list should be the wished name of the fieldset, the following
the fields that should be included in the fieldset.
"""
layout = [["Please enter Details",
"mail_host",
"web_host",
- "description",]]
+ "description"]]
-
+
class ListNew(FieldsetForm):
"""
- Form fields to add a new list. Languages are hard coded which should
+ Form fields to add a new list. Languages are hard coded which should
be replaced by a REST lookup of available languages.
- """
+ """
listname = forms.CharField(
- label = _('List Name'),
- required = True,
- error_messages = {'required': _('Please enter a name for your list.'),
- 'invalid': _('Please enter a valid list name.')}
- )
-
+ label=_('List Name'),
+ required=True,
+ error_messages={'required': _('Please enter a name for your list.'),
+ 'invalid': _('Please enter a valid list name.')})
mail_host = forms.ChoiceField()
-
list_owner = forms.EmailField(
- label = _('Inital list owner address'),
- error_messages = {
- 'required': _("Please enter the list owner's email address."),
- },
- required = True)
+ label=_('Inital list owner address'),
+ error_messages={
+ 'required': _("Please enter the list owner's email address.")},
+ required=True)
advertised = forms.ChoiceField(
- widget = forms.RadioSelect(),
- label = _('Advertise this list?'),
- error_messages = {
- 'required': _("Please choose a list type."),
- },
- required = True,
- choices = (
+ widget=forms.RadioSelect(),
+ label=_('Advertise this list?'),
+ error_messages={
+ 'required': _("Please choose a list type.")},
+ required=True,
+ choices=(
(True, _("Advertise this list in list index")),
- (False, _("Hide this list in list index")),
- ))
+ (False, _("Hide this list in list index"))))
description = forms.CharField(
- label = _('Description'),
- required = True)
+ label=_('Description'),
+ required=True)
- def __init__(self,domain_choices, *args, **kwargs):
- super(ListNew, self).__init__(*args, **kwargs)
+ def __init__(self, domain_choices, *args, **kwargs):
+ super(ListNew, self).__init__(*args, **kwargs)
self.fields["mail_host"] = forms.ChoiceField(
- widget = forms.Select(),
- label = _('Mail Host'),
- required = True,
- choices = domain_choices,
- error_messages = {'required': _("Choose an existing Domain."),
- 'invalid':"ERROR-todo_forms.py" }#todo
- )
-
+ widget=forms.Select(),
+ label=_('Mail Host'),
+ required=True,
+ choices=domain_choices,
+ error_messages={'required': _("Choose an existing Domain."),
+ 'invalid': "ERROR-todo_forms.py"})
+
def clean_listname(self):
- try:
- validate_email(self.cleaned_data['listname']+'@example.net')
- except:
+ try:
+ validate_email(self.cleaned_data['listname'] + '@example.net')
+ except:
raise forms.ValidationError(_("Please enter a valid listname"))
return self.cleaned_data['listname']
class Meta:
"""
Class to handle the automatic insertion of fieldsets and divs.
-
- To use it: add a list for each wished fieldset. The first item in
- the list should be the wished name of the fieldset, the following
+
+ To use it: add a list for each wished fieldset. The first item in
+ the list should be the wished name of the fieldset, the following
the fields that should be included in the fieldset.
"""
layout = [["List Details",
@@ -142,610 +132,527 @@
"mail_host",
"list_owner",
"description",
- "advertised"],]
+ "advertised"], ]
+
class ListSubscribe(FieldsetForm):
"""Form fields to join an existing list.
"""
- email = forms.EmailField(label = _('Your email address'),
- widget = forms.HiddenInput(),
- error_messages = {'required': _('Please enter an email address.'),
- 'invalid': _('Please enter a valid email address.')})
+ email = forms.EmailField(
+ label=_('Your email address'),
+ widget=forms.HiddenInput(),
+ 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)
-
+
+
class ListUnsubscribe(FieldsetForm):
"""Form fields to leave an existing list.
"""
- email = forms.EmailField(label = _('Your email address'),
- widget = forms.HiddenInput(),
- error_messages = {
- 'required': _('Please enter an email address.'),
+ email = forms.EmailField(
+ label=_('Your email address'),
+ widget=forms.HiddenInput(),
+ error_messages={
+ 'required': _('Please enter an email address.'),
'invalid': _('Please enter a valid email address.')})
+
class ListSettings(FieldsetForm):
"""Form fields dealing with the list settings.
"""
choices = ((True, _('Yes')), (False, _('No')))
list_name = forms.CharField(
- label = _('List Name'),
- required = False,
- )
+ label=_('List Name'),
+ required=False)
host_name = forms.CharField(
- label = _('Domain host name'),
- required = False,
- )
+ label=_('Domain host name'),
+ required=False)
fqdn_listname = forms.CharField(
- label = _('Fqdn listname'),
- required = False,
- )
+ label=_('Fqdn listname'),
+ required=False)
include_list_post_header = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Include list post header'),
- )
+ widget=forms.RadioSelect,
+ required=False,
+ label= _('Include list post header'))
include_rfc2369_headers = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Include RFC2369 headers'),
- )
+ widget=forms.RadioSelect,
+ required=False,
+ label= _('Include RFC2369 headers'))
autorespond_choices = (
("none", _("No automatic response")),
("respond_and_discard", _("Respond and discard message")),
- ("respond_and_continue", _("Respond and continue processing")),
- )
+ ("respond_and_continue", _("Respond and continue processing")))
autorespond_owner = forms.ChoiceField(
- choices = autorespond_choices,
- widget = forms.RadioSelect,
- label = _('Autorespond to list owner'),
- )
+ choices=autorespond_choices,
+ widget=forms.RadioSelect,
+ label=_('Autorespond to list owner'))
autoresponse_owner_text = forms.CharField(
- label = _('Autoresponse owner text'),
- widget = forms.Textarea(),
- required = False,
- )
+ label=_('Autoresponse owner text'),
+ widget=forms.Textarea(),
+ required=False)
autorespond_postings = forms.ChoiceField(
- choices = autorespond_choices,
- widget = forms.RadioSelect,
- label = _('Autorespond postings'),
- )
+ choices=autorespond_choices,
+ widget=forms.RadioSelect,
+ label=_('Autorespond postings'))
autoresponse_postings_text = forms.CharField(
- label = _('Autoresponse postings text'),
- widget = forms.Textarea(),
- required = False,
- )
+ label=_('Autoresponse postings text'),
+ widget=forms.Textarea(),
+ required=False)
autorespond_requests = forms.ChoiceField(
- choices = autorespond_choices,
- widget = forms.RadioSelect,
- label = _('Autorespond requests'),
- )
+ choices=autorespond_choices,
+ widget=forms.RadioSelect,
+ label=_('Autorespond requests'))
autoresponse_request_text = forms.CharField(
- label = _('Autoresponse request text'),
- widget = forms.Textarea(),
- required = False,
- )
+ label=_('Autoresponse request text'),
+ widget=forms.Textarea(),
+ required=False)
autoresponse_grace_period = forms.CharField(
- label = _('Autoresponse grace period'),
- )
+ label=_('Autoresponse grace period'))
bounces_address = forms.EmailField(
- label = _('Bounces Address'),
- required = False,
- )
- #ban_list = forms.CharField(
- #label = _('Ban list'),
- #widget = forms.Textarea
- #)
- #bounce_info_stale_after = forms.CharField(
- #label = _('Bounce info stale after'),
- #)
- #bounce_matching_headers = forms.CharField(
- #label = _('Bounce matching headers'),
- #)
- #bounce_notify_owner_on_disable = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Bounce notify owner on disable'),
- #)
- #bounce_notify_owner_on_removal = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Bounce notify owner on removal'),
- #)
- #bounce_processing = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Bounce processing'),
- #)
- #bounce_score_threshold = forms.IntegerField(
- #label = _('Bounce score threshold'),
- #error_messages = {
- #'invalid': _('Please provide an integer.')
- #}
- #)
- #bounce_score_threshold = forms.IntegerField(
- #label = _('Bounce score threshold'),
- #error_messages = {
- #'invalid': _('Please provide an integer.')
- #}
- #)
- #bounce_unrecognized_goes_to_list_owner = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Bounce unrecognized goes to list owner'),
- #)
- #bounce_you_are_disabled_warnings = forms.IntegerField(
- #label = _('Bounce you are disabled warnings'),
- #error_messages = {
- #'invalid': _('Please provide an integer.')
- #}
- #)
- #bounce_you_are_disabled_warnings_interval = forms.CharField(
- #label = _('Bounce you are disabled warnings interval'),
- #)
- #archive = forms.BooleanField(
- #widget = forms.RadioSelect(choices=choices),
- #required = False,
- #label = _('Archive'),
- #)
- #archive_private = forms.BooleanField(
- #widget = forms.RadioSelect(choices=choices),
- #required = False,
- #label = _('Private Archive'),
- #)
+ label=_('Bounces Address'),
+ required=False)
+ # ban_list = forms.CharField(
+ # label=_('Ban list'),
+ # widget=forms.Textarea)
+ # bounce_info_stale_after = forms.CharField(
+ # label=_('Bounce info stale after') )
+ # bounce_matching_headers = forms.CharField(
+ # label=_('Bounce matching headers'))
+ # bounce_notify_owner_on_disable = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Bounce notify owner on disable'))
+ # bounce_notify_owner_on_removal = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Bounce notify owner on removal'))
+ # bounce_processing = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Bounce processing'))
+ # bounce_score_threshold = forms.IntegerField(
+ # label=_('Bounce score threshold'),
+ # error_messages={
+ # 'invalid': _('Please provide an integer.')})
+ # bounce_score_threshold = forms.IntegerField(
+ # label=_('Bounce score threshold'),
+ # error_messages={
+ # 'invalid': _('Please provide an integer.')})
+ # bounce_unrecognized_goes_to_list_owner = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Bounce unrecognized goes to list owner'))
+ # bounce_you_are_disabled_warnings = forms.IntegerField(
+ # label=_('Bounce you are disabled warnings'),
+ # error_messages={
+ # 'invalid': _('Please provide an integer.')})
+ # bounce_you_are_disabled_warnings_interval = forms.CharField(
+ # label=_('Bounce you are disabled warnings interval'))
+ # archive = forms.BooleanField(
+ # widget=forms.RadioSelect(choices=choices),
+ # required=False,
+ # label=_('Archive'))
+ # archive_private = forms.BooleanField(
+ # widget=forms.RadioSelect(choices=choices),
+ # required=False,
+ # label=_('Private Archive'))
advertised = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- label = _('Advertise the existance of this list?'),
- )
+ widget=forms.RadioSelect,
+ label=_('Advertise the existance of this list?'))
filter_content = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Filter content'),
- )
+ widget=forms.RadioSelect,
+ required=False,
+ label=_('Filter content'))
collapse_alternatives = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Collapse alternatives'),
- )
+ widget=forms.RadioSelect,
+ required=False,
+ label=_('Collapse alternatives'))
convert_html_to_plaintext = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Convert html to plaintext'),
- )
- #default_member_moderation = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Default member moderation'),
- #)
+ widget=forms.RadioSelect,
+ required=False,
+ label=_('Convert html to plaintext'))
+ # default_member_moderation = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Default member moderation'))
action_choices = (
("hold", _("Hold for moderator")),
("reject", _("Reject (with notification)")),
("discard", _("Discard (no notification)")),
("accept", _("Accept")),
- ("defer", _("Defer")),
- )
+ ("defer", _("Defer")))
default_member_action = forms.ChoiceField(
- widget = forms.RadioSelect(),
- label = _('Default action to take when a member posts to the list: '),
- error_messages = {
- 'required': _("Please choose a default member action."),
- },
- required = True,
- choices = action_choices,
- )
+ widget=forms.RadioSelect(),
+ label=_('Default action to take when a member posts to the list: '),
+ error_messages={
+ 'required': _("Please choose a default member action.")},
+ required=True,
+ choices=action_choices)
default_nonmember_action = forms.ChoiceField(
- widget = forms.RadioSelect(),
- label = _('Default action to take when a non-member posts to the list: '),
- error_messages = {
- 'required': _("Please choose a default non-member action."),
- },
- required = True,
- choices = action_choices,
- )
+ widget=forms.RadioSelect(),
+ label=_('Default action to take when a non-member posts to the'
+ 'list: '),
+ error_messages={
+ 'required': _("Please choose a default non-member action.")},
+ required=True,
+ choices=action_choices)
description = forms.CharField(
- label = _('Description'),
- widget = forms.Textarea()
- )
- #digest_footer = forms.CharField(
- #label = _('Digest footer'),
- #)
- #digest_header = forms.CharField(
- #label = _('Digest header'),
- #)
- #digest_is_default = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Digest is default'),
- #)
- #digest_send_periodic = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Digest send periodic'),
- #)
+ label=_('Description'),
+ widget=forms.Textarea())
+ # digest_footer = forms.CharField(
+ # label=_('Digest footer'))
+ # digest_header = forms.CharField(
+ # label=_('Digest header'))
+ # digest_is_default = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Digest is default'))
+ # digest_send_periodic = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Digest send periodic'))
digest_size_threshold = forms.DecimalField(
- label = _('Digest size threshold'),
+ label=_('Digest size threshold'),
)
- #digest_volume_frequency = forms.CharField(
- #label = _('Digest volume frequency'),
- #)
- #digestable = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Digestable'),
- #)
+ # digest_volume_frequency = forms.CharField(
+ # label=_('Digest volume frequency'))
+ # digestable = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Digestable'))
digest_last_sent_at = forms.IntegerField(
- label = _('Digest last sent at'),
- error_messages = {
- 'invalid': _('Please provide an integer.'),
- },
- required = False,
- )
- #discard_these_nonmembers = forms.CharField(
- #label = _('Discard these nonmembers'),
- #widget = forms.Textarea
- #)
- #emergency = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Emergency'),
- #)
- #encode_ascii_prefixes = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Encode ascii prefixes'),
- #)
+ label=_('Digest last sent at'),
+ error_messages={
+ 'invalid': _('Please provide an integer.')},
+ required=False)
+ # discard_these_nonmembers = forms.CharField(
+ # label=_('Discard these nonmembers'),
+ # widget=forms.Textarea)
+ # emergency = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Emergency'))
+ # encode_ascii_prefixes = forms.BooleanField(
+ # widget=forms.RadioSelect(choices = choices),
+ # required=False,
+ # label=_('Encode ascii prefixes'))
#first_strip_reply_to = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('First strip reply to'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('First strip reply to'),
#)
#forward_auto_discards = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Forward auto discards'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Forward auto discards'),
#)
#gateway_to_mail = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Gateway to mail'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Gateway to mail'),
#)
#gateway_to_news = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Gateway to news'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Gateway to news'),
#)
generic_nonmember_action = forms.IntegerField(
- label = _('Generic nonmember action'),
- error_messages = {
+ label=_('Generic nonmember action'),
+ error_messages={
'invalid': _('Please provide an integer.')
}
)
#goodbye_msg = forms.CharField(
- #label = _('Goodbye message'),
+ #label=_('Goodbye message'),
#)
#header_matches = forms.CharField(
- #label = _('Header matches'),
- #widget = forms.Textarea
+ #label=_('Header matches'),
+ #widget=forms.Textarea
#)
#hold_these_nonmembers = forms.CharField(
- #label = _('Hold these nonmembers'),
- #widget = forms.Textarea
+ #label=_('Hold these nonmembers'),
+ #widget=forms.Textarea
#)
#info = forms.CharField(
- #label = _('Information'),
+ #label=_('Information'),
#)
#linked_newsgroup = forms.CharField(
- #label = _('Linked newsgroup'),
+ #label=_('Linked newsgroup'),
#)
mail_host = forms.CharField(
- label = _('Mail Host'),
- error_messages = {'required': _('Please a domain name'),
- 'invalid': _('Please enter a valid domain name.')},
- required = True
- )
+ label=_('Mail Host'),
+ error_messages={'required': _('Please a domain name'),
+ 'invalid': _('Please enter a valid domain name.')},
+ required=True)
#max_days_to_hold = forms.IntegerField(
- #label = _('Maximum days to hold'),
- #error_messages = {
+ #label=_('Maximum days to hold'),
+ #error_messages={
#'invalid': _('Please provide an integer.')
#}
#)
#max_message_size = forms.IntegerField(
- #label = _('Maximum message size'),
- #error_messages = {
+ #label=_('Maximum message size'),
+ #error_messages={
#'invalid': _('Please provide an integer.')
#}
#)
#max_num_recipients = forms.IntegerField(
- #label = _('Maximum number of recipients'),
- #error_messages = {
+ #label=_('Maximum number of recipients'),
+ #error_messages={
#'invalid': _('Please provide an integer.')
#}
#)
#member_moderation_action = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Member moderation action'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Member moderation action'),
#)
#member_moderation_notice = forms.CharField(
- #label = _('Member moderation notice'),
+ #label=_('Member moderation notice'),
#)
#mime_is_default_digest = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Mime is default digest'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Mime is default digest'),
#)
#moderator_password = forms.CharField(
- #label = _('Moderator password'),
- #widget = forms.PasswordInput,
- #error_messages = {'required': _('Please enter your password.'),
+ #label=_('Moderator password'),
+ #widget=forms.PasswordInput,
+ #error_messages={'required': _('Please enter your password.'),
#'invalid': _('Please enter a valid password.')},
#)
#msg_footer = forms.CharField(
- #label = _('Message footer'),
+ #label=_('Message footer'),
#)
#msg_header = forms.CharField(
- #label = _('Message header'),
+ #label=_('Message header'),
#)
#new_member_options = forms.IntegerField(
- #label = _('New member options'),
- #error_messages = {
+ #label=_('New member options'),
+ #error_messages={
#'invalid': _('Please provide an integer.')
#}
#)
#news_moderation = forms.CharField(
- #label = _('News moderation'),
+ #label=_('News moderation'),
#)
#news_prefix_subject_too = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('News prefix subject too'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('News prefix subject too'),
#)
#nntp_host = forms.CharField(
- #label = _('Nntp host'),
+ #label=_('Nntp host'),
#)
#nondigestable = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Nondigestable'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Nondigestable'),
#)
#nonmember_rejection_notice = forms.CharField(
- #label = _('Nonmember rejection notice'),
+ #label=_('Nonmember rejection notice'),
#)
next_digest_number = forms.IntegerField(
- label = _('Next digest number'),
- error_messages = {
+ label=_('Next digest number'),
+ error_messages={
'invalid': _('Please provide an integer.'),
},
- required = False,
+ required=False,
)
no_reply_address = forms.EmailField(
- label = _('No reply address'),
- required = False,
+ label=_('No reply address'),
+ required=False,
)
#obscure_addresses = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Obscure addresses'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Obscure addresses'),
#)
#personalize = forms.CharField(
- #label = _('Personalize'),
+ #label=_('Personalize'),
#)
posting_pipeline = forms.CharField(
- label = _('Pipeline'),
+ label=_('Pipeline'),
)
post_id = forms.IntegerField(
- label = _('Post ID'),
- error_messages = {
+ label=_('Post ID'),
+ error_messages={
'invalid': _('Please provide an integer.'),
},
- required = False,
+ required=False,
)
#preferred_language = forms.CharField(
- #label = _('Preferred language'),
+ #label=_('Preferred language'),
#)
#private_roster = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Private roster'),
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Private roster'),
#)
display_name = forms.CharField(
- label = _('Display name'),
+ label=_('Display name'),
)
#reject_these_nonmembers = forms.CharField(
- #label = _('Reject these nonmembers'),
- #widget = forms.Textarea
+ #label=_('Reject these nonmembers'),
+ #widget=forms.Textarea
#)
-
reply_goes_to_list = forms.ChoiceField(
- label = _('Reply goes to list'),
- widget = forms.Select(),
- error_messages = {
- 'required': _("Please choose a reply-to action."),
- },
- choices = (
+ label=_('Reply goes to list'),
+ widget=forms.Select(),
+ error_messages={
+ 'required': _("Please choose a reply-to action.")},
+ choices=(
("no_munging", _("No Munging")),
("point_to_list", _("Reply goes to list")),
- ("explicit_header", _("Explicit Reply-to header set")),
- ),
- )
+ ("explicit_header", _("Explicit Reply-to header set"))))
#reply_to_address = forms.EmailField(
- #label = _('Reply to address'),
- #)
+ #label=_('Reply to address'))
#require_explicit_destination = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Require explicit destination'),
- #)
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Require explicit destination'))
#respond_to_post_requests = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Respond to post requests'),
- #)
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Respond to post requests'))
request_address = forms.EmailField(
- label = _('Request address'),
- required = False,
- )
+ label=_('Request address'),
+ required=False)
#scrub_nondigest = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Scrub nondigest'),
- #)
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Scrub nondigest'))
#send_goodbye_msg = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Send goodbye message'),
- #)
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Send goodbye message'))
#send_reminders = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Send reminders'),
- #)
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Send reminders'))
send_welcome_message = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Send welcome message'),
- )
+ widget=forms.RadioSelect,
+ required=False,
+ label=_('Send welcome message'))
#start_chain = forms.CharField(
- #label = _('Start chain'),
- #)
+ #label=_('Start chain'))
#subject_prefix = forms.CharField(
- #label = _('Subject prefix'),
- #)
+ #label=_('Subject prefix'))
#subscribe_auto_approval = forms.CharField(
- #label = _('Subscribe auto approval'),
- #widget = forms.Textarea
- #)
+ #label=_('Subscribe auto approval'),
+ #widget=forms.Textarea)
#subscribe_policy = forms.IntegerField(
- #label = _('Subscribe policy'),
- #error_messages = {
- #'invalid': _('Please provide an integer.')
- #}
- #)
+ #label=_('Subscribe policy'),
+ #error_messages={
+ #'invalid': _('Please provide an integer.')})
scheme = forms.CharField(
- label = _('Scheme'),
- required = False,
- )
+ label=_('Scheme'),
+ required=False)
#topics = forms.CharField(
- #label = _('Topics'),
- #widget = forms.Textarea
- #)
+ #label=_('Topics'),
+ #widget=forms.Textarea)
#topics_bodylines_limit = forms.IntegerField(
- #label = _('Topics bodylines limit'),
- #error_messages = {
- #'invalid': _('Please provide an integer.')
- #}
- #)
+ #label=_('Topics bodylines limit'),
+ #error_messages={
+ #'invalid': _('Please provide an integer.')})
#topics_enabled = forms.BooleanField(
- #widget = forms.RadioSelect(choices = choices),
- #required = False,
- #label = _('Topics enabled'),
- #)
+ #widget=forms.RadioSelect(choices = choices),
+ #required=False,
+ #label=_('Topics enabled')#)
#unsubscribe_policy = forms.IntegerField(
- #label = _('Unsubscribe policy'),
- #error_messages = {
- #'invalid': _('Please provide an integer.')
- #}
- #)
+ #label=_('Unsubscribe policy'),
+ #error_messages={
+ #'invalid': _('Please provide an integer.')})
#welcome_msg = forms.CharField(
- #label = _('Welcome message'),
- #)
+ #label=_('Welcome message'))
#volume = forms.IntegerField(
- # label = _('Volume'),
- # required = False,
- #)
+ # label=_('Volume'),
+ # required=False)
#web_host = forms.CharField(
- # label = _('Web host'),
- # required = False,
- #)
+ # label=_('Web host'),
+ # required=False)
acceptable_aliases = forms.CharField(
- widget = forms.Textarea(),
- label = _("Acceptable aliases"),
- required = False,
- )
+ widget=forms.Textarea(),
+ label=_("Acceptable aliases"),
+ required=False)
admin_immed_notify = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Admin immed notify'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Admin immed notify'))
admin_notify_mchanges = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Admin notify mchanges'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Admin notify mchanges'))
administrivia = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Administrivia'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Administrivia'))
anonymous_list = forms.TypedChoiceField(
- coerce=lambda x: x =='True',
+ coerce=lambda x: x == 'True',
choices=((True, _('Yes')), (False, _('No'))),
- widget = forms.RadioSelect,
- required = False,
- label = _('Anonymous list'),
- )
+ widget=forms.RadioSelect,
+ required=False,
+ label=_('Anonymous list'))
created_at = forms.IntegerField(
- label = _('Created at'),
- widget = forms.HiddenInput(),
- required = False,
- )
+ label=_('Created at'),
+ widget=forms.HiddenInput(),
+ required=False)
join_address = forms.EmailField(
- label = _('Join address'),
- required = False,
- )
+ label=_('Join address'),
+ required=False)
last_post_at = forms.IntegerField(
- label = _('Last post at'),
- required = False,
- )
+ label=_('Last post at'),
+ required=False)
leave_address = forms.EmailField(
- label = _('Leave address'),
- required = False,
- )
+ label=_('Leave address'),
+ required=False)
owner_address = forms.EmailField(
- label = _('Owner Address'),
- required = False,
- )
+ label=_('Owner Address'),
+ required=False)
posting_address = forms.EmailField(
- label = _('Posting Address'),
- required = False,
- )
+ label=_('Posting Address'),
+ required=False)
#Descriptions used in the Settings Overview Page
section_descriptions = {
- "List Identity":_("Basic identity settings for the list"),
- "Automatic Responses":_("All options for Autoreply"),
- "Alter Messages":_("Settings that modify member messages"),
+ "List Identity": _("Basic identity settings for the list"),
+ "Automatic Responses": _("All options for Autoreply"),
+ "Alter Messages": _("Settings that modify member messages"),
"Digest": _("Digest-related options"),
- "Message Acceptance": _("Options related to accepting messages"),
- }
+ "Message Acceptance": _("Options related to accepting messages")}
+
def clean_acceptable_aliases(self):
data = self.cleaned_data['acceptable_aliases']
return data.splitlines()
- def __init__(self,visible_section,visible_option, *args, **kwargs):
- super(ListSettings, self).__init__(*args, **kwargs)
- #if settings:raise Exception(settings) #debug
+
+ def __init__(self, visible_section, visible_option, *args, **kwargs):
+ super(ListSettings, self).__init__(*args, **kwargs)
+ # if settings:
+ # raise Exception(settings) # debug
if visible_option:
- options=[]
+ options = []
for option in self.layout:
options += option[1:]
if visible_option in options:
- self.layout = [["",visible_option]]
+ self.layout = [["", visible_option]]
if visible_section:
- sections=[]
+ sections = []
for section in self.layout:
- sections.append(section[0])
+ sections.append(section[0])
if visible_section in sections:
for section in self.layout:
if section[0] == visible_section:
@@ -753,127 +660,79 @@
try:
if data:
for section in self.layout:
- for option in section[1:]:
+ for option in section[1:]:
self.fields[option].initial = settings[option]
except:
- pass #empty form
+ pass # empty form
+
def truncate(self):
"""
- truncates the form to have only those fields which are in self.layout
+ truncates the form to have only those fields which are in self.layout
"""
- #delete form.fields which are not in the layout
- used_options=[]
+ # delete form.fields which are not in the layout
+ used_options = []
for section in self.layout:
used_options += section[1:]
-
+
for key in self.fields.keys():
if not(key in used_options):
- del self.fields[key]
-
+ del self.fields[key]
+
class Meta:
"""Class to handle the automatic insertion of fieldsets and divs.
-
- To use it: add a list for each wished fieldset. The first item in
- the list should be the wished name of the fieldset, the following
+
+ To use it: add a list for each wished fieldset. The first item in
+ the list should be the wished name of the fieldset, the following
the fields that should be included in the fieldset.
- """
+ """
# just a really temporary layout to see that it works. -- Anna
layout = [
- ["List Identity", "display_name", "mail_host", "description",
- "advertised"],
- #"info", "list_name", "host_name", "list_id", "fqdn_listname",
- #"http_etag", "volume", "web_host"
+ ["List Identity", "display_name", "mail_host", "description",
+ "advertised"],
["Automatic Responses", "autorespond_owner",
"autoresponse_owner_text", "autorespond_postings",
"autoresponse_postings_text", "autorespond_requests",
"autoresponse_request_text", "autoresponse_grace_period",
"send_welcome_message", "admin_immed_notify",
"admin_notify_mchanges"],
- ["Alter Messages", "filter_content", "collapse_alternatives",
+ ["Alter Messages", "filter_content", "collapse_alternatives",
"convert_html_to_plaintext", "anonymous_list",
"include_rfc2369_headers", "reply_goes_to_list",
- "include_list_post_header", "posting_pipeline"],
+ "include_list_post_header", "posting_pipeline"],
["Digest", "digest_size_threshold"],
- ["Message Acceptance", "acceptable_aliases", "administrivia",
- "default_nonmember_action", "default_member_action"],
- #["Bounce", "ban_list",
- #"bounce_info_stale_after", "bounce_matching_headers",
- # "bounce_notify_owner_on_disable",
- #"bounce_notify_owner_on_removal", "bounce_processing",
- #"bounce_score_threshold",
- #"bounce_unrecognized_goes_to_list_owner",
- #"bounce_you_are_disabled_warnings",
- #"bounce_you_are_disabled_warnings_interval"],
- #["Archiving", "archive"],
- #["Content Filtering", "filter_content", "collapse_alternatives",
- #"convert_html_to_plaintext"],
- #"default_member_moderation", "scheme"
- #["Digest", "digest_size_threshold"], #"next_digest_number",
- #"last_post_at", "digest_last_sent_at", "digest_footer",
- #"digest_header", "digest_is_default",
- #"digest_send_periodic", "digest_size_threshold",
- #"digest_volume_frequency", "digestable"],
- #["Moderation","discard_these_nonmembers", "emergency",
- #"generic_nonmember_action", "generic_nonmember_action",
- #"member_moderation_action", "member_moderation_notice",
- #"moderator_password", "hold_these_nonmembers"],
- #["Message Text", "msg_header", "msg_footer", "welcome_msg",
- #"goodbye_msg"],
- #["Privacy", "advertised", "admin_immed_notify",
- # "admin_notify_mchanges", "anonymous_list"], #"archive_private",
- #"obscure_addresses", "private_roster",
- #["Addresses", "bounces_address", "join_address", "leave_address",
- #"no_reply_address", "owner_address", "posting_address",
- #"request_address"],
- #["Assorted", "acceptable_aliases", "administrivia",
- #"posting_pipeline"]
- #"post_id", "encode_ascii_prefixes", "first_strip_reply_to",
- #"forward_auto_discards", "gateway_to_mail", "gateway_to_news",
- #"header_matches", "linked_newsgroup", "max_days_to_hold",
- #"max_message_size", "max_num_recipients",
- #"mime_is_default_digest", "new_member_options",
- #"news_moderation", "news_prefix_subject_too", "nntp_host",
- #"nondigestable", "nonmember_rejection_notice", "personalize",
- #"preferred_language",
- #"reject_these_nonmembers", "reply_goes_to_list",
- #"reply_to_address", "require_explicit_destination",
- #"respond_to_post_requests", "scrub_nondigest",
- #"send_goodbye_msg", "send_reminders", "send_welcome_msg",
- #"start_chain", "subject_prefix", "subscribe_auto_approval",
- #"subscribe_policy", "topics", "topics_bodylines_limit",
- #"topics_enabled", "unsubscribe_policy"]]
- ]
+ ["Message Acceptance", "acceptable_aliases", "administrivia",
+ "default_nonmember_action", "default_member_action"]]
+
class Login(FieldsetForm):
"""Form fields to let the user log in.
"""
user = forms.EmailField(
- label = _('Email address'),
- error_messages = {'required': _('Please enter an email address.'),
- 'invalid': _('Please enter a valid email address.')},
- required = True,
- )
+ label=_('Email address'),
+ error_messages={'required': _('Please enter an email address.'),
+ 'invalid': _('Please enter a valid email address.')},
+ required=True)
password = forms.CharField(
- label = _('Password'),
- widget = forms.PasswordInput,
- error_messages = {'required': _('Please enter your password.'),
- 'invalid': _('Please enter a valid password.')},
- required = True,
- )
+ label=_('Password'),
+ widget=forms.PasswordInput,
+ error_messages={'required': _('Please enter your password.'),
+ 'invalid': _('Please enter a valid password.')},
+ required=True)
class Meta:
"""
Class to define the name of the fieldsets and what should be
included in each.
"""
- layout = [["Login", "user", "password"],]
+ layout = [["Login", "user", "password"]]
+
class ListMassSubscription(FieldsetForm):
"""Form fields to masssubscribe users to a list.
"""
emails = forms.CharField(
- label = _('Emails to mass subscribe'),
- widget = forms.Textarea,
+ label=_('Emails to mass subscribe'),
+ widget=forms.Textarea,
)
class Meta:
@@ -881,142 +740,118 @@
Class to define the name of the fieldsets and what should be
included in each.
"""
- layout = [["Mass subscription", "emails"],]
+ layout = [["Mass subscription", "emails"]]
+
class MembershipSettings(FieldsetForm):
"""Form handling the membership settings.
"""
- choices = ((True, _('Yes')), (False, _('No')),)
+ choices = ((True, _('Yes')), (False, _('No')))
acknowledge_posts = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Acknowledge posts'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Acknowledge posts'))
hide_address = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Hide address'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Hide address'))
receive_list_copy = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Receive list copy'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Receive list copy'))
receive_own_postings = forms.BooleanField(
- widget = forms.RadioSelect(choices = choices),
- required = False,
- label = _('Receive own postings'),
- )
+ widget=forms.RadioSelect(choices=choices),
+ required=False,
+ label=_('Receive own postings'))
delivery_mode = forms.ChoiceField(
- widget = forms.Select(),
- error_messages = {
- 'required': _("Please choose a mode."),
- },
- required = False,
- choices = (
+ widget=forms.Select(),
+ error_messages={
+ 'required': _("Please choose a mode.")},
+ required=False,
+ choices=(
("", _("Please choose")),
- ("delivery_mode", "some mode..."), # TODO: this must later
- # be dynalically changed to what modes the list offers
- # (see the address field in __init__ in UserSettings for
- # how to do this)
- ),
- label = _('Delivery mode'),
- )
+ ("delivery_mode", "some mode...")),
+ label=_('Delivery mode'))
delivery_status = forms.ChoiceField(
- widget = forms.Select(),
- error_messages = {
- 'required': _("Please choose a status."),
- },
- required = False,
- choices = (
+ widget=forms.Select(),
+ error_messages={
+ 'required': _("Please choose a status.")},
+ required=False,
+ choices=(
("", _("Please choose")),
- ("delivery_status", "some status..."), # TODO: this must
- # later be dynalically changed to what statuses the list
- # offers (see the address field in __init__ in UserSettings
- # for how to do this)
- ),
- label = _('Delivery status'),
- )
+ ("delivery_status", "some status...")),
+ label=_('Delivery status'))
class Meta:
"""
Class to define the name of the fieldsets and what should be
included in each.
"""
- layout = [["Membership Settings", "acknowledge_posts", "hide_address",
- "receive_list_copy", "receive_own_postings",
- "delivery_mode", "delivery_status"],]
+ layout = [["Membership Settings", "acknowledge_posts", "hide_address",
+ "receive_list_copy", "receive_own_postings",
+ "delivery_mode", "delivery_status"]]
+
class UserSettings(FieldsetForm):
"""Form handling the user settings.
"""
def __init__(self, address_choices, *args, **kwargs):
"""
- Initialize the user settings with a field 'address' where
+ Initialize the user settings with a field 'address' where
the values are set dynamically in the view.
"""
super(UserSettings, self).__init__(*args, **kwargs)
- self.fields['address'] = forms.ChoiceField(choices=(address_choices),
- widget = forms.Select(),
- error_messages = {'required': _("Please choose an address."),},
- required = True,
- label = _('Default email address'),)
-
- id = forms.IntegerField( # this should probably not be
- # changeable...
- label = _('ID'),
- initial = 9,
- widget = forms.HiddenInput(),
- required = False,
- error_messages = {
- 'invalid': _('Please provide an integer ID.')
- }
- )
- mailing_list = forms.CharField( # not sure this needs to be here
- label = _('Mailing list'),
- widget = forms.HiddenInput(),
- required = False,
- )
- display_name =forms.CharField(
- label = _('Display name'),
- required = False,
- )
+ self.fields['address'] = forms.ChoiceField(
+ choices=(address_choices),
+ widget=forms.Select(),
+ error_messages={'required': _("Please choose an address.")},
+ required=True,
+ label=_('Default email address'))
+
+ id = forms.IntegerField(
+ label=_('ID'),
+ initial=9,
+ widget=forms.HiddenInput(),
+ required=False,
+ error_messages={
+ 'invalid': _('Please provide an integer ID.')})
+ mailing_list = forms.CharField(
+ label=_('Mailing list'),
+ widget=forms.HiddenInput(),
+ required=False)
+ display_name = forms.CharField(
+ label=_('Display name'),
+ required=False)
preferred_language = forms.ChoiceField(
- label = _('Default/Preferred language'),
- widget = forms.Select(),
- error_messages = {
- 'required': _("Please choose a language."),
- },
- required = False,
- choices = (
+ label=_('Default/Preferred language'),
+ widget=forms.Select(),
+ error_messages={
+ 'required': _("Please choose a language.")},
+ required=False,
+ choices=(
("", _("Please choose")),
- ("English (USA)", "English (USA)"), # TODO: this must later
- # be dynalically changed to what languages the list offers
- # (see the address field in __init__ for how to do this)
- )
- )
+ ("English (USA)", "English (USA)")))
password = forms.CharField(
- label = _('Change password'),
- widget = forms.PasswordInput,
- required = False,
- error_messages = {'required': _('Please enter your password.'),
- 'invalid': _('Please enter a valid password.')},
- )
+ label=_('Change password'),
+ widget=forms.PasswordInput,
+ required=False,
+ error_messages={'required': _('Please enter your password.'),
+ 'invalid': _('Please enter a valid password.')})
conf_password = forms.CharField(
- label = _('Confirm password'),
- widget = forms.PasswordInput,
- required = False,
- error_messages = {'required': _('Please enter your password.'),
- 'invalid': _('Please enter a valid password.')},
- )
+ label=_('Confirm password'),
+ widget=forms.PasswordInput,
+ required=False,
+ error_messages={'required': _('Please enter your password.'),
+ 'invalid': _('Please enter a valid password.')})
class Meta:
"""
Class to define the name of the fieldsets and what should be
included in each.
"""
- layout = [["User settings", "display_name", "password",
- "conf_password", "preferred_language", "address"],]
+ layout = [["User settings", "display_name", "password",
+ "conf_password", "preferred_language", "address"]]
+
class ListDeleteForm(forms.Form):
list_name = forms.EmailField(widget=forms.HiddenInput())
diff --git a/src/postorius/tests/__init__.py b/src/postorius/tests/__init__.py
index 58acd95..e09dc1e 100644
--- a/src/postorius/tests/__init__.py
+++ b/src/postorius/tests/__init__.py
@@ -7,7 +7,7 @@
# 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
+# 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.
diff --git a/src/postorius/tests/setup.py b/src/postorius/tests/setup.py
index f334c07..ed533f4 100644
--- a/src/postorius/tests/setup.py
+++ b/src/postorius/tests/setup.py
@@ -23,11 +23,13 @@
import subprocess
from django.conf import settings
+
class Testobject:
bindir = None
vardir = None
cfgfile = None
+
def setup_mm(testobject):
os.environ['MAILMAN_TEST_BINDIR'] = settings.MAILMAN_TEST_BINDIR
bindir = testobject.bindir = os.environ.get('MAILMAN_TEST_BINDIR')
@@ -37,7 +39,7 @@
cfgfile = testobject.cfgfile = os.path.join(vardir, 'client_test.cfg')
with open(cfgfile, 'w') as fp:
print >> fp, """\
-[mailman]
+[mailman]
layout: tmpdir
[paths.tmpdir]
var_dir: {vardir}
@@ -70,6 +72,7 @@
time.sleep(3)
return testobject
+
def teardown_mm(testobject):
bindir = testobject.bindir
cfgfile = testobject.cfgfile
diff --git a/src/postorius/tests/test_list_members.py b/src/postorius/tests/test_list_members.py
index 688612a..a23eb69 100644
--- a/src/postorius/tests/test_list_members.py
+++ b/src/postorius/tests/test_list_members.py
@@ -7,7 +7,7 @@
# 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
+# 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.
@@ -22,12 +22,11 @@
class ListMembersViewTest(unittest.TestCase):
"""Tests for the ListMembersView."""
-
+
def setUp(self):
from django.test.client import RequestFactory
from postorius.tests.utils import create_mock_list, create_mock_member
self.request_factory = RequestFactory()
-
# create a mock list with members
list_name = 'foolist@example.org'
self.mock_list = create_mock_list(dict(
@@ -44,7 +43,6 @@
def test_get_list(self):
"""Test if list members are retreived correctly."""
from postorius.views import ListMembersView
-
# test get_list
view = ListMembersView()
with patch('mailman.client.Client.get_list') as mock:
@@ -60,18 +58,23 @@
with patch('mailman.client.Client.get_list') as mock:
mock.return_value = self.mock_list
request = self.request_factory.get(
- '/lists/foolist@example.org/members/')
+ '/lists/foolist@example.org/members/')
# anonymous users should be redirected
request.user = AnonymousUser()
- response = ListMembersView.as_view()(request, 'foolist@example.org')
+ response = ListMembersView.as_view()(request,
+ 'foolist@example.org')
self.assertEqual(response.status_code, 302)
# logged in users should be redirected
- request.user = User.objects.create_user('les', 'les@primus.org', 'pwd')
- response = ListMembersView.as_view()(request, 'foolist@example.org')
+ request.user = User.objects.create_user('les', 'les@primus.org',
+ 'pwd')
+ response = ListMembersView.as_view()(request,
+ 'foolist@example.org')
self.assertEqual(response.status_code, 302)
# superusers should get the page
- request.user = User.objects.create_superuser('su', 'su@sodo.org', 'pwd')
- response = ListMembersView.as_view()(request, 'foolist@example.org')
+ request.user = User.objects.create_superuser('su', 'su@sodo.org',
+ 'pwd')
+ response = ListMembersView.as_view()(request,
+ 'foolist@example.org')
self.assertEqual(response.status_code, 200)
def tearDown(self):
diff --git a/src/postorius/tests/test_utils.py b/src/postorius/tests/test_utils.py
index db9ca0e..738acca 100644
--- a/src/postorius/tests/test_utils.py
+++ b/src/postorius/tests/test_utils.py
@@ -7,7 +7,7 @@
# 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
+# 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.
diff --git a/src/postorius/tests/utils.py b/src/postorius/tests/utils.py
index a6d1831..7dc7a4c 100644
--- a/src/postorius/tests/utils.py
+++ b/src/postorius/tests/utils.py
@@ -7,7 +7,7 @@
# 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
+# 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.
@@ -17,15 +17,16 @@
from mock import patch, MagicMock
+
def create_mock_domain(properties=None):
"""Create and return a mocked Domain.
-
+
:param properties: A dictionary of the domain's properties.
:type properties: dict
:return: A MagicMock object with the properties set.
:rtype: MagicMock
"""
- mock_object = MagicMock(name='Domain')
+ mock_object = MagicMock(name='Domain')
mock_object.base_url = ''
mock_object.contact_address = ''
mock_object.description = ''
@@ -34,33 +35,35 @@
mock_object.lists = []
if properties is not None:
for key in properties:
- setattr(mock_object, key, properties[key])
+ setattr(mock_object, key, properties[key])
return mock_object
+
def create_mock_list(properties=None):
"""Create and return a mocked List.
-
+
:param properties: A dictionary of the list's properties.
:type properties: dict
:return: A MagicMock object with the properties set.
:rtype: MagicMock
"""
- mock_object = MagicMock(name='List')
+ mock_object = MagicMock(name='List')
if properties is not None:
for key in properties:
- setattr(mock_object, key, properties[key])
+ setattr(mock_object, key, properties[key])
return mock_object
+
def create_mock_member(properties=None):
"""Create and return a mocked Member.
-
+
:param properties: A dictionary of the member's properties.
:type properties: dict
:return: A MagicMock object with the properties set.
:rtype: MagicMock
"""
- mock_object = MagicMock(name='Member')
+ mock_object = MagicMock(name='Member')
if properties is not None:
for key in properties:
- setattr(mock_object, key, properties[key])
+ setattr(mock_object, key, properties[key])
return mock_object
diff --git a/src/postorius/urls.py b/src/postorius/urls.py
index ac0e8d7..927d9a9 100644
--- a/src/postorius/urls.py
+++ b/src/postorius/urls.py
@@ -23,7 +23,8 @@
from postorius.views import ListMembersView
-urlpatterns = patterns('postorius.views',
+urlpatterns = patterns(
+ 'postorius.views',
(r'^$', 'list_index'),
# /account/
url(r'^accounts/login/$', 'user_login', name='user_login'),
@@ -43,8 +44,8 @@
# /lists/
url(r'^lists/$', 'list_index', name='list_index'),
url(r'^lists/new/$', 'list_new', name='list_new'),
- url(r'^lists/(?P
[^/]+)/members/$', ListMembersView.as_view(),
- name='list_members'),
+ url(r'^lists/(?P[^/]+)/members/$',
+ ListMembersView.as_view(), name='list_members'),
url(r'^lists/(?P[^/]+)/metrics$', 'list_metrics',
name='list_metrics'),
url(r'^lists/(?P[^/]+)/$', 'list_summary',
@@ -57,27 +58,21 @@
'list_subscriptions', name='list_subscriptions'),
url(r'^lists/(?P[^/]+)/mass_subscribe/$',
'mass_subscribe', name='mass_subscribe'),
- url(r'^lists/(?P[^/]+)/delete$', 'list_delete',
- name='list_delete'),
- url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/accept$',
- 'accept_held_message',
- name='accept_held_message'),
- url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/discard$',
- 'discard_held_message',
- name='discard_held_message'),
- url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/defer$',
- 'defer_held_message',
- name='defer_held_message'),
- url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/reject$',
- 'reject_held_message',
- name='reject_held_message'),
+ url(r'^lists/(?P[^/]+)/delete$',
+ 'list_delete', name='list_delete'),
+ url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/'
+ 'accept$', 'accept_held_message', name='accept_held_message'),
+ url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/'
+ 'discard$', 'discard_held_message', name='discard_held_message'),
+ url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/'
+ 'defer$', 'defer_held_message', name='defer_held_message'),
+ url(r'^lists/(?P[^/]+)/held_messages/(?P[^/]+)/'
+ 'reject$', 'reject_held_message', name='reject_held_message'),
url(r'^lists/(?P[^/]+)/held_messages$',
- 'list_held_messages',
- name='list_held_messages'),
+ 'list_held_messages', name='list_held_messages'),
url(r'^user_settings/$', 'user_settings', kwargs={"tab": "user"},
name='user_settings'),
- url(r'^lists/(?P[^/]+)/settings/(?P[^/]+)?(?:/(?P.*))?$',
- 'list_settings', name='list_settings'),
- ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-
-
+ url(r'^lists/(?P[^/]+)/settings/(?P[^/]+)?'
+ '(?:/(?P.*))?$', 'list_settings',
+ name='list_settings'),
+) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/src/postorius/utils.py b/src/postorius/utils.py
index 698c6b6..b305a5a 100644
--- a/src/postorius/utils.py
+++ b/src/postorius/utils.py
@@ -22,16 +22,17 @@
def get_domain_name(request):
"""Extracts a domain name from the request object.
- """
+ """
if "HTTP_HOST" in request.META.keys():
return request.META["HTTP_HOST"].split(":")[0]
return None
+
def render_api_error(request):
"""Renders an error template.
Use if MailmanApiError is catched.
"""
- return render_to_response('postorius/errors/generic.html',
- {'error': "REST API not found / Offline"},
- context_instance=RequestContext(request))
-
+ return render_to_response(
+ 'postorius/errors/generic.html',
+ {'error': "REST API not found / Offline"},
+ context_instance=RequestContext(request))