FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-151950: Fix Sphinx reference warnings in wsgiref docs by sach98 · Pull Request #154498 · python/cpython · GitHub

Repository navigation

gh-151950: Fix Sphinx reference warnings in wsgiref docs - #154498

Closed
sach98 wants to merge 2 commits into
python:mainfrom
sach98:docs-wsgiref-nitpick
Closed

sach98 wants to merge 2 commits into
python:mainfrom
sach98:docs-wsgiref-nitpick

Conversation

sach98 commented Jul 22, 2026 •
edited by bedevere-app Bot
Loading

Copy link
Copy Markdown

Fixes the 18 nit-picky Sphinx reference warnings in Doc/library/wsgiref.rst and removes the file from Doc/tools/.nitignore.

Where a correct target already exists, the reference is qualified so it resolves:

  • The filelike object's read and close become :meth:`~io.BufferedIOBase.read``` and :meth:~io.IOBase.close```. This matches the existing ``:meth:~io.BufferedIOBase.write``` reference further down the same file.
  • shift_path_info and guess_scheme are documented in wsgiref.util but were referenced from a different module context, so they are now qualified.
  • serve_forever and handle_request point at socketserver.BaseServer, which is where WSGIServer actually inherits them from.

The remaining names have no documented target anywhere: Headers.keys, Headers.values, Headers.items, WSGIServer.base_environ, BaseHandler.environ and SimpleHandler.stdin / stdout / stderr are described only in prose, and paste.lint is third party. Those use the ! prefix, which keeps the semantic markup and drops the link.

I kept this to reference fixes so the diff stays limited to removing the warnings. If you would prefer the undocumented Headers methods and handler attributes to become proper .. method:: and .. attribute:: entries instead (as was done for the lzma constants in gh-151949), I am happy to do that here or in a follow-up.

Verified with a fresh nit-picky build: warnings for this file go from 18 to 0, total build warnings go from 1352 to 1334, no new warnings elsewhere, and Doc/tools/check-warnings.py --fail-if-regression --fail-if-improved exits 0.

bedevere-app Bot added docs Documentation in the Doc dir skip news labels Jul 22, 2026

python-cla-bot Bot commented Jul 22, 2026 •
edited
Loading

Copy link
Copy Markdown

All commit authors signed the Contributor License Agreement.

read-the-docs-community Bot commented Jul 22, 2026 •
edited
Loading

Copy link
Copy Markdown

picnixz commented Jul 24, 2026

Copy link
Copy Markdown
Member

The purpose was to document those attributes, not suppress them. Please do so.

picnixz left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Please document the header objects properly.

bedevere-app Bot commented Jul 24, 2026

Copy link
Copy Markdown

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

And if you don't make the requested changes, you will be put in the comfy chair!

Replace the "!"-suppressed references with real targets: .. method::
directives for Headers.keys(), Headers.values() and Headers.items(), and
.. attribute:: directives for WSGIServer.base_environ,
BaseHandler.environ and SimpleHandler's stdin, stdout and stderr.

Correct the SimpleHandler paragraph while documenting it: the constructor
stores the supplied environment in base_env, not environ, and
add_cgi_vars() merges it into BaseHandler.environ during setup_environ().

paste.lint (a third-party module) and FileWrapper.close (bound
conditionally from the wrapped object, never defined on the class) keep
the "!" prefix, since neither can have a real target.

sach98 commented Jul 25, 2026

Copy link
Copy Markdown
Author

Thanks, that's fair. I've replaced the suppressions with real targets:

  • Headers.keys(), Headers.values() and Headers.items() are now documented with .. method:: directives alongside get_all() and add_header(), and the paragraph above them no longer repeats what they say.
  • WSGIServer.base_environ is now an .. attribute::.
  • BaseHandler.environ is now an .. attribute::, which is what the add_cgi_vars(), get_scheme() and setup_environ() references resolve to.
  • SimpleHandler.stdin, stdout and stderr are now documented attributes.

One thing I ran into while doing that: the SimpleHandler paragraph was inaccurate. It said the supplied environment is stored in an environ attribute, but __init__ stores it in base_env, and add_cgi_vars() merges that into BaseHandler.environ during setup_environ(). Rather than document a SimpleHandler.environ that does not hold what the sentence claimed, I reworded the sentence to match the code. Happy to split that into its own PR if you would rather keep this one purely markup.

Two references are still suppressed, and I believe that is correct in both cases:

  • :mod:`!paste.lint`: a third-party module (Ian Bicking's Paste). No target exists in CPython's docs or in any intersphinx inventory.
  • :meth:`!close` on FileWrapper: FileWrapper never defines close(). __init__ does if hasattr(filelike, 'close'): self.close = filelike.close, so the attribute exists only for some wrapped objects, and it is the wrapped object's own bound method. A .. method:: FileWrapper.close() directive would assert that it is always present, which is not true, and the surrounding prose already states the conditional behaviour. Happy to document it anyway, with the condition spelled out in the body, if you prefer.

One more that I left alone deliberately, so tell me if you want it in scope: the class description still points get and setdefault at dict.get and dict.setdefault, but Headers defines its own, with case-insensitive lookup and multi-valued-header semantics that the dict methods do not have. That text predates this PR so I did not touch it, but it is the same kind of fix if you want it here.

I have made the requested changes; please review again

bedevere-app Bot commented Jul 25, 2026

Copy link
Copy Markdown

Thanks for making the requested changes!

@picnixz: please review the changes made to this pull request.

bedevere-app Bot requested a review from picnixz July 25, 2026 20:51

picnixz left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

If possible add versionadded/versionchanged directives to methods/atters that were not present at the beginning (i.e. if they were added later).

And also, if you using an agent, make sure that you review its output. Agents are quite bad at placement in my experience.

Comment thread Doc/library/wsgiref.rst
``len()`` of a :class:`Headers` object is the same as the length of its
:meth:`items`, which is the same as the length of the wrapped header list. In
fact, the :meth:`items` method just returns a copy of the wrapped header list.
:meth:`items`, which is the same as the length of the wrapped header list.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

The "in fact" got dropped

Comment thread Doc/library/wsgiref.rst
:meth:`items`, which is the same as the length of the wrapped header list.


.. method:: Headers.keys()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Above we say that Headers implement dict.get. So we could maybe reference dict.keys() instead. I do not remember whether it is implemented specifically or not. If .keys() etc are explicit methods on the Header class, you can keep this.

Comment thread Doc/library/wsgiref.rst
:meth:`get_app` exists mainly for the benefit of request handler instances.


.. attribute:: WSGIServer.base_environ

picnixz Jul 26, 2026 •
edited by hugovk
Loading

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Check if this page documents attributes before methods or vice-versa first. I believe attributes are put first. Then move that one accordingly. It is weird to have this attribute documentation here

Comment thread Doc/library/wsgiref.rst
and the :attr:`server_software` attribute is set.


.. attribute:: BaseHandler.environ

picnixz Jul 26, 2026 •
edited by hugovk
Loading

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Move this in the attributes section

bedevere-app Bot commented Jul 26, 2026

Copy link
Copy Markdown

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

picnixz commented Sep 6, 2026

Copy link
Copy Markdown
Member

Closing since changes were not made since then.

picnixz closed this Sep 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting changes docs Documentation in the Doc dir skip news

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

2 participants


Back | FazBrowse Home | New Git URL