python-cjson package in F8

Clodoaldo Pinto Neto clodoaldo.pinto.neto at gmail.com
Sun Sep 14 16:46:08 UTC 2008


2008/9/14 Todd Zullinger <tmz at pobox.com>:
> Clodoaldo Pinto Neto wrote:
>> When i install cjson from the python-cjson 1.0.5 package from Fedora
>> 8 i get this error:
>>
>>>>> cjson.encode('é', encoding='utf8')
>> Traceback (most recent call last):
>>  File "<stdin>", line 1, in <module>
>> TypeError: encode() takes no keyword arguments
>>
>> But when installed from source it works:
>>
>>>>> cjson.encode('é', encoding='utf-8')
>> '"\\u00e9"'
>
> Are you installing the same version?

No. I messed it and installed 1.0.3 from source. In 1.0.3 it accepts
the keyword argument. I guess the keyword arguments do not exist
anymore. I tested 1.0.4 and it also does not work. Very weird. I guess
it can break code. I didn't find anything about it in Google. Is
someone one using cjson? The change log says nothing about keyword
arguments:

Changes in version 1.0.5
------------------------

  * Check if module initialization failed.
  * Removed useless checks on module initialization.
  * Added __version__ attribute to the cjson module.
  * Call Py_INCREF before calling PyModule_AddObject.

Changes in version 1.0.4
------------------------

  * Added licensing information.
  * Fixed issue with decrementing a string reference too early
    (Edouard Hinard <edouard.hinard at orange-ftgroup.com>).
  * Fixed 64-bit portability problems (based on a modified version of a
    patch by David Rushby <davidrushby at yahoo.com>).
  * Fixed issue with not returning NULL after setting the OverflowError
    when encoded strings would be too big.
  * Fixed 2 potential buffer overflow errors when encoding string/unicode
    (thanks to Ofer Faigon <ofer3 at bitformation.com> for pointing them out).
  * About 10% speed improvement when encoding/decoding string/unicode.

The help(cjson) in 1.0.3:

FUNCTIONS
    decode(...)
        decode(string, all_unicode=False, extension=None, encoding=None) ->
        parse the JSON representation into python objects.
        The optional argument `all_unicode', specifies how to
        convert the strings in the JSON representation into python objects.
        If it is False (default), it will return strings everywhere possible
        and unicode objects only where necessary, else it will return unicode
        objects everywhere (this is slower). The optional argument
        `extension' defines a function to decode objects not in the original
        JSON specification. For example this can be used to convert
        new Date(...) expressions to datetime.date objects. The extension
        function must have a two arguments: json, idx. The `json' argument
        receives the original JSON string under conversion. The `idx' argument
        receives the index of the first character of the substring to be
        parsed as an extended object. The extension function must return a
        2-tuple: (obj,count) or raise DecodeError if the string cannot be
        parsed to an extended object. `obj' must be the object parsed,
        `count' must be the (positive integer) number of characters consumed
        from the JSON string (length of the object's representation).
        All unicode strings will be encoded to the specified encoding
        automatically if encoding is not None. Unicode objects are returned
        if encoding is None (this is the default). It's encouraged to set
        all_unicode=True or define an encoding to prevent mixing of str and
        unicode objects in the decoder output.

    encode(...)
        encode(object, extension=None, key2str=False, encoding='ascii') ->
        generate the JSON representation for object. The optional argument
        `extension' defines a function to encode objects not in the original
        JSON specification. For example this can be used to convert
        datetime.date objects to new Date(...) expressions. The extension
        function must have a single argument and must return the JSON
        representation of the object passed or raise EncodeError if the
        object cannot be converted to JSON format. Automatically convert
        dictionary keys to str if key2str is True, otherwise EncodeError
        is raised whenever a non-str and non-unicode dictinary key is found.
        The encoding argument must specify the encoding used to decode
        python str objects.

Regards, Clodoaldo

>Quickly testing on F9 I get the
> TypeError with both the package and source installs.
>
> What is the output of:
>
> $ python -c 'import cjson; print cjson.__file__, cjson.__version__'
>
> for the packaged and source installs?

Package:
$ python -c 'import cjson; print cjson.__file__, cjson.__version__'
cjson.so 1.0.5
$ ll /usr/lib/python2.5/site-packages/cjson.so
-rwxr-xr-x 1 root root 15892 2008-04-07 21:39
/usr/lib/python2.5/site-packages/cjson.so

>>> cjson.encode('é', encoding='utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: encode() takes no keyword arguments

I'm sure it is package 1.0.5-1.fc8. I removed and installed again.

Then removed again and installed from source:

$ ll /usr/lib/python2.5/site-packages/cjson.so
-rwxr-xr-x 1 root root 41189 2008-09-14 13:06
/usr/lib/python2.5/site-packages/cjson.so




More information about the fedora-list mailing list