summaryrefslogtreecommitdiff
path: root/src/mailman/app
Commit message (Collapse)AuthorAgeFilesLines
...
* * Local timezone in X-Mailman-Approved-At caused test failure. (LP: #832404)Barry Warsaw2011-08-231-4/+12
|
* Rename IDomain.email_host to .mail_host for consistency. Similarly in theBarry Warsaw2011-08-221-1/+1
| | | | REST API. (LP: #831660)
* * Moderating a message with Action.accept now sends the message. (LP: #827697)Barry Warsaw2011-08-222-5/+114
| | | | | | | | | | | Also: * Use utilities.datetime.now() so that moderation related dates are predictable during the test suite. * When a message is accepted, drop it in the pipeline queue. The above bug was caused by the message going in the incoming queue, and then being re-moderated. * Expose mailman.bin.master.Loop in __all__. * Add some helpful debug logging.
* Complete bug 827036 work.Barry Warsaw2011-08-172-1/+15
| | | | | | | | | | | * Add ListCreatingEvent and ListDeletingEvent. These are sent before the operation actually occurs, whereas the previously added ListCreatedEvent and ListDeletedEvent are sent after the operation. Specifically, this is necessary because request database deletion requires the IMailingList object, which is only available before the list is deleted. * Add a handler to clear out the requests database for a mailing list, when the mailing list is about to be deleted.
* Fix some typos, and improve the code.Barry Warsaw2011-08-172-3/+3
|
* Basic infrastructure for fixing bug 827036.Barry Warsaw2011-08-173-34/+98
| | | | | | | | | * Use zope.events to signal when a mailing list has been created or deleted. * Register a handler for the ListDeletedEvent which cleans up member subscriptions. * Relax the criteria for find_members(), both internally and in the REST API, so that the subscriber is not required. E.g. you can now find all members of a mailing list.
* * New REST resource http://.../members/find can be POSTed to in order to findBarry Warsaw2011-08-133-1/+326
| | | | | | member records. Arguments are `subscriber` (email address to search for - required), `fqdn_listname` (optional), and `role` (i.e. MemberRole - optional). (LP: #799612)
* Remove all pylint vestiges.Barry Warsaw2011-08-031-1/+0
|
* Factor out bounce detection to flufl.bounce.Barry Warsaw2011-07-152-58/+1
|
* * Move inject.py to mailman.app package.Barry Warsaw2011-06-152-0/+311
| | | | | * Expose **kws to inject_text() * Add tests.
* Major terminology shift:Barry Warsaw2011-06-011-3/+3
| | | | | | | | | | | | | | | | | * Queue runners are now called just 'Runners' since several of them don't manage queue directories. * Ban the term 'qrunner' too. * The master queue runner watcher should now just be called the 'master' or the 'master runner'. * bin/qrunner -> bin/runner * mailman.qrunner log file -> mailman.runner * master-qrunner.lck -> master.lck * master-qrunner.pid -> master.pid Also: * Remove some obsolete files * Begin the .txt -> .rst renaming
* * Flesh out the BounceRunner, complete with tests.Barry Warsaw2011-05-271-6/+8
| | | | * Clean up the DSN bounce processor.
* * bounce_unrecognized_goes_to_list_owner -> forward_unrecognized_bounces_to Barry Warsaw2011-05-254-6/+185
| | | | | | | | | | | | * Add an additional option for unrecognized bounce disposition: send it to the site administrators. * Move maybe_forward() from src/mailman/queue/bounce.py to src/mailman/app/bounces.py, refactor and add tests. * Add a LogFileMark class to help with tests that want to check the output to a log file. * OwnerNotification gets a better signature. Instead of tomoderators, the last argument is a roster to send the notification to. If roster is None, then the notification goes to the site administrators.
* Implement and test the extraction of the bouncing email address when a probeBarry Warsaw2011-05-092-6/+39
| | | | message bounces. This completes the refactoring of probes for MM3.
* Add non-English tests of the probe message.Barry Warsaw2011-05-082-6/+76
|
* Merge bounces branch (still incomplete, but tests pass).Barry Warsaw2011-05-072-51/+255
|\
| * checkpointingBarry Warsaw2011-05-062-2/+66
| |
| * * Fix setup.py version regexp.Barry Warsaw2011-05-032-51/+104
|/ | | | | | * Move get_verp() to class-based for easy overridding. Hook up StandardVERP but not yet ProbeVERP. * Use uuid.uuid4() to get unique id.
* Start the enablement of bounce detection.Barry Warsaw2011-05-012-0/+219
| | | | | | | | | | * Move VERP header extraction to mailman.app.bounces, and ports the implementation to the get_verp() function. * Restore the [mta] verp_regexp value which got lost along the way. * Move mailman.email.utils to mailman.utilities.email and add a test for split_email() * Move specialized_message_from_string() from test_documentation to mailman.testing.helpers.
* Checkpointing for refactoring.Barry Warsaw2011-04-271-7/+22
|
* Refactor .subscribe() from IAddress to IMailingList.Barry Warsaw2011-04-163-8/+7
|
* encrypt_password(): New convenience function for ensuring that a password isBarry Warsaw2011-04-081-5/+2
| | | | | | | | | | | | | | | both encrypted according to a scheme, and a bytes object. add_member(): Use encrypt_password(). cli_members: Give the user a default, user-friendly password. Of course, this will be encrypted so it can't be retrieved, but it can be reset. Passwords are stored as bytes objects, not unicode now. ConfigLayer: Set the default test password scheme to cleartext. General test repair.
* add_member()Barry Warsaw2011-04-082-3/+35
| | | | | | | | | | | | - As the most common interface for adding new members (and users), adapt the password storing bit to storing only encrypted passwords in the database. schema.cfg: - Remove the creator_pw_file and site_pw_file as they are obsolete. - Add password_schema key for defining the default password encryption scheme. mailman.sql, user.py: - Store the password as a binary blob instead of as unicode text.
* Reimplement wrap() using modern techniques, and finally get rid of Utils.py!Barry Warsaw2011-03-172-2/+1
|
* Utils.maketext() and Utils.findtext() are gone.Barry Warsaw2011-03-163-42/+46
|
* Move oneline() out of Utils.py.Barry Warsaw2011-02-251-1/+1
|
* Eliminate Utils.get_pattern() and in the process, completely revampBarry Warsaw2011-02-253-5/+226
| | | | | | | | | subscription bans so as not to have to rely on BLOBS or pickles in the database. Also, be sure to include .rst files in both doctests and in the packaged tarballs. With the now awesome reST mode for Emacs, I plan to rename all .txt doctest files to .rst.
* Fixed a typo in add_member() which prevented subscribing an email address thatBarry Warsaw2011-01-313-1/+77
| | | | | | | | was already linked to a user. Found by Florian Fuchs who also provided the fix, though I implemented the test differently. LP: #710182 Also, refactor the "reset the world" functionality ConfigLayer.testTearDown() so that it could be used by other test code.
* Implement the email address validator as a utility for easier pluggability.Barry Warsaw2011-01-063-8/+10
|
* Split member and nonmember moderation.Barry Warsaw2011-01-022-78/+77
| | | | | | | | | | | | | | | | * member-moderation happens at the same place in the built-in chain that the previously named moderation rule happens. nonmember-moderation happens after all the other normal moderation rules. * Handle unsubscribed nonmember posts. Other changes: * Message.senders now filters out Nones and empty strings. * Various test cleanups and simplifications. * More `address` -> `email` fixes. * Give Link class a useful repr. * Fix a potential UnboundLocalError. * Various other small changes.
* Happy New Year.Barry Warsaw2011-01-019-9/+9
|
* Because it was just to damn confusing, rename IAddress.address toBarry Warsaw2011-01-012-28/+40
| | | | | | IAddress.email and IAddress.original_address to IAddress.original_email. From now on we'll use "address" to talk about the IAddress object and "email" to talk about the textual email address.
* Fairly significant change to the way member and nonmember moderation occurs.Barry Warsaw2010-12-291-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | Now, nonmembers are represented by a separate roster of IMembers, the latter which has grown a `moderation_action` enum. When that action is `defer`, then the normal processing rules apply. Anything else and the `moderation` chain is jumped to for a shortcut to moderation (which may include immediate acceptance). TODO: handle unregistered nonmembers. Details: * The member-moderation rule is renamed to just moderation, and handles both members and nonmembers (though the latter must currently be registered). * The moderation rule is moved up in the builtin chain. It is now checked after `approved`, `emergency`, and `loop`, but before the normal moderation checks. This means that nonmember postings will be (by default) held much earlier. * IMember.is_moderated is removed. * IMember.moderation_action is added. * IMailingList.default_member_moderation is removed. * IMailingList.default_member_action and IMailingList.default_nonmember_action are added. * MemberRole.nonmember is added.
* This is part 1 of the merge of Jimmy Bergman's branchBarry Warsaw2010-12-282-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | lp:~jimmy-sigint/mailman/restapi_additional_attributes Ostensibly, this adds support for a few additional attributes through the REST API: * default_member_moderation * generic_nonmember_action * member_moderation_action * reply_goes_to_list * send_welcome_msg * welcome_msg However, I had never previously fleshed out the conversion of default_member_moderation and member_moderation_action into the MM3 way of things. That is now done. Non-member moderation still needs to be done. Specific changes: * mailman.chains.base.Chain no longer self registers * The built-in chain gets a new link for checking 'member-moderation'. If this rule matches, it jumps to the 'member-moderation' chain, which checks member_moderation_action and returns a link that jumps to the appropriate terminal chain. * Chain initialization is done by the same auto-detection as rules, handlers, etc. The one tricky thing is that abstract base classes such as Chain and TerminalChainBase can't be instantiated. For now, there's an ugly special case to skip these. * default_member_moderation is now exposed in the IMailingList interface. * Member.is_moderated gets set in the constructor from the mailing list's default_member_moderation. * The 'moderation' rule is renamed 'member-moderation'. TODO: * Work out non-member moderation * Add member_moderation_action to IMailingList * Double check tests for reply_goes_to_list, send_welcome_msg, and welcome_msg
* Fix the obvious errors identified by pyflakes. Skip false positives (mostlyBarry Warsaw2010-10-083-5/+1
| | | | | due to _() interpolation) and a few other problems that did not have immediately obvious fixes.
* Fix typo in scan_message(). (LP: #645897)Barry Warsaw2010-09-232-9/+47
|
* Many documentation fixes for better Sphinx output.Barry Warsaw2010-09-087-29/+44
|
* This is a better fix than the previous commit, since it uses a principled ↵Barry Warsaw2010-08-301-2/+2
| | | | approach to finding the bin directory. Thanks go to Gary Poster.
* zope.testrunner 4.0.0b5 changes the working directory that tests are run from.Barry Warsaw2010-08-291-1/+2
|
* trunk mergeBarry Warsaw2010-08-101-1/+1
|\
| * Fixes bug LP: #601899; delete list function in rest server.Barry Warsaw2010-07-061-1/+1
| |
* | checkpointingBarry Warsaw2010-08-072-1/+17
|/
* No longer touch the Sender or Errors-To headers. We can no longer justifyBarry Warsaw2010-06-291-1/+0
| | | | | setting these based on RFC 5322, and modern MTAs no longer need us to do so for proper bounce processing.
* Basic importer test.Barry Warsaw2010-05-061-1/+1
|
* Add POST validators.Barry Warsaw2010-03-011-1/+15
|
* Chains now fire Zope events in their _process() implementation.Barry Warsaw2010-02-161-55/+39
| | | | Clean up the chains.txt doctest to use this and other recent improvements.
* Documentation reorganization.Barry Warsaw2010-01-129-0/+1136
|
* Happy New Year.Barry Warsaw2010-01-019-9/+9
|
* Some corner case tests.Barry Warsaw2009-12-281-1/+2
|
* * Leave a mailing list via the REST API.Barry Warsaw2009-12-282-4/+8
| | | | | | * delete_member(): If the address is not associated with a member, raise NotAMemberError. * NotAMemberError -> interfaces/member.py