Hook tracing crashes with specced Mock arguments and results
Los mantenedores suelen responder en 1 día
@RonnyPfannschmidt ya está trabajando en esto.
Desde el 17/10/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- Medio día
- Aptitud para principiantes
- 25/100
Línea de trabajo
The reproduction calls pm.enable_tracing() and pm.trace.root.setwriter(print) on a PluginManager, and the TypeError comes from tracing code that uses isinstance on arguments and results. Start by running the reproduction script and finding the tracing formatter or result handler it reaches. Done means a specced Mock for both str and dict is logged without changing the hook result. Pull request #793 already addresses this, so review it before starting new work.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
On main at 21c7e1672941a0cd9e3c555bf5e5007f1fbe3dc5 (Python 3.12.13), enabling hook tracing changes a successful hook call into a TypeError when an argument or first-result return value is a specced unittest.mock.Mock.
from unittest.mock import Mock
import pluggy
hookspec = pluggy.HookspecMarker("example")
hookimpl = pluggy.HookimplMarker("example")
class Spec:
@hookspec(firstresult=True)
def echo(self, value):
"""Return the value."""
class Plugin:
@hookimpl
def echo(self, value):
return value
for spec in (str, dict):
pm = pluggy.PluginManager("example")
pm.add_hookspecs(Spec)
pm.register(Plugin())
value = Mock(spec=spec)
assert pm.hook.echo(value=value) is value
pm.trace.root.setwriter(print)
pm.enable_tracing()
try:
assert pm.hook.echo(value=value) is value
except TypeError as exc:
print(spec.__name__, exc)
The string mock raises TypeError: object of type 'Mock' has no len() before the implementation runs. The dictionary mock raises TypeError: 'Mock' object is not iterable while tracing the result.
Mock(spec=...) reports its spec through __class__, so isinstance routes these objects into string formatting or dictionary metadata handling even though they are mocks. Tracing should log the mock without changing the hook result.
This report and a tested proposed fix were prepared with Codex.
- Lenguaje dominante
- Python
- Estrellas
- 1.7k
- Forks
- 187
- Merge medio
- 1 d 20 h
- PR fusionados (30 d)
- 24
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
-
Plugin registry compares plugins by equality, not identityPosiblemente ocupada @00200200 la tomó hace 6 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
-
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
-
Defaulted positional-only hook parameters are forwarded as keywordsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 4/5 1-2 días Aptitud para principiantes 45/100
pytest-dev/pluggy#774 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
unregister() argument validation relies on assertPosiblemente ocupada @ekanshul la tomó hace 8 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 42/100
pytest-dev/pluggy#762 ·
Los mantenedores suelen responder en 1 día
-
Failures during add_hookspecs / historic replay leave partial statePosiblemente ocupada @starx710 la tomó hace 4 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 50/100
pytest-dev/pluggy#761 ·
Los mantenedores suelen responder en 1 día
Todos los issues de pytest-dev/pluggy
Issues similares
-
Deferred from #1869: Complete the companion pytest guardrail update noted in the PR description...Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
Los mantenedores suelen responder en 1 día
-
Custom provider API keys collide on one host: env slot keyed on host:port only, not URL pathAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
NousResearch/hermes-agent#140958 ·
Los mantenedores suelen responder en 1 día
-
Bug triage/confirmed
Dificultad 2/5 Medio día Aptitud para principiantes 85/100
agentscope-ai/agentscope#3355 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
ethereum/execution-specs#3859 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día