| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| |\ |
|
| | | |
|
| |\| |
|
| | | |
|
| |/
|
|
|
|
|
| |
* Rename StormBaseDatabase._create() -> .initialize()
* Refactor database initialization.
* make_listid() helper.
* Add a pivot() helper for schema migrations.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
reduced. Now, only one `-r/--runner` option may be provided and the
round-robin feature has been removed.
* Fixed REST server crash on `reopen` command. Identification and test
provided by Aurélien Bompard. (LP: #1184376)
Also:
* bin/runner now uses standard argparse instead of ScriptOptions.
* The entire bin/runner machinery has bee reorganized and simplified. There
* is no more Loop class. Signal setting is moved directly into the base
Runner class and overrided in specific subclasses (e.g. RESTRunner which
must cleanly shutdown its TCPServer). The runner exit status is now set
directly on the Runner instance.
* Fixed a few minor style issues.
* In order to cleanly shutdown the RESTRunner's WSGI server, we must start a
subthread which only watches for an Event and then calls the server's
shutdown() method. It has to be this way because the WSGI server itself
(due to interactions with SQLite), and the signal handlers (due to Python's
signal handling semantics) must both run in the main thread. However, the
shutdown() must be invoked from a subthread in order to prevent deadlock.
* Refactor the RESTLayer to eliminate duplication of code.
|
| |
|
|
| |
signals. (LP: #1184376)
|
| |
|
|
| |
(LP: #1117176)
|
| |\
| |
| |
| | |
Sandesh Kumar Agrawal. (LP: #1095422)
|
| | | |
|
| | | |
|
| |/ |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Rework list style management. No more style priorities or matching.. Now,
you name a style explicitly to apply and that's it.
* create_list() now takes a `style` argument.
* config file now names both a default style to use, and a set of paths to
scan for IStyle instances. (This could be a model for other plugins.)
* added IMailingList.style_name to record the last style applied, but this is
going to be removed in subsequent revisions.
Also:
* Move find_components() and scan_module() from app/finder.py to
utilities/modules.py
* Cleaned up lifecycle.rst for better documentation. Some tests moved to
test_lifecycle.py.
* Remove some unnecessary test tearDown() code.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
-------------
* `[passlib]path` configuration variable renamed to `[passlib]configuration`.
* Postfix-specific configurations in the `[mta]` section are moved to a
separate file, named by the `[mta]configuration` variable.
* In the new `postfix.cfg` file, `postfix_map_cmd` is renamed to
`postmap_command`.
Also:
* More Python 2.7-isms, use assertMultiLineEqual() directly.
* Added external_configuration() and load_external() to mailman.config.config
* ConfigLayer does a blanket set of [postfix]postmap_command so subtests
generally won't have to.
|
| | |
|
| |
|
|
|
| |
The code base is now also `python2.7 -3` clean, although there are still
some warnings in 3rd party dependencies. LP: #1073506
|
| |\
| |
| |
| | |
Fixed by Mark Sapiro.
|
| | | |
|
| | | |
|
| |\ \ |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The default hash is `sha512_crypt`.
* Events renamed and moved:
* `mailman.chains.accept.AcceptNotification`
* `mailman.chains.base.ChainNotification`
* `mailman.chains.discard.DiscardNotification`
* `mailman.chains.hold.HoldNotification`
* `mailman.chains.owner.OwnerNotification`
* `mailman.chains.reject.RejectNotification`
changed to (respectively):
* `mailman.interfaces.chains.AcceptEvent`
* `mailman.interfaces.chains.ChainEvent`
* `mailman.interfaces.chains.DiscardEvent`
* `mailman.interfaces.chains.HoldEvent`
* `mailman.interfaces.chains.AcceptOwnerEvent`
* `mailman.interfaces.chains.RejectEvent`
* A `ConfigurationUpdatedEvent` is triggered when the system-wide global
configuration stack is pushed or popped.
* With the switch to `passlib`_, `[passwords]password_scheme` has been
removed. Instead use `[passwords]path` to specify where to find the
`passlib.cfg` file. See the comments in `schema.cfg` for details.
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- Add explicit dependency on zope.event in setup.py.
- Use Python 3 compatible syntax for specifying that a class implements an
interface, i.e. the @implementer class decorator.
- print_function futures.
- Whitespace normalization.
|
| | | |
| | |
| | |
| | | |
required due to the SMTP protocol.
|
| | | |
| | |
| | |
| | | |
- transaction() context manager.
|
| | | | |
|
| | | |
| | |
| | |
| | | |
- Update many tests to use the transaction() context manager.
|
| | |/
| |
| |
| | |
module, and use it in another convenient place.
|
| |/
|
|
| |
- news_moderation -> newsgroup_moderation
|
| |
|
|
|
| |
- Add a `cleanups` global to doctests. This can be used to register
functions which will get called automatically at doctest tearDown time.
|
| |
|
|
|
|
| |
* Configuration schema variable changes:
[nntp]username -> [nntp]user
[nntp]port (added)
|
| |
|
|
|
|
|
|
|
| |
header removal and de-duplication algorithms.
- Improve the robustness of the de-duplication code.
- Add a very nice helper called `configuration` which can be used either as a
decorator or context manager to temporarily set values in a configuration
section. No more need to manage pushes/pops. More code needs to be
converted to use this style.
|
| | |
|
| |
|
|
| |
Beta testers can can safely remove `$var_dir/queue/news`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
------------
* Internally, all datetimes are kept in the UTC timezone, however because of
LP: #280708, they are stored in the database in naive format.
* `received_time` is now added to the message metadata by the LMTP runner
instead of by `Switchboard.enqueue()`. This latter no longer depends on
`received_time` in the metadata.
* The `ArchiveRunner` no longer acquires a lock before it calls the
individual archiver implementations, since not all of them need a lock. If
they do, the implementations must acquire said lock themselves.
Configuration
-------------
* New configuration variables `clobber_date` and `clobber_skew` supported in
every `[archiver.<name>]` section. These are used to determine under what
circumstances a message destined for a specific archiver should have its
`Date:` header clobbered.
|
| | |
|
| | |
|
| |
|
|
| |
now works as expected!
|
| |
|
|
|
|
|
|
| |
- Add unittests for owner recipients. There does eventually need to be some
documentation about owner recipients.
- Implement owner recipients handler. This includes moderators and owners
(i.e. all the non-disabled the list administrators).
- Changed the [mailman]site_owner setting in testing.cfg to noreply@example.com
|
| |
|
|
| |
recipients handler.
|
| |
|
|
| |
how I think about them anyway.
|
| | |
|
| |
|
|
| |
this through the incoming runner.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- email.iterators.body_line_iterator() cannot handle unicodes in Python 2.6,
because it uses cStringIO.StringIO under the covers, and *that* can't handle
unicode. This works fine in Python 2.7, so I override this for the tests
only under 2.6 (the code itself isn't affected).
- AddressError needs to str() its IAddress attribute explicitly in the
__str__() method, otherwise under Python 2.6, you'll get unprintable reprs
in the doctests. Again, this works correctly in 2.7, but EIBTI, so it can't
hurt either way.
- EmailError: a new exception, not related to AddressError. The reason for
this it to conform to current nomenclature: "address" means an IAddress
while "email" means a text email address. So InvalidEmailAddressError
now derives from EmailError instead of AddressError because it gets passed a
text email address, and because that is invalid, it never gets turned into
an IAddress. The __str__() of this new base exception class does some
tricky encoding to keep it compatible between Python 2.6 and 2.7.
- UnverifiedAddressError derives from AddressError instead of the more generic
MailmanError.
- A few random code cleanups are included.
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Configuration variable `[mailman]filtered_messages_are_preservable`
controls whether messages which have their top-level `Content-Type`
filtered out can be preserved in the `bad` queue by list owners.
* Configuration section `[scrubber]` removed, as is the scrubber handler.
This handler was essentially incompatible with Mailman 3 since it required
coordination with Pipermail to store attachments on disk.
* Schema additions:
- mailinglist.filter_action
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Configuration variable `[mailman]filtered_messages_are_preservable`
controls whether messages which have their top-level `Content-Type`
filtered out can be preserved in the `bad` queue by list owners.
* Configuration section `[scrubber]` removed, as is the scrubber handler.
This handler was essentially incompatible with Mailman 3 since it required
coordination with Pipermail to store attachments on disk.
* Schema additions:
- mailinglist.filter_action
|
| | |
| |
| |
| | |
some new APIs I suspect.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
"display_name" across the board.
* `IMailingList.real_name` -> `IMailingList.display_name`
* `IUser.real_name` -> `IUser.display_name`
* `IAddress.real_name` -> `IAddress.display_name`
* Schema changes:
- real_name -> display_name (mailinglist, user, address)
|
| |/
|
|
|
| |
Clean up Python 2.7-isms and deprecations that break the tests suite
on Python 2.6.
|