Umm, no, the problem is that ReviewBoard does *not* like a
trailing slash. When I remove the trailing slash, all works well.
That's why I was so surprised that you returned the URL for
the user record with a trailing slash. I have to strip it to make
it work.
Perhaps this is only an issue when using urllib2, since when I
feed a trailing slash in a browser URL field it all works fine. But
it sure does break in urllib2 with trailing slashes.
Ken
On Mar 27, 12:51 pm, Christian Hammond <
chip...@chipx86.com> wrote:
> Yeah, Review Board expects that every single URL is going to have a
> trailing slash, and should generate each URL with one. Always assume that's
> the case when building URLs and you should be okay.
>
> Christian
>
> --
> Christian Hammond -
chip...@chipx86.com
> Review Board -
http://www.reviewboard.org
> VMware, Inc. -
http://www.vmware.com
>
>
>
>
>
>
>
> On Tue, Mar 27, 2012 at 10:53 AM, Ken Klingman <
capt...@gmail.com> wrote:
> > Problem solved. Beware of embedded and trailing slashes.
> > I'd say to use the URL or URL templates as defined in the
> > api, but ReviewBoard returns the user URL with a trailing
> > slash.
>
> > Ken
>
> > On Tuesday, March 27, 2012 6:39:12 AM UTC-7, Ken Klingman wrote:
>
> >> Hi,
>
> >> Using the web services interface on 1.6.4.1 with a Python (2.7) script
> >> and the urllib2 module I am getting an HTTP error 405 when requesting the
> >> XML for an individual review (api/review-requests/<rb entry>), yet it works
> >> just fine when I request the XML for the set of reviews for that individual
> >> RB entry (api/review-requests/<rb entry>/reviews). Both URL's work fine,
> >> returning appropriate XML when pasted into a browser.
>
> >> Both of the URL's worked fine with a previous ReviewBoard installation of
> >> version 1.4.x.
>
> >> Here's a snippet of code that fails with the 405:
>
> >> #!/usr/bin/env python
>
> >> import urllib2
>
> >> url = "
http://reviewboard/api/**review-requests/6721/<
http://reviewboard/api/review-requests/6721/>
> >> "
> >> header = {'Accept': "application/xml"}
> >> request = urllib2.Request(url, "", header)
> >> f = urllib2.urlopen(request)
> >> xml = f.read()
> >> f.close()
> >> print xml
>
> >> (replace reviewboard in the URL with the correct system name, redacted
> >> for security)
>
> >> Traceback (most recent call last):
> >> File "./
t.pl", line 8, in <module>
> >> f = urllib2.urlopen(request)
> >> File "/usr/lib/python2.7/urllib2.**py", line 126, in urlopen
> >> return _opener.open(url, data, timeout)
> >> File "/usr/lib/python2.7/urllib2.**py", line 400, in open
> >> response = meth(req, response)
> >> File "/usr/lib/python2.7/urllib2.**py", line 513, in http_response
> >> 'http', request, response, code, msg, hdrs)
> >> File "/usr/lib/python2.7/urllib2.**py", line 438, in error
> >> return self._call_chain(*args)
> >> File "/usr/lib/python2.7/urllib2.**py", line 372, in _call_chain
> >> result = func(*args)
> >> File "/usr/lib/python2.7/urllib2.**py", line 521, in http_error_default
> >> raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
> >> urllib2.HTTPError: HTTP Error 405: Method Not Allowed
>
> >> If I simply add "/reviews" to the URL, it works fine and I get the XML
> >> returned with all the reviews. Incidentally, I also get a 405 when
> >> accessing a RB user's set of XML (api/users/<rb username>).
>
> >> This has been driving me nuts, so any help would be greatly appreciated!
>
> >> Thanks,
> >> Ken
>
> >> --
> > Want to help the Review Board project? Donate today at
> >
http://www.reviewboard.org/donate/
> > Happy user? Let us know athttp://
www.reviewboard.org/users/