call_extra() drops arguments for partial callbacks
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
Línea de trabajo
Start with the reproducer in the issue, which uses HookCaller.call_extra() with a functools.partial callback. The problem is in varnames(), which reads the partial's own __call__ instead of its remaining signature, so the bound arguments are never forwarded. Run the snippet and confirm it returns [("demo", 7)], then check the existing varnames() tests for plain functions and partials.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Passing a functools.partial callback to HookCaller.call_extra() drops the remaining hook arguments. A callback with a required argument raises TypeError; one with a default silently uses that default instead of the supplied value.
from functools import partial
import pluggy
hookspec = pluggy.HookspecMarker("example")
class Hooks:
@hookspec
def event(self, value):
pass
def on_event(context, value):
return context, value
pm = pluggy.PluginManager("example")
pm.add_hookspecs(Hooks)
callback = partial(on_event, "demo")
assert callback(7) == ("demo", 7)
print(pm.hook.event.call_extra([callback], {"value": 7}))
Expected: [("demo", 7)].
Actual: TypeError: on_event() missing 1 required positional argument: 'value'.
varnames() inspects the partial's built-in __call__ rather than its remaining signature, so no parameters are forwarded.
Reproduced on Python 3.12.16/Linux with main 3fc9e561ea7e72a95549673d79ebdaf4a9fae829.
- Lenguaje dominante
- Python
- Estrellas
- 1.7k
- Forks
- 200
- Merge medio
- 10 h 4 min
- PR fusionados (30 d)
- 13
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
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pytest-dev/pluggy
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 71/100
pytest-dev/pluggy#830 ·
Los mantenedores suelen responder en 1 día
-
Plugin registry compares plugins by equality, not identityPosiblemente ocupada @00200200 la tomó hace 30 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
pytest-dev/pluggy#760 ·
Los mantenedores suelen responder en 1 día
-
add_hookcall_monitoring undo breaks when called out of LIFO orderPosiblemente ocupada @AlvaroBalbin la tomó hace 7 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
pytest-dev/pluggy#815 ·
Los mantenedores suelen responder en 1 día
-
call_historic() memorizes the caller's kwargs mapping, so later mutation changes what late plugins receivePosiblemente ocupada @RonnyPfannschmidt la tomó hace 21 días. Abierto
pytest-dev/pluggy#808 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
deprecate passing None as a plugin instanceQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 30/100
pytest-dev/pluggy#790 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de pytest-dev/pluggy
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
FAIRmat-NFDI/pynxtools#861 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
NVIDIA/nsight-python#88 ·
Los mantenedores suelen responder en 1 día
-
Criteria can pass when the deliverable is missingPosiblemente ocupada @clementtisseau la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
harveyai/harvey-labs#217 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
priority/medium roadmap/v1.1.1 stakeholder/rapr type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
databrickslabs/ontos#1420 ·
Los mantenedores suelen responder en 3 días