Django

Code

Ticket #3466 (closed: fixed)

Opened 2 years ago

Last modified 1 year ago

'fields' and 'stream' options not working for json serializer

Reported by: Parand Darugar <tdarugar@yahoo.com> Assigned to: jacob
Milestone: Component: Serialization
Version: SVN Keywords:
Cc: egmanoj@gmail.com, ferringb@gmail.com Triage Stage: Accepted
Has patch: 1 Needs documentation: 0
Needs tests: 0 Patch needs improvement: 0

Description

I'm attempting to use the 'fields' option with the json serializer without any luck. The same call with the xml serializer works fine:

serializers.serialize("json", (Something.objects.get(pk=1), ), fields='myfield' )

breaks with: Traceback (most recent call last):

File "<console>", line 1, in ? File "C:\Python24\lib\site-packages\django\core\serializers\init.py", line 55, in serialize s.serialize(queryset, **options) File "C:\Python24\lib\site-packages\django\core\serializers\base.py", line 49, in serialize self.end_serialization() File "C:\Python24\lib\site-packages\django\core\serializers\json.py", line 19, in end_serialization simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder, **self.options) File "C:\Python24\lib\site-packages\django\utils\simplejson\init.py", line 134, in dump check_circular=check_circular, allow_nan=allow_nan, indent=indent,

TypeError?: init() got an unexpected keyword argument 'fields'

Trying: serializers.serialize("xml", (Something.objects.get(pk=1), ), fields='myfield' )

works fine however.

Attachments

tests.py (1.8 kB) - added by Simon G. <dev@simon.net.nz> on 02/09/07 21:51:38.
core.serializers.json.diff (456 bytes) - added by egmanoj@gmail.com on 02/20/07 03:22:38.
Patch for core.serializers.json.Serializer
modeltests.serializers.models.diff (1.0 kB) - added by egmanoj@gmail.com on 02/20/07 03:24:16.
Added new tests to tests.modeltests.serializers.models
core.serializers.json.2.diff (0.7 kB) - added by SmileyChris on 03/20/07 16:57:31.

Change History

02/09/07 21:23:46 changed by Simon G. <dev@simon.net.nz>

  • needs_better_patch changed.
  • stage changed from Unreviewed to Accepted.
  • needs_tests changed.
  • needs_docs changed.

I've confirmed this bug with the latest svn, just working on some tests for it.

02/09/07 21:51:19 changed by Simon G. <dev@simon.net.nz>

I've attached tests which show this problem in action. It's just the json serializer that's affected. Unfortunately, I'm not entirely sure what to do to fix it.

02/09/07 21:51:38 changed by Simon G. <dev@simon.net.nz>

  • attachment tests.py added.

02/20/07 03:21:41 changed by egmanoj@gmail.com

  • has_patch set to 1.

I have added a couple of tests and a patch.

The patch affects the end_serialization method of core.serializers.json.Serializer. The rationale for removing fields from self.options is that by the time this method gets called, fields would already have served its purpose.

02/20/07 03:22:38 changed by egmanoj@gmail.com

  • attachment core.serializers.json.diff added.

Patch for core.serializers.json.Serializer

02/20/07 03:24:16 changed by egmanoj@gmail.com

  • attachment modeltests.serializers.models.diff added.

Added new tests to tests.modeltests.serializers.models

02/20/07 03:31:02 changed by egmanoj@gmail.com <egmanoj@gmail.com>

  • cc set to egmanoj@gmail.com.

03/20/07 16:54:05 changed by SmileyChris

  • summary changed from 'fields' option not working for json serializer to 'fields' and 'stream' options not working for json serializer.

This is an issue for stream too.

03/20/07 16:57:31 changed by SmileyChris

  • attachment core.serializers.json.2.diff added.

06/01/07 08:39:08 changed by russellm

  • status changed from new to closed.
  • resolution set to fixed.

(In [5409]) Fixed #3466 -- Fixed problem with specifyin a 'fields' argument to a JSON serializer. Also added documenation for the 'fields' argument.

06/01/07 22:10:35 changed by Brian Harring <ferringb@gmail.com>

  • cc changed from egmanoj@gmail.com to egmanoj@gmail.com, ferringb@gmail.com.
  • status changed from closed to reopened.
  • resolution deleted.

Reopening (proper route, or...?) since rev 3331 (this patch) fails tests, upon commiting horked the build.

