Hello community,

here is the log from the commit of package python-simplejson for 
openSUSE:Factory checked in at 2014-06-08 13:36:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-simplejson (Old)
 and      /work/SRC/openSUSE:Factory/.python-simplejson.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-simplejson"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-simplejson/python-simplejson.changes      
2014-05-21 16:23:31.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-simplejson.new/python-simplejson.changes 
2014-06-08 13:37:00.000000000 +0200
@@ -1,0 +2,12 @@
+Sat May 31 16:14:18 UTC 2014 - [email protected]
+
+- update to 3.5.2:
+  * Fix Windows build with VS2008
+ Version 3.5.1 released 2014-05-21
+ * Consistently reject int_as_string_bitcount settings that are not
+    positive integers
+ Version 3.5.0 released 2014-05-20
+ * Added int_as_string_bitcount encoder option
+ * Fixed potential crash when encoder created with incorrect options
+
+-------------------------------------------------------------------

Old:
----
  simplejson-3.4.1.tar.gz

New:
----
  simplejson-3.5.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-simplejson.spec ++++++
--- /var/tmp/diff_new_pack.TAlgKY/_old  2014-06-08 13:37:01.000000000 +0200
+++ /var/tmp/diff_new_pack.TAlgKY/_new  2014-06-08 13:37:01.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-simplejson
-Version:        3.4.1
+Version:        3.5.2
 Release:        0
 Url:            http://github.com/simplejson/simplejson
 Summary:        Simple, fast, extensible JSON encoder/decoder for Python

++++++ simplejson-3.4.1.tar.gz -> simplejson-3.5.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/CHANGES.txt 
new/simplejson-3.5.2/CHANGES.txt
--- old/simplejson-3.4.1/CHANGES.txt    2014-04-30 20:42:30.000000000 +0200
+++ new/simplejson-3.5.2/CHANGES.txt    2014-05-23 17:21:08.000000000 +0200
@@ -1,3 +1,19 @@
+Version 3.5.2 released 2014-05-22
+
+* Fix Windows build with VS2008
+  https://github.com/simplejson/simplejson/pull/97
+
+Version 3.5.1 released 2014-05-21
+
+* Consistently reject int_as_string_bitcount settings that are not
+  positive integers
+
+Version 3.5.0 released 2014-05-20
+
+* Added int_as_string_bitcount encoder option
+  https://github.com/simplejson/pull/96
+* Fixed potential crash when encoder created with incorrect options
+
 Version 3.4.1 released 2014-04-30
 
 * Fixed tests to run on Python 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/PKG-INFO 
new/simplejson-3.5.2/PKG-INFO
--- old/simplejson-3.4.1/PKG-INFO       2014-04-30 20:47:34.000000000 +0200
+++ new/simplejson-3.5.2/PKG-INFO       2014-05-23 17:22:17.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: simplejson
-Version: 3.4.1
+Version: 3.5.2
 Summary: Simple, fast, extensible JSON encoder/decoder for Python
 Home-page: http://github.com/simplejson/simplejson
 Author: Bob Ippolito
@@ -42,6 +42,7 @@
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/conf.py new/simplejson-3.5.2/conf.py
--- old/simplejson-3.4.1/conf.py        2014-04-30 20:42:56.000000000 +0200
+++ new/simplejson-3.5.2/conf.py        2014-05-23 17:21:08.000000000 +0200
@@ -42,9 +42,9 @@
 # other places throughout the built documents.
 #
 # The short X.Y version.
-version = '3.4'
+version = '3.5'
 # The full version, including alpha/beta/rc tags.
-release = '3.4.1'
+release = '3.5.2'
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/index.rst 
new/simplejson-3.5.2/index.rst
--- old/simplejson-3.4.1/index.rst      2013-05-01 22:01:12.000000000 +0200
+++ new/simplejson-3.5.2/index.rst      2014-05-21 09:00:16.000000000 +0200
@@ -129,7 +129,7 @@
 Basic Usage
 -----------
 
