"""The harness interface

The interface between the client and the server when hosted.
"""

# pylint: disable=missing-docstring

__author__ = """Copyright Andy Whitcroft 2006"""

import logging

import common


class harness(object):
    """The NULL server harness

    Properties:
            job
                    The job object for this job
    """

    def __init__(self, job):
        """
                job
                        The job object for this job
        """
        self.setup(job)


    def setup(self, job):
        """
                job
                        The job object for this job
        """
        self.job = job


    def run_start(self):
        """A run within this job is starting"""
        pass


    def run_pause(self):
        """A run within this job is completing (expect continue)"""
        pass


    def run_reboot(self):
        """A run within this job is performing a reboot
           (expect continue following reboot)
        """
        pass


    def run_abort(self):
        """A run within this job is aborting. It all went wrong"""
        pass


    def run_complete(self):
        """A run within this job is completing (all done)"""
        pass


    def run_test_complete(self):
        """A test run by this job is complete. Note that if multiple
        tests are run in parallel, this will only be called when all
        of the parallel runs complete."""
        pass


    def test_status(self, status, tag):
        """A test within this job is completing"""
        pass


    def test_status_detail(self, code, subdir, operation, status, tag,
                           optional_fields):
        """A test within this job is completing (detail)"""
        pass


def select(which, job, harness_args):
    if not which:
        which = 'standalone'

    logging.debug('Selected harness: %s', which)

    harness_name = 'harness_%s' % which
    harness_module = common.setup_modules.import_module(harness_name,
                                                        'autotest_lib.client.bin')
    harness_instance = getattr(harness_module, harness_name)(job, harness_args)

    return harness_instance