[issue23738] Clarify documentation of positional-only default values

New submission from Martin Panter: This patch adds the PEP 457 positional-only slash “/” indicator to some function signatures in the documentation. I only looked at the the os, builtin, binascii, zlib and fcntl modules, and their functions where the documentation incorrectly suggests that they accept keyword arguments. For example, I changed eval(expression, globals=None, locals=None) to eval(expression, globals=None, locals=None, /) References: * Issue 22832: “fcntl” module changed to look like accepting keyword arguments * Ongoing discussion: <https://mail.python.org/pipermail/python-dev/2015-March/138847.html> There are many more instances where square brackets are used, or the arguments are mandatory. See the PEP for examples, but I do not think it is so important to “fix” them. I also fixed parameter name mismatches that I discovered for a quite a few functions that do take keyword arguments. One more thing I noticed, that I do not know how to fix, is the Argument Clinic signatures list invalid default values for zlib.compressobj(zdict=None) and os.utime(ns=None):
zlib.compressobj(zdict=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' does not support the buffer interface os.utime("dummy", ns=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: utime: 'ns' must be a tuple of two ints
---------- assignee: docs@python components: Documentation files: pos-defaults.patch keywords: patch messages: 238890 nosy: docs@python, serhiy.storchaka, vadmium priority: normal severity: normal status: open title: Clarify documentation of positional-only default values versions: Python 3.4, Python 3.5 Added file: http://bugs.python.org/file38632/pos-defaults.patch _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Martin Panter added the comment: Hmm it seems my change for os.utimes() in Modules/posixmodule.c does not automatically get reflected in the doc string. Is there some script I can run to regenerate it, or do I have to do it manually? ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Serhiy Storchaka added the comment: ./python Tools/clinic/clinic.py --make or just make clinic ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Changes by Ezio Melotti <ezio.melotti@gmail.com>: ---------- nosy: +ezio.melotti stage: -> patch review type: -> enhancement _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Changes by Brett Cannon <brett@python.org>: ---------- nosy: +brett.cannon _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

R. David Murray added the comment: Personally I would rather stick to the [] syntax in the docs, with the default values mentioned in the text. ---------- nosy: +georg.brandl, r.david.murray _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Brett Cannon added the comment: I say switch to what Argument Clinic uses, else there's a disconnect syntactically between help() and the docs. ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

R. David Murray added the comment: That's a good point. ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Martin Panter added the comment: pos-defaults.v2.patch includes the results of “make clinic” to fix the doc strings. Is there a consensus to use PEP 457’s slash “/” notation? At one point I think I saw Serhiy was concerned that it might be confusing. ---------- Added file: http://bugs.python.org/file38800/pos-defaults.v2.patch _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Martin Panter added the comment: Of course in a new release, the functions could actually grow support for keywords, sidestepping the problem. Issue 8706 proposes to do this. And see Issue 13386 about the conventions for optional arguments more generally. ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Changes by Martin Panter <vadmium+py@gmail.com>: ---------- dependencies: +io.[Text]IOBase.seek doesn't take keyword parameter _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Changes by Martin Panter <vadmium+py@gmail.com>: ---------- nosy: +berker.peksag versions: +Python 3.6 Added file: http://bugs.python.org/file40417/pos-defaults.v3.patch _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Roundup Robot added the comment: New changeset fdb5d84f9948 by Martin Panter <vadmium> in branch '3.4': Issue #23738: Document and test actual keyword parameter names https://hg.python.org/cpython/rev/fdb5d84f9948 New changeset 40bf1ca3f715 by Martin Panter <vadmium> in branch '3.5': Issue #23738: Merge 3.4 into 3.5 https://hg.python.org/cpython/rev/40bf1ca3f715 New changeset 6177482ce6a1 by Martin Panter <vadmium> in branch 'default': Issue #23738: Merge 3.5 into 3.6 https://hg.python.org/cpython/rev/6177482ce6a1 ---------- nosy: +python-dev _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Martin Panter added the comment: I have committed the obvious keyword argument name fixes from my patch. Now patch v3 contains just the PEP 457 changes to be considered. ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Changes by Martin Panter <vadmium+py@gmail.com>: ---------- dependencies: +TypeError: truncate() takes no keyword arguments _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Changes by Martin Panter <vadmium+py@gmail.com>: ---------- dependencies: +Python 3 documentation for eval is incorrect _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Martin Panter added the comment: Here is a more conservative patch using square brackets, and documenting the defaults in the text. I updated all the documentation from my previous patch, and added new changes for the “io” module. One quirk was that BufferedReader.read1() does not actually support the value −1. Therefore I changed the base class to BufferedIOBase.read1([size]) without mentioning what happens when size is omitted. Related: Issue 23214. ---------- Added file: http://bugs.python.org/file41253/square-brackets.patch _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Ezio Melotti added the comment: One thought that occurred to me is that we could make the * and / in the signature links that point to a relevant section of the documentation. I believe this is doable with Sphinx, even though I'm not sure how complex it is and if it's worth it. If we do this, people will be able to find out easily what they mean (especially considering that it's hard to search for them). ---------- _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue23738> _______________________________________

Change by Brett Cannon <brett@python.org>: ---------- nosy: -brett.cannon _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue23738> _______________________________________
participants (6)
-
Brett Cannon
-
Ezio Melotti
-
Martin Panter
-
R. David Murray
-
Roundup Robot
-
Serhiy Storchaka