]> granicus.if.org Git - python/commitdiff
Issue #18726: All optional parameters of the dump(), dumps(),
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 21 Jun 2016 21:03:20 +0000 (00:03 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 21 Jun 2016 21:03:20 +0000 (00:03 +0300)
load() and loads() functions and JSONEncoder and JSONDecoder class
constructors in the json module are now keyword-only.

Doc/library/json.rst
Doc/whatsnew/3.6.rst
Lib/json/__init__.py
Lib/json/decoder.py
Lib/json/encoder.py
Misc/NEWS

index 174e73411511595fe2ef1ab19399d1492db02243..55ec1e92d8d17d99c7424ecd301f132df096f30e 100644 (file)
@@ -126,7 +126,7 @@ See :ref:`json-commandline` for detailed documentation.
 Basic Usage
 -----------
 
-.. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
+.. function:: dump(obj, fp, *, skipkeys=False, ensure_ascii=True, \
                    check_circular=True, allow_nan=True, cls=None, \
                    indent=None, separators=None, default=None, \
                    sort_keys=False, **kw)
@@ -184,8 +184,11 @@ Basic Usage
    :meth:`default` method to serialize additional types), specify it with the
    *cls* kwarg; otherwise :class:`JSONEncoder` is used.
 
+   .. versionchanged:: 3.6
+      All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`.
 
-.. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
+
+.. function:: dumps(obj, *, skipkeys=False, ensure_ascii=True, \
                     check_circular=True, allow_nan=True, cls=None, \
                     indent=None, separators=None, default=None, \
                     sort_keys=False, **kw)
@@ -209,7 +212,7 @@ Basic Usage
       the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
       keys.
 
-.. function:: load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
+.. function:: load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
 
    Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
    containing a JSON document) to a Python object using this :ref:`conversion
@@ -257,7 +260,10 @@ Basic Usage
    If the data being deserialized is not a valid JSON document, a
    :exc:`JSONDecodeError` will be raised.
 
-.. function:: loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
+   .. versionchanged:: 3.6
+      All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`.
+
+.. function:: loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
 
    Deserialize *s* (a :class:`str` instance containing a JSON document) to a
    Python object using this :ref:`conversion table <json-to-py-table>`.
@@ -271,7 +277,7 @@ Basic Usage
 Encoders and Decoders
 ---------------------
 
-.. class:: JSONDecoder(object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
+.. class:: JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
 
    Simple JSON decoder.
 
@@ -341,6 +347,9 @@ Encoders and Decoders
    If the data being deserialized is not a valid JSON document, a
    :exc:`JSONDecodeError` will be raised.
 
+   .. versionchanged:: 3.6
+      All parameters are now :ref:`keyword-only <keyword-only_parameter>`.
+
    .. method:: decode(s)
 
       Return the Python representation of *s* (a :class:`str` instance
@@ -359,7 +368,7 @@ Encoders and Decoders
       extraneous data at the end.
 
 
-.. class:: JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
+.. class:: JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
 
    Extensible JSON encoder for Python data structures.
 
@@ -438,6 +447,9 @@ Encoders and Decoders
    otherwise be serialized.  It should return a JSON encodable version of the
    object or raise a :exc:`TypeError`.
 
+   .. versionchanged:: 3.6
+      All parameters are now :ref:`keyword-only <keyword-only_parameter>`.
+
 
    .. method:: default(o)
 
index 9a2191237b4505f78eeec14c0633704d427f0c78..177b17fb720568d1b69ec72799b38be03e531a78 100644 (file)
@@ -685,6 +685,14 @@ Changes in the Python API
   Code that has already been updated in accordance with the deprecation
   warning generated by 3.5 will not be affected.
 
+* All optional parameters of the :func:`~json.dump`, :func:`~json.dumps`,
+  :func:`~json.load` and :func:`~json.loads` functions and
+  :class:`~json.JSONEncoder` and :class:`~json.JSONDecoder` class
+  constructors in the :mod:`json` module are now :ref:`keyword-only
+  <keyword-only_parameter>`.
+  (Contributed by Serhiy Storchaka in :issue:`18726`.)
+
+
 Changes in the C API
 --------------------
 
index 2612657fafbc1d5350dd8eb80f9fabdbf0729b03..28057dd187a713fae2272a3528858fa18fe3d4ee 100644 (file)
@@ -116,7 +116,7 @@ _default_encoder = JSONEncoder(
     default=None,
 )
 
-def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
+def dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,
         allow_nan=True, cls=None, indent=None, separators=None,
         default=None, sort_keys=False, **kw):
     """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
@@ -179,7 +179,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
         fp.write(chunk)
 
 
-def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
+def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
         allow_nan=True, cls=None, indent=None, separators=None,
         default=None, sort_keys=False, **kw):
     """Serialize ``obj`` to a JSON formatted ``str``.
@@ -240,7 +240,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
 _default_decoder = JSONDecoder(object_hook=None, object_pairs_hook=None)
 
 
-def load(fp, cls=None, object_hook=None, parse_float=None,
+def load(fp, *, cls=None, object_hook=None, parse_float=None,
         parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
     """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
     a JSON document) to a Python object.
@@ -268,7 +268,7 @@ def load(fp, cls=None, object_hook=None, parse_float=None,
         parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
 
 
-def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
+def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
         parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
     """Deserialize ``s`` (a ``str`` instance containing a JSON
     document) to a Python object.
index 0f03f20042b86fa856bb245ac171c9a828d9be8f..2422c6ac102a64f9ff68b2acd1ed9704332cde75 100644 (file)
@@ -280,7 +280,7 @@ class JSONDecoder(object):
 
     """
 
-    def __init__(self, object_hook=None, parse_float=None,
+    def __init__(self, *, object_hook=None, parse_float=None,
             parse_int=None, parse_constant=None, strict=True,
             object_pairs_hook=None):
         """``object_hook``, if specified, will be called with the result
index 0772bbc06b9e619dff91dbd45a1e41219eb3aece..41a497c5da016031f055059366c31b53dacbcf47 100644 (file)
@@ -101,7 +101,7 @@ class JSONEncoder(object):
     """
     item_separator = ', '
     key_separator = ': '
-    def __init__(self, skipkeys=False, ensure_ascii=True,
+    def __init__(self, *, skipkeys=False, ensure_ascii=True,
             check_circular=True, allow_nan=True, sort_keys=False,
             indent=None, separators=None, default=None):
         """Constructor for JSONEncoder, with sensible defaults.
index 7855d3de8c3120bf95b30f20094d679d3ea45fc8..a87b5cb9edb078706884e970717d54c9dbfcb949 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@ What's New in Python 3.6.0 alpha 3
 Library
 -------
 
+- Issue #18726: All optional parameters of the dump(), dumps(),
+  load() and loads() functions and JSONEncoder and JSONDecoder class
+  constructors in the json module are now keyword-only.
+
 - Issue #27319: Methods selection_set(), selection_add(), selection_remove()
   and selection_toggle() of ttk.TreeView now allow passing multiple items as
   multiple arguments instead of passing them as a tuple.  Deprecated