Tighten execution_context typing from Any to proper forward reference

Aperta Adatta ai principianti
#195 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 3 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Refactoring
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Leggi il pattern esistente di riferimento anticipato di ExecutionContext in packages/darnit/src/darnit/sieve/models.py, quindi aggiorna HandlerContext.execution_context in packages/darnit/src/darnit/sieve/handler_registry.py. Esegui i test esistenti e verifica con mypy o pyright. Il lavoro è completato quando l’attributo è tipizzato come ExecutionContext | None, .get_or_run_tool() viene inferito e non viene introdotta alcuna importazione circolare a runtime.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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)
Lingua principale
Python
Stelle
22
Fork
27
Merge medio
4g 20h
PR unite (30g)
75

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di darnitdevorg/darnit

Tutte le issue di darnitdevorg/darnit

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.