| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| | |
into the hands of the database modules, by using ZCA adapters.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
- Refactor load_schema() into a separate load_sql() method.
- Add API for test suite to make a temporary database.
- Add code to migrate the PostgreSQL database.
- Comment out `moderation_callback` from the PostgreSQL SQL; this must have
snuck in accidentally via the contributed port.
- Refactor test_migrations.py
|
| | |\
| |/
|/| |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| |
| |
| | |
`RunnerCrashEvent` is triggered, which contains references to the queue
runner, mailing list, message, metadata, and exception. Interested parties
can subscribe to that `zope.event` for notification.
|
| | | |
|
| | |
| |
| |
| | |
- news_moderation -> newsgroup_moderation
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
can be tested separately.
- Add an `until` argument to load_migrations() so that we can load only up to
a given timestamp.
- In load_migrations(), ignore files in which the `version` part of the file
name is empty.
- In migrations.rst, use the new, better way of ensuring post-test cleanup.
- Add tests for partial upgrades.
- LP: #971013 - schema migrations for beta 2.
- LP: #967238 - IMailingList.archive + IMailingList.archive_private ->
IMailingList.archive_policy, and add ArchivePolicy enum.
- Move the `chdir` context manager to helpers.py and add `temporary_db`
context manager.
|
| |
|
|
| |
(LP: #975700)
|
| |
|
|
| |
or unverified. (LP: #975698)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bit. The previous `[spam.header.foo]` sections have been removed.
Instead, there's a new `[antispam]` section that contains a `header_checks`
variable. This variable takes multiple lines of `Header: regexp` values,
one per line. There is also a new `jump_chain` variable which names the
chain to jump to should any of the header checks (including the
list-specific, and programmatically added ones) match.
* Fixed a typo when returning the configuration file's header match checks.
(LP: #953497)
Also:
- Remove an unused method.
- Improve test coverage for mailman/app/bounces.py
- 100% test coverage for mailman/chains/headers.py
- Various other minor code cleanup.
- Fixed the 'any' rule, which was checking a bogus metadata dictionary key.
|
| |
|
|
| |
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.
|
| |
|
|
| |
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.
|
| | |
| |
| |
| |
| | |
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)
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
- Also, rewrite the Postfix alias generator to use the faster, duck-typed API.
|
| | |
|
| |
|
|
| |
every mailing list as (list_name, mail_host).
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
|
| |
off the `mailman.config.config` object.
* Fixed bogus use of `bounce_processing` attribute (should have been
`process_bounces`, with thanks to Vincent Fretin. (LP: #876774)
|
| |
|
|
|
|
|
|
| |
should always be stored as INTEGER columns, with the enum class explicitly
described in the code. This should be more efficient, and besides EIBTI.
Also, filled in a few additional IMailingList attributes which were not
documented in the interface.
|
| |
|
|
|
|
| |
deleted through the REST interface. Hierarchical, combined preferences for
members, and system preferences can be read through the REST interface.
(LP: #821438)
|
| |
|
|
|
|
|
|
|
|
| |
lifecycle changes:
- DomainCreatingEvent - sent before the domain is created
- DomainCreatedEvent - sent after the domain is created
- DomainDeletingEvent - sent before the domain is deleted
- DomainDeletedEvent - sent after the domain is deleted
* Using the above events, when a domain is deleted, associated mailing lists
are deleted. (LP: #837526)
|
| |\
| |
| |
| |
| | |
all the mailing lists in a specific domain (LP: #829765). Given by
Stephen A. Goss.
|
| | |\ |
|
| | | | |
|
| | | | |
|
| |\ \ \
| |_|/
|/| |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
and exposed to the REST API as their integer equivalents. They are stored
in the database using Storm's UUID type.
- ISubscriptionService.get_member() now takes a UUID
- IUserManager.get_user_by_id() now takes a UUID
* Moderators and owners can be added via REST (LP: #834130). Given by
Stephen A. Goss.
- add_member() grows a `role` parameter.
- ISubscriptionService.join() grows a `role` parameter.
* InvalidEmailAddressError no longer repr()'s its value.
* `address` -> `email` for consistency
- delete_member()
- ISubscriptionService.leave()
* Fixed typo in app/subscriptions.py __all__
* AlreadySubscribedError: attributes are now public.
* More .txt -> .rst renames.
|
| |/ / |
|
| |/
|
|
| |
REST API. (LP: #831660)
|
| |
|
|
|
|
|
|
|
|
|
| |
* Add ListCreatingEvent and ListDeletingEvent. These are sent before the
operation actually occurs, whereas the previously added ListCreatedEvent and
ListDeletedEvent are sent after the operation. Specifically, this is
necessary because request database deletion requires the IMailingList
object, which is only available before the list is deleted.
* Add a handler to clear out the requests database for a mailing list, when
the mailing list is about to be deleted.
|
| |
|
|
|
|
|
|
|
| |
* Use zope.events to signal when a mailing list has been created or deleted.
* Register a handler for the ListDeletedEvent which cleans up member
subscriptions.
* Relax the criteria for find_members(), both internally and in the REST API,
so that the subscriber is not required. E.g. you can now find all members
of a mailing list.
|
| | |
|