From e5bc4875124474a660d2719c1671296bad357577 Mon Sep 17 00:00:00 2001 From: Matthias Mayr Date: Wed, 5 Jul 2023 18:16:46 +0200 Subject: [PATCH] New: "NoSuccess" decorator processor This decorator can be useful as part of a recovery process that should still produce a failure feedback to the parent. --- .../src/skiros2_skill/core/processors.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/skiros2_skill/src/skiros2_skill/core/processors.py b/skiros2_skill/src/skiros2_skill/core/processors.py index 6f9ad58..449bf1c 100644 --- a/skiros2_skill/src/skiros2_skill/core/processors.py +++ b/skiros2_skill/src/skiros2_skill/core/processors.py @@ -237,3 +237,32 @@ def processChildren(self, children, visitor): return state else: return State.Success + + +class NoSuccess: + """ + @brief Returns only running or failure. Success state is converted in + Failure state. + + This can be used for recovery procedures one wants to successfully + execute the recovery, but still fail towards the parent skill. + """ + + def __init__(self, processor): + self._processor = processor + + def reset(self): + self._processor.reset() + + def printType(self): + return "NoSuccess({})".format(self._processor.printType()) + + def processChildren(self, children, visitor): + """ + Ignore successful execution + """ + state = self._processor.processChildren(children, visitor) + if state == State.Running: + return state + else: + return State.Failure