Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7k
Rework dynamic list/detail actions#5705
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
carltongibson left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I think this is nicely done. Good benefits. Worth having.
@rpkilby, again, thanks for the effort. If you can tick off the TODOs lets have it. 👍
docs/topics/release-notes.md Outdated
| * Merged`list_route` and`detail_route` into a single`action` decorator. | ||
| * Get all extra actions on a`ViewSet` with`.get_extra_actions()`. | ||
| * Extra actions now set the`url_name` and`url_path` on the decorated method. | ||
| * Enable action url reversing through`.reverse_action()` method (added in 3.6.4) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
...3.7.4...
96b3531 toa591e16Compare01f568f to151c0c9Comparerpkilby commentedJan 4, 2018
Okay, this should be ready to go now. The docs changes are not completely trivial and feedback would be appreciated. |
| ... | ||
| @detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf]) | ||
| @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf]) |
carltongibsonJan 4, 2018 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
At this point thedetail parameter is mysterious. (Worth explaining it below the example.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Would it be sufficient to link to the viewset docs first? e.g., "go read this first, then come back here"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Yes. (I was thinking along those lines... 🙂)
Perhaps moving the note from ln124 up and into aNote: section may be worthwhile. (Who reads about Routers before ViewSets?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Updated the docs. Integrated line 124 into the start of the section.
rest_framework/decorators.py Outdated
| defdetail_route(methods=None,**kwargs): | ||
| defaction(methods=None,detail=True,url_path=None,url_name=None,**kwargs): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
So, thedetail parameter...:
- Do we want an implied default? Or do we want to make it required, with a helpful assertion?
- If implied which is the best default? i.e. Do we generate
listordetailroutes if you don't pass the parameter. - Do we want to document whichever we choose as not passing the parameter?
@action(detail=True)and@action()in all the examples, say?
Not sure what I think there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Do we want an implied default? Or do we want to make it required, with a helpful assertion?
I don't think a default is beneficial here. Making it a required arg seems 👍 to me.
carltongibson left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
OK. This looks good.
I'm just going to pause on this for now, since once it's in we're kind of committed to rolling a 3.8. (which is fine, but I just want to plan that first. 🙂) //cc@tomchristie
xordoquy commentedApr 4, 2018
It seems that there are some regression on list_route & detail_route. With the new code, it default to the function name: which breaks a couple of tests here and there. |
carltongibson commentedApr 4, 2018
Hey@xordoquy. Would you be able to put a regression test together for that? |
xordoquy commentedApr 4, 2018
need to investigate another issue and I'll do that. |
rpkilby commentedApr 4, 2018
Hi@xordoquy - this was an intentional change, as the Also, sorry for being afk lately - life has been pretty busy the last couple of months. |
xordoquy commentedApr 4, 2018
that's ok, but this should be added to the breaking changes since it requires changes on |
rpkilby commentedApr 4, 2018
Maybe the path forward is for |
carltongibson commentedApr 4, 2018
I need to have a look at exactly what’s going on here but could we not handle the change in the shim? |
carltongibson commentedApr 4, 2018
@rpkilby you must not apologise for life. Contribution to Open Source needs to be scoped. There is no problem with that. Ever. The only problem is with the opposite. 🙂 |
rpkilby commentedApr 4, 2018
Thanks - just letting you know I'm still around. |
xordoquy commentedApr 4, 2018 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
sounds sensible to me.
Didn't react but seconding@carltongibson on that point, you don't need to apologize for that. You did a lot of work so far, and for that we owe you one. |
carltongibson commentedApr 4, 2018
v.3.8.1 restores the old behaviour (via#5915). It's on PyPI now. |
jaap3 commentedApr 5, 2018
Thanks you for the fix and the prompt release of v3.8.1 |
This is needed to avoid deprecation warnigs on recent versions,seeencode/django-rest-framework#5705Signed-off-by: Michal Čihař <michal@cihar.com>
This comment has been minimized.
This comment has been minimized.
carltongibson commentedApr 23, 2018
@Allan-Nava Please direct usage questions to Stack Overflow or the mailing list. (Again, the issue tracker is for bug reports.) Thanks. |
* Merge list/detail route decorators into 'action'* Merge dynamic routes, add 'detail' attribute* Add 'ViewSet.get_extra_actions()'* Refactor dynamic route checking & collection* Refactor dynamic route generation* Add 'ViewSet.detail' initkwarg* Fixup schema test* Add release notes for dynamic action changes* Replace list/detail route decorators in tests* Convert tabs to spaces in router docs* Update docs* Make 'detail' a required argument of 'action'* Improve router docs
Uh oh!
There was an error while loading.Please reload this page.
Pulling a slightly more manageable chunk out of#5605 for review. The goal is to remove logic from the router in order to make the viewsets and list/detail actions more introspectable.
Changes:
list_route&detail_routein favor ofactiondecorator w/detailboolean.DynamicRoutew/detailboolean.detailboolean argument to regularRoutedetailis now provided as aninitkwargto the ViewSet, similar tosuffix.ViewSet.get_extra_actions()to formalize extra action access.url_pathandurl_nametoactionsignature. These values are no longer set/altered by the router, and can be more reliably inspected by the parent viewset.For the release notes, I've added a section to discuss the changes as a larger feature.
TODO: