summaryrefslogtreecommitdiff
path: root/src/mailman/commands/eml_membership.py
Commit message (Collapse)AuthorAgeFilesLines
* Fix confirmation of unsubscription requests. (Closes: #294)Barry Warsaw2017-01-161-1/+1
|
* Bump copyright years.Barry Warsaw2017-01-041-1/+1
|
* Use `atpublic` for @public instead of internal copy.Barry Warsaw2016-11-291-1/+1
|
* Simplify the implementation.Barry Warsaw2016-10-171-4/+3
| | | | | | | | | | | | | | | | | | | | | | 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.
* Another fix.Barry Warsaw2016-09-161-4/+5
|
* Split registration (subscription) and unsubscription:Barry Warsaw2016-09-131-4/+13
| | | | | | | | * events * notices * handlers Also, be sure to do only one `leave` command per email.
* Fix more tests.Barry Warsaw2016-09-111-5/+7
|
* IWorkflowManager -> ISubscriptionManagerBarry Warsaw2016-09-011-6/+6
|
* CheckpointingBarry Warsaw2016-09-011-5/+5
|
* Intermediate CommitAbhilash Raj2016-09-011-7/+11
|
* Rebase mailman/mailman!180 and cleanup # noqaBarry Warsaw2016-07-281-2/+2
|
* Don't use `flake8: noqa`.Barry Warsaw2016-04-011-2/+2
| | | | | | | 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.
* Clean up the commands subdirectory.Barry Warsaw2016-03-241-15/+7
|
* Additional refactoring to use the QuerySequence wrapper, so that we can stillBarry Warsaw2016-01-061-1/+1
| | | | | | 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.
* Make the members request pageableAurélien Bompard2016-01-061-1/+1
|
* Happy New Year.Barry Warsaw2016-01-021-1/+1
|
* Full test suite passes.Barry Warsaw2015-04-141-13/+36
| | | | | | | | | | | | | * Make sure Registrar.discard() removces any workflow state manager state associated with the token, and that this is flushed to SA. * Adjust the email commands to the new IRegistrar API. * Update the IRegistrar interface. * Add IWorkflowStateManager.discard() and make `count` an attribute/property. * Mark two tests as expected failures due to LP: #1444184.
* Checkpointing.Barry Warsaw2015-04-141-2/+1
|
* Bump copyright years.Barry Warsaw2015-01-041-1/+1
|
* Remove huge amounts of now unnecessary file boilerplate.Barry Warsaw2014-12-221-6/+3
|
* * Fixed getting non-ASCII filenames from RFC 2231 i18n'd messages. Given byBarry Warsaw2014-12-081-0/+2
|\ | | | | | | Aurélien Bompard. (LP: #1060951)
| * Convert unicode instance testing to bytes instance testingAurélien Bompard2014-12-041-1/+1
| |
| * Do not auto-convert Message headers to unicodeAurélien Bompard2014-12-021-0/+2
|/ | | | Fixes: bug #1060951
* Bump copyright years.Barry Warsaw2014-01-011-1/+1
|
* Bump copyright years.Barry Warsaw2013-01-011-1/+1
|
* * The link between members and the mailing lists they are subscribed to, isBarry Warsaw2012-09-041-1/+1
| | | | | | | | | | | | | | | 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)
* General code cleanup.Barry Warsaw2012-04-251-7/+5
| | | | | | | | - 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.
* Schema change. After discussion at Pycon, we decided to change "real_name" toBarry Warsaw2012-03-151-4/+4
| | | | | | | | | | | "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)
* * Added a `help` email command.Barry Warsaw2012-03-011-9/+13
| | | | | | | Also: - updated the 'join' command's descriptions - email commands should now have a short_description. The description (i.e. long description) should not repeat this information.
* * The `join` email command no longer accepts an `address=` argument. ItsBarry Warsaw2012-02-291-58/+46
| | | | | | | | | `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.
* Make sure that an email subscription request is ignored for addresses whichBarry Warsaw2012-02-291-3/+9
| | | | are already members of the list.
* Don't try to double join someone via a single email command.Barry Warsaw2012-02-291-0/+8
|
* copybumpBarry Warsaw2012-01-011-1/+1
|
* Happy New Year.Barry Warsaw2011-01-011-1/+1
|
* Because it was just to damn confusing, rename IAddress.address toBarry Warsaw2011-01-011-10/+10
| | | | | | IAddress.email and IAddress.original_address to IAddress.original_email. From now on we'll use "address" to talk about the IAddress object and "email" to talk about the textual email address.
* Fix the obvious errors identified by pyflakes. Skip false positives (mostlyBarry Warsaw2010-10-081-1/+0
| | | | | due to _() interpolation) and a few other problems that did not have immediately obvious fixes.
* Happy New Year.Barry Warsaw2010-01-011-1/+1
|
* IRegistrar is now a utility; it doesn't need to be adapted from an IDomain.Barry Warsaw2009-12-121-2/+1
| | | | | | | This is because registration confirmation messages must come from the mailing list that the subscription request came from. Remove IDomain.confirm_address() since this lives only on the IMailingList now.
* IRegistrar.register() now requires a mailing list argument. This fixes theBarry Warsaw2009-12-101-1/+1
| | | | problem where the confirmation message doesn't know where to come from.
* * Make IDomainManager a utility, since the config object is global.Barry Warsaw2009-12-081-3/+1
| | | | | | | | * Give IMailingList a .domain attribute which looks up the IDomain for its .host_name. This cleans up a lot of code. * Add a test for the 'confirm' email command. * Suppress blank lines in email command responses. * Make the IDomainCollection a utility.
* Only a verified address can be used to unsubscribe someone from a mailing list.Barry Warsaw2009-12-061-3/+11
|
* Add tests for -leave with one of your alternative addresses.Barry Warsaw2009-12-061-2/+10
|
* Implement the 'leave' email command.Barry Warsaw2009-12-061-0/+172