| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
| |
- Catches all exceptions raised when running a plugins (pre|post)
_hooks. If its pre_hook raises an exception, the plugin is disabled
and removed, so its post_hook will not be run and its components
will not be loaded. If its post_hook raises an exception we just
continue and hope for the best.
|
| |
|
|
| |
- Allows to better loop over pluging configs and their names.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Adds the notion of a 'plugin'.
- A plugin has a package path and a flag specifying whether
it's enabled or not.
- Adds a find_pluggable_components function similar to the
find_components one. This one dynamically searches not only
the mailman package but all of plugins.
- e.g. find_pluggable_components('rules', IRule) finds
all IRule components in mailman.rules but also in
example_plugin.rules for plugin names example_plugin.
- Uses the find_pluggable_components function in place of
find_components when searching for Rules, Handlers, Chains,
EmailCommands, and Styles.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\ |
|
| | |\
| | |
| | |
| | |
| | |
| | |
| | | |
Cover another header match import case
This branch just covers one more import conversion case seen in the wild.
See merge request !163
|
| | | | |
|
| |/ /
| |
| |
| |
| |
| |
| | |
Also:
* Fix a regexp that 3.6 raises an exception on.
* Remove a deprecated attribute from passlib.cfg.
|
| | | |
|
| | | |
|
| |/ |
|
| |
|
|
|
| |
The new template system is introduced for API 3.1. See
``src/mailman/rest/docs/templates.rst`` for details.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Sometimes the backups are stored in the same directory by text editors
as dotfiles which leads to ImportError.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Closes #224
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
This suppresses all errors in the file. Use `noqa`, although pep8
doesn't honor this for all errors.
There may be a plugin which helps.
|
| |
|
|
|
|
|
|
|
| |
The `moderation_action` for members and nonmember can now be ``None``
which signals falling back to the appropriate list default action,
e.g. `default_member_action` and `default_nonmember_action`. Given by
Aurélien Bompard.
Closes #189
|
| | |
|
| |
|
|
|
|
|
|
| |
Members and nonmember's moderation action should be None by default, and
in that case the moderation rule should fallback to the mailing list's
default action.
Fixes: #189
|
| |
|
|
| |
Fix lots of import order errors discovered by the new plugin.
|
| | |
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
* Remove an unused import.
* Opportunistically remove ^Ls
* Add a missing interface attribute.
* Fix up some docstrings.
* Rename a parameter in an interface for clarity.
* Random code style cleanups.
|
| |
|
|
| |
This reverts commit 703fc135dfcd496a704562ddc263aa0f4f828de9.
|
| |
|
|
| |
It makes it clearer what values are valid, and allows validation.
|
| |
|
|
|
|
|
| |
Add a numerical index property to HeaderMatch objects, and change the
HeaderMatchSet manager to take the order into account.
Items can now be inserted and removed by index.
|
| |
|
|
|
|
|
|
| |
Closes #196
In mailman: URIs (e.g. IMailingList.header_uri and .footer_uri), you
used to be able to only use fqdn-listnames. But since List-IDs are more
stable, let's allow those too. Silently deprecate using the fqdn-listname.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* Use `yield from` wherever appropriate.
* Use SA's .one_or_none() where appropriate.
- Fix a bug in MailingList.pass_extensions.
- Use ValueError in other places for consistency.
- Remove unreached/nonsense code.
- Simplify the SubscriptionService.find_member() and .find_members()
implementations.
- Boost coverage.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
use len() and slicing on SQLAlchemy query results. We also don't need to
list()-ify the results in the tests. This isn't perfect, but at least it
doesn't introduce yet another layer violation.
|
| |
|
|
|
|
| |
Use coverage.ini to ignore a few common idioms, so as to reduce code clutter.
Invoke coverage slightly differently in the tox.ini.
|
| | |
|
| |
|
|
|
|
|
|
| |
* Boost coverage.
* Don't report coverage on the test modules.
* In one test, when acquiring the lock, set a timeout. Hopefully this will
eliminate the occasional test deadlock.
* Fix a buglet in wrap()
|
| |
|
|
|
| |
Use Python 3.5 to run the coverage tests.
Clean up the code style a bit.
|