======================================================================
ERROR: test_json_serializer_fields (regressiontests.serializers_regress.tests.SerializerTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.4/site-packages/django/utils/functional.py", line 3, in _curried
    return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
  File "/home/bharring/archives/django/svn-django/tests/regressiontests/serializers_regress/tests.py", line 290, in fieldsTest
    serialized_data = serializers.serialize(format, [obj], indent=2, fields=('field1','field3'))
  File "/usr/lib/python2.4/site-packages/django/core/serializers/__init__.py", line 67, in serialize
    s.serialize(queryset, **options)
  File "/usr/lib/python2.4/site-packages/django/core/serializers/base.py", line 49, in serialize
    self.end_serialization()
  File "/usr/lib/python2.4/site-packages/django/core/serializers/json.py", line 24, in end_serialization
    simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
  File "/usr/lib/python2.4/site-packages/django/utils/simplejson/__init__.py", line 134, in dump
    check_circular=check_circular, allow_nan=allow_nan, indent=indent,
TypeError: __init__() got an unexpected keyword argument 'fields'

======================================================================
ERROR: test_json_serializer_stream (regressiontests.serializers_regress.tests.SerializerTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.4/site-packages/django/utils/functional.py", line 3, in _curried
    return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
  File "/home/bharring/archives/django/svn-django/tests/regressiontests/serializers_regress/tests.py", line 290, in fieldsTest
    serialized_data = serializers.serialize(format, [obj], indent=2, fields=('field1','field3'))
  File "/usr/lib/python2.4/site-packages/django/core/serializers/__init__.py", line 67, in serialize
    s.serialize(queryset, **options)
  File "/usr/lib/python2.4/site-packages/django/core/serializers/base.py", line 49, in serialize
    self.end_serialization()
  File "/usr/lib/python2.4/site-packages/django/core/serializers/json.py", line 24, in end_serialization
    simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
  File "/usr/lib/python2.4/site-packages/django/utils/simplejson/__init__.py", line 134, in dump
    check_circular=check_circular, allow_nan=allow_nan, indent=indent,
TypeError: __init__() got an unexpected keyword argument 'fields'

======================================================================
FAIL: Doctest: modeltests.serializers.models.__test__.API_TESTS
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.4/site-packages/django/test/_doctest.py", line 2161, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for modeltests.serializers.models.__test__.API_TESTS
  File "/home/bharring/archives/django/svn-django/tests/modeltests/serializers/models.py", line unknown line number, in API_TESTS

----------------------------------------------------------------------
File "/home/bharring/archives/django/svn-django/tests/modeltests/serializers/models.py", line ?, in modeltests.serializers.models.__test__.API_TESTS
Failed example:
    print serializers.serialize("json", Article.objects.all(), fields=('headline','pub_date'))
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.4/site-packages/django/test/_doctest.py", line 1248, in __run
        compileflags, 1) in test.globs
      File "<doctest modeltests.serializers.models.__test__.API_TESTS[49]>", line 1, in ?
        print serializers.serialize("json", Article.objects.all(), fields=('headline','pub_date'))
      File "/usr/lib/python2.4/site-packages/django/core/serializers/__init__.py", line 67, in serialize
        s.serialize(queryset, **options)
      File "/usr/lib/python2.4/site-packages/django/core/serializers/base.py", line 49, in serialize
        self.end_serialization()
      File "/usr/lib/python2.4/site-packages/django/core/serializers/json.py", line 24, in end_serialization
        simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
      File "/usr/lib/python2.4/site-packages/django/utils/simplejson/__init__.py", line 134, in dump
        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
    TypeError: __init__() got an unexpected keyword argument 'fields'


----------------------------------------------------------------------

(follow-up: ↓ 9 ) 06/01/07 22:31:24 changed by russellm

  • status changed from reopened to closed.
  • resolution set to fixed.

I suspect PEBKAC :-)

Your error trace indicates that the call to simplejson.dump is on line 24 of serializers/json.py. A current trunk puts that statement on line 26.

Either you haven't updated to [5409], or you have a stale Django version floating around somewhere.

I have no idea what you're referring to when you talk about "Rev 3331 (this patch)" - the patch was revision [5409], on ticket #3466. Previous revision for the file was [5311].

(in reply to: ↑ 8 ) 06/01/07 23:07:52 changed by Brian Harring <ferringb@gmail.com>

Replying to russellm:

I suspect PEBKAC :-)

Guess my mother was right when she said I was 'special'... :/

Your error trace indicates that the call to simplejson.dump is on line 24 of serializers/json.py. A current trunk puts that statement on line 26. Either you haven't updated to [5409], or you have a stale Django version floating around somewhere. I have no idea what you're referring to when you talk about "Rev 3331 (this patch)" - the patch was revision [5409], on ticket #3466. Previous revision for the file was [5311].

Two sets of failures there; stale version bleeding through for tests (site-packages), and listed the bzr proxy rev instead of the svn rev (use bzr+svn so I can do my own development locally).

So yeah, PEBKAC, I suck, pardon for the noise :/


Add/Change #3466 ('fields' and 'stream' options not working for json serializer)




Change Properties
Action