| Commit message (Collapse) | Author | Age | Files | Lines |
| |\ |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
- This is quite a huge commit, since it changes the type of the
MailingList.subscription_policy and unsubscription_policy
attributes to the new names of pluggable workflows, in all
occurences.
- Also adds a migration to migrate the attributes to the new types.
- Adds tests for the migration.
|
| | | |
|
| | |
| |
| |
| |
| | |
- Also introduce IWorkflow, ISubscriptionWorkflow,
IUnsubscriptionWorkflow.
|
| |\ \ |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- Adds the rest_object method to the IPlugin interface. This method
is called by the REST api to route requests to the plugin's REST
api. All attributes are proxied, so the object becomes a true
REST object in the ObjectRouter hierarchy. For example see the
RESTExample and ExamplePlugin classes in mailman.testing.plugin.
The plugin might return None from this method, in which case
all calls to it's REST api route will return 404 NotFound.
- Adds new routes to the REST api. For version >= 3.1:
- /3.1/plugins
Returns a dictionary with plugin names as keys, and their configs
as values.
- /3.1/plugins/<plugin_name>
Proxies everything to plugin's rest_object, if plugin with such
name exists and provides a non-null rest_object, else NotFound.
|
| | |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Removes pre_hook, post_hook and ext_dir. With the latter being
unused. Warns on startup if the hooks are present in config.
- Adds IPlugin interface with pre_hook and post_hook methods.
- Adds 'class' config parameter to plugins, which can be set to
a class implementing the IPlugin interface, it will be
initialized once on Mailman's startup, then before the DB
setup the pre_hook will be run, after DB and other components
the post_hook will be run. Plugin instances are stored in the
config.plugins dict, with keys being their configuration section
names.
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Added more documentation on config.mailman.listname_chars.
Made a couple of minor tweaks.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Closes #255
As of Python 3.5, PEP 475 gets in our way. Runners with long time.sleep()'s
in their _snooze() method (e.g. the retry runner) will have their system call
implemented time.sleep() automatically retried at the C layer. The only
reliable way to prevent this is to raise an exception in the signal handler.
The standard run() method automatically suppresses this exception, meaning,
it's caught and ignored, but effectively breaks the run() loop, which is just
what we want.
The lmtp and rest runners implement their own run loops, so they also have to
handle this exception, by ignoring it.
|
| |
|
|
| |
Closes #214
|
| | |
|
| | |
|
| | |
|
| |\ |
|
| | | |
|
| |\ \
| |/
|/| |
|
| | | |
|
| |/ |
|
| |
|
|
| |
See !161
|
| |
|
|
|
|
| |
This allows the filtering to be done at the database level. It also
makes list pagination much more efficient, since the slicing is done at
the database level too.
|
| |
|
|
| |
* Rebased, cleaned up, and test improvement.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This merges the SubscriptionManager and UnsubscriptionManager into a
single SubscriptionManager implementation that handles both register()
and unregister(). This allows us to use direct class-based adaptation
instead of the more clunky getAdapter() API. We can also eliminate the
funky _get_workflow() implementation detail.
This has a couple of side-effects. .confirm() must lookup the token in
the pendings database and pull out the pending type, dispatching to the
proper class depending on the type, or raising a LookupError if the
token is None or there is no pendable associated with the given token.
This feels like an acceptable trade-off.
However, this *also* means that IWorkflowStateManager must lose its
'name' argument in its methods. That's because we won't actually know
the name until its too late. Honestly, the name wasn't providing much
value anyway (it was always the subclass's name), so losing that seems
fine too. The complication here is that the name was a primary key in
the 'workflowstate' table, so we need to add its removal in the database
migration.
|
| |
|
|
|
|
|
|
| |
* events
* notices
* handlers
Also, be sure to do only one `leave` command per email.
|
| | |
|
| |
|
|
| |
Also, document more APIs.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
The new template system is introduced for API 3.1. See
``src/mailman/rest/docs/templates.rst`` for details.
|
| |
|
|
|
|
|
|
|
| |
* Add a version_info field which is a better way to do ordered
comparisions of the API version.
* All subresources now get their .api attribute set automatically, if
they are passed back through the ObjectRouter. No more fiddling with
context['api'] (unless of course, they don't make a roundtrip through
the main ObjectRouter loop.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Add documentation.
Extend ISubscriptionService interface.
|
| | |
|
| |
|
|
| |
Fix lots of import order errors discovered by the new plugin.
|
| |
|
|
| |
This allows us to import it in more places without threat of import errors.
|
| | |
|
| |
|
|
|
|
|
| |
mailman/core/errors.py is gone now. We had a duplicate base exception
which now always comes from mailman/interfaces/errors.py.
Obsolete/unused exceptions are remove. The other exceptions are moved
to better locations.
|