summaryrefslogtreecommitdiff
path: root/Mailman/Commands
Commit message (Collapse)AuthorAgeFilesLines
* Bite the bullet: rename the Mailman package to mailman.Barry Warsaw2008-02-2716-1312/+0
|
* Tweak copyright years.Barry Warsaw2008-02-0716-16/+16
|
* Remove the action.py module, move this to Mailman/interfaces/__init__.py.Barry Warsaw2007-10-101-4/+4
| | | | | | Convert IMailingList.personalize to a enum. Change all non-obsolete occurances of GetListEmail() to posting_address.
* Move the pending database into the SQLAlchemy/Elixir layer. The oldBarry Warsaw2007-08-011-8/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Pending.py module is removed. Added an interface to this functionality such that any IPendable (essentially a key/value mapping) can be associated with a token, and that token can be confirmed and has a lifetime. Any keys and values can be stored, as long as both are unicodes. Added a doctest. Modified initialization of the database layer to support pluggability via setuptools. No longer is this layer initialized from a module, but now it's instantiated from a class that implements IDatabase. The StockDatabase class implements the SQLAchemy/Elixir layer, but this can be overridden in a setup.py. Bye bye MANAGERS_INIT_FUNCTION, we hardly knew ye. Added a package Mailman.app which will contain certain application specific functionality. Right now, the only there there is an IRegistar implementation, which didn't seem to fit anywhere else. Speaking of which, the IRegistrar interface implements all the logic related to registration and verification of email addresses. Think the equivalent of MailList.AddMember() except generalized out of a mailing list context. This latter will eventually go away. The IRegistrar sends the confirmation email. Added an IDomain interface, though the only implementation of this so far lives in the registration.txt doctest. This defines the context necessary for domain-level things, like address confirmation. A bunch of other cleanups in modules that are necessary due to the refactoring of Pending, but don't affect anything that's actually tested yet, so I won't vouch for them (except that they don't throw errors on import!). Clean up Defaults.py; also turn the functions seconds(), minutes(), hours() and days() into their datetime.timedelta equivalents. Consolidated the bogus email address exceptions. In some places where appropriate, use email 4.0 module names instead of the older brand. Switch from Mailman.Utils.unique_message_id() to email.utils.make_msgid() everywhere. This is because we need to allow sending not in the context of a mailing list (i.e. domain-wide address confirmation message). So we can't use a Message-ID generator that requires a mailing list. OTOH, this breaks Message-ID collision detection in the mail->news gateway. I'll fix that eventually. Remove the 'verified' row on the Address table. Now verification is checked by Address.verified_on not being None.
* Other than contrib files, convert all imports of mm_cfg to imports of config.Barry Warsaw2007-07-146-41/+41
| | | | | | | | | | | Ignore mailman.egg-info In bin/make_instance.py: Catch and ignore import errors when importing Mailman.i18n. Before this script has actually been run, there won't be enough infrastructure in place of the import to succeed. Include several other fixes in this file. Add install_requires to the setup script.
* The start of a setuptools conversion. All the Makefile.in and autoconfBarry Warsaw2007-07-131-70/+0
| | | | artifacts are removed, as is the C files which we will no longer need.
* Merge exp-elixir-branch to trunk. There is enough working to make me feelbwarsaw2007-05-281-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | confident the Elixir branch is ready to become mainline. Also, fewer branches makes for an easier migration to a dvcs. Don't expect much of the old test suite to work, or even for much of the old functionality to work. The changes here are disruptive enough to break higher level parts of Mailman. But that's okay because I am slowly building up a new and improved test suite, which will lead to a functional system again. For now, only the doctests in Mailman/docs (and their related test harnesses) will pass, but they all do pass. Note that Mailman/docs serve as system documentation first and unit tests second. You should be able to read the doctest files to understand the underlying data model. Other changes included in this merge: - Added the Mailman.ext extension package. - zope.interfaces uses to describe major components - SQLAlchemy/Elixir used as the database model - Top level doinstall target renamed to justinstall - 3rd-party packages are now installed in pythonlib/lib/python to be more compliant with distutils standards. This allows us to use just --home instead of all the --install-* options. - No longer need to include the email package or pysqlite, as Python 2.5 is required (and comes with both packages). - munepy package is included, for Python enums - IRosterSets are added as a way to manage a collection of IRosters. Roster sets are named so that we can maintain the indirection between mailing lists and rosters, where the two are maintained in different storages. - IMailingListRosters: remove_*_roster() -> delete_*_roster() - Remove IMember interface. - Utils.list_names() -> config.list_manager.names - fqdn_listname() takes an optional hostname argument. - Added a bunch of new exceptions used throughout the new interfaces. - Make LockFile a context manager for use with the 'with' statement.
* - Changed to show hidden members when authorization is by list admin or ↵msapiro2007-01-211-14/+36
| | | | | moderator password. - Changed public roster syntax to accept optional password.
* Update copyright years.bwarsaw2007-01-1917-17/+17
|
* First crack at real virtual domain support, i.e. mailing lists with the samebwarsaw2006-07-081-6/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | name in more than one domain. - Totally eradicate MAILMAN_SITE_LIST, and in fact the entire need for a site list. The functions that the site list previously performed are either removed or supported in other ways. For example, instead of forwarding owner bounces to the site list, we now have a SITE_OWNER_ADDRESS which should point to a human, and such bounces are sent there instead. There's also a "no reply" email address that should be set up to go to devnull. For any message that never expects a reply, the sender is set to this address. - Remove the Site.py module. It was an experimental approach to trying to support virtual domains, and we're going to do it so much better now that this module is no longer necessary. Site._makedirs() -> Utils.makedir(). - VIRTUAL_HOST_OVERVIEW is completely removed, since now virtual hosts are always enabled. Virtual domains should be added to mailman.cfg by using the new add_domain() function. add_virtualhost() is gone. If no virtual domains are added explicitly, we add the default one that configure guessed (but we never add that if domains are added explicitly). - Utils.get_domain() -> Utils.get_request_domain() - withlist code cleanup and make sure that we load etc/mailman.cfg - A new base exception called MailmanException is added, from which all exceptions defined in Errors.py ultimately derive. MailmanError is retained and derives from MailmanException. - BadDomainSpecificationError is added. - Remove the -V/--virtual-host-overview option from list_lists and add instead -d/--domain and -f/--full. - bin/update probably works but needs more testing. - bin/newlist and bin/rmlist take fqdn list names, but default to the default domain if @whatever isn't given. newlist's -u/--urlhost and -e/--emailhost options are removed. The domain that the list is being added to must already exist. - Minor code cleanup in Message.py - Bump version to 2.2.0a1 - The Configuration object grows a .domain dictionary which maps email hosts to url hosts. The reverse mapping is supported, but not directly; use Configuration.get_email_host() instead. - Mailman/Cgi/create is converted from mm_cfg to config, and some minor code cleanup is performed. Also, convert to __i18n_templates__ = True. - New MailList APIs: + property .fqdn_listname + GetNoReplyEmail() + Create() API changes and refactoring.
* Now that Python 2.3 is the minimum requirement for Mailman 2.2:bwarsaw2006-04-151-4/+1
| | | | | | | | | | | - Remove True/False binding cruft - Remove __future__ statements for nested scopes - Remove ascii_letters import hack from Utils.py - Remove mimetypes.guess_all_extensions import hack from Scrubber.py - In Pending.py, set _missing to object() (better than using []) Also, update copyright years where appropriate, and re-order imports more to my PEP 8 tastes. Whitespace normalize.
* Now that we've converted from CVS to Subversion, remove CVS cruft frombwarsaw2006-04-151-1/+0
| | | | | the trunk. This serves also to test write permission to the svn repository, and tests email notifications.
* Port cleaning changes forward from 2.1-maint branch.bwarsaw2005-12-301-1/+2
|
* Improving banned subscription logic to cover all invites, subscribes, ↵msapiro2005-12-031-1/+7
| | | | address changes and confirmations of same.
* back porting from 2.1.6tkikuchi2005-08-284-12/+28
|
* FSF office has moved. chdcking in for MAIN branch.tkikuchi2005-08-2717-17/+17
|
* Typo. Requires new i18n translations.bwarsaw2003-04-061-1/+1
|
* process(): Catch HostileSubscriptionError and return an error message.bwarsaw2003-03-161-0/+4
| | | | Closes SF bug # 703941 by Stuart Bishop, who also suggested the basic fix.
* Update copyright yearsbwarsaw2003-03-111-1/+1
|
* SF patch #683906, add $DESTDIR to install target, by Ademar de Souza Reistwouters2003-03-111-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Jr, after much checking and rechecking (and some massaging) by me. Checking in now before I fall asleep and forget what all this was for. This patch adds the ability to 'make DESTDIR=/some/dir/tree install' that doesn't influence the paths stored in e.g. Defaults.py at all, which is of good use for various package managers. It is not all that package managers must do, however! Running make install with DESTDIR set means bin/update is never run, and mm_cfg.py is always written; package managers should make sure the appropriate post-installation is done, and that mm_cfg.py is treated as a config file. This patch inadvertently fixes some bogus whitespace: 8-spaces where surrounding code used tabs. The difference was harmless because the 8-spaces were used inside shell-continued-oneliners, but it is confusing and could lead to future harm. I'm too tired to make those two or three changes in a separate checkin, sorry. This patch also assumes the various packages that are installed using distutils do not record (or rather, use) their installation paths anywhere, but this seems to hold true at least for the moment. Also, I've done so many slow cvs diff's, I'm wondering when we'll switch to Subversion. Unfortunately, I've also done so many 'cvs diff -c > file; patch -p0 -R < file's to switch back and forth between patches and change sets, I'm wondering when we'll switch to Aegis as well. :-P
* copyright yearsbwarsaw2003-03-101-1/+1
|
* Typo fix in documentation. Closes SF patch #700538, Small typo intwouters2003-03-101-1/+1
| | | | | | Mailman/cmd_confirm.py (but doesn't really use it :) 2.1 backport candidate.
* Donn Cave's patch #602087 to honor configure's --srcdir switch.bwarsaw2002-12-121-1/+1
|
* process(): Don't send a results message if we're already sending abwarsaw2002-11-212-2/+4
| | | | confirmation message.
* process(): Set the `respond' flag to false ifbwarsaw2002-11-211-10/+17
| | | | | | | - this is a subscription being confirmed and send_welcome_msg is true - this is an unsub being confirmed and send_goodbye_msg is true We don't need redundant responses.
* process(): Watch for RFC 2047 encoded From headers and decode thebwarsaw2002-10-051-0/+10
| | | | | realname either to a byte string if it contains just ascii characters, or to a unicode.
* set_show(): Added some missing markup, according to SF bug #553385 bybwarsaw2002-08-171-3/+3
| | | | Daniel Buchman.
* process(): Make sure the help.txt template comes from the currentlybwarsaw2002-08-151-1/+1
| | | | | | active language, which will be the sender's preferred language if they are a member, or the list's preferred language otherwise. The currently active language is available in the message metadata.
* process(): Fix for confusing "you were subscribed and yourbwarsaw2002-07-091-3/+11
| | | | | | | | | | | | | confirmation string was invalid" messages. The problem was if the responder left the confirmation string in the Subject: and also copied it to the body, the second processing of the confirmation would find no cookie. So now we always stop after processing the first confirmation command (yes, that means no other commands in the message will be processed, which is fine). We also trim the unprocessed commands in the results to not include identical confirmation strings -- otherwise they'll see their confirmation as unprocessed.
* process(): Limit the lists returned to those in the same virtualbwarsaw2002-05-171-0/+6
| | | | | domain as the list the request was sent to, if VIRTUAL_HOST_OVERVIEW is true.
* Add a commentbwarsaw2002-05-171-0/+1
|
* process(): Suggestion by Aaron Birenboim to include the member'sbwarsaw2002-05-121-0/+12
| | | | | options page url in the help message if the sender is a member of the list.
* Oops, I guess I forgot to commit this change.bwarsaw2002-05-041-2/+3
| | | | | process(): Catch NotAMemberError instead of MMNoSuchUserError. Also, slight rewrite of the result message.
* New architecture for email commands. Instead of the monolithic (andbwarsaw2002-05-0218-0/+1298
unmaintainable) MailCommandHandler.py file, we've now got a framework where each command is implemented in a separate file. This means it's both more extensible and more flexible: - you can easily add new commands for things I haven't thought of <wink>, and the `help' command will automatically adjust - you can disable commands entirely by removing the appropriate file - you can disable, change, or add commands on a per-list (or even per-message or per-sender) basis CommandRunner.py is the module that calls into this framework. Each command is implemented as a cmd_<command>.py file. The `set' command is the most complicated. The help text is currently implemented as module docstrings (for most commands), so the i18n catalogs must be updated. Also the help.txt files will be updated.