Skip to content

Conversation

@ZeroIntensity
Copy link
Member

@ZeroIntensity ZeroIntensity commented Nov 14, 2025

I was mostly inspired by Bénédikt's work on the curses C API (#141254) for this.

In the future, I think we should completely deprecate PyDateTimeAPI and PyDateTime_IMPORT because of subinterpreter incompatibility, as well as documenting all the fields on PyDateTime_CAPI to make this usable under subinterpreters, but that's a later project.


📚 Documentation preview 📚: https://cpython-previews--141543.org.readthedocs.build/en/141543/c-api/datetime.html


.. c:macro:: PyDateTime_IMPORT()
Import the datetime C API. The macro does not need a semi-colon to be called.
Copy link
Member

Choose a reason for hiding this comment

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

The macro does not need a semi-colon to be called.

This is wrong.

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, I should've fact-checked this one before copy-pasting it. Good catch!

ZeroIntensity and others added 3 commits November 14, 2025 06:17
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
@pganssle
Copy link
Member

This sounded familiar so I thought there was some reason that we didn't do it, but apparently I actually wanted to go even further than this and didn't get around to it / didn't drum up enough interest: #83785

I am tempted to say we should not say the thing about the struct contents being private and subject to change because there are situations where they are legitimately the only way to accomplish things and I am not crazy about the fact that our public interface is C macros anyway (given that those macros don't work outside of C++, I'd rather they be symbols that can be linked against in an FFI).

Given the subinterpreter stuff, though, it might be a bit of an own goal to make the struct public right away before making a plan for how to move forward (in case the implementation details of the struct end up being inconvenient in that effort), so I'm +1 on the current scope of this PR.

@StanFromIreland StanFromIreland changed the title gh-141004: Document missing PyDateTime* APIs. gh-83785: Document missing PyDateTime* APIs. Nov 14, 2025
@StanFromIreland
Copy link
Member

This sounded familiar so I thought there was some reason that we didn't do it, but apparently I actually wanted to go even further than this and didn't get around to it / didn't drum up enough interest: #83785

Oh I forgot about that one! I've moved this PR under it, since it is more specific.

@ZeroIntensity
Copy link
Member Author

I'm fine with removing the note on the contents of PyDateTime_CAPI being private, would you like me to do that?

Oh I forgot about that one! I've moved this PR under it, since it is more specific.

Please don't edit my PRs without my permission. I don't think this PR fits great under that issue; we're merely documenting that PyDateTimeAPI / PyDateTime_CAPI exist so they show up in Sphinx, whereas that issue seems more about documenting the contents of them. I'm happy to use that issue for the future work Paul and I were talking about in regards to FFIs and thread-safety.

@ZeroIntensity ZeroIntensity changed the title gh-83785: Document missing PyDateTime* APIs. gh-141004: Document missing PyDateTime* APIs. Nov 14, 2025
@StanFromIreland
Copy link
Member

Apologies Peter.

@pganssle
Copy link
Member

pganssle commented Nov 14, 2025

I'm fine with removing the note on the contents of PyDateTime_CAPI being private, would you like me to do that?

No I think we should leave it. If we later decide that we're going to officially expose them publicly without any changes we can always backport the docs changes to older versions to retroactively document it.

@ZeroIntensity
Copy link
Member Author

I created #141563 for discussion on the global variable.

Copy link
Member

@vstinner vstinner left a comment

Choose a reason for hiding this comment

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

LGTM, I just left minor suggestions.

.. code-block::
PyDateTime_IMPORT;
if (PyErr_Occurred()) { /* cleanup */ }
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
if (PyErr_Occurred()) { /* cleanup */ }
if (PyErr_Occurred()) { /* error */ }

Copy link
Member Author

Choose a reason for hiding this comment

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

I like the current comment, we do similar for the curses C API: https://docs.python.org/3/c-api/curses.html

Co-authored-by: Victor Stinner <vstinner@python.org>
@ZeroIntensity ZeroIntensity merged commit 4273616 into python:main Nov 20, 2025
28 checks passed
@ZeroIntensity ZeroIntensity deleted the document-datetime-capsule-name branch November 20, 2025 13:48
@github-project-automation github-project-automation bot moved this from Todo to Done in Docs PRs Nov 20, 2025
@ZeroIntensity ZeroIntensity added needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes labels Nov 20, 2025
@miss-islington-app
Copy link

Thanks @ZeroIntensity for the PR 🌮🎉.. I'm working now to backport this PR to: 3.14.
🐍🍒⛏🤖

@miss-islington-app
Copy link

Thanks @ZeroIntensity for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Nov 20, 2025
(cherry picked from commit 4273616)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
@bedevere-app
Copy link

bedevere-app bot commented Nov 20, 2025

GH-141791 is a backport of this pull request to the 3.14 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.14 bugs and security fixes label Nov 20, 2025
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Nov 20, 2025
(cherry picked from commit 4273616)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
@bedevere-app
Copy link

bedevere-app bot commented Nov 20, 2025

GH-141792 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.13 bugs and security fixes label Nov 20, 2025
ZeroIntensity added a commit that referenced this pull request Nov 20, 2025
…-141791)

gh-141004: Document missing `PyDateTime*` APIs (GH-141543)
(cherry picked from commit 4273616)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
ZeroIntensity added a commit that referenced this pull request Nov 20, 2025
…-141792)

gh-141004: Document missing `PyDateTime*` APIs (GH-141543)
(cherry picked from commit 4273616)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
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 skip news

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants