pypa / hatch

Modern, extensible Python project management
https://hatch.pypa.io/latest/
MIT License
6.09k stars 308 forks source link

400 response, no error message #1809

Open ernimd opened 1 week ago

ernimd commented 1 week ago
(topfarm) ernie@andromeda:~/code/TopFarm2$ hatch publish -r test
dist/topfarm-2.3.7.post6.tar.gz ... failed
Error uploading to repository: https://test.pypi.org/legacy/ - Client error '400 Bad Request' for url 'https://test.pypi.org/legacy/'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
(topfarm) ernie@andromeda:~/code/TopFarm2$ pixi list | grep hatch
 WARN The feature 'tensorflow' is defined but not used in any environment
hatch                          1.13.0         pyhd8ed1ab_0           173 KiB     conda  hatch-1.13.0-pyhd8ed1ab_0.conda
hatchling                      1.26.3         pypyhff2d567_0         55.5 KiB    conda  hatchling-1.26.3-pypyhff2d567_0.conda
(topfarm) ernie@andromeda:~/code/TopFarm2$ 

The problem reappears with the latest release of hatchling. I would really appreciate hatch giving some human-readable feedback about the issue rather than status codes of http requests...

ernimd commented 1 week ago

Something like:

            response = self.client.post(
                self.repo,
                data=data,
                files={'content': (artifact.name, f, 'application/octet-stream')},
                auth=(self.user, self.auth),
            )
            import httpx
            try:
                response.raise_for_status()
            except httpx.HTTPStatusError as exc:
                exc.args = (exc.args[0], f"{response.text}")
                raise exc

In the PackageIndex, upload_artifact function. After digging in and getting this error message, I can clearly see what happened here:

<html>
 <head>
  <title>400 This filename has already been used, use a different version. See https://test.pypi.org/help/#file-name-reuse for more information.</title>
 </head>
 <body>
  <h1>400 This filename has already been used, use a different version. See https://test.pypi.org/help/#file-name-reuse for more information.</h1>
  The server could not comply with the request since it is either malformed or otherwise incorrect.<br/><br/>
This filename has already been used, use a different version. See https://test.pypi.org/help/#file-name-reuse for more information.

 </body>
</html>

I am up for contributing a fix, if you're interested in this.

ofek commented 1 week ago

Thank you for debugging! I don't quite understand what the error means, can you please explain?

ernimd commented 1 week ago

I am trying to upload a version name that pypi has already recorded before, and is not a valid upload, but this is just my specific case. These error messages could be useful for all users of hatch. Lmk what you think about the proposed change : )

ofek commented 1 week ago

Oh, so that error happens when you try to upload an artifact that already exists? I thought I accounted for that case https://github.com/pypa/hatch/blob/hatch-v1.13.0/src/hatch/publish/index.py#L117

ernimd commented 1 week ago

That check does not trigger for some reason. But this error message is more general, could be applied for any unaccounted errors like in this case. At least, the users see what's wrong with their config. Now it's a black box: 400 Error. Only jesus knows what happened on pypi side. It's just a matter of parsing the HTTP error text and displaying it in terminal...

ofek commented 1 week ago

Yes please feel free to open a PR! I'm just confused about why this particular issue is happening.