Broken REST API to get member from list given email address (and role).

Bug #825570 reported by Stephen A. Goss
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
GNU Mailman
Fix Released
Medium
Barry Warsaw

Bug Description

There is code in src/mailman/rest/lists.py to allow for the REST API to return a member object given a list, role and email address, but it is currently broken.

the last line of the member function in lists.py:

        return AMember(self._mlist, role, address)

compare to AMember constructor:

        def __init__(self, member_id):

Attempting to use this part of the API returns a 500 with this traceback:

Traceback (most recent call last):
  File "/usr/lib64/python2.6/wsgiref/handlers.py", line 93, in run
    self.result = application(self.environ, self.start_response)
  File "/home/sgoss/mailman_clone/src/mailman/rest/wsgiapp.py", line 58, in __call__
    environ, start_response)
  File "/home/sgoss/phoenix-deploy/lib/python2.6/site-packages/restish-0.12.1-py2.6.egg/restish/app.py", line 17, in __call__
    resource_or_response = self.locate_resource(request)
  File "/home/sgoss/phoenix-deploy/lib/python2.6/site-packages/restish-0.12.1-py2.6.egg/restish/app.py", line 44, in locate_resource
    result = resource_child(request, segments)
  File "/home/sgoss/phoenix-deploy/lib/python2.6/site-packages/restish-0.12.1-py2.6.egg/restish/resource.py", line 194, in resource_child
    result = func(self, request, segments, *match_args, **match_kwargs)
  File "/home/sgoss/mailman_clone/src/mailman/rest/lists.py", line 152, in member
    return AMember(self._mlist, role, address)
TypeError: __init__() takes exactly 2 arguments (4 given)

Tags: mailman3
Revision history for this message
Stephen A. Goss (postfuturist) wrote :

The attached patch fixes this issue, but ignores the "role" aspect, so it just looks for a member with that address in that list.
This gives the following endpoint:

/3.0/lists/<listname>/member/<email>

This fits my use case, otherwise I would have to get a list of all members of a list to find the one with a given email address.

Barry Warsaw (barry)
Changed in mailman:
status: New → Confirmed
milestone: none → 3.0.0a8
assignee: nobody → Barry Warsaw (barry)
importance: Undecided → Medium
Revision history for this message
Barry Warsaw (barry) wrote :

I have a fix ready to go that preserves the role argument. If you're looking for an API that doesn't require the role, the new /members/find API is the one to use. In fact, this one might be redundant.

"Untested code is broken code" ;)

Changed in mailman:
status: Confirmed → Fix Committed
Barry Warsaw (barry)
Changed in mailman:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.