from wa import Parameter, ReventWorkload


class ${class_name}(ReventWorkload):

    name = '${name}'
    description = "This is an placeholder description"

    parameters = [
        # Workload parameters go here e.g.
        Parameter('example_parameter', kind=int, allowed_values=[1,2,3],
                  default=1, override=True, mandatory=False,
                  description='This is an example parameter')
    ]

    def __init__(self, target, **kwargs):
        super(${class_name}, self).__init__(target, **kwargs)
        # Define any additional attributes required for the workload

    def init_resources(self, resolver):
        super(${class_name}, self).init_resources(resolver)
        # This method may be used to perform early resource discovery and
        # initialization. This is invoked during the initial loading stage and
        # before the device is ready, so cannot be used for any device-dependent
        # initialization. This method is invoked before the workload instance is
        # validated.

    def initialize(self, context):
        super(${class_name}, self).initialize(context)
        # This method should be used to perform once-per-run initialization of a
        # workload instance.

    def validate(self):
        super(${class_name}, self).validate()
        # Validate inter-parameter assumptions etc

    def setup(self, context):
        super(${class_name}, self).setup(context)
        # Perform any necessary setup before starting the UI automation

    def run(self, context):
        super(${class_name}, self).run(context)
        # Perform the main functionality of the workload

    def extract_results(self, context):
        super(${class_name}, self).extract_results(context)
        # Extract results on the target

    def update_output(self, context):
        super(${class_name}, self).update_output(context)
        # Update the output within the specified execution context with the
        # metrics and artifacts form this workload iteration.

    def teardown(self, context):
        super(${class_name}, self).teardown(context)
        # Perform any final clean up for the Workload.