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

Reply via email to