Tighten execution_context typing from Any to proper forward reference

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

Los mantenedores suelen responder en 3 días

Nadie ha tomado este issue todavía.

Evaluación

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

Línea de trabajo

Lee el patrón existente de referencias anticipadas de ExecutionContext en packages/darnit/src/darnit/sieve/models.py y luego actualiza HandlerContext.execution_context en packages/darnit/src/darnit/sieve/handler_registry.py. Ejecuta las pruebas existentes y comprueba con mypy o pyright. Se considerará terminado cuando el atributo esté tipado como ExecutionContext | None, se infiera .get_or_run_tool() y no se introduzca ninguna importación circular en tiempo de ejecución.

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

Descripción

module-core

Context

#189 added execution_context fields to two dataclasses with loose typing:

packages/darnit/src/darnit/sieve/handler_registry.py:104:

execution_context: Any | None = None

packages/darnit/src/darnit/sieve/models.py:55:

execution_context: Optional["ExecutionContext"] = None  # already uses forward ref

The CheckContext side uses a proper "ExecutionContext" forward reference (wrapped in TYPE_CHECKING), but HandlerContext uses Any | None. This means custom handler authors lose type-check assistance when calling handler_ctx.execution_context.get_or_run_tool(...).

Proposal

Change HandlerContext.execution_context to use a proper forward reference matching CheckContext:

if TYPE_CHECKING:
    from darnit.core.models import ExecutionContext

@dataclass
class HandlerContext:
    ...
    execution_context: "ExecutionContext | None" = None

Why the loose typing was chosen

Likely to avoid a circular import between sieve/handler_registry.py and core/models.py. TYPE_CHECKING + string annotation is the standard workaround and is already used in sieve/models.py.

Acceptance criteria

  • HandlerContext.execution_context type is tightened to ExecutionContext | None
  • No runtime circular import introduced
  • mypy/pyright can infer .get_or_run_tool() on the attribute
  • Existing tests still pass

References

  • Introduced by: #189
  • Related: #194 (wiring first real consumer)
Lenguaje dominante
Python
Estrellas
22
Forks
27
Merge medio
4 d 20 h
PR fusionados (30 d)
75

Preparar el entorno

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 darnitdevorg/darnit

Todos los issues de darnitdevorg/darnit

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.