summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* SafeDict.__getitem__(): Use isinstance() instead of a comparison tobwarsaw2001-10-091-3/+7
| | | | | | | | | | test for type isa StringType. MsgSafeDict.__getitem__(): Fix the handling of missing header in the `allmsg_' clause, so that it returns 'n/a' instead of trying to join a bogus value. MsgSafeDict.copy(): mimelib -> email.
* ClearBounceInfo(), RegisterBounce(): Rename argument `email' to `member'.bwarsaw2001-10-091-59/+39
| | | | | | | | | | | | | | | | | | RegisterBounce(): Use mm_cfg.days() to calculate days. Also, started adding notes to help myself understand how this method works. :( HandleBouncingAddress(): Get rid of the crufty mimetools based bounce notification stuff in favor of using an email package based scheme (i.e. using MIMEMessage() to encapsulate the triggering message). This also lets us change bounce.txt to not include any MIME crud. BounceMessage(): Make `e' optional, and change the semantics so that if it was given, it /is/ the bounce details; it is no longer an object with a .details() method. Also, handle the situation where msg has no Subject: header.
* ParseMailCommands(): addheader() -> add_header().bwarsaw2001-10-051-4/+4
|
* Update a comment.bwarsaw2001-10-041-1/+1
|
* process(): Remove the last vestige of the string module. Also, makebwarsaw2001-10-041-3/+4
| | | | this work when mlist is None.
* Add the Passwords module.bwarsaw2001-10-041-0/+1
|
* The minimal gui elements for the passwords subcategory.bwarsaw2001-10-041-0/+26
|
* show_results(): Fix the calculation for splitting the left column intobwarsaw2001-10-041-13/+8
| | | | | two subcolumns. Also, split the password entry fields into their own pseudo-subcategory (like members).
* process(): Dan Mick discovers a hold over from the mimelib days.bwarsaw2001-10-041-6/+2
|
* Update a comment.bwarsaw2001-10-041-1/+1
|
* list_exists(): This has to know about config.pck and config.pck.last files.bwarsaw2001-10-041-5/+10
|
* AuthContextInfo(): Python's standard Cookie.py doesn't allow colons inbwarsaw2001-10-041-2/+2
| | | | | | | | the key. It's strictly interpreting the relevant RFC. We may change Cookie.py to be more relaxed, but instead of trying to maintain our own copy of this file, we'll just change the separator to be a `+' intead of a `:' -- Cookie.py seems happy with this.
* Switch to using binary cpickles as the config file data format.bwarsaw2001-10-041-47/+70
| | | | | | | | | | | | | | | | | | | | | | | | Marshal is not guaranteed to be compatible across Python versions, and while I'm not aware of any breakage since Py1.5.2, better to be defensive here. Specific changes include: __save(): Dump the dict to the file as a binary cPickle. Do the dump directly instead of dumping a string to fp.write() since -- I hope -- cPickle doesn't suffer from the same problem as the comment describes marshal as suffering from (I don't actually remember the details of that). __load(): Teach this method how to load .pck (i.e. config.pck) pickle files, but retain the ability to load .db marshal files for automatic upgrade. Also, add a catch of cPickle.PicklingError to the big except clause. Load(): Teach this how to load .pck and .db files, always defaulting to .pck first. If the primary file was ever corrupt and we had to load from the .last file, we'll make a copy of .last to a .safety file just in case.
* ADMIN_CATEGORIES: Split password page off of the general page into itsbwarsaw2001-10-041-4/+6
| | | | own category. Rearranged the two columns for better symmetry.
* DisableBouncingAddress(): Fixed a syslog() call, using its newbwarsaw2001-10-041-1/+1
| | | | signature.
* Add `de' language for German translations.bwarsaw2001-10-031-0/+1
|
* process(): SF bug # 465477 indicates that using mboxfp.tell() won'tbwarsaw2001-10-011-2/+3
| | | | | | | | | always get the correct file size if the Generator didn't leave the file pointer at the EOF. Let's use os.path.getsize() -- after a flush -- instead. Closes this bug report. send_i18n_digests(): Update to email package API; use msg.get_all() intead of msg.getall().
* process(): Get the message's text, sans Unix-From by using the emailbwarsaw2001-10-011-1/+1
| | | | | package's Message.as_string() method. (This is one module which doesn't yet have a unittest. );
* DumperSwitchboard: New class to provide a public interface for readingbwarsaw2001-10-011-0/+10
| | | | | .db files, and to allow argument-less construction. This is used by bin/dumpdb.
* change_options(): Only print the "Successfully Removed:" message ifbwarsaw2001-10-011-4/+5
| | | | there actually were any members removed.
* FormatUsers(): Don't use string interpolation to pluralize the wordbwarsaw2001-10-011-13/+11
| | | | | | "member". This makes translation to some languages difficult. Instead, construct different messages based on whether num_concealed is == 1 or > 1.
* Move the site-packages hackery back here from paths.py.in, otherwisebwarsaw2001-10-011-0/+8
| | | | scripts/driver doesn't work.
* prepare_message(): Remove X-Trace: and NNTP-Posting-Host: headers,bwarsaw2001-10-011-5/+5
| | | | | since some nntpd servers will complain about these if they exist, and will reject the message posting.
* cgi.py from Python 2.2bwarsaw2001-10-011-117/+168
|
* Convert from mimelib to email.bwarsaw2001-10-016-20/+13
| | | | | Also, use cStringIO directly instead of our own hack-around StringIO module.
* Convert from mimelib to email.bwarsaw2001-10-011-12/+12
| | | | | Also, use cStringIO directly instead of our own hack-around StringIO module.
* Use cStringIO directly instead of our own hack-around StringIObwarsaw2001-10-011-1/+1
| | | | module.
* Convert from mimelib to email.bwarsaw2001-10-014-34/+26
|
* Mostly cosmetic.bwarsaw2001-10-012-13/+2
|
* process(): Fixed typo in IOError error code comparison.bwarsaw2001-10-011-1/+1
|
* Convert from mimelib to email.bwarsaw2001-10-011-3/+4
| | | | | process(): Also, use the MembershipAdaptor API for calculating the recipients of an urgent message.
* Convert from mimelib to email.bwarsaw2001-10-011-2/+4
| | | | | | process(): Fixed buglet so that if there is no Subject: header in the original message, "(no subject)" -- properly i18nified -- will be used instead of "None".
* Add the code that would be used if personalized digests werebwarsaw2001-10-011-1/+46
| | | | supported.
* Convert from mimelib to email.bwarsaw2001-10-012-18/+7
| | | | | | | | Also, use cStringIO directly instead of our own hack-around StringIO module. admindb.py: Use ListAdmin.readMessage() to actually read the contents of the message from disk.
* Convert from mimelib to email.bwarsaw2001-10-0121-161/+83
| | | | | Also, use cStringIO directly instead of our own hack-around StringIO module.
* Use cStringIO directly instead of our own hack-around StringIObwarsaw2001-10-011-2/+1
| | | | module. Also, we don't need the string module.
* Use Python's default Cookie.py module instead of our own copy.bwarsaw2001-10-011-1/+1
|
* Convert from mimelib to email.bwarsaw2001-10-011-37/+45
| | | | | | | | | | | | | | | | | | | | | Also, use cStringIO directly instead of our own hack-around StringIO module. InitTempVars(): Don't set __filename here, since InitTempVars() is never called when the list is Create()'d (which may itself be a buglet). __filename(), __opendb(), __closedb(): New method to return the request.db absolute path on the fly. Use this in __opendb() and __closedb(). HoldMessage(): Store the message as a pickle instead of generating the plain text representation. This should be faster than reparsing on input. readMessage(): New function that will read either pickle or plain text held messages, depending on the file extension. This helps with backwards compatibility.
* Move the path hacking stuff to misc/paths.py.inbwarsaw2001-10-011-9/+0
|
* Convert from mimelib to email.bwarsaw2001-10-011-5/+5
|
* process(): Watch out for when the bounce has no X-Mailer: header.bwarsaw2001-09-101-1/+1
| | | | Reported by Luca Maranzano.
* Add Russian language hooks for when Mikhail Sobolev is ready with hisbwarsaw2001-09-081-0/+1
| | | | translation.
* Bump DATA_FILE_VERSION so existing lists will pick up one_last_digest.bwarsaw2001-09-081-1/+1
|
* InitVars(): For new lists, set one_last_digest to {}. Found by bothbwarsaw2001-09-081-0/+1
| | | | Mentor Cana and Michael Totschnig.
* __handlepost(): When a message is approved by the moderator, log abwarsaw2001-09-051-2/+6
| | | | | | | more informative message to logs/vette (one that includes the Message-ID: of the original message). Also, include an X-Moderated: header which lets recipients know when -- and by whom -- the message was approved.
* _dispose(): Reorganize the big if/elif/else switch so that it neverbwarsaw2001-09-051-9/+7
| | | | | | just short-circuit returns. We need to do this after moving the Save() into the try clause (which may turn out to not be the right thing to do...)
* AddMember(), ChangeMemberAddress(), ConfirmUnsubscription(): Fixedbwarsaw2001-09-051-3/+3
| | | | | confirm string construction to not use %(cookie)s -- unnecessary since de-i18n-ifying these strings. Found by Mikhail Sobolev.
* Convert all `reason' strings from class docstrings to attributes onbwarsaw2001-09-041-16/+17
| | | | | | | | | | the class, already i18n-ified. MessageTooBig.reason_notice(): Add this instead of setting a reason attribute, so that the proper i18n interpolation can occur. hold_for_approval(): Don't i18n-ify rejection-notice and don't str()-ify the reason string. Just send both through Utils.wrap().
* HoldMessage: Let's do this the non-clever way (which was causing toobwarsaw2001-09-041-3/+7
| | | | | | | | | many problem due to docstring non-extraction in pygettext). Now the attribute `reason' is used as the reason instead of the docstring, and reason_notice() is the called interface. This mirrors exactly how rejection notices are done. HoldMessage.__str__(): Removed.
* Add missing import of Mailman.Utilstwouters2001-09-041-0/+1
|