Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve the documentation of xml.etree.ElementTree #58214

Closed
elibendersky mannequin opened this issue Feb 14, 2012 · 14 comments
Closed

Improve the documentation of xml.etree.ElementTree #58214

elibendersky mannequin opened this issue Feb 14, 2012 · 14 comments
Labels
docs Documentation in the Doc dir easy type-feature A feature request or enhancement

Comments

@elibendersky
Copy link
Mannequin

elibendersky mannequin commented Feb 14, 2012

BPO 14006
Nosy @scoder, @ezio-melotti, @merwok, @florentx
Dependencies
  • bpo-6488: ElementTree documentation refers to "path" with no explanation, and inconsistently
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2012-06-08.12:32:06.925>
    created_at = <Date 2012-02-14.03:28:45.036>
    labels = ['easy', 'type-feature', 'docs']
    title = 'Improve the documentation of xml.etree.ElementTree'
    updated_at = <Date 2012-06-08.12:32:06.924>
    user = 'https://bugs.python.org/elibendersky'

    bugs.python.org fields:

    activity = <Date 2012-06-08.12:32:06.924>
    actor = 'eli.bendersky'
    assignee = 'docs@python'
    closed = True
    closed_date = <Date 2012-06-08.12:32:06.925>
    closer = 'eli.bendersky'
    components = ['Documentation']
    creation = <Date 2012-02-14.03:28:45.036>
    creator = 'eli.bendersky'
    dependencies = ['6488']
    files = []
    hgrepos = []
    issue_num = 14006
    keywords = ['easy']
    message_count = 14.0
    messages = ['153318', '153334', '153335', '153899', '154030', '154046', '154047', '154386', '154412', '155014', '156849', '156851', '156893', '157129']
    nosy_count = 11.0
    nosy_names = ['effbot', 'scoder', 'ezio.melotti', 'eric.araujo', 'Arfrever', 'eli.bendersky', 'leonov', 'flox', 'docs@python', 'tshepang', 'python-dev']
    pr_nums = []
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue14006'
    versions = ['Python 3.3']

    @elibendersky
    Copy link
    Mannequin Author

    elibendersky mannequin commented Feb 14, 2012

    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.

    @elibendersky elibendersky mannequin assigned docspython Feb 14, 2012
    @elibendersky elibendersky mannequin added docs Documentation in the Doc dir easy type-feature A feature request or enhancement labels Feb 14, 2012
    @scoder
    Copy link
    Contributor

    scoder commented Feb 14, 2012

    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.

    @scoder
    Copy link
    Contributor

    scoder commented Feb 14, 2012

    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

    @leonov
    Copy link
    Mannequin

    leonov mannequin commented Feb 21, 2012

    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?

    @merwok
    Copy link
    Member

    merwok commented Feb 23, 2012

    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.

    @ezio-melotti
    Copy link
    Member

    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.
    """

    @merwok
    Copy link
    Member

    merwok commented Feb 23, 2012

    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).

    @leonov
    Copy link
    Mannequin

    leonov mannequin commented Feb 26, 2012

    Thank you Éric and Ezio. I'll produce a patch to convert the javadoc to docstrings this week, then submit it here.

    @florentx
    Copy link
    Mannequin

    florentx mannequin commented Feb 26, 2012

    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 bpo-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 bpo-2864, which need some review.

    @elibendersky
    Copy link
    Mannequin Author

    elibendersky mannequin commented Mar 6, 2012

    BTW, the bpo-6488 is still opened. I did not check if there's something left to do before to close it.

    The fundamental problem issue bpo-6488 was opened for still exists - the docs use the term "path" without defining it. This should be addressed.

    @python-dev
    Copy link
    Mannequin

    python-dev mannequin commented Mar 26, 2012

    New changeset e38f4cf482c7 by Eli Bendersky in branch 'default':
    Issue bpo-6488: Explain the XPath support of xml.etree.ElementTree, with code
    http://hg.python.org/cpython/rev/e38f4cf482c7

    @elibendersky
    Copy link
    Mannequin Author

    elibendersky mannequin commented Mar 26, 2012

    First step in the right direction - e38f4cf482c7

    @elibendersky
    Copy link
    Mannequin Author

    elibendersky mannequin commented Mar 27, 2012

    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.

    @python-dev
    Copy link
    Mannequin

    python-dev mannequin commented Mar 30, 2012

    New changeset 78038b6e0a85 by Eli Bendersky in branch 'default':
    Issue bpo-14006: improve the documentation of xml.etree.ElementTree
    http://hg.python.org/cpython/rev/78038b6e0a85

    @elibendersky elibendersky mannequin closed this as completed Jun 8, 2012
    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    docs Documentation in the Doc dir easy type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants