elastic / elastic/ecs-logging-python

StructlogProcessor fails typechecking

Abierto
#146 2 comentarios 0 reacciones 0 asignados Ver en GitHub
agent-python community triage
Lenguaje dominante
Python
Estrellas
74
Forks
33
Merge medio
9 h 3 min
PR fusionados (30 d)
1

Descripción

When typechecking the following code:

```python
from structlog.typing import Processor

shared_processors: tuple[Processor, ...] = (
structlog.contextvars.merge_contextvars,
structlog.processors.add_log_level,
structlog.processors.StackInfoRenderer(),
structlog.dev.set_exc_info,
structlog.processors.TimeStamper(fmt="iso", utc=True),
)

processors: list[Processor]
if sys.stderr.isatty():
processors = [
*shared_processors,
structlog.dev.ConsoleRenderer(),
]
else:
processors = [
*shared_processors,
structlog.processors.dict_tracebacks,
ecs_logging.StructlogFormatter(),
]

structlog.configure(
processors=processors,
logger_factory=structlog.PrintLoggerFactory(),
cache_logger_on_first_use=True,
)
```

mypy raises the following:

```
error: List item 2 has incompatible type "StructlogFormatter"; expected
"Callable[[Any, str, MutableMapping[str, Any]], Union[Mapping[str, Any], str, bytes, bytearray, tuple[Any, ...]]]" [list-item]
ecs_logging.StructlogFormatter(),
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: "StructlogFormatter.__call__" has type "Callable[[Arg(Any, '_'), Arg(str, 'name'), Arg(dict[str, Any], 'event_dict')], str]"
```

`StructlogFormatter` is annotated as accepting a `dict[str, Any]`, but it needs to accept any `MutableMapping[str, Any]`. The code already conforms to this, so addressing this issue wil hopefully only involve updating the type annotation.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza en StructlogFormatter.__call__ e inspecciona la anotación de tipo de event_dict. Reproduce el problema con el ejemplo de mypy proporcionado, actualiza la anotación para que acepte el tipo de mapping mutable requerido y confirma que mypy ya no informa del error de list-item.

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

Evaluación

Stack tecnológico
python
Área
observability-sre
Tipo de issue
Error
Dificultad
1/5
Tiempo estimado
Menos de una hora
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.