Add webAPI resources for archived and muted review requests
Review Request #7087 — Created March 19, 2015 and submitted
This adds webAPI resources for the creation and deletion of archived and muted review requests.
Each resource is a child of the User resource and inherits from a base archived resource. Resources accept POST and DELETE requests, both of which modify ReviewRequestVisit database entries accordingly.
Added standard POST and DELETE tests to reviewboard.webapi.tests. All tests passed.
Description | From | Last Updated |
---|---|---|
Col: 80 E501 line too long (82 > 79 characters) |
![]() |
|
Needs an added_in field. This should be 2.5.x (until we know when it is going to land). |
|
|
Docstring needs more information. Blank line between these. |
|
|
This doesn't appear to be used. |
|
|
Fields should use hyphens instead of underscores. |
|
|
Archive instead of watch? |
|
|
Needs a docstring. |
|
|
This should be (ReviewRequest.DoesNotExist, User.DoesNotExist). ObjectDoesNotExist is much too generic here. The same goes for other places you use ObjectDoesNotExist. |
|
|
We should check if the user has view permissions for the review request, otherwise we leak information that a review … |
|
|
Needs a docstring. |
|
|
Needs an added_in = '2.5.x' field. |
|
|
I don't believe this is used. |
|
|
Needs a docstring. |
|
|
Needs a docstring. |
|
|
'ObjectDoesNotExist' imported but unused |
![]() |
|
Is there any model that these WebAPI resources should be based on? Also, you can add model_parent_key to point to … |
VT VTL-Developer | |
undefined name 'ReviewRequest' |
![]() |
|
undefined name 'User' |
![]() |
|
undefined name 'ReviewRequest' |
![]() |
|
undefined name 'User' |
![]() |
|
Col: 23 W292 no newline at end of file |
![]() |
|
Col: 67 W292 no newline at end of file |
![]() |
|
Col: 61 W292 no newline at end of file |
![]() |
|
Should be in alphabetical order. |
|
|
'archived_list_mimetype' imported but unused |
![]() |
|
'get_archived_review_request_item_url' imported but unused |
![]() |
|
local variable 'archived_rsp' is assigned to but never used |
![]() |
|
Col: 53 E128 continuation line under-indented for visual indent |
![]() |
|
Col: 49 E128 continuation line under-indented for visual indent |
![]() |
|
Col: 80 E501 line too long (80 > 79 characters) |
![]() |
|
Col: 80 E501 line too long (81 > 79 characters) |
![]() |
|
Col: 67 W292 no newline at end of file |
![]() |
|
Col: 61 W292 no newline at end of file |
![]() |
|
'archived_list_mimetype' imported but unused |
![]() |
|
Col: 53 E128 continuation line under-indented for visual indent |
![]() |
|
Col: 49 E128 continuation line under-indented for visual indent |
![]() |
|
Col: 67 W292 no newline at end of file |
![]() |
|
Col: 61 W292 no newline at end of file |
![]() |
|
'archived_list_mimetype' imported but unused |
![]() |
|
Col: 53 E128 continuation line under-indented for visual indent |
![]() |
|
Col: 49 E128 continuation line under-indented for visual indent |
![]() |
|
local variable 'visit' is assigned to but never used |
![]() |
|
Creates -> Create |
JY jyuen | |
This should probably check if user is an instance of basestring instead, to better communicate intentions. |
|
|
This can be one statement. |
|
|
List -> Lists manipulates -> manipulate |
JY jyuen | |
Marks -> Mark |
JY jyuen | |
Deletes -> Delete |
JY jyuen | |
You can save a query in the common case by doing: visit, is_new = ReviewRequestVisit.objects.get_or_create( user=user, review_request=review_request, defaults={ 'visibility': self.visibility, … |
|
|
Same note as above. |
|
|
Lists -> List manipulates -> manipulate |
JY jyuen | |
That's not really true, though. This is returning review requests. |
|
|
Marks -> Mark |
JY jyuen | |
Deletes -> Delete |
JY jyuen | |
Col: 9 E303 too many blank lines (2) |
![]() |
Status: Re-opened
Summary: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Description: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Commit: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 1 (+482 -52) |
Summary: |
|
||||
---|---|---|---|---|---|
Depends On: |
|

-
Tool: Pyflakes Processed Files: reviewboard/webapi/resources/user.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/resources/archived_review_request.py Tool: PEP8 Style Checker Processed Files: reviewboard/webapi/resources/user.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/resources/archived_review_request.py
-
The
MutedReviewRequestResource
andArchivedReviewRequestResource
are very similar and they should maybe be refactored to inherit from a base class that does most of the machinery. Then the subclasses can implement the methods via the@augment_method_from
decorator. -
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) Needs an
added_in
field. This should be2.5.x
(until we know when it is going to land). -
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) Docstring needs more information.
Blank line between these.
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) This doesn't appear to be used.
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) Fields should use hyphens instead of underscores.
-
-
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) This is becuase you can't put a keyword argument after
*args
right? -
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) This should be
(ReviewRequest.DoesNotExist, User.DoesNotExist)
.ObjectDoesNotExist
is much too generic here.The same goes for other places you use
ObjectDoesNotExist
. -
reviewboard/webapi/resources/archived_review_request.py (Diff revision 2) We should check if the user has view permissions for the review request, otherwise we leak information that a review request that they do not have permissions to view exists.
Same elsewhere.
-
-
reviewboard/webapi/resources/muted_review_request.py (Diff revision 2) Needs an
added_in = '2.5.x'
field. -
reviewboard/webapi/resources/muted_review_request.py (Diff revision 2) I don't believe this is used.
-
-
Description: |
|
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 3 (+171 -1) |

