| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
load_external() now always opens in utf-8 mode.
More test repair.
|
| | |
|
| | |
|
| |
|
|
|
| |
The code base is now also `python2.7 -3` clean, although there are still
some warnings in 3rd party dependencies. LP: #1073506
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
| |
otherwise it rejects the message with a 550 error. Also, the LMTP server
adds the `X-Message-ID-Hash` header automatically. The `inject` cli
command will also add the `X-Message-ID-Hash` header, but it will craft a
`Message-ID` header first if one is missing from the injected text. Also,
`inject` will always set the correct value for the `original_size`
attribute on the message object, instead of trusting a possibly incorrect
value if it's already set. The individual `IArchiver` implementations no
longer set the `X-Message-ID-Hash` header.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
| |
Also add some debugging to the verification message, IOW, which template is it
using (this may be more generally useful, but for now, it's an experiment).
|
| | |
|
| | |
|
| | |
|
|
|
if they contain non-ASCII characters. (LP: #685261)
Also:
- When the registrar confirms an email address, the verified_on value gets
set using the Mailman datetime interface. This simply improves testability
for that API.
- In Runner._one_iteration(), be sure to commit the database transaction
*before* calling _short_circuit().
|