#29082: force_bytes from utils.encoding.py produces invalid JSON for 
RequestFactory
--------------------------------------+------------------------
               Reporter:  Nick        |          Owner:  nobody
                   Type:  Bug         |         Status:  new
              Component:  Utilities   |        Version:  2.0
               Severity:  Normal      |       Keywords:
           Triage Stage:  Unreviewed  |      Has patch:  0
    Needs documentation:  0           |    Needs tests:  0
Patch needs improvement:  0           |  Easy pickings:  0
                  UI/UX:  0           |
--------------------------------------+------------------------
 I stumbled on this while testing some code which expects a JSON body.

 When creating a RequestFactory post request with a dict for the data and
 content_type='application/json' the resultant body is invalid JSON.

 This is because force_bytes simply detects it is not a string and forces
 it to a string before encoding.

 Code to reproduce is here:


 {{{
 In [1]: from django import test

 In [2]: factory = test.RequestFactory()

 In [3]: req = factory.post('/', content_type='application/json',
 data={"test": "data"})

 In [4]: req.body
 Out[4]: b"{'test': 'data'}"
 }}}

 And the offending code is here:

 https://github.com/django/django/blob/master/django/utils/encoding.py#L103

 Assuming this is not an intended "feature" I will happily submit a patch
 adding _another_ isinstance line checking for dicts and encoding with
 json.dumps.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/29082>
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/049.e05fea98f0771ee51e22816f17c734b9%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to