summaryrefslogtreecommitdiff
path: root/src/mailman/interfaces
Commit message (Collapse)AuthorAgeFilesLines
* Merge passwords into restBarry Warsaw2011-04-081-0/+3
|\
| * Add an attribute for getting the IUser record from an IMember record. This isBarry Warsaw2011-04-081-0/+3
| | | | | | | | pure convenience by way of an IUserManager lookup.
* | More fleshing out of the users REST API.Barry Warsaw2011-04-041-0/+6
|/ | | | | | | | | | | | | | * Add a 'uid factory' which allows us to return predictable unique ids for various testing purposes, e.g. user ids. This should work even in the case of cross-subprocess uid generation. * REST access to individual users, or the set of all users. * User objects now have a created_on attribute. * Users can be created through the web, but must have an email address. * Add a [devmode] 'testing' variable for communicating to qrunner subprocesses that we're running in testing mode. This allows us to coordinate factories and such in the qrunner processes. * layers.is_testing() for more consistent API. * Give AddressError a .address attribute for better diagnostics.
* * Re-organize the interface between buildout.cfg and the zope.testing layerBarry Warsaw2011-04-011-0/+3
| | | | | | | | | | | | | | | | | | | initialization. buildout.cfg is now really simple; it calls one method. That method does all the relevant layer initializations. This better localizes what has to be set up before testing can even begin. * IUsers now have a created_on property which contains the datetime at which the user record was created. * Rework the date and uid factories so that they consult the MockAndMonkeyLayer for the current testing flag. Also, those factories register themselves with the layer so that they'll get automatically reset between tests, without the layer actually having to know about them. * Move the User model object initialization into User.__init__() from the user manager. The User now also adds itself to the store. * Add a 'uid factory' for unique id creation, which is test suite aware.
* * Give users a unique, random, immutable user id.Barry Warsaw2011-03-181-0/+3
| | | | | * Find users by user_id via the user manager. * Extend the repr of users to include the user id.
* Eliminate Utils.get_pattern() and in the process, completely revampBarry Warsaw2011-02-251-0/+110
| | | | | | | | | 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.
* Implement the email address validator as a utility for easier pluggability.Barry Warsaw2011-01-061-0/+23
|
* Happy New Year.Barry Warsaw2011-01-0136-36/+36
|
* Because it was just to damn confusing, rename IAddress.address toBarry Warsaw2011-01-014-75/+87
| | | | | | 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.
* * Simplify the membership.txt doctest.Barry Warsaw2010-12-311-1/+1
| | | | | | | * Add test to show that the incoming runner adds all sender addresses to the global user manager. * New doctest helper: dump_list() * Other random cleanups.
* Fairly significant change to the way member and nonmember moderation occurs.Barry Warsaw2010-12-293-13/+18
| | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Clean up from the previous commit.Barry Warsaw2010-12-281-0/+7
| | | | | | * member_moderation_action exposed in IMailingList * REST configuration test for member_moderation_action, send_welcome_msg, and welcome_msg.
* This is part 1 of the merge of Jimmy Bergman's branchBarry Warsaw2010-12-281-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-089-15/+6
| | | | | due to _() interpolation) and a few other problems that did not have immediately obvious fixes.
* Expose description in the interface and REST API.Barry Warsaw2010-08-121-0/+7
|
* Expose the autoreponse values in the IMailingList interface and REST API.Barry Warsaw2010-08-121-2/+54
|
* Expose administrivia in the IMailingList interface and REST API.Barry Warsaw2010-08-111-0/+11
|
* Expose anonymous_list and advertised in the IMailingList interface and in ↵Barry Warsaw2010-08-111-0/+12
| | | | the configuration REST API.
* Expose in the IMailingList interface, and in the REST API.Barry Warsaw2010-08-111-0/+18
| | | | | | | * admin_immed_notify * admin_notify_mchanges Sort acceptable aliases when returned from the API.
* Access mailing list configuration via RESTBarry Warsaw2010-08-102-23/+33
| | | | | | | | | | * last_post_time -> last_post_at * protocol -> scheme * creation_date _> created_at * last_post_time -> last_post_at * Add an extended JSON encoder for datetimes * Be sure to initialize convert_html_to_plaintext and filter_content in the default style.
* Add interface module.Barry Warsaw2010-08-081-0/+52
|
* Refactor all bounce detectors.Barry Warsaw2010-08-081-0/+2
|
* * Fix the bin/test -e/--stderr option to work with the currentBarry Warsaw2010-06-181-0/+9
| | | | | | | | | | | | | zope.testrunner. Actually, divorce it from the latter and handle the sys.argv sequence ourselves. * Added IMailingList.get_roster() which returns the named roster (from a MemberRole enum). * The start of an IMailingList doctest. This needs much more detail. * Move the subscribe() function from membership.txt into the mailman.testing.helpers. * Added new REST interface for getting all the members of a roster for a specific mailing list: .../lists/<list>/roster/<role>. Note that <role> is the plural form of the MemberRole enum.
* Updates for the latest releases of flufl.enum and flufl.i18n.Barry Warsaw2010-05-0210-10/+10
|
* * A start to import of Mailman 2.1 config.pck files.Barry Warsaw2010-04-052-8/+10
| | | | * Move DigestFrequency from mailinglist to digests.
* Add POST validators.Barry Warsaw2010-03-011-19/+0
|
* Refactoring the REST support by removing unnecessary stuff and moving otherBarry Warsaw2010-02-251-44/+0
| | | | | | stuff around. We no longer need APIValueError or IResolvePathNames. Also, refactor the creation of the REST server so that it could be used with other WSGI frameworks.
* Complete the conversion to restish. All the tests pass and we're now actuallyBarry Warsaw2010-02-241-0/+3
| | | | | | RESTful. We have to use httplib2 to get DELETE and PUT. This is a prototype and could still use much cleanup.
* * Make the lists.txt doctest pass with restish.Barry Warsaw2010-02-232-17/+29
| | | | | * Put the domain name on the BadDomainSpecificationError * Give the IListManager an __iter__()
* Rip out lazr.restful and replace it with restish. This simpifies a lot of theBarry Warsaw2010-02-238-148/+22
| | | | | REST architecture, at the expense of a few features, and less support. So far so good though.
* Happy New Year.Barry Warsaw2010-01-0136-36/+36
|
* More tests.Barry Warsaw2009-12-281-0/+10
|
* Some corner case tests.Barry Warsaw2009-12-281-0/+1
|
* * Leave a mailing list via the REST API.Barry Warsaw2009-12-282-0/+35
| | | | | | * delete_member(): If the address is not associated with a member, raise NotAMemberError. * NotAMemberError -> interfaces/member.py
* * Add REST interface for joining a mailing list.Barry Warsaw2009-12-286-6/+86
| | | | | | * add_member() now returns the newly created IMember. * Reorganized several exceptions and exposed them to the REST API. * Added NoSuchListError.
* Add REST API for subscription services.Barry Warsaw2009-12-272-0/+59
|
* IRegistrar is now a utility; it doesn't need to be adapted from an IDomain.Barry Warsaw2009-12-121-9/+0
| | | | | | | This is because registration confirmation messages must come from the mailing list that the subscription request came from. Remove IDomain.confirm_address() since this lives only on the IMailingList now.
* IRegistrar.register() now requires a mailing list argument. This fixes theBarry Warsaw2009-12-101-2/+7
| | | | problem where the confirmation message doesn't know where to come from.
* * Refactor the language manager off of the config object and into a utility.Barry Warsaw2009-12-101-0/+3
| | | | | | | | * Fix a few small typos in exception handlers. * Move the initialization of the Zope Component Architecture into the first initialization step. The only reason we couldn't do that previously was because the domain object referenced the config, causing a circularity problem. Refactor the Domain implementation to avoid that.
* Add a 'name' attribute to the Switchboards. This is so 'whichq' can be setBarry Warsaw2009-12-101-1/+4
| | | | for bin/mailman unshunt.
* * Make IDomainManager a utility, since the config object is global.Barry Warsaw2009-12-081-1/+3
| | | | | | | | * Give IMailingList a .domain attribute which looks up the IDomain for its .host_name. This cleans up a lot of code. * Add a test for the 'confirm' email command. * Suppress blank lines in email command responses. * Make the IDomainCollection a utility.
* Add tests for -leave with one of your alternative addresses.Barry Warsaw2009-12-061-3/+5
|
* Convert bin/genaliases to bin/mailman aliasesBarry Warsaw2009-11-281-2/+7
|
* Factor out most of the i18n subsystem and convert to using the flufl.i18nBarry Warsaw2009-11-153-3/+3
| | | | package.
* Branch mergeBarry Warsaw2009-11-031-7/+1
|\
| * database/model reorganization. Model classes go in mailman.model. StockBarry Warsaw2009-10-101-7/+1
| | | | | | | | | | database support goes in mailman.database. Move stuff out of mailman/database/__init__.py.
* | smtp_direct.py is dead and gone.Barry Warsaw2009-11-031-0/+11
| |
* | IMailTransportAgentDelivery.deliver() returns a dictionary just likeBarry Warsaw2009-10-311-0/+2
| | | | | | | | | | | | | | | | | | SMTP.sendmail(). Handle SMTPRecipientsRefused just like smtp_direct.py. Hack the test mail server to be able to generate failures. SMTP responses must be bytes (don't forget we're using unicode literals).
* | The bulk delivery chunking algorithm.Barry Warsaw2009-10-191-1/+7
| |
* | IMailTransportAgent -> IMailTransportAgentAliasesBarry Warsaw2009-10-181-3/+25
|/ | | | Add IMailTransportAgentDelivery and begin to flesh out the doctest.