-
Tool: Pyflakes Processed Files: reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/resources/base_hidden_object.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py Ignored Files: reviewboard/templates/base.html Tool: PEP8 Style Checker Processed Files: reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/resources/base_hidden_object.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py Ignored Files: reviewboard/templates/base.html
-
reviewboard/webapi/resources/base_hidden_object.py (Diff revision 3) 'ObjectDoesNotExist' imported but unused
-
-
-
-
-
reviewboard/webapi/resources/base_hidden_object.py (Diff revision 3) Col: 23 W292 no newline at end of file
-
-
reviewboard/webapi/resources/base_hidden_object.py (Diff revision 3) Is there any
model
that these WebAPI resources should be based on?Also, you can add
model_parent_key
to point to the parent.You can check out https://github.com/djblets/djblets/blob/master/djblets/webapi/resources.py#L383 for a list of fields that may also be relevant.
Summary: |
|
||||
---|---|---|---|---|---|
Depends On: |
|
||||
Diff: |
Revision 4 (+300) |

-
Tool: Pyflakes Processed Files: reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/resources/base_archived_object.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py Tool: PEP8 Style Checker Processed Files: reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/resources/base_archived_object.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 4) Col: 67 W292 no newline at end of file
-
reviewboard/webapi/resources/muted_review_request.py (Diff revision 4) Col: 61 W292 no newline at end of file
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) 'archived_list_mimetype' imported but unused
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) 'get_archived_review_request_item_url' imported but unused
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) local variable 'archived_rsp' is assigned to but never used
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) Col: 53 E128 continuation line under-indented for visual indent
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) Col: 49 E128 continuation line under-indented for visual indent
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) Col: 80 E501 line too long (80 > 79 characters)
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 4) Col: 80 E501 line too long (81 > 79 characters)

-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 5) Col: 67 W292 no newline at end of file
-
reviewboard/webapi/resources/muted_review_request.py (Diff revision 5) Col: 61 W292 no newline at end of file
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 5) 'archived_list_mimetype' imported but unused
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 5) Col: 53 E128 continuation line under-indented for visual indent
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 5) Col: 49 E128 continuation line under-indented for visual indent
Depends On: |
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 6 (+337)
|

-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 6) Col: 67 W292 no newline at end of file
-
reviewboard/webapi/resources/muted_review_request.py (Diff revision 6) Col: 61 W292 no newline at end of file
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 6) 'archived_list_mimetype' imported but unused
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 6) Col: 53 E128 continuation line under-indented for visual indent
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 6) Col: 49 E128 continuation line under-indented for visual indent
Description: |
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 7 (+334)
|

-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py
Summary: |
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Description: |
|
||||||||||||||||
Testing Done: |
|
||||||||||||||||
Diff: |
Revision 8 (+337)
|

-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py
-
reviewboard/webapi/tests/test_archived_review_request.py (Diff revision 8) local variable 'visit' is assigned to but never used
Groups: |
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 9 (+336)
|

-
Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py
-
Some nitpicky stuff for PEP-257 compliancy
-
-
reviewboard/webapi/resources/archived_review_request.py (Diff revision 9) List -> Lists
manipulates -> manipulate -
-
-
reviewboard/webapi/resources/muted_review_request.py (Diff revision 9) Lists -> List
manipulates -> manipulate -
-
-
-
-
reviewboard/testing/testcase.py (Diff revision 9) This should probably check if
user
is an instance ofbasestring
instead, to better communicate intentions. -
-
reviewboard/webapi/resources/base_archived_object.py (Diff revision 9) You can save a query in the common case by doing:
visit, is_new = ReviewRequestVisit.objects.get_or_create( user=user, review_request=review_request, defaults={ 'visibility': self.visibility, }) if not is_new and visit.visibility != self.visibility: visit.visibility = self.visibility visit.save(update_fields=['visibility'])
-
-
reviewboard/webapi/resources/muted_review_request.py (Diff revision 9) That's not really true, though. This is returning review requests.
Diff: |
Revision 10 (+342 -1)
|
---|

-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py
-
reviewboard/webapi/resources/base_archived_object.py (Diff revision 10) Col: 9 E303 too many blank lines (2)
Diff: |
Revision 11 (+341 -1)
|
---|

-
Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_archived_review_request.py reviewboard/webapi/resources/muted_review_request.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py reviewboard/webapi/resources/user.py reviewboard/webapi/resources/archived_review_request.py reviewboard/webapi/resources/base_archived_object.py