pulp / pulp/pulp_python

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

Abierto
#868 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Issue
Lenguaje dominante
Python
Estrellas
49
Forks
88
Merge medio
1 d 10 h
PR fusionados (30 d)
31

Descripción

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.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
backend
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.