From aacd53f6cb96fe8c4fe9ce894f22e25f356a97c3 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 22 Jun 2016 00:03:20 +0300 Subject: 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. --- Doc/library/json.rst | 24 ++++++++++++++++++------ Doc/whatsnew/3.6.rst | 8 ++++++++ Lib/json/__init__.py | 8 ++++---- Lib/json/decoder.py | 2 +- Lib/json/encoder.py | 2 +- Misc/NEWS | 4 ++++ 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Doc/library/json.rst b/Doc/library/json.rst index 174e734..55ec1e9 100644 --- a/Doc/library/json.rst +++ b/Doc/library/json.rst @@ -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 `. -.. 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 `. + +.. 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 `. @@ -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 `. + .. 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 `. + .. method:: default(o) diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 9a21912..177b17f 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -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 + `. + (Contributed by Serhiy Storchaka in :issue:`18726`.) + + Changes in the C API -------------------- diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 2612657..28057dd 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -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. diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py index 0f03f20..2422c6a 100644 --- a/Lib/json/decoder.py +++ b/Lib/json/decoder.py @@ -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 diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py index 0772bbc..41a497c 100644 --- a/Lib/json/encoder.py +++ b/Lib/json/encoder.py @@ -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. diff --git a/Misc/NEWS b/Misc/NEWS index 7855d3d..a87b5cb 100644 --- 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 -- cgit v0.12