Skip to content

Commit fd5356f

Browse files
committed
Update conditional command
1 parent 3ad1b41 commit fd5356f

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

commands2/conditionalcommand.py

+39-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
# validated: 2024-01-19 DS aaea85ff1656 ConditionalCommand.java
12
from __future__ import annotations
23

3-
from typing import Callable
4+
from typing import Callable, Optional
45

5-
from .command import Command
6+
from wpiutil import SendableBuilder
7+
8+
from .command import Command, InterruptionBehavior
69
from .commandscheduler import CommandScheduler
710

811

@@ -16,7 +19,7 @@ class ConditionalCommand(Command):
1619
subsystems its components require.
1720
"""
1821

19-
selectedCommand: Command
22+
selectedCommand: Optional[Command]
2023

2124
def __init__(
2225
self, onTrue: Command, onFalse: Command, condition: Callable[[], bool]
@@ -47,13 +50,43 @@ def initialize(self):
4750
self.selectedCommand.initialize()
4851

4952
def execute(self):
53+
assert self.selectedCommand is not None
5054
self.selectedCommand.execute()
5155

52-
def isFinished(self) -> bool:
53-
return self.selectedCommand.isFinished()
54-
5556
def end(self, interrupted: bool):
57+
assert self.selectedCommand is not None
5658
self.selectedCommand.end(interrupted)
5759

60+
def isFinished(self) -> bool:
61+
assert self.selectedCommand is not None
62+
return self.selectedCommand.isFinished()
63+
5864
def runsWhenDisabled(self) -> bool:
5965
return self.onTrue.runsWhenDisabled() and self.onFalse.runsWhenDisabled()
66+
67+
def getInterruptionBehavior(self) -> InterruptionBehavior:
68+
if (
69+
self.onTrue.getInterruptionBehavior() == InterruptionBehavior.kCancelSelf
70+
or self.onFalse.getInterruptionBehavior()
71+
== InterruptionBehavior.kCancelSelf
72+
):
73+
return InterruptionBehavior.kCancelSelf
74+
else:
75+
return InterruptionBehavior.kCancelIncoming
76+
77+
def initSendable(self, builder: SendableBuilder):
78+
super().initSendable(builder)
79+
builder.addStringProperty("onTrue", self.onTrue.getName, lambda _: None)
80+
builder.addStringProperty("onFalse", self.onFalse.getName, lambda _: None)
81+
82+
def _selected():
83+
if self.selectedCommand is None:
84+
return "null"
85+
else:
86+
return self.selectedCommand.getName()
87+
88+
builder.addStringProperty(
89+
"selected",
90+
_selected,
91+
lambda _: None,
92+
)

0 commit comments

Comments
 (0)