#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 [email protected].
To post to this group, send email to [email protected].
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.