pulp / pulp/pulp_python

Python Remote URL construction incorrectly appends `/simple/`, breaking Gitea PyPI integration

オープン
#868 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Issue
主要言語
Python
スター
49
フォーク
88
平均マージ
1日 10時間
マージ済み PR(30日)
31

説明

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/ suffix

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

  1. 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.
  2. 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.

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.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

Start by tracing the Python remote URL construction logic that appends /simple/; no source file or test path is identified in the issue. Reproduce both Gitea URL cases, then add coverage showing that a complete /simple/ URL is requested unchanged and that the resulting requests no longer return 404.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
backend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。