| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
member records. Arguments are `subscriber` (email address to search for -
required), `fqdn_listname` (optional), and `role` (i.e. MemberRole -
optional). (LP: #799612)
|
| | |
|
| |
|
|
|
| |
for consistency. This changes the REST API for mailing list
resources. (LP: #787599)
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
* Create an IMailTransportAgentAliases utility that contains all the logic for
generating all the aliases for a mailing list, both the fully-qualified ones
and the local-part ones.
* Add -f and -s options to `bin/mailman aliases` to facilitate outputing the
aliases in other formats than the configured one, and for printing out a
simple list of the aliases.
* IMailTransportAgentAliases -> IMailTransportAgentLifecycle; also add a new
definition for IMailTransportAgentAliases
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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
|
| |
|
|
|
| |
* Finally get rid of BounceMixin
* Test the simple case where the mailing list does no bounce processing.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
|
|
| |
and over just the unprocessed events.
* In the outgoing queue runner, work out the logic for when
SomeRecipientsFailed with permanent failures in a probe message.
|
| |
|
|
| |
* Add BounceContext enum
|
| | |
|
| |
|
|
| |
other bounce detector pass.
|
| | |
|
| |
|
|
|
|
|
|
| |
* ISubscriptionService.join(): address -> subscriber. This is not backward
compatible with the previous API!
* Add get_user_by_id() to the IUserManager interface. It was already
implemented, but the interface was missing the definition.
* MissingUserError: new exception, purely for the REST API.
|
| |
|
|
|
| |
correctly in the REST API's list of members. This even correctly tracks
changes in their preferred address.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
path at the root of the resource tree (i.e. /members/X) and because when
members can be subscribed by their IUser record (for preferred address), their
canonical location cannot contain the address they are subscribed with. When
their preferred address changes (without otherwise touching their membership),
this address will change and that's not good for a canonical location.
Other changes:
* Added IMember.member_id attribute
* Added ISubscriptionService.get_member() so member records can be retrieve by
member id.
* We can now get individual members by id via the REST API.
* Extend the UniqueIDFactory so that it can take a 'context' (defaulting to
None). The context is only used in the testing infrastructure so that
separate files can be used for user ids and member ids. Otherwise, we'd
have gaps in those sequences.
* When *not* in testing mode, ensure that UIDs cannot be reused by keeping a
table of all UIDs ever handed out. We *should* never get collisions, but
this ensures it.
* Clean up mailman.sql
|
| |
|
|
| |
get delivery.
|
| |
|
|
| |
The preferred address must be verified, and controllable by the user.
|
| | |
|
| |\ |
|
| | |
| |
| |
| | |
pure convenience by way of an IUserManager lookup.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
| |
* Find users by user_id via the user manager.
* Extend the repr of users to include the user id.
|
| |
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
* member_moderation_action exposed in IMailingList
* REST configuration test for member_moderation_action, send_welcome_msg, and
welcome_msg.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
| |
due to _() interpolation) and a few other problems that did not have
immediately obvious fixes.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
the configuration REST API.
|
| |
|
|
|
|
|
| |
* admin_immed_notify
* admin_notify_mchanges
Sort acceptable aliases when returned from the API.
|
| |
|
|
|
|
|
|
|
|
| |
* 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.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
| |
* Move DigestFrequency from mailinglist to digests.
|
| | |
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
RESTful. We have to use httplib2 to get DELETE and PUT.
This is a prototype and could still use much cleanup.
|
| |
|
|
|
| |
* Put the domain name on the BadDomainSpecificationError
* Give the IListManager an __iter__()
|
| |
|
|
|
| |
REST architecture, at the expense of a few features, and less support. So far
so good though.
|
| | |
|
| | |
|