Skip to content

Conversation

warsaw
Copy link
Member

@warsaw warsaw commented Aug 16, 2025

  • Require that name conform to the normalization rules, and include a link
  • Require that version conform to the version specs, and include a link
  • RFC 3399 instead of ISO 8601 as the timestamp spec. The RFC is a simpler format that subsets the ISO standard, and is more appropriate to our use case.
  • Adjust the gentoken() algorithm to be more resistant to tomfoolery. This may still change.
  • Require filename to conform to either the source or binary distribution file name convention, and include links

📚 Documentation preview 📚: https://pep-previews--4549.org.readthedocs.build/

* Require that `name` conform to the normalization rules, and include a link
* Require that `version` conform to the version specs, and include a link
* RFC 3399 instead of ISO 8601 as the timestamp spec.  The RFC is a simpler format that subsets the
  ISO standard, and is more appropriate to our use case.
* Adjust the gentoken() algorithm to be more resistant to tomfoolery.  This may still change.
* Require `filename` to conform to either the source or binary distribution file name convention,
  and include links
@warsaw warsaw self-assigned this Aug 16, 2025
warsaw added 9 commits August 15, 2025 17:00
* The addition of the ``Location`` header is now a **MUST**, and better worded to indicate that it
  can be polled in the case of a ``202 Accepted``.
* Added a couple of **FIXME** tags to address removal of nonce and fleshing out the ``Errors``
  section.  See URLs in the text.  DO NOT PROMOTE FROM DRAFT UNTIL THIS IS DONE.
* Reformatted some text.
Based on discussions here:
https://discuss.python.org/t/pep-694-pypi-upload-api-2-0-round-2/101483/22 clients no longer supply
a nonce to influence the session token and stage URL.  The calculation of these is left to the
index, but language is added that if provided, they must be cryptographically unguessable, and it
must be possible to calculate the stage URL from the session token.
@warsaw warsaw marked this pull request as ready for review August 23, 2025 01:32
@warsaw warsaw requested a review from dstufft as a code owner August 23, 2025 01:32
@warsaw warsaw requested a review from ewdurbin August 23, 2025 01:32
@warsaw
Copy link
Member Author

warsaw commented Aug 23, 2025

I think this branch is ready for review, based on feedback from the DPO thread.

you can simply use the placeholder version number ``"0.0.0"``.
To do this, :ref:`create a new publishing session <publishing-session-create>`, then :ref:`publish the session
<publishing-session-completion>` without uploading any files. While the ``version`` key is required in the
JSON body of the create session request, you can simply use the placeholder version number ``"0.0.0"``.
Copy link
Contributor

Choose a reason for hiding this comment

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

Sorry that I didn't notice this before, but is "0.0.0" somewhat special here?

Copy link
Member Author

Choose a reason for hiding this comment

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

Not really. It could be anything, but I think 0.0.0a0 would be better since that's unlikely to ever be used in practice. It's essentially equivalent to uploading a v0.0.0a0 empty package (metadata only) to reserve a name, which is a practice we use, although things get a little more complicated if you want an org to own the name. You essentially cannot do that programmatically, and must use the web UI. I have an idea for how to add that to PEP 694 in an index-specific way, which I'll soon update the PEP to describe.

Copy link
Member Author

Choose a reason for hiding this comment

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

Proposed change:

To do this, :ref:create a new publishing session <publishing-session-create>, then :ref:publish the session <publishing-session-completion> without uploading any files. While the version key is required in the
JSON body of the create session request, you can simply use a placeholder version number such as
"0.0.0a0".

Copy link
Contributor

Choose a reason for hiding this comment

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

WFM. Perhaps worth noting whether you will be able to use this version in the future or not.

Copy link
Member Author

Choose a reason for hiding this comment

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

That's a great question. I think not, given that the scenario described includes no uploaded artifacts. It's simply a name reservation. I don't want to make version optional or add a different workflow just for name reservation, although we could do that in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants