<filename>actions/sleep.py
from actions.action import Action


class SleepAction(Action):
    """
    Defines the SleepAction - causes the engine to pause before sending a packet.
    """
    # Do not select the sleep action during evolutions
    frequency = 0
    def __init__(self, time=1, environment_id=None):
        """
        Initializes the sleep action.

        Args:
            time (float): How much time the packet should delay before sending
            environment_id (str, optional): Environment ID of the strategy this action is a part of
        """
        Action.__init__(self, "sleep", "out")
        self.terminal = False
        self.branching = False
        self.time = time

    def run(self, packet, logger):
        """
        The sleep action simply passes along the packet it was given with an instruction for how long the engine should sleep before sending it.
        """
        logger.debug("  - Adding %g sleep to given packet." % self.time)
        packet.sleep = self.time
        return packet, None

    def __str__(self):
        """
        Returns a string representation.
        """
        s = Action.__str__(self)
        s += "{%g}" % self.time
        return s

    def parse(self, string, logger):
        """
        Parses a string representation for this object.
        """
        try:
            if string:
                self.time = float(string)
        except ValueError:
            logger.exception("Cannot parse time %s" % string)
            return False

        return True
