-
Notifications
You must be signed in to change notification settings - Fork 80
Description
Version
- Pulp Operator:
v1.0.0
Describe the bug
The pulp-python plugin unconditionally appends the /simple/ suffix to the url provided for a Python remote. This behavior is hardcoded and assumes the remote URL points to a repository root that needs /simple/ added to reach the PEP 503 index.
This assumption breaks compatibility with PyPI-compatible registries like Gitea, where the complete, non-modifiable simple index URL is already provided. The forced suffix leads to incorrect URL generation.
To Reproduce
* Gitea Instance with a PyPI Registry: e.g., https://gitea.example.xyz
* Target Gitea PyPI URL: https://gitea.example.xyz/api/packages/example/pypi/simple/
-
Attempt 1: Provide the full, correct URL ending in
/simple/pulp python remote create \ --name gitea-remote-full \ --url https://gitea.example.xyz/api/packages/example/pypi/simple/ \ --username <user> \ --password <pass> pulp python repository create --name test-repo-1 pulp python repository sync --name test-repo-1 --remote gitea-remote-full -
Attempt 2: Provide the URL without the
/simple/suffixpulp python remote create \ --name gitea-remote-base \ --url https://gitea.example.xyz/api/packages/example/pypi \ --username <user> \ --password <pass> pulp python repository create --name test-repo-2 pulp python repository sync --name test-repo-2 --remote gitea-remote-base
Pulp's automatic suffixing logic causes 404 errors in both scenarios.
-
In Attempt 1, Pulp appends an extra
/simple/, resulting in a "double suffix":- URL requested:
https://gitea.example.xyz/api/packages/example/pypi/simple/simple/ - Result:
404 Not Found.
- URL requested:
-
In Attempt 2, Pulp strips the last path segment (
/pypi) and appends/simple/, also forming an incorrect URL:- URL requested:
https://gitea.example.xyz/api/packages/example/simple/ - Result:
404 Not Found.
- URL requested:
Expected behavior
Pulp should respect the provided url for a Python remote. When a URL is provided, Pulp should either:
a. Use the URL as-is, without modification.
b. Check if the URL already ends with /simple/ and, if so, refrain from appending it again.
For the configuration in Attempt 1, Pulp should make requests directly to https://gitea.example.xyz/api/packages/example/pypi/simple/.
Additional context
This behavior makes it impossible to use Gitea as a PyPI remote source for Pulp. More broadly, it limits Pulp's compatibility with any PyPI-compliant repository that provides a full, unchangeable URL to its simple index and does not conform to the exact .../ -> .../simple/ transformation that Pulp enforces.
A fix should be relatively easy: Modify the URL construction logic to first check if url.endswith('/simple/'). If true, use the URL as-is
This would provide the necessary flexibility to integrate with a wider range of non-standard but popular PyPI-compatible endpoints like Gitea.