# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

class _SiteAbstractDrone(object):
    """
    This is a site subclass of _BaseAbstractDrone in drones.py. Any methods
    here automatically overload _BaseAbstractDrone and are used to create
    _AbstractDrone for consumers.
    """


    def __init__(self, timestamp_remote_calls=True):
        """
        Add a new private variable _processes_to_kill to _AbstractDrone

        @param timestamp_remote_calls: If true, drone_utility is invoked with
            the --call_time option and the current time. Currently this is only
            used for testing.
        """
        super(_SiteAbstractDrone, self).__init__(
                timestamp_remote_calls=timestamp_remote_calls)
        self._processes_to_kill = []


    def queue_kill_process(self, process):
        """Queue a process to kill/abort.

        @param process: Process to kill/abort.
        """
        self._processes_to_kill.append(process)


    def clear_processes_to_kill(self):
        """Reset the list of processes to kill for this tick."""
        self._processes_to_kill = []


    def execute_queued_calls(self):
        """Overloads execute_queued_calls().

        If there are any processes queued to kill, kill them then process the
        remaining queued up calls.
        """
        if self._processes_to_kill:
            self.queue_call('kill_processes', self._processes_to_kill)
        self.clear_processes_to_kill()
        return super(_SiteAbstractDrone, self).execute_queued_calls()