astep() passes unprocessed inputs to pre_run_step hooks
I maintainer di solito rispondono entro 6 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Leggi le implementazioni sincrona di _step() e asincrona di _astep(), concentrandoti su dove viene eseguito _process_inputs() rispetto a pre_run_step. Aggiungi o adatta test per gli input elaborati e per gli input obbligatori mancanti, usando come guida gli esempi dell’issue. Il lavoro è completato quando entrambi i percorsi forniscono all’hook gli stessi input elaborati forniti all’azione e saltano l’hook se la convalida non riesce.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Application.astep() passes raw, unprocessed inputs to pre_run_step lifecycle hooks, while Application.step() passes the validated and processed inputs that are actually provided to the action. This causes inconsistent lifecycle and tracking behavior between synchronous and asynchronous execution.
Current behavior
Application.step() calls _process_inputs() before invoking the pre_run_step hook. Consequently, undeclared inputs are removed and required inputs are validated before the hook runs.
Application.astep() invokes pre_run_step with the original input dictionary before calling _process_inputs().
For an action that declares no inputs:
step hook inputs: {}
astep hook inputs: {"unused": 123}
There is also inconsistent behavior when a required input is missing:
pre_run_step calls:
step: 0
astep: 1
This means lifecycle adapters and tracking clients can record inputs that were never passed to the action.
Stack Traces
Not applicable. The inconsistency occurs without an exception when undeclared inputs are supplied.
Screenshots
Not applicable.
Steps to replicate behavior
- Run the following script:
import asyncio
from burr.core import ApplicationBuilder, State, action
from burr.lifecycle import PreRunStepHook
class CaptureInputs(PreRunStepHook):
def __init__(self):
self.inputs = []
def pre_run_step(self, *, inputs, **kwargs):
self.inputs.append(inputs)
@action(reads=[], writes=[])
def noop(state: State) -> State:
return state
sync_hook = CaptureInputs()
sync_app = (
ApplicationBuilder()
.with_actions(noop)
.with_entrypoint("noop")
.with_hooks(sync_hook)
.build()
)
sync_app.step(inputs={"unused": 123})
async_hook = CaptureInputs()
async_app = (
ApplicationBuilder()
.with_actions(noop)
.with_entrypoint("noop")
.with_hooks(async_hook)
.build()
)
asyncio.run(async_app.astep(inputs={"unused": 123}))
print("step hook inputs:", sync_hook.inputs)
print("astep hook inputs:", async_hook.inputs)
- Observe the output:
step hook inputs: [{}]
astep hook inputs: [{"unused": 123}]
Library & System Information
- Apache Burr: current
main(9088aad8cb6de62b9923816b89eaa562c1162c65) - Python 3
- Reproduced on Linux
Expected behavior
step() and astep() should have consistent lifecycle semantics:
- Inputs should be validated and processed before
pre_run_stepis invoked. - The hook should receive the processed inputs that will be passed to the action.
- The same processed input dictionary should be used by both the hook and the action.
pre_run_stepshould not be invoked when input validation fails.
Additional context
In _step(), _process_inputs() is called before pre_run_step, and the resulting action_inputs are passed to both the hook and the action.
In _astep(), pre_run_step currently receives the original inputs dictionary, and _process_inputs() is called later during action execution.
Related issue #36 added action inputs to lifecycle hooks and tracking, but it does not cover this synchronous/asynchronous inconsistency.
- Lingua principale
- Python
- Stelle
- 2.6k
- Fork
- 209
- Merge medio
- 10g 9h
- PR unite (30g)
- 17
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/burr
-
Notebook UI launcher should use the current Python interpreterForse già presa @sivakumar-mahalingam l’ha presa 1 giorno fa. Apertastatus/needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 6 giorni
-
`burr` fails to start when the Python path has a space in itForse già presa @enekoreto l’ha presa 4 giorni fa. Apertastatus/needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 6 giorni
-
Add more instructions for applying ORM migrations for S3 deploymentForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaarea/storage area/ui help wanted kind/documentation priority/low
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
apache/burr#524 · 11 commenti ·
I maintainer di solito rispondono entro 6 giorni
-
Add documentation on how to run the Burr UI serverForse di nuovo libera @iamSerafinnn l’ha presa 133 giorni fa e non c’è nessuna pull request aperta. Apertaarea/ui good first issue kind/documentation priority/low
Difficoltà 2/5 Mezza giornata Idoneità per principianti 68/100
apache/burr#272 · 5 commenti ·
I maintainer di solito rispondono entro 6 giorni
-
status/needs-triage
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 6 giorni
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
SublimeText/AdvancedNewFile#211 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
Imbad0202/academic-research-skills#987 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
Pull-through from gcr.io returns 500 when pulling using podman/buildahForse già presa Una pull request collegata a questa issue è aperta o già unita. ApertaIssue Triage-Needed
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
pulp/pulp_container#2581 ·
I maintainer di solito rispondono entro 1 giorno