aboutsummaryrefslogtreecommitdiffstats
path: root/Mailman/Errors.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Mailman/Errors.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/Mailman/Errors.py b/Mailman/Errors.py
new file mode 100644
index 00000000..ce1868cc
--- /dev/null
+++ b/Mailman/Errors.py
@@ -0,0 +1,147 @@
+# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
+#
+# This program 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 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+"""Shared mailman errors and messages."""
+
+
+# exceptions for problems related to opening a list
+class MMListError(Exception): pass
+class MMUnknownListError(MMListError): pass
+class MMCorruptListDatabaseError(MMListError): pass
+class MMListNotReadyError(MMListError): pass
+class MMListAlreadyExistsError(MMListError): pass
+class BadListNameError(MMListError): pass
+
+# Membership exceptions
+class MMMemberError(Exception): pass
+class MMBadUserError(MMMemberError): pass
+class MMAlreadyAMember(MMMemberError): pass
+
+# "New" style membership exceptions (new w/ MM2.1)
+class MemberError(Exception): pass
+class NotAMemberError(MemberError): pass
+class AlreadyReceivingDigests(MemberError): pass
+class AlreadyReceivingRegularDeliveries(MemberError): pass
+class CantDigestError(MemberError): pass
+class MustDigestError(MemberError): pass
+class MembershipIsBanned(MemberError): pass
+
+# Exception hierarchy for various authentication failures, can be
+# raised from functions in SecurityManager.py
+class MMAuthenticationError(Exception): pass
+class MMBadPasswordError(MMAuthenticationError): pass
+class MMPasswordsMustMatch(MMAuthenticationError): pass
+class MMCookieError(MMAuthenticationError): pass
+class MMExpiredCookieError(MMCookieError): pass
+class MMInvalidCookieError(MMCookieError): pass
+
+# BAW: these still need to be converted to classes.
+MMMustDigestError = "MMMustDigestError"
+MMCantDigestError = "MMCantDigestError"
+MMNeedApproval = "MMNeedApproval"
+MMSubscribeNeedsConfirmation = "MMSubscribeNeedsConfirmation"
+MMBadConfirmation = "MMBadConfirmation"
+MMAlreadyDigested = "MMAlreadyDigested"
+MMAlreadyUndigested = "MMAlreadyUndigested"
+
+MODERATED_LIST_MSG = "Moderated list"
+IMPLICIT_DEST_MSG = "Implicit destination"
+SUSPICIOUS_HEADER_MSG = "Suspicious header"
+FORBIDDEN_SENDER_MSG = "Forbidden sender"
+
+
+
+# New style class based exceptions. All the above errors should eventually be
+# converted.
+
+class MailmanError(Exception):
+ """Base class for all Mailman exceptions."""
+ pass
+
+
+class MMLoopingPost(MailmanError):
+ """Post already went through this list!"""
+ pass
+
+
+# Exception hierarchy for bad email address errors that can be raised from
+# Utils.ValidateEmail()
+class EmailAddressError(MailmanError):
+ """Base class for email address validation errors."""
+ pass
+
+class MMBadEmailError(EmailAddressError):
+ """Email address is invalid (empty string or not fully qualified)."""
+ pass
+
+class MMHostileAddress(EmailAddressError):
+ """Email address has potentially hostile characters in it."""
+ pass
+
+
+# Exceptions for admin request database
+class LostHeldMessage(MailmanError):
+ """Held message was lost."""
+ pass
+
+
+
+def _(s):
+ return s
+
+# Exceptions for the Handler subsystem
+class HandlerError(MailmanError):
+ """Base class for all handler errors."""
+
+class HoldMessage(HandlerError):
+ """Base class for all message-being-held short circuits."""
+
+ # funky spelling is necessary to break import loops
+ reason = _('For some unknown reason')
+
+ def reason_notice(self):
+ return self.reason
+
+ # funky spelling is necessary to break import loops
+ rejection = _('Your message was rejected')
+
+ def rejection_notice(self, mlist):
+ return self.rejection
+
+class DiscardMessage(HandlerError):
+ """The message can be discarded with no further action"""
+
+class SomeRecipientsFailed(HandlerError):
+ """Delivery to some or all recipients failed"""
+ def __init__(self, tempfailures, permfailures):
+ HandlerError.__init__(self)
+ self.tempfailures = tempfailures
+ self.permfailures = permfailures
+
+# multiple inheritance for backwards compatibility
+class LoopError(DiscardMessage, MMLoopingPost):
+ """We've seen this message before"""
+
+class RejectMessage(HandlerError):
+ """The message will be bounced back to the sender"""
+ def __init__(self, notice=None):
+ if notice is None:
+ notice = _('Your message was rejected')
+ self.__notice = notice
+
+ def notice(self):
+ return self.__notice