| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
| |
Closes #42
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Fix lots of import order errors discovered by the new plugin.
|
| | |
|
| |
|
|
|
| |
New subscription requests are rejected if there is already one pending.
With thanks to Anirudh Dahiya. (Closes #199)
|
| |
|
|
|
|
| |
Trying to subscribe an address as a list owner (or moderator or
nonmember) which is already subscribed with that role produces a server
error.
|
| |
|
|
|
| |
This refactors the setting of a user's preferred address to the first in
their list of linked addresses.
|
| | |
|
| | |
|
| |
|
|
| |
Wrap lines.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
hex representations of a UUID, not the int representation.
Also:
* Some general code cleanup.
* Fix issue 185 (REST server crash when subscribing a user without a
preferred address).
|
| |
|
|
| |
Cleanups by Barry. Closes !67
|
| | |
|
| |\
| |
| |
| | |
to a mailing list.
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
By using `six` I think I have most of the imports squared away. There's
probably still uses of `unicode` built-ins that need fixing.
The idea is to first get the test suite running (which it doesn't yet), and
then to fix tests.
There's a bug in lazr.config which requires us to patch it for now.
|
| |
|
|
| |
REST tests pass. This requires an as yet unmerged internal change to falcon.
|
| |
|
|
|
|
|
|
| |
``/find`` which we've never seen before, because those members only have an
address record, not a user record. This requires a small change in the API
where the JSON response's ``address`` key now contains the URL to the
address resource, the new ``email`` key contains the email address as a
string, and the ``user`` key is optional.
|
| |\ |
|
| | | |
|
| |/ |
|
| | |
|
| |
|
|
|
| |
The code base is now also `python2.7 -3` clean, although there are still
some warnings in 3rd party dependencies. LP: #1073506
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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)
|
| |
|
|
| |
- Update many tests to use the transaction() context manager.
|
| |
|
|
|
|
|
|
|
|
|
| |
"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)
|
| | |
|
| |
|
|
|
|
|
|
|
| |
automatically do the right thing in most cases. Keep test_suite() in
test_documentation.py since these dynamically set up docs tests properly.
Refactor test_passwords.py so that base class tests aren't bogusly run. Also,
remove test_membership.py which was essentially disabled because it was
testing the MM2 membership API.
|
| |
|
|
|
|
| |
deleted through the REST interface. Hierarchical, combined preferences for
members, and system preferences can be read through the REST interface.
(LP: #821438)
|
| |\
| |
| |
| | |
the REST API (LP: #833132). Given by Stephen A. Goss.
|
| |/
|
|
| |
(LP: #833376). Given by Stephen A. Goss.
|
| |
|
|
| |
Stephen A. Goss.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
the REST API. (LP: #643949)
* New resource path in REST API: /addresses/<email>/memberships gets all the
memberships for a given email address.
* In the REST API, PUTting or PATCHing a list configuration now returns a 204
(No Content) success code instead of a 200 success code with an empty body.
* When a user is subscribed with their preferred address, changing the
preferred address also changes all subscriptions.
* When a user is subscribed with a specific address, their subscription can be
changed to any verified address they control.
* Use a new naming scheme for doctests with multiple mailing lists.
|
| |
|
|
|
|
|
|
| |
* ISubscriptionService.join(): address -> subscriber. This is not backward
compatible with the previous API!
* Add get_user_by_id() to the IUserManager interface. It was already
implemented, but the interface was missing the definition.
* MissingUserError: new exception, purely for the REST API.
|
| |
|
|
|
| |
correctly in the REST API's list of members. This even correctly tracks
changes in their preferred address.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
path at the root of the resource tree (i.e. /members/X) and because when
members can be subscribed by their IUser record (for preferred address), their
canonical location cannot contain the address they are subscribed with. When
their preferred address changes (without otherwise touching their membership),
this address will change and that's not good for a canonical location.
Other changes:
* Added IMember.member_id attribute
* Added ISubscriptionService.get_member() so member records can be retrieve by
member id.
* We can now get individual members by id via the REST API.
* Extend the UniqueIDFactory so that it can take a 'context' (defaulting to
None). The context is only used in the testing infrastructure so that
separate files can be used for user ids and member ids. Otherwise, we'd
have gaps in those sequences.
* When *not* in testing mode, ensure that UIDs cannot be reused by keeping a
table of all UIDs ever handed out. We *should* never get collisions, but
this ensures it.
* Clean up mailman.sql
|
|
|
* Fix a case in a list's /members API where the listname is bogus.
* Catch NotAMemberError form delete_member() and return not_found.
* Refactor REST helpers so that call_api() can be used in unittests without
doing any prints to stdout.
|