classification
Title: Improve the documentation of xml.etree.ElementTree
Type: enhancement Stage: resolved
Components: Documentation Versions: Python 3.3
process
Status: closed Resolution: fixed
Dependencies: 6488 Superseder:
Assigned To: docs@python Nosy List: Arfrever, docs@python, effbot, eli.bendersky, eric.araujo, ezio.melotti, flox, leonov, python-dev, scoder, tshepang
Priority: normal Keywords: easy

Created on 2012-02-14 03:28 by eli.bendersky, last changed 2012-06-08 12:32 by eli.bendersky. This issue is now closed.

Messages (14)
msg153318 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2012-02-14 03:28
The documentation of xml.etree.ElementTree has to be improved. The first, very obvious step, would be to start the documentation page with a general overview of the module + some simple examples. The current opening section makes no sense for this module.
msg153334 - (view) Author: Stefan Behnel (scoder) * (Python committer) Date: 2012-02-14 11:00
Both lxml and ElementTree have tutorials:

http://effbot.org/zone/element.htm

http://lxml.de/tutorial.html

Here is another tutorial that may server as a source for an intro:

http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/index.html

And the general ET documentation is here:

http://effbot.org/zone/element-index.htm#documentation

In terms of licensing, I can't speak for any of the other sources, but as for the lxml documentation, feel free to copy any ET related parts of it that you see fit.

I think the lxml tutorial is gentle enough even for beginners to follow. Note, however, that it uses lxml specific APIs in some places. In the specific case of XPath, the examples should be easily replaced with ElementPath, though.
msg153335 - (view) Author: Stefan Behnel (scoder) * (Python committer) Date: 2012-02-14 11:03
Oh, and here are the ReST sources of the lxml docs:

https://github.com/lxml/lxml/tree/master/doc/

Specifically the tutorial:

https://raw.github.com/lxml/lxml/master/doc/tutorial.txt

and the parsing part:

https://raw.github.com/lxml/lxml/master/doc/parsing.txt
msg153899 - (view) Author: Leon Matthews (leonov) Date: 2012-02-21 20:33
The ElementTree.py module has good JavaDoc-style function-level documentation, but as it's not in docstring format, it can't be seen from the interactive help.

I'd be willing to convert the current comments into docstrings, as long as I wouldn't be stepping on anybody's toes, and somebody could give me some guidance as to how to convert the @return and @param declarations, and how to handle the C version of the module.  

Any volunteers?
msg154030 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2012-02-23 01:27
> The ElementTree.py module has good JavaDoc-style function-level documentation, but as it's not
> in docstring format, it can't be seen from the interactive help.
> 
> I'd be willing to convert the current comments into docstrings, as long as I wouldn't be
> stepping on anybody's toes,
Great, thanks!  I don’t know if the best approach here is to add lengthy docstrings or move the information from the comments into the reST docs.  Maybe this should be asked on the core-mentorship or python-dev mailing list.

> and somebody could give me some guidance as to how to convert the @return and @param declarations
In docstrings as well as in reST docs we just use English, with asterisks to mark up parameters, e.g. “*path* is an instance of :class:`ElementPath`. ... Returns ``True`` if there is a match, ``False`` otherwise.”

> and how to handle the C version of the module.
Doctrings for C modules are not hard to find, just a little painful to write.  If we agree to turn comments into docstrings and you need help, I’ll be glad to guide you with that.
msg154046 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2012-02-23 03:36
Converting sounds good to me, but it should be done carefully.

I think you can have two paragraphs in the docstrings: the first with the description of what it does and what it returns, and the second with the arguments.

For example Lib/xml/etree/ElementTree.py:355:
# Finds the first matching subelement, by tag name or path.
#
# @param path What element to look for.
# @keyparam namespaces Optional namespace prefix map.
# @return The first matching element, or None if no element was found.
# @defreturn Element or None

can become something like:
"""
Finds the first matching subelement, by tag name or path
and returns the first matching element, or None if no
 element was found.

*path* is the element to look for and *namespace* is an
optional namespace prefix map.
"""
msg154047 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2012-02-23 03:47
My general rule is that function/method docstrings are better short descriptions of what the function does and what the arguments are, a usage reminder for people who have already used the function.  Classes docstrings can tell a bit more about how the class is supposed to be used, e.g. what particular responsibility they have and what they work with.  Module docstrings should help you make sense of the public objects in the module, for example tell about the main classes and functions and briefly mentioning the less important ones.

