2551: /api/review-requests/#/screenshots uncaught exception

smacleod
Jan. 19, 2013
What version are you running?
1.6.4+ (Probably earlier as well)

What's the URL of the page containing the problem?
/api/review-requests/{invalid request id}/screenshots/

(ex. http://reviews.reviewboard.org/api/review-requests/999999999/screenshots/)

What steps will reproduce the problem?
1.Visit URL

What is the expected output? What do you see instead?
ReviewBoard should return a 404, but instead a DoesNotExist exception is uncaught.

What operating system are you using? What browser?
Ubuntu 11.10, Chrome 18

Please provide any additional information below.
#1 smacleod
This is not unique to the screenshots resource. Visiting /api/review-requests/{invalid-request-id}/diffs/{diff-id}/files/{file-id}/diff-comments/ also shows this behaviour.
david
#2 david
Please include the exception backtrace from the logs.
  • +NeedInfo
#3 smacleod
Here is the Traceback:

2012-03-26 20:32:28,032 - ERROR - Exception thrown for user AnonymousUser at http://localhost:8080/api/review-requests/99999999999/screenshots/

ReviewRequest matching query does not exist.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/views/decorators/cache.py", line 89, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/views/decorators/vary.py", line 19, in inner_func
    response = func(*args, **kwargs)
  File "/home/steven/src/djblets/djblets/webapi/resources.py", line 399, in __call__
    result = view(request, api_format=api_format, *args, **kwargs)
  File "/home/steven/src/djblets/djblets/util/decorators.py", line 75, in _call
    f = augmented_func(*args, **kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/decorators.py", line 32, in _check
    return view_func(*args, **kwargs)
  File "/home/steven/src/djblets/djblets/webapi/decorators.py", line 231, in _validate
    return view_func(*args, **new_kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 163, in get_list
    return self._get_list_impl(request, *args, **kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 172, in _get_list_impl
    return super(WebAPIResource, self).get_list(request, *args, **kwargs)
  File "/home/steven/src/djblets/djblets/webapi/decorators.py", line 231, in _validate
    return view_func(*args, **new_kwargs)
  File "/home/steven/src/djblets/djblets/webapi/resources.py", line 686, in get_list
    *args, **kwargs).select_related(),
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 2726, in get_queryset
    request, review_request_id, *args, **kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 6121, in get_object
    return queryset.get(pk=review_request_id)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/db/models/query.py", line 366, in get
    % self.model._meta.object_name)
DoesNotExist: ReviewRequest matching query does not exist.
2012-03-26 20:32:28,033 - ERROR - Internal Server Error: /api/review-requests/99999999999/screenshots/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/views/decorators/cache.py", line 89, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/views/decorators/vary.py", line 19, in inner_func
    response = func(*args, **kwargs)
  File "/home/steven/src/djblets/djblets/webapi/resources.py", line 399, in __call__
    result = view(request, api_format=api_format, *args, **kwargs)
  File "/home/steven/src/djblets/djblets/util/decorators.py", line 75, in _call
    f = augmented_func(*args, **kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/decorators.py", line 32, in _check
    return view_func(*args, **kwargs)
  File "/home/steven/src/djblets/djblets/webapi/decorators.py", line 231, in _validate
    return view_func(*args, **new_kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 163, in get_list
    return self._get_list_impl(request, *args, **kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 172, in _get_list_impl
    return super(WebAPIResource, self).get_list(request, *args, **kwargs)
  File "/home/steven/src/djblets/djblets/webapi/decorators.py", line 231, in _validate
    return view_func(*args, **new_kwargs)
  File "/home/steven/src/djblets/djblets/webapi/resources.py", line 686, in get_list
    *args, **kwargs).select_related(),
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 2726, in get_queryset
    request, review_request_id, *args, **kwargs)
  File "/home/steven/src/reviewboard/reviewboard/webapi/resources.py", line 6121, in get_object
    return queryset.get(pk=review_request_id)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4c1-py2.7.egg/django/db/models/query.py", line 366, in get
    % self.model._meta.object_name)
DoesNotExist: ReviewRequest matching query does not exist.
david
#4 david
  • -NeedInfo
    +New
david
#5 david
  • +EasyFix
david
#6 david
  • +Component-API
#7 niklas.h*********@gmai***** (Google Code) (Is this you? Claim this profile.)
Having a look at this. QuerySet.get() throws ObjectDoesNotExist (see https://docs.djangoproject.com/en/dev/ref/models/querysets/#get); we have to catch that. Not sure yet where in the stack the not found -> 404 error shall happen.
david
#8 david
The fix itself is in djblets master (0de0062) and a unit test for this behavior was added in reviewboard release-1.7.x (980c853). Thanks!
  • -New
    +Fixed