run method
Runs the flow for a batch of inputs.
This method follows Python's BatchFlow orchestration pattern exactly:
- Calls prep(shared) to get batch parameters
- For each batch parameter, calls orch with merged parameters
- Returns post(shared, prepResult, null) - no per-item exec result collection
Matches Python's implementation:
def _run(self,shared):
pr=self.prep(shared) or []
for bp in pr: self._orch(shared,{**self.params,**bp})
return self.post(shared,pr,None)
Implementation
@override
/// Runs the flow for a batch of inputs.
///
/// This method follows Python's BatchFlow orchestration pattern exactly:
/// 1. Calls prep(shared) to get batch parameters
/// 2. For each batch parameter, calls orch with merged parameters
/// 3. Returns post(shared, prepResult, null) - no per-item exec result
/// collection
///
/// Matches Python's implementation:
/// ```python
/// def _run(self,shared):
/// pr=self.prep(shared) or []
/// for bp in pr: self._orch(shared,{**self.params,**bp})
/// return self.post(shared,pr,None)
/// ```
Future<dynamic> run(Map<String, dynamic> shared) async {
// prep should return List<Map<String, dynamic>> (batch param maps)
final prepResult = await prep(shared);
for (final batchParams in prepResult) {
final mergedParams = <String, dynamic>{};
if (params.isNotEmpty) mergedParams.addAll(params);
mergedParams.addAll(batchParams);
// Temporarily set batch item value in shared for node access
shared['value'] = batchParams['value'];
// orch should accept params override for this batch item
await orch(shared, mergedParams);
// Note: Don't restore original value - let the last processed value
// remain
}
// Python BatchFlow._run returns post(shared, prep_res, None)
return post(shared, prepResult, null);
}