-.. function:: dump(obj, fp[, skipkeys[, ensure_ascii[, check_circular[, 
allow_nan[, cls[, indent[, separators[, encoding[, default[, use_decimal[, 
namedtuple_as_object[, tuple_as_array[, bigint_as_string[, sort_keys[, 
item_sort_key[, [for_json[, ignore_nan[, **kw]]]]]]]]]]]]]]]]]]])
+.. function:: dump(obj, fp[, skipkeys[, ensure_ascii[, check_circular[, 
allow_nan[, cls[, indent[, separators[, encoding[, default[, use_decimal[, 
namedtuple_as_object[, tuple_as_array[, bigint_as_string[, sort_keys[, 
item_sort_key[, [for_json[, ignore_nan[, int_as_string_bitcount[, 
**kw]]]]]]]]]]]]]]]]]]])
 
    Serialize *obj* as a JSON formatted stream to *fp* (a 
``.write()``-supporting
    file-like object).
@@ -216,10 +216,11 @@
    .. versionchanged:: 2.2.0
      *tuple_as_array* is new in 2.2.0.
 
-   If *bigint_as_string* is true (default: ``False``), :class:`int`` ``2**53``
+   If *bigint_as_string* is true (default: ``False``), :class:`int` ``2**53``
    and higher or lower than ``-2**53`` will be encoded as strings. This is to
    avoid the rounding that happens in Javascript otherwise. Note that this
    option loses type information, so use with extreme caution.
+   See also *int_as_string_bitcount*.
 
    .. versionchanged:: 2.4.0
      *bigint_as_string* is new in 2.4.0.
@@ -261,6 +262,15 @@
    .. versionchanged:: 3.2.0
       *ignore_nan* is new in 3.2.0.
 
+   If *int_as_string_bitcount* is a positive number ``n`` (default: ``False``),
+   :class:`int` ``2**n`` and higher or lower than ``-2**n`` will be encoded as 
strings. This is to
+   avoid the rounding that happens in Javascript otherwise. Note that this
+   option loses type information, so use with extreme caution.
+   See also *bigint_as_string* (which is equivalent to 
`int_as_string_bitcount=53`).
+
+   .. versionchanged:: 3.5.0
+     *int_as_string_bitcount* is new in 3.5.0.
+
   .. note::
 
         JSON is not a framed protocol so unlike :mod:`pickle` or 
:mod:`marshal` it
@@ -268,7 +278,7 @@
         container protocol to delimit them.
 
 
-.. function:: dumps(obj[, skipkeys[, ensure_ascii[, check_circular[, 
allow_nan[, cls[, indent[, separators[, encoding[, default[, use_decimal[, 
namedtuple_as_object[, tuple_as_array[, bigint_as_string[, sort_keys[, 
item_sort_key[, for_json[, ignore_nan[, **kw]]]]]]]]]]]]]]]]]])
+.. function:: dumps(obj[, skipkeys[, ensure_ascii[, check_circular[, 
allow_nan[, cls[, indent[, separators[, encoding[, default[, use_decimal[, 
namedtuple_as_object[, tuple_as_array[, bigint_as_string[, sort_keys[, 
item_sort_key[, for_json[, ignore_nan[, int_as_string_bitcount[, 
**kw]]]]]]]]]]]]]]]]]])
 
    Serialize *obj* to a JSON formatted :class:`str`.
 
@@ -563,8 +573,6 @@
       Changed *indent* from an integer number of spaces to a string.
 
    If specified, *separators* should be an ``(item_separator, key_separator)``
-   tuple.  The default is ``(', ', ': ')``.  To get the most compact JSON
-   representation, you should specify ``(',', ':')`` to eliminate whitespace.
    tuple.  The default is ``(', ', ': ')`` if *indent* is ``None`` and
    ``(',', ': ')`` otherwise.  To get the most compact JSON representation,
    you should specify ``(',', ':')`` to eliminate whitespace.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/setup.py 
new/simplejson-3.5.2/setup.py
--- old/simplejson-3.4.1/setup.py       2014-04-30 20:42:52.000000000 +0200
+++ new/simplejson-3.5.2/setup.py       2014-05-23 17:21:08.000000000 +0200
@@ -11,7 +11,7 @@
     DistutilsPlatformError
 
 IS_PYPY = hasattr(sys, 'pypy_translation_info')
-VERSION = '3.4.1'
+VERSION = '3.5.2'
 DESCRIPTION = "Simple, fast, extensible JSON encoder/decoder for Python"
 
 with open('README.rst', 'r') as f:
@@ -30,6 +30,7 @@
 Programming Language :: Python :: 2.7
 Programming Language :: Python :: 3
 Programming Language :: Python :: 3.3
+Programming Language :: Python :: 3.4
 Programming Language :: Python :: Implementation :: CPython
 Programming Language :: Python :: Implementation :: PyPy
 Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson/__init__.py 
new/simplejson-3.5.2/simplejson/__init__.py
--- old/simplejson-3.4.1/simplejson/__init__.py 2014-04-30 20:43:04.000000000 
+0200
+++ new/simplejson-3.5.2/simplejson/__init__.py 2014-05-23 17:21:08.000000000 
+0200
@@ -98,7 +98,7 @@
     Expecting property name: line 1 column 3 (char 2)
 """
 from __future__ import absolute_import
-__version__ = '3.4.1'
+__version__ = '3.5.2'
 __all__ = [
     'dump', 'dumps', 'load', 'loads',
     'JSONDecoder', 'JSONDecodeError', 'JSONEncoder',
@@ -144,14 +144,15 @@
     item_sort_key=None,
     for_json=False,
     ignore_nan=False,
+    int_as_string_bitcount=None,
 )
 
 def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
-        allow_nan=True, cls=None, indent=None, separators=None,
-        encoding='utf-8', default=None, use_decimal=True,
-        namedtuple_as_object=True, tuple_as_array=True,
-        bigint_as_string=False, sort_keys=False, item_sort_key=None,
-        for_json=False, ignore_nan=False, **kw):
+         allow_nan=True, cls=None, indent=None, separators=None,
+         encoding='utf-8', default=None, use_decimal=True,
+         namedtuple_as_object=True, tuple_as_array=True,
+         bigint_as_string=False, sort_keys=False, item_sort_key=None,
+         for_json=False, ignore_nan=False, int_as_string_bitcount=None, **kw):
     """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
     ``.write()``-supporting file-like object).
 
@@ -209,6 +210,10 @@
     lossy operation that will not round-trip correctly and should be used
     sparingly.
 
+    If *int_as_string_bitcount* is a positive number (n), then int of size
+    greater than or equal to 2**n or lower than or equal to -2**n will be
+    encoded as strings.
+
     If specified, *item_sort_key* is a callable used to sort the items in
     each dictionary. This is useful if you want to sort items other than
     in alphabetical order by key. This option takes precedence over
@@ -238,8 +243,8 @@
         cls is None and indent is None and separators is None and
         encoding == 'utf-8' and default is None and use_decimal
         and namedtuple_as_object and tuple_as_array
-        and not bigint_as_string and not item_sort_key
-        and not for_json and not ignore_nan and not kw):
+        and not bigint_as_string and int_as_string_bitcount is None
+        and not item_sort_key and not for_json and not ignore_nan and not kw):
         iterable = _default_encoder.iterencode(obj)
     else:
         if cls is None:
@@ -255,6 +260,7 @@
             item_sort_key=item_sort_key,
             for_json=for_json,
             ignore_nan=ignore_nan,
+            int_as_string_bitcount=int_as_string_bitcount,
             **kw).iterencode(obj)
     # could accelerate with writelines in some versions of Python, at
     # a debuggability cost
@@ -263,11 +269,11 @@
 
 
 def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
-        allow_nan=True, cls=None, indent=None, separators=None,
-        encoding='utf-8', default=None, use_decimal=True,
-        namedtuple_as_object=True, tuple_as_array=True,
-        bigint_as_string=False, sort_keys=False, item_sort_key=None,
-        for_json=False, ignore_nan=False, **kw):
+          allow_nan=True, cls=None, indent=None, separators=None,
+          encoding='utf-8', default=None, use_decimal=True,
+          namedtuple_as_object=True, tuple_as_array=True,
+          bigint_as_string=False, sort_keys=False, item_sort_key=None,
+          for_json=False, ignore_nan=False, int_as_string_bitcount=None, **kw):
     """Serialize ``obj`` to a JSON formatted ``str``.
 
     If ``skipkeys`` is false then ``dict`` keys that are not basic types
@@ -319,6 +325,10 @@
     or lower than -2**53 will be encoded as strings. This is to avoid the
     rounding that happens in Javascript otherwise.
 
+    If *int_as_string_bitcount* is a positive number (n), then int of size
+    greater than or equal to 2**n or lower than or equal to -2**n will be
+    encoded as strings.
+
     If specified, *item_sort_key* is a callable used to sort the items in
     each dictionary. This is useful if you want to sort items other than
     in alphabetical order by key. This option takes precendence over
@@ -343,14 +353,16 @@
 
     """
     # cached encoder
-    if (not skipkeys and ensure_ascii and
+    if (
+        not skipkeys and ensure_ascii and
         check_circular and allow_nan and
         cls is None and indent is None and separators is None and
         encoding == 'utf-8' and default is None and use_decimal
         and namedtuple_as_object and tuple_as_array
-        and not bigint_as_string and not sort_keys
-        and not item_sort_key and not for_json
-        and not ignore_nan and not kw):
+        and not bigint_as_string and int_as_string_bitcount is None
+        and not sort_keys and not item_sort_key and not for_json
+        and not ignore_nan and not kw
+    ):
         return _default_encoder.encode(obj)
     if cls is None:
         cls = JSONEncoder
@@ -366,6 +378,7 @@
         item_sort_key=item_sort_key,
         for_json=for_json,
         ignore_nan=ignore_nan,
+        int_as_string_bitcount=int_as_string_bitcount,
         **kw).encode(obj)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson/_speedups.c 
new/simplejson-3.5.2/simplejson/_speedups.c
--- old/simplejson-3.4.1/simplejson/_speedups.c 2014-04-30 20:28:51.000000000 
+0200
+++ new/simplejson-3.5.2/simplejson/_speedups.c 2014-05-23 17:21:01.000000000 
+0200
@@ -168,7 +168,8 @@
     int use_decimal;
     int namedtuple_as_object;
     int tuple_as_array;
-    int bigint_as_string;
+    PyObject *max_long_size;
+    PyObject *min_long_size;
     PyObject *item_sort_key;
     PyObject *item_sort_kw;
     int for_json;
@@ -187,6 +188,8 @@
     {"skipkeys", T_OBJECT, offsetof(PyEncoderObject, skipkeys_bool), READONLY, 
"skipkeys"},
     {"key_memo", T_OBJECT, offsetof(PyEncoderObject, key_memo), READONLY, 
"key_memo"},
     {"item_sort_key", T_OBJECT, offsetof(PyEncoderObject, item_sort_key), 
READONLY, "item_sort_key"},
+    {"max_long_size", T_OBJECT, offsetof(PyEncoderObject, max_long_size), 
READONLY, "max_long_size"},
+    {"min_long_size", T_OBJECT, offsetof(PyEncoderObject, min_long_size), 
READONLY, "min_long_size"},
     {NULL}
 };
 
@@ -197,7 +200,7 @@
 static PyObject *
 JSON_UnicodeFromChar(JSON_UNICHR c);
 static PyObject *
-maybe_quote_bigint(PyObject *encoded, PyObject *obj);
+maybe_quote_bigint(PyEncoderObject* s, PyObject *encoded, PyObject *obj);
 static Py_ssize_t
 ascii_char_size(JSON_UNICHR c);
 static Py_ssize_t
@@ -384,35 +387,22 @@
 }
 
 static PyObject *
-maybe_quote_bigint(PyObject *encoded, PyObject *obj)
+maybe_quote_bigint(PyEncoderObject* s, PyObject *encoded, PyObject *obj)
 {
-    static PyObject *big_long = NULL;
-    static PyObject *small_long = NULL;
-    if (big_long == NULL) {
-        big_long = PyLong_FromLongLong(1LL << 53);
-        if (big_long == NULL) {
-            Py_DECREF(encoded);
-            return NULL;
-        }
-    }
-    if (small_long == NULL) {
-        small_long = PyLong_FromLongLong(-1LL << 53);
-        if (small_long == NULL) {
-            Py_DECREF(encoded);
-            return NULL;
-        }
-    }
-    if (PyObject_RichCompareBool(obj, big_long, Py_GE) ||
-        PyObject_RichCompareBool(obj, small_long, Py_LE)) {
+    if (s->max_long_size != Py_None && s->min_long_size != Py_None) {
+        if (PyObject_RichCompareBool(obj, s->max_long_size, Py_GE) ||
+            PyObject_RichCompareBool(obj, s->min_long_size, Py_LE)) {
 #if PY_MAJOR_VERSION >= 3
-        PyObject* quoted = PyUnicode_FromFormat("\"%U\"", encoded);
+            PyObject* quoted = PyUnicode_FromFormat("\"%U\"", encoded);
 #else
-        PyObject* quoted = PyString_FromFormat("\"%s\"",
-                                               PyString_AsString(encoded));
+            PyObject* quoted = PyString_FromFormat("\"%s\"",
+                                                   PyString_AsString(encoded));
 #endif
-        Py_DECREF(encoded);
-        encoded = quoted;
+            Py_DECREF(encoded);
+            encoded = quoted;
+        }
     }
+
     return encoded;
 }
 
@@ -1023,13 +1013,13 @@
             /* Surrogate pair */
             if ((c & 0xfc00) == 0xd800) {
                 if (end + 6 < len && buf[next] == '\\' && buf[next+1] == 'u') {
-                   JSON_UNICHR c2 = 0;
-                   end += 6;
-                   /* Decode 4 hex digits */
-                   for (next += 2; next < end; next++) {
-                       c2 <<= 4;
-                       JSON_UNICHR digit = buf[next];
-                       switch (digit) {
+                    JSON_UNICHR c2 = 0;
+                    end += 6;
+                    /* Decode 4 hex digits */
+                    for (next += 2; next < end; next++) {
+                        c2 <<= 4;
+                        JSON_UNICHR digit = buf[next];
+                        switch (digit) {
                         case '0': case '1': case '2': case '3': case '4':
                         case '5': case '6': case '7': case '8': case '9':
                             c2 |= (digit - '0'); break;
@@ -1042,18 +1032,18 @@
                         default:
                             raise_errmsg(ERR_STRING_ESC4, pystr, end - 5);
                             goto bail;
-                       }
-                   }
-                   if ((c2 & 0xfc00) != 0xdc00) {
-                       /* not a low surrogate, rewind */
-                       end -= 6;
-                       next = end;
-                   }
-                   else {
-                       c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
-                   }
-               }
-           }
+                        }
+                    }
+                    if ((c2 & 0xfc00) != 0xdc00) {
+                        /* not a low surrogate, rewind */
+                        end -= 6;
+                        next = end;
+                    }
+                    else {
+                        c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
+                    }
+                }
+            }
 #endif /* PY_MAJOR_VERSION >= 3 || Py_UNICODE_WIDE */
         }
         if (c > 0x7f) {
@@ -1224,15 +1214,15 @@
             /* Surrogate pair */
             if ((c & 0xfc00) == 0xd800) {
                 JSON_UNICHR c2 = 0;
-               if (end + 6 < len &&
-                   PyUnicode_READ(kind, buf, next) == '\\' &&
-                   PyUnicode_READ(kind, buf, next + 1) == 'u') {
-                   end += 6;
-                   /* Decode 4 hex digits */
-                   for (next += 2; next < end; next++) {
-                       JSON_UNICHR digit = PyUnicode_READ(kind, buf, next);
-                       c2 <<= 4;
-                       switch (digit) {
+                if (end + 6 < len &&
+                    PyUnicode_READ(kind, buf, next) == '\\' &&
+                    PyUnicode_READ(kind, buf, next + 1) == 'u') {
+                    end += 6;
+                    /* Decode 4 hex digits */
+                    for (next += 2; next < end; next++) {
+                        JSON_UNICHR digit = PyUnicode_READ(kind, buf, next);
+                        c2 <<= 4;
+                        switch (digit) {
                         case '0': case '1': case '2': case '3': case '4':
                         case '5': case '6': case '7': case '8': case '9':
                             c2 |= (digit - '0'); break;
@@ -1245,18 +1235,18 @@
                         default:
                             raise_errmsg(ERR_STRING_ESC4, pystr, end - 5);
                             goto bail;
-                       }
-                   }
-                   if ((c2 & 0xfc00) != 0xdc00) {
-                       /* not a low surrogate, rewind */
-                       end -= 6;
-                       next = end;
-                   }
-                   else {
-                       c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
-                   }
-               }
-           }
+                        }
+                    }
+                    if ((c2 & 0xfc00) != 0xdc00) {
+                        /* not a low surrogate, rewind */
+                        end -= 6;
+                        next = end;
+                    }
+                    else {
+                        c = 0x10000 + (((c - 0xd800) << 10) | (c2 - 0xdc00));
+                    }
+                }
+            }
 #endif
         }
         APPEND_OLD_CHUNK
@@ -1443,10 +1433,10 @@
 
     /* only loop if the object is non-empty */
     if (idx <= end_idx && str[idx] != '}') {
-       int trailing_delimiter = 0;
+        int trailing_delimiter = 0;
         while (idx <= end_idx) {
             PyObject *memokey;
-           trailing_delimiter = 0;
+            trailing_delimiter = 0;
 
             /* read key */
             if (str[idx] != '"') {
@@ -1506,7 +1496,7 @@
             while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
 
             /* bail if the object is closed or we didn't get the , delimiter */
-           did_parse = 1;
+            did_parse = 1;
             if (idx > end_idx) break;
             if (str[idx] == '}') {
                 break;
@@ -1519,20 +1509,20 @@
 
             /* skip whitespace after , delimiter */
             while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
-           trailing_delimiter = 1;
+            trailing_delimiter = 1;
+        }
+        if (trailing_delimiter) {
+            raise_errmsg(ERR_OBJECT_PROPERTY, pystr, idx);
+            goto bail;
         }
-       if (trailing_delimiter) {
-           raise_errmsg(ERR_OBJECT_PROPERTY, pystr, idx);
-           goto bail;
-       }
     }
     /* verify that idx < end_idx, str[idx] should be '}' */
     if (idx > end_idx || str[idx] != '}') {
-       if (did_parse) {
-           raise_errmsg(ERR_OBJECT_DELIMITER, pystr, idx);
-       } else {
-           raise_errmsg(ERR_OBJECT_PROPERTY_FIRST, pystr, idx);
-       }
+        if (did_parse) {
+            raise_errmsg(ERR_OBJECT_DELIMITER, pystr, idx);
+        } else {
+            raise_errmsg(ERR_OBJECT_PROPERTY_FIRST, pystr, idx);
+        }
         goto bail;
     }
 
@@ -1605,10 +1595,10 @@
 
     /* only loop if the object is non-empty */
     if (idx <= end_idx && PyUnicode_READ(kind, str, idx) != '}') {
-       int trailing_delimiter = 0;
+        int trailing_delimiter = 0;
         while (idx <= end_idx) {
             PyObject *memokey;
-           trailing_delimiter = 0;
+            trailing_delimiter = 0;
 
             /* read key */
             if (PyUnicode_READ(kind, str, idx) != '"') {
@@ -1670,7 +1660,7 @@
 
             /* bail if the object is closed or we didn't get the ,
                delimiter */
-           did_parse = 1;
+            did_parse = 1;
             if (idx > end_idx) break;
             if (PyUnicode_READ(kind, str, idx) == '}') {
                 break;
@@ -1683,21 +1673,21 @@
 
             /* skip whitespace after , delimiter */
             while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, 
idx))) idx++;
-           trailing_delimiter = 1;
+            trailing_delimiter = 1;
+        }
+        if (trailing_delimiter) {
+            raise_errmsg(ERR_OBJECT_PROPERTY, pystr, idx);
+            goto bail;
         }
-       if (trailing_delimiter) {
-           raise_errmsg(ERR_OBJECT_PROPERTY, pystr, idx);
-           goto bail;
-       }
     }
 
     /* verify that idx < end_idx, str[idx] should be '}' */
     if (idx > end_idx || PyUnicode_READ(kind, str, idx) != '}') {
-       if (did_parse) {
-           raise_errmsg(ERR_OBJECT_DELIMITER, pystr, idx);
-       } else {
-           raise_errmsg(ERR_OBJECT_PROPERTY_FIRST, pystr, idx);
-       }
+        if (did_parse) {
+            raise_errmsg(ERR_OBJECT_DELIMITER, pystr, idx);
+        } else {
+            raise_errmsg(ERR_OBJECT_PROPERTY_FIRST, pystr, idx);
+        }
         goto bail;
     }
 
@@ -1754,9 +1744,9 @@
 
     /* only loop if the array is non-empty */
     if (idx <= end_idx && str[idx] != ']') {
-       int trailing_delimiter = 0;
+        int trailing_delimiter = 0;
         while (idx <= end_idx) {
-           trailing_delimiter = 0;
+            trailing_delimiter = 0;
             /* read any JSON term and de-tuplefy the (rval, idx) */
             val = scan_once_str(s, pystr, idx, &next_idx);
             if (val == NULL) {
@@ -1785,21 +1775,21 @@
 
             /* skip whitespace after , */
             while (idx <= end_idx && IS_WHITESPACE(str[idx])) idx++;
-           trailing_delimiter = 1;
+            trailing_delimiter = 1;
+        }
+        if (trailing_delimiter) {
+            raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
+            goto bail;
         }
-       if (trailing_delimiter) {
-           raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
-           goto bail;
-       }
     }
 
     /* verify that idx < end_idx, str[idx] should be ']' */
     if (idx > end_idx || str[idx] != ']') {
-       if (PyList_GET_SIZE(rval)) {
-           raise_errmsg(ERR_ARRAY_DELIMITER, pystr, idx);
-       } else {
-           raise_errmsg(ERR_ARRAY_VALUE_FIRST, pystr, idx);
-       }
+        if (PyList_GET_SIZE(rval)) {
+            raise_errmsg(ERR_ARRAY_DELIMITER, pystr, idx);
+        } else {
+            raise_errmsg(ERR_ARRAY_VALUE_FIRST, pystr, idx);
+        }
         goto bail;
     }
     *next_idx_ptr = idx + 1;
@@ -1835,9 +1825,9 @@
 
     /* only loop if the array is non-empty */
     if (idx <= end_idx && PyUnicode_READ(kind, str, idx) != ']') {
-       int trailing_delimiter = 0;
+        int trailing_delimiter = 0;
         while (idx <= end_idx) {
-           trailing_delimiter = 0;
+            trailing_delimiter = 0;
             /* read any JSON term  */
             val = scan_once_unicode(s, pystr, idx, &next_idx);
             if (val == NULL) {
@@ -1866,21 +1856,21 @@
 
             /* skip whitespace after , */
             while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, 
idx))) idx++;
-           trailing_delimiter = 1;
+            trailing_delimiter = 1;
+        }
+        if (trailing_delimiter) {
+            raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
+            goto bail;
         }
-       if (trailing_delimiter) {
-           raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
-           goto bail;
-       }
     }
 
     /* verify that idx < end_idx, str[idx] should be ']' */
     if (idx > end_idx || PyUnicode_READ(kind, str, idx) != ']') {
-       if (PyList_GET_SIZE(rval)) {
-           raise_errmsg(ERR_ARRAY_DELIMITER, pystr, idx);
-       } else {
-           raise_errmsg(ERR_ARRAY_VALUE_FIRST, pystr, idx);
-       }
+        if (PyList_GET_SIZE(rval)) {
+            raise_errmsg(ERR_ARRAY_DELIMITER, pystr, idx);
+        } else {
+            raise_errmsg(ERR_ARRAY_VALUE_FIRST, pystr, idx);
+        }
         goto bail;
     }
     *next_idx_ptr = idx + 1;
@@ -2151,7 +2141,7 @@
     PyObject *rval = NULL;
     int fallthrough = 0;
     if (idx >= length) {
-       raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
+        raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
         return NULL;
     }
     switch (str[idx]) {
@@ -2259,7 +2249,7 @@
     PyObject *rval = NULL;
     int fallthrough = 0;
     if (idx >= length) {
-       raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
+        raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx);
         return NULL;
     }
     switch (PyUnicode_READ(kind, str, idx)) {
@@ -2568,6 +2558,8 @@
         s->item_sort_key = NULL;
         s->item_sort_kw = NULL;
         s->Decimal = NULL;
+        s->max_long_size = NULL;
+        s->min_long_size = NULL;
     }
     return (PyObject *)s;
 }
@@ -2576,13 +2568,33 @@
 encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
 {
     /* initialize Encoder object */
-    static char *kwlist[] = {"markers", "default", "encoder", "indent", 
"key_separator", "item_separator", "sort_keys", "skipkeys", "allow_nan", 
"key_memo", "use_decimal", "namedtuple_as_object", "tuple_as_array", 
"bigint_as_string", "item_sort_key", "encoding", "for_json", "ignore_nan", 
"Decimal", NULL};
+    static char *kwlist[] = {
+        "markers",
+        "default",
+        "encoder",
+        "indent",
+        "key_separator",
+        "item_separator",
+        "sort_keys",
+        "skipkeys",
+        "allow_nan",
+        "key_memo",
+        "use_decimal",
+        "namedtuple_as_object",
+        "tuple_as_array",
+        "int_as_string_bitcount",
+        "item_sort_key",
+        "encoding",
+        "for_json",
+        "ignore_nan",
+        "Decimal",
+        NULL};
 
     PyEncoderObject *s;
     PyObject *markers, *defaultfn, *encoder, *indent, *key_separator;
     PyObject *item_separator, *sort_keys, *skipkeys, *allow_nan, *key_memo;
     PyObject *use_decimal, *namedtuple_as_object, *tuple_as_array;
-    PyObject *bigint_as_string, *item_sort_key, *encoding, *for_json;
+    PyObject *int_as_string_bitcount, *item_sort_key, *encoding, *for_json;
     PyObject *ignore_nan, *Decimal;
 
     assert(PyEncoder_Check(self));
@@ -2591,21 +2603,30 @@
     if (!PyArg_ParseTupleAndKeywords(args, kwds, 
"OOOOOOOOOOOOOOOOOOO:make_encoder", kwlist,
         &markers, &defaultfn, &encoder, &indent, &key_separator, 
&item_separator,
         &sort_keys, &skipkeys, &allow_nan, &key_memo, &use_decimal,
-        &namedtuple_as_object, &tuple_as_array, &bigint_as_string,
-        &item_sort_key, &encoding, &for_json, &ignore_nan, &Decimal))
+        &namedtuple_as_object, &tuple_as_array,
+        &int_as_string_bitcount, &item_sort_key, &encoding, &for_json,
+        &ignore_nan, &Decimal))
         return -1;
 
+    Py_INCREF(markers);
     s->markers = markers;
+    Py_INCREF(defaultfn);
     s->defaultfn = defaultfn;
+    Py_INCREF(encoder);
     s->encoder = encoder;
     s->encoding = JSON_ParseEncoding(encoding);
     if (s->encoding == NULL)
         return -1;
+    Py_INCREF(indent);
     s->indent = indent;
+    Py_INCREF(key_separator);
     s->key_separator = key_separator;
+    Py_INCREF(item_separator);
     s->item_separator = item_separator;
+    Py_INCREF(skipkeys);
     s->skipkeys_bool = skipkeys;
     s->skipkeys = PyObject_IsTrue(skipkeys);
+    Py_INCREF(key_memo);
     s->key_memo = key_memo;
     s->fast_encode = (PyCFunction_Check(s->encoder) && 
PyCFunction_GetFunction(s->encoder) == (PyCFunction)py_encode_basestring_ascii);
     s->allow_or_ignore_nan = (
@@ -2614,10 +2635,38 @@
     s->use_decimal = PyObject_IsTrue(use_decimal);
     s->namedtuple_as_object = PyObject_IsTrue(namedtuple_as_object);
     s->tuple_as_array = PyObject_IsTrue(tuple_as_array);
-    s->bigint_as_string = PyObject_IsTrue(bigint_as_string);
+    if (PyInt_Check(int_as_string_bitcount) || 
PyLong_Check(int_as_string_bitcount)) {
+        static const unsigned int long_long_bitsize = SIZEOF_LONG_LONG * 8;
+        int int_as_string_bitcount_val = PyLong_AsLong(int_as_string_bitcount);
+        if (int_as_string_bitcount_val > 0 && int_as_string_bitcount_val < 
long_long_bitsize) {
+            s->max_long_size = PyLong_FromUnsignedLongLong(1ULL << 
int_as_string_bitcount_val);
+            s->min_long_size = PyLong_FromLongLong(-1LL << 
int_as_string_bitcount_val);
+            if (s->min_long_size == NULL || s->max_long_size == NULL) {
+                return -1;
+            }
+        }
+        else {
+            PyErr_Format(PyExc_TypeError,
+                         "int_as_string_bitcount (%d) must be greater than 0 
and less than the number of bits of a `long long` type (%u bits)",
+                         int_as_string_bitcount_val, long_long_bitsize);
+            return -1;
+        }
+    }
+    else if (int_as_string_bitcount == Py_None) {
+        Py_INCREF(Py_None);
+        s->max_long_size = Py_None;
+        Py_INCREF(Py_None);
+        s->min_long_size = Py_None;
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError, "int_as_string_bitcount must be None 
or an integer");
+        return -1;
+    }
     if (item_sort_key != Py_None) {
-        if (!PyCallable_Check(item_sort_key))
+        if (!PyCallable_Check(item_sort_key)) {
             PyErr_SetString(PyExc_TypeError, "item_sort_key must be None or 
callable");
+            return -1;
+        }
     }
     else if (PyObject_IsTrue(sort_keys)) {
         static PyObject *itemgetter0 = NULL;
@@ -2643,22 +2692,14 @@
         if (PyDict_SetItemString(s->item_sort_kw, "key", item_sort_key))
             return -1;
     }
+    Py_INCREF(sort_keys);
     s->sort_keys = sort_keys;
+    Py_INCREF(item_sort_key);
     s->item_sort_key = item_sort_key;
+    Py_INCREF(Decimal);
     s->Decimal = Decimal;
     s->for_json = PyObject_IsTrue(for_json);
 
-    Py_INCREF(s->markers);
-    Py_INCREF(s->defaultfn);
-    Py_INCREF(s->encoder);
-    Py_INCREF(s->indent);
-    Py_INCREF(s->key_separator);
-    Py_INCREF(s->item_separator);
-    Py_INCREF(s->key_memo);
-    Py_INCREF(s->skipkeys_bool);
-    Py_INCREF(s->sort_keys);
-    Py_INCREF(s->item_sort_key);
-    Py_INCREF(s->Decimal);
     return 0;
 }
 
@@ -2801,11 +2842,9 @@
         else if (PyInt_Check(obj) || PyLong_Check(obj)) {
             PyObject *encoded = PyObject_Str(obj);
             if (encoded != NULL) {
-                if (s->bigint_as_string) {
-                    encoded = maybe_quote_bigint(encoded, obj);
-                    if (encoded == NULL)
-                        break;
-                }
+                encoded = maybe_quote_bigint(s, encoded, obj);
+                if (encoded == NULL)
+                    break;
                 rv = _steal_accumulate(rval, encoded);
             }
         }
@@ -3157,6 +3196,8 @@
     Py_VISIT(s->sort_keys);
     Py_VISIT(s->item_sort_kw);
     Py_VISIT(s->item_sort_key);
+    Py_VISIT(s->max_long_size);
+    Py_VISIT(s->min_long_size);
     Py_VISIT(s->Decimal);
     return 0;
 }
@@ -3180,6 +3221,8 @@
     Py_CLEAR(s->sort_keys);
     Py_CLEAR(s->item_sort_kw);
     Py_CLEAR(s->item_sort_key);
+    Py_CLEAR(s->max_long_size);
+    Py_CLEAR(s->min_long_size);
     Py_CLEAR(s->Decimal);
     return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson/encoder.py 
new/simplejson-3.5.2/simplejson/encoder.py
--- old/simplejson-3.4.1/simplejson/encoder.py  2013-06-05 08:58:21.000000000 
+0200
+++ new/simplejson-3.5.2/simplejson/encoder.py  2014-05-22 20:54:00.000000000 
+0200
@@ -116,12 +116,14 @@
     """
     item_separator = ', '
     key_separator = ': '
+
     def __init__(self, skipkeys=False, ensure_ascii=True,
-            check_circular=True, allow_nan=True, sort_keys=False,
-            indent=None, separators=None, encoding='utf-8', default=None,
-            use_decimal=True, namedtuple_as_object=True,
-            tuple_as_array=True, bigint_as_string=False,
-            item_sort_key=None, for_json=False, ignore_nan=False):
+                 check_circular=True, allow_nan=True, sort_keys=False,
+                 indent=None, separators=None, encoding='utf-8', default=None,
+                 use_decimal=True, namedtuple_as_object=True,
+                 tuple_as_array=True, bigint_as_string=False,
+                 item_sort_key=None, for_json=False, ignore_nan=False,
+                 int_as_string_bitcount=None):
         """Constructor for JSONEncoder, with sensible defaults.
 
         If skipkeys is false, then it is a TypeError to attempt
@@ -180,6 +182,10 @@
         or lower than -2**53 will be encoded as strings. This is to avoid the
         rounding that happens in Javascript otherwise.
 
+        If int_as_string_bitcount is a positive number (n), then int of size
+        greater than or equal to 2**n or lower than or equal to -2**n will be
+        encoded as strings.
+
         If specified, item_sort_key is a callable used to sort the items in
         each dictionary. This is useful if you want to sort items other than
         in alphabetical order by key.
@@ -207,6 +213,7 @@
         self.item_sort_key = item_sort_key
         self.for_json = for_json
         self.ignore_nan = ignore_nan
+        self.int_as_string_bitcount = int_as_string_bitcount
         if indent is not None and not isinstance(indent, string_types):
             indent = indent * ' '
         self.indent = indent
@@ -315,8 +322,9 @@
 
             return text
 
-
         key_memo = {}
+        int_as_string_bitcount = (
+            53 if self.bigint_as_string else self.int_as_string_bitcount)
         if (_one_shot and c_make_encoder is not None
                 and self.indent is None):
             _iterencode = c_make_encoder(
@@ -324,17 +332,17 @@
                 self.key_separator, self.item_separator, self.sort_keys,
                 self.skipkeys, self.allow_nan, key_memo, self.use_decimal,
                 self.namedtuple_as_object, self.tuple_as_array,
-                self.bigint_as_string, self.item_sort_key,
-                self.encoding, self.for_json, self.ignore_nan,
-                Decimal)
+                int_as_string_bitcount,
+                self.item_sort_key, self.encoding, self.for_json,
+                self.ignore_nan, Decimal)
         else:
             _iterencode = _make_iterencode(
                 markers, self.default, _encoder, self.indent, floatstr,
                 self.key_separator, self.item_separator, self.sort_keys,
                 self.skipkeys, _one_shot, self.use_decimal,
                 self.namedtuple_as_object, self.tuple_as_array,
-                self.bigint_as_string, self.item_sort_key,
-                self.encoding, self.for_json,
+                int_as_string_bitcount,
+                self.item_sort_key, self.encoding, self.for_json,
                 Decimal=Decimal)
         try:
             return _iterencode(o, 0)
@@ -372,7 +380,8 @@
 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
         _key_separator, _item_separator, _sort_keys, _skipkeys, _one_shot,
         _use_decimal, _namedtuple_as_object, _tuple_as_array,
-        _bigint_as_string, _item_sort_key, _encoding, _for_json,
+        _int_as_string_bitcount, _item_sort_key,
+        _encoding,_for_json,
         ## HACK: hand-optimized bytecode; turn globals into locals
         _PY3=PY3,
         ValueError=ValueError,
@@ -392,6 +401,26 @@
     elif _sort_keys and not _item_sort_key:
         _item_sort_key = itemgetter(0)
 
+    if (_int_as_string_bitcount is not None and
+        (_int_as_string_bitcount <= 0 or
+         not isinstance(_int_as_string_bitcount, integer_types))):
+        raise TypeError("int_as_string_bitcount must be a positive integer")
+
+    def _encode_int(value):
+        skip_quoting = (
+            _int_as_string_bitcount is None
+            or
+            _int_as_string_bitcount < 1
+        )
+        if (
+            skip_quoting or
+            (-1 << _int_as_string_bitcount)
+            < value <
+            (1 << _int_as_string_bitcount)
+        ):
+            return str(value)
+        return '"' + str(value) + '"'
+
     def _iterencode_list(lst, _current_indent_level):
         if not lst:
             yield '[]'
@@ -426,10 +455,7 @@
             elif value is False:
                 yield buf + 'false'
             elif isinstance(value, integer_types):
-                yield ((buf + str(value))
-                       if (not _bigint_as_string or
-                           (-1 << 53) < value < (1 << 53))
-                           else (buf + '"' + str(value) + '"'))
+                yield buf + _encode_int(value)
             elif isinstance(value, float):
                 yield buf + _floatstr(value)
             elif _use_decimal and isinstance(value, Decimal):
@@ -540,10 +566,7 @@
             elif value is False:
                 yield 'false'
             elif isinstance(value, integer_types):
-                yield (str(value)
-                       if (not _bigint_as_string or
-                           (-1 << 53) < value < (1 << 53))
-                           else ('"' + str(value) + '"'))
+                yield _encode_int(value)
             elif isinstance(value, float):
                 yield _floatstr(value)
             elif _use_decimal and isinstance(value, Decimal):
@@ -585,10 +608,7 @@
         elif o is False:
             yield 'false'
         elif isinstance(o, integer_types):
-            yield (str(o)
-                   if (not _bigint_as_string or
-                       (-1 << 53) < o < (1 << 53))
-                       else ('"' + str(o) + '"'))
+            yield _encode_int(o)
         elif isinstance(o, float):
             yield _floatstr(o)
         else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson/tests/__init__.py 
new/simplejson-3.5.2/simplejson/tests/__init__.py
--- old/simplejson-3.4.1/simplejson/tests/__init__.py   2014-04-30 
20:42:00.000000000 +0200
+++ new/simplejson-3.5.2/simplejson/tests/__init__.py   2014-05-22 
20:51:27.000000000 +0200
@@ -37,6 +37,7 @@
     def get_suite():
         return additional_tests(
             unittest.TestLoader().loadTestsFromNames([
+                'simplejson.tests.test_bitsize_int_as_string',
                 'simplejson.tests.test_bigint_as_string',
                 'simplejson.tests.test_check_circular',
                 'simplejson.tests.test_decode',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/simplejson-3.4.1/simplejson/tests/test_bigint_as_string.py 
new/simplejson-3.5.2/simplejson/tests/test_bigint_as_string.py
--- old/simplejson-3.4.1/simplejson/tests/test_bigint_as_string.py      
2013-01-03 20:27:13.000000000 +0100
+++ new/simplejson-3.5.2/simplejson/tests/test_bigint_as_string.py      
2014-05-21 08:05:09.000000000 +0200
@@ -1,7 +1,7 @@
 from unittest import TestCase
 
 import simplejson as json
-from simplejson.compat import long_type
+
 
 class TestBigintAsString(TestCase):
     # Python 2.5, at least the one that ships on Mac OS X, calculates
@@ -15,44 +15,53 @@
               ((-1 << 53) - 1, '-9007199254740993'),
               ((-1 << 53) + 1, -9007199254740991)]
 
+    options = (
+        {"bigint_as_string": True},
+        {"int_as_string_bitcount": 53}
+    )
+
     def test_ints(self):
-        for val, expect in self.values:
-            self.assertEqual(
-                val,
-                json.loads(json.dumps(val)))
-            self.assertEqual(
-                expect,
-                json.loads(json.dumps(val, bigint_as_string=True)))
+        for opts in self.options:
+            for val, expect in self.values:
+                self.assertEqual(
+                    val,
+                    json.loads(json.dumps(val)))
+                self.assertEqual(
+                    expect,
+                    json.loads(json.dumps(val, **opts)))
 
     def test_lists(self):
-        for val, expect in self.values:
-            val = [val, val]
-            expect = [expect, expect]
-            self.assertEqual(
-                val,
-                json.loads(json.dumps(val)))
-            self.assertEqual(
-                expect,
-                json.loads(json.dumps(val, bigint_as_string=True)))
+        for opts in self.options:
+            for val, expect in self.values:
+                val = [val, val]
+                expect = [expect, expect]
+                self.assertEqual(
+                    val,
+                    json.loads(json.dumps(val)))
+                self.assertEqual(
+                    expect,
+                    json.loads(json.dumps(val, **opts)))
 
     def test_dicts(self):
-        for val, expect in self.values:
-            val = {'k': val}
-            expect = {'k': expect}
-            self.assertEqual(
-                val,
-                json.loads(json.dumps(val)))
-            self.assertEqual(
-                expect,
-                json.loads(json.dumps(val, bigint_as_string=True)))
+        for opts in self.options:
+            for val, expect in self.values:
+                val = {'k': val}
+                expect = {'k': expect}
+                self.assertEqual(
+                    val,
+                    json.loads(json.dumps(val)))
+                self.assertEqual(
+                    expect,
+                    json.loads(json.dumps(val, **opts)))
 
     def test_dict_keys(self):
-        for val, _ in self.values:
-            expect = {str(val): 'value'}
-            val = {val: 'value'}
-            self.assertEqual(
-                expect,
-                json.loads(json.dumps(val)))
-            self.assertEqual(
-                expect,
-                json.loads(json.dumps(val, bigint_as_string=True)))
+        for opts in self.options:
+            for val, _ in self.values:
+                expect = {str(val): 'value'}
+                val = {val: 'value'}
+                self.assertEqual(
+                    expect,
+                    json.loads(json.dumps(val)))
+                self.assertEqual(
+                    expect,
+                    json.loads(json.dumps(val, **opts)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/simplejson-3.4.1/simplejson/tests/test_bitsize_int_as_string.py 
new/simplejson-3.5.2/simplejson/tests/test_bitsize_int_as_string.py
--- old/simplejson-3.4.1/simplejson/tests/test_bitsize_int_as_string.py 
1970-01-01 01:00:00.000000000 +0100
+++ new/simplejson-3.5.2/simplejson/tests/test_bitsize_int_as_string.py 
2014-05-22 20:50:36.000000000 +0200
@@ -0,0 +1,73 @@
+from unittest import TestCase
+
+import simplejson as json
+
+
+class TestBitSizeIntAsString(TestCase):
+    # Python 2.5, at least the one that ships on Mac OS X, calculates
+    # 2 ** 31 as 0! It manages to calculate 1 << 31 correctly.
+    values = [
+        (200, 200),
+        ((1 << 31) - 1, (1 << 31) - 1),
+        ((1 << 31), str(1 << 31)),
+        ((1 << 31) + 1, str((1 << 31) + 1)),
+        (-100, -100),
+        ((-1 << 31), str(-1 << 31)),
+        ((-1 << 31) - 1, str((-1 << 31) - 1)),
+        ((-1 << 31) + 1, (-1 << 31) + 1),
+    ]
+
+    def test_invalid_counts(self):
+        for n in ['foo', -1, 0, 1.0]:
+            self.assertRaises(
+                TypeError,
+                json.dumps, 0, int_as_string_bitcount=n)
+
+    def test_ints_outside_range_fails(self):
+        self.assertNotEqual(
+            str(1 << 15),
+            json.loads(json.dumps(1 << 15, int_as_string_bitcount=16)),
+            )
+
+    def test_ints(self):
+        for val, expect in self.values:
+            self.assertEqual(
+                val,
+                json.loads(json.dumps(val)))
+            self.assertEqual(
+                expect,
+                json.loads(json.dumps(val, int_as_string_bitcount=31)),
+                )
+
+    def test_lists(self):
+        for val, expect in self.values:
+            val = [val, val]
+            expect = [expect, expect]
+            self.assertEqual(
+                val,
+                json.loads(json.dumps(val)))
+            self.assertEqual(
+                expect,
+                json.loads(json.dumps(val, int_as_string_bitcount=31)))
+
+    def test_dicts(self):
+        for val, expect in self.values:
+            val = {'k': val}
+            expect = {'k': expect}
+            self.assertEqual(
+                val,
+                json.loads(json.dumps(val)))
+            self.assertEqual(
+                expect,
+                json.loads(json.dumps(val, int_as_string_bitcount=31)))
+
+    def test_dict_keys(self):
+        for val, _ in self.values:
+            expect = {str(val): 'value'}
+            val = {val: 'value'}
+            self.assertEqual(
+                expect,
+                json.loads(json.dumps(val)))
+            self.assertEqual(
+                expect,
+                json.loads(json.dumps(val, int_as_string_bitcount=31)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson/tests/test_speedups.py 
new/simplejson-3.5.2/simplejson/tests/test_speedups.py
--- old/simplejson-3.4.1/simplejson/tests/test_speedups.py      2012-05-11 
00:04:51.000000000 +0200
+++ new/simplejson-3.5.2/simplejson/tests/test_speedups.py      2014-05-21 
08:05:10.000000000 +0200
@@ -1,20 +1,39 @@
+import sys
+import unittest
 from unittest import TestCase
 
 from simplejson import encoder, scanner
 
+
 def has_speedups():
     return encoder.c_make_encoder is not None
 
+
+def skip_if_speedups_missing(func):
+    def wrapper(*args, **kwargs):
+        if not has_speedups():
+            if hasattr(unittest, 'SkipTest'):
+                raise unittest.SkipTest("C Extension not available")
+            else:
+                sys.stdout.write("C Extension not available")
+                return
+        return func(*args, **kwargs)
+
+    return wrapper
+
+
 class TestDecode(TestCase):
+    @skip_if_speedups_missing
     def test_make_scanner(self):
-        if not has_speedups():
-            return
         self.assertRaises(AttributeError, scanner.c_make_scanner, 1)
 
+    @skip_if_speedups_missing
     def test_make_encoder(self):
-        if not has_speedups():
-            return
-        self.assertRaises(TypeError, encoder.c_make_encoder,
+        self.assertRaises(
+            TypeError,
+            encoder.c_make_encoder,
             None,
-            
"\xCD\x7D\x3D\x4E\x12\x4C\xF9\x79\xD7\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75",
-            None)
+            ("\xCD\x7D\x3D\x4E\x12\x4C\xF9\x79\xD7"
+             "\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75"),
+            None
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson.egg-info/PKG-INFO 
new/simplejson-3.5.2/simplejson.egg-info/PKG-INFO
--- old/simplejson-3.4.1/simplejson.egg-info/PKG-INFO   2014-04-30 
20:47:30.000000000 +0200
+++ new/simplejson-3.5.2/simplejson.egg-info/PKG-INFO   2014-05-23 
17:22:13.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: simplejson
-Version: 3.4.1
+Version: 3.5.2
 Summary: Simple, fast, extensible JSON encoder/decoder for Python
 Home-page: http://github.com/simplejson/simplejson
 Author: Bob Ippolito
@@ -42,6 +42,7 @@
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.4.1/simplejson.egg-info/SOURCES.txt 
new/simplejson-3.5.2/simplejson.egg-info/SOURCES.txt
--- old/simplejson-3.4.1/simplejson.egg-info/SOURCES.txt        2014-04-30 
20:47:31.000000000 +0200
+++ new/simplejson-3.5.2/simplejson.egg-info/SOURCES.txt        2014-05-23 
17:22:13.000000000 +0200
@@ -20,6 +20,7 @@
 simplejson.egg-info/top_level.txt
 simplejson/tests/__init__.py
 simplejson/tests/test_bigint_as_string.py
+simplejson/tests/test_bitsize_int_as_string.py
 simplejson/tests/test_check_circular.py
 simplejson/tests/test_decimal.py
 simplejson/tests/test_decode.py

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to