This is a personal viewpoint; some people use dir and pydoc a lot to get the most info out of a new module, whereas I like separate documentation more.

ElementTree has no docstrings at all, which is IMO bad; I’d like the javadoc comments to be turned into docstrings, and if they are too big they can be reduced to their core and the extra help moved to reST docs (which are at this moment in what looks like a good shape: they have the same info as the javadoc comments from a quick glance).

I think some of the comments can just be deleted, like the @see lines.  Finally, a note about the comments for attributes: they should be documented in the reST docs, and for the Python code you have two possibilities: you can document them in the class docstring, or put string literals after them (see http://www.python.org/dev/peps/pep-0258/#attribute-docstrings – they are discarded by Python, so not available to help/pydoc, but some tools can process them).
msg154386 - (view) Author: Leon Matthews (leonov) Date: 2012-02-26 20:53
Thank you Éric and Ezio.  I'll produce a patch to convert the javadoc to docstrings this week, then submit it here.
msg154412 - (view) Author: Florent Xicluna (flox) * (Python committer) Date: 2012-02-26 22:39
FWIW, Fredrik, who is the creator of ElementTree, had a preference for JavaDoc conventions, as explained here: http://bugs.python.org/issue6488#msg102087

They are compatible with the tool PythonDoc, authored by Fredrik too:
http://www.effbot.org/zone/pythondoc.htm


However, I agree it makes sense to turn them into docstrings if the package is only maintained in the standard library.


BTW, the issue 6488 is still opened. I did not check if there's something left to do before to close it.
There's also a patch attached to issue 2864, which need some review.
msg155014 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2012-03-06 13:22
> BTW, the issue 6488 is still opened. I did not check if there's something left to do before to close it.

The fundamental problem issue #6488 was opened for still exists - the docs use the term "path" without defining it. This should be addressed.
msg156849 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2012-03-26 18:44
New changeset e38f4cf482c7 by Eli Bendersky in branch 'default':
Issue #6488: Explain the XPath support of xml.etree.ElementTree, with code
http://hg.python.org/cpython/rev/e38f4cf482c7
msg156851 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2012-03-26 18:45
First step in the right direction - e38f4cf482c7
msg156893 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2012-03-27 04:06
There are two parallel discussions going on here:

1. The external ReST documentation
2. The internal docstring documentation

I opened the issue with (1) in focus, since it's more important IMHO. Not only for the usual reasons (most users don't go into the source to find docstrings), but also because ElementTree.py is just a "reference implementation" in 3.3, since the _elementtree extension is imported by default and is expected to be used on the vast majority of platforms.

Therefore, it's important to have external documentation serving essentially as an API spec implemented once in Python and once in C.

Not that I would object to docstring patches. But it doesn't appear Leon's work is progressing. In any case, I'll be focusing on the ReST docs.
msg157129 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2012-03-30 08:45
New changeset 78038b6e0a85 by Eli Bendersky in branch 'default':
Issue #14006: improve the documentation of xml.etree.ElementTree
http://hg.python.org/cpython/rev/78038b6e0a85
History
Date User Action Args
2012-06-08 12:32:06eli.benderskysetstatus: open -> closed
resolution: fixed
stage: resolved
2012-04-14 22:10:06tshepangsetnosy: + tshepang
2012-03-30 08:45:31python-devsetmessages: + msg157129
2012-03-27 04:06:23eli.benderskysetmessages: + msg156893
2012-03-26 18:45:44eli.benderskysetmessages: + msg156851
2012-03-26 18:44:26python-devsetnosy: + python-dev
messages: + msg156849
2012-03-06 13:22:28eli.benderskysetmessages: + msg155014
2012-02-26 22:39:44floxsetnosy: + effbot
dependencies: + ElementTree documentation refers to "path" with no explanation, and inconsistently
messages: + msg154412
2012-02-26 20:53:18leonovsetmessages: + msg154386
2012-02-23 03:47:16eric.araujosetmessages: + msg154047
2012-02-23 03:36:33ezio.melottisetmessages: + msg154046
2012-02-23 01:27:02eric.araujosetmessages: + msg154030
2012-02-21 20:33:10leonovsetnosy: + leonov
messages: + msg153899
2012-02-14 11:03:37scodersetmessages: + msg153335
2012-02-14 11:00:33scodersetmessages: + msg153334
2012-02-14 10:49:27Arfreversetnosy: + Arfrever
2012-02-14 03:28:45eli.benderskycreate