Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Prefix modifier crashes on non-string values; reserved expansion stops encoding once the value contains a percent-escape

Abierto Apto para principiantes
#163 0 comentarios 0 reacciones 0 asignados Ver en GitHub

@Fire162 ya está trabajando en esto.

Desde el 24/10/2026.

  • #165 de @Fire162 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
85/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
backend

Línea de trabajo

Empieza en uritemplate/variable.py, donde el issue señala el manejo de prefijos y las rutas de entrecomillado de la expansión reservada. Lee las secciones pertinentes de RFC 6570 y localiza las pruebas que cubren {var:N}, {+var} y {#var}. Añade pruebas de regresión para valores de prefijo que no sean cadenas y para escapes porcentuales mezclados con caracteres no seguros; se considera terminado cuando ambos casos se expanden según RFC.

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

Descripción

Two related problems in uritemplate/variable.py, reproduced on 4.2.0 (main 8e46228).

1. {var:N} with an int or float value raises TypeError
>>> from uritemplate import expand
>>> expand("{a:1}", {"a": 12})
TypeError: 'int' object is not subscriptable
>>> expand("{a}", {"a": 12})
'12'

Non-string scalars are accepted everywhere else (they are converted with str() in Operator.quote), but the prefix is applied before that conversion: value = value[:prefix] if prefix else value. Converting first (str(value)[:prefix]) fixes it; RFC 6570 §2.4.1 defines the prefix on the string form of the value.

2. Reserved (+) and fragment (#) expansion leave unsafe characters unencoded if the value contains any %XX
>>> from uritemplate import expand
>>> expand("{+a}", {"a": "a b"})
'a%20b'
>>> expand("{+a}", {"a": "a b%41"})
'a b%41'        # expected 'a%20b%41'

Operator._only_quote_unquoted_characters returns the value unchanged whenever unquote(value) != value, so one pre-existing percent-escape disables encoding for the whole string, including the space. RFC 6570 §3.2.3 says reserved expansion keeps existing pct-encoded triplets and encodes everything else that is not in reserved/unreserved; the check needs to be per character (or per triplet), not per string.

Happy to send a PR with tests for both if you would take one.

Lenguaje dominante
Python
Estrellas
246
Forks
41
Merge medio
8 h 20 min
PR fusionados (30 d)
3

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

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.

Más de python-hyper/uritemplate

Todos los issues de python-hyper/uritemplate

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.