| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
| |
when a new member joins a mailing list, and an `UnsubscriptionEvent` when a
member leaves a mailing list. (LP: #1047286)
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
documentation. Move non-documentation tests into a separate unittest file.
* Separate out the doctests for IRequest from the doctests for
app/moderator.py and place the latter in a separate file.
* Fix typo in app/membership.py (s/send_goodbye_msg/send_goodbye_message), but
LP: #1091321 tracks more needed fixes in this area.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a clean up pass and thorough unit testing).
* Insert the RequestType enum name into the data dictionary returned by
get_request(). Otherwise, there's really no good way to get that
information, which several APIs need.
* Flatten the data dictionary returned by held message JSON representations,
into the JSON dictionary itself. Do a filtering and rename pass on the
keys.
- rename 'id' to 'request_id'
- remove the redundant 'key'
* Refactor some common stuff into _ModerationBase, although more refactoring
is coming.
|
| |
|
|
|
|
| |
* hold_subscription(): Don't str(mode) to get a string representation, just
mode.name since we know it is a DeliveryMode. This means we don't need to
split the value later in handle_subscription().
|
| |
|
|
|
| |
The code base is now also `python2.7 -3` clean, although there are still
some warnings in 3rd party dependencies. LP: #1073506
|
| |
|
|
|
|
|
|
|
|
|
|
| |
--------
* The `ban` table now uses list-ids to cross-reference the mailing list,
since these cannot change even if the mailing list is moved or renamed.
Interfaces
----------
* The `IBanManager` is no longer a global utility. Instead, you adapt an
`IMailingList` to an `IBanManager` to manage the bans for a specific
mailing list. To manage the global bans, adapt ``None``.
|
| |
|
|
| |
- member.mailing_list -> list_id
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
now via the RFC 2369 `list_id` instead of the fqdn listname (i.e. posting
address). This is because while the posting address can change if the
mailing list is moved to a new server, the list id is fixed.
(LP: #1024509)
+ IListManager.get_by_list_id() added.
+ IListManager.list_ids added.
+ IMailingList.list_id added.
+ Several internal APIs that accepted fqdn list names now require list ids,
e.g. ISubscriptionService.join() and .find_members().
+ IMember.list_id attribute added; .mailing_list is now an alias that
retrieves and returns the IMailingList.
- list_id added (LP: #1024509)
|
| |
|
|
| |
(LP: #975696)
|
| | |
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
ArchivePolicy. This describes the three states of never archive, archive
privately, and archive_publicly. (LP: #967238)
Database
--------
* Schema migrations (LP: #971013)
- include_list_post_header -> allow_list_posts
- news_prefix_subject_too -> nntp_prefix_subject_too
- news_moderation -> newsgroup_moderation
- archive and archive_private have been collapsed into archive_policy.
- nntp_host has been removed.
* The PostgreSQL port of the schema accidentally added a moderation_callback
column to the mailinglist table. Since this is unused in Mailman, it was
simply commented out of the base schema for PostgreSQL.
|
| | |
| |
| |
| |
| |
| | |
include_list_post_header -> allow_list_posts
Also add a bunch more migration tests.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
production database.
- Add an IDatabaseFactory interface with two named utility implementations.
The initialization subsystem will either ask for the 'testing' or
'production' factory utility depending on whether we're in the test suite or
not. The testing factory returns an IDatabase that can be _reset().
- initialize_2() now takes an optional `testing` argument, defaulting to
False. The test ConfigLayer will pass in True.
- Remove _reset() from the base database class.
- The ModelMeta now adds a PRESERVE attribute to database classes. This
defaults to False, meaning by default the test framework will reset the
table. The Version table is preserved because it records the schema
migrations.
- Because of the above, we no longer need to support pre_reset() and
post_reset() on migrations.
Also, bin/mailman should allow the standard configuration file search
algorithm to be used except when -C/--config is given.
|
| | |\
| |/
|/| |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| | |
- 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.
|
| | |
| |
| |
| | |
- Convert direct use of config.db global to use the @dbconnection decorator.
|
| | |
| |
| |
| | |
- Update many tests to use the transaction() context manager.
|
| |/
|
|
| |
- news_moderation -> newsgroup_moderation
|
| |
|
|
| |
(LP: #975700)
|
| |
|
|
| |
or unverified. (LP: #975698)
|
| |
|
|
|
|
|
|
|
|
|
| |
is hashed with the currently selected scheme.
Also:
- Simplify and rewrite the approved.rst doctest. Now just document the good
path, and only describe its functionality using the Approved: header, which
is the recommended header.
- Greatly expand the unittests for the approved rule.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
------------
* 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.
|
| |
|
|
|
|
|
|
| |
- 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
|
| |
|
|
| |
this through the incoming runner.
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* 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
|
| | |
| |
| |
| |
| | |
Also, change the implementation of mailing list REST resource's member_count
to use the more efficient implementation of IRoster.member_count.
|
| |/
|
|
|
|
|
|
|
|
|
| |
"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)
|
| |
|
|
| |
unittests where they belong.
|
| |
|
|
|
|
|
|
|
|
|
| |
postings go through the `posting_chain` while messages to owners to through
`owners_chain`. The default `built-in` chain is renamed to
`default-posting-chain` while the `built-in` pipeline is renamed
`default-posting-pipeline`.
* Schema changes:
- start_chain -> posting_chain
- pipeline -> posting_pipeline
|
| |
|
|
|
|
|
|
|
|
|
|
| |
footers, using the same semantics and algorithm as for welcome and goodbye
messages.
Additional schema changes:
- msg_header -> header_uri
- msg_footer -> footer_uri
- digest_header -> digest_header_uri
- digest_footer -> digest_footer_uri
|
| |
|
|
|
|
|
|
| |
IMailingList documentation.
Also:
* `ILanguageManager.add()` returns the `ILanguage` object just created.
|
| |
|
|
|
|
|
|
|
|
| |
email.
Also:
- The user's Full Name is included on the To line of a welcome message.
- Clean up some tests.
- The welcome_message_uri for lists using the default style is set to
mailman:///welcome.txt so a welcome message is sent by default.
|
| |
|
|
|
| |
- welcome.txt is no longer inserted into subscribeack.txt. This latter is
renamed to welcome.txt as the default welcome message.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
used in welcome and goodbye messages, and supports both language and
mailing list specifications. E.g. mailman:///test@example.com/it/welc.txt
* Schema changes:
- welcome_msg -> welcome_message_uri
- goodbye_msg -> goodbye_message_uri
- send_welcome_msg -> send_welcome_message
- send_goodbye_msg -> send_goodbye_message
* New `ITemplateLoader` utility.
|
| |
|
|
|
|
|
|
|
| |
`digest=` argument now accepts the following values: `no` (for regular
delivery), `mime`, or `plain`.
Also:
- Fix get_queue_messages() to properly sort on the string representation of a
header, since it could be a Header instance.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
resources now accept a `held` path component. GETing this returns all held
messages for the mailing list. POSTing to a specific request id under this
url can dispose of the message using `Action` enums.
* `IRequests` interface is removed. Now just use adaptation from
`IListRequests` directly (which takes an `IMailingList` object).
* `handle_message()` now allows for `Action.hold` which is synonymous with
`Action.defer` (since the message is already being held).
* `IListRequests.get_request()` now takes an optional `request_type`
argument to narrow the search for the given request.
- also, print_function is now a standard __future__ import. The template has
been updated, but add this to modules as you edit them.
|
| | |
|
| |
|
|
| |
every mailing list as (list_name, mail_host).
|
| | |
|
| |
|
|
|
| |
MailingList is loaded from the database. We need to call this explicitly in
the constructor, but at least nothing else will ever need to call it.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
* Separate out the RFC 2369 header adding handler.
* Dynamically calculate the `List-Id` header instead of storing it in the
database. This means it cannot be changed.
* Be sure to clean out any digest .mmdf files when the world is reset.
|