#28037: Incorrect return type in QueryDict.items()/values() docs examples ----------------------------------+------------------------------------ Reporter: Daniel F Moisset | Owner: nobody Type: Bug | Status: new Component: Documentation | Version: master Severity: Normal | Resolution: Keywords: | Triage Stage: Accepted Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 ----------------------------------+------------------------------------ Changes (by Tim Graham):
* component: HTTP handling => Documentation * stage: Unreviewed => Accepted * type: Uncategorized => Bug Old description: > There is a multiway inconsistency about the defined behaviour of > `QueryDict.items` (a similar thing happens for QueryDict.values`: > > * The > [https://github.com/django/django/blob/master/django/utils/datastructures.py#L176 > current implementation] actually returns a generator object (supporting > iteration only) > * The [https://docs.djangoproject.com/en/dev/ref/request- > response/#django.http.QueryDict.items documentation] says that it is > "just like the standard dictionary `items()` method", which in Python3 > returns a dict_items object (a > [https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects > view object], supporting set-like operations) > * But the example in the documentation 2 lines below that show a standard > python list (supporting indexing) > > I see 2 different was to fix this: > 1. Update the documentation and make explicit that a generator is > returned and that `Querydict` is a bit different than python dicts > 2. Make `QueryDict` behave more like python by returning a set(). This > should not break backwards compatibility (a set is more general than a > generator), but use more memory (because the set must be fully built > instead of generated lazily) > > I can provide patches for any of these options, but some core devs > recommended me getting an opinion of which is the right solution before > moving forward. New description: There is an inconsistency about the defined behaviour of `QueryDict.items()` (a similar thing happens for `QueryDict.values()`: * The [https://github.com/django/django/blob/master/django/utils/datastructures.py#L176 current implementation] actually returns a generator object (supporting iteration only) * The [https://docs.djangoproject.com/en/dev/ref/request- response/#django.http.QueryDict.items documentation] says that it is "just like the standard dictionary `items()` method", which in Python3 returns a dict_items object (a [https://docs.python.org/3/library/stdtypes.html #dictionary-view-objects view object], supporting set-like operations) * But the example in the documentation 2 lines below that show a standard python list (supporting indexing) I see 2 different was to fix this: 1. Update the documentation and make explicit that a generator is returned and that `Querydict` is a bit different than python dicts 2. Make `QueryDict` behave more like python by returning a set(). This should not break backwards compatibility (a set is more general than a generator), but use more memory (because the set must be fully built instead of generated lazily) I can provide patches for any of these options, but some core devs recommended me getting an opinion of which is the right solution before moving forward. -- Comment: Fixing the documentation looks like the correct way to proceed. The current example shows the behavior on Python 2 was was [https://github.com/django/django/commit/c716fe87821df00f9f03ecc761c914d1682591a2 #diff-f61cccc2a02c84d08ff7d28f87590566L199 to return a list]. -- Ticket URL: <https://code.djangoproject.com/ticket/28037#comment:1> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/066.f5667193075b7f686fac3614e3d60dc1%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.