#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.

Reply via email to