xref: /openbmc/openbmc-test-automation/templates/python_pgm_template (revision e5391dc42613e38d9e129f6c9d45f2b11b71f946)
17d68d00bSMichael Walsh#!/usr/bin/env python
27d68d00bSMichael Walsh
37d68d00bSMichael Walshr"""
47d68d00bSMichael Walshpython_pgm_template: Copy this template as a base to get a start on a python
57d68d00bSMichael Walshprogram.  You may remove any generic comments (like this one).
6*e5391dc4SMichael WalshSee help text for details.
77d68d00bSMichael Walsh"""
87d68d00bSMichael Walsh
97d68d00bSMichael Walshimport sys
107d68d00bSMichael Walsh
117d68d00bSMichael Walshsave_path_0 = sys.path[0]
127d68d00bSMichael Walshdel sys.path[0]
137d68d00bSMichael Walsh
147d68d00bSMichael Walshfrom gen_arg import *
157d68d00bSMichael Walshfrom gen_print import *
167d68d00bSMichael Walshfrom gen_valid import *
177d68d00bSMichael Walsh
187d68d00bSMichael Walsh# Restore sys.path[0].
197d68d00bSMichael Walshsys.path.insert(0, save_path_0)
207d68d00bSMichael Walsh
212d8d7f3cSMichael Walsh# Set exit_on_error for gen_valid functions.
222d8d7f3cSMichael Walshset_exit_on_error(True)
232d8d7f3cSMichael Walsh
247d68d00bSMichael Walshparser = argparse.ArgumentParser(
257d68d00bSMichael Walsh    usage='%(prog)s [OPTIONS]',
267d68d00bSMichael Walsh    description="%(prog)s will...",
27d0741f8aSMichael Walsh    formatter_class=argparse.ArgumentDefaultsHelpFormatter,
287d68d00bSMichael Walsh    prefix_chars='-+')
297d68d00bSMichael Walsh
307d68d00bSMichael Walshparser.add_argument(
317d68d00bSMichael Walsh    '--whatever',
322d8d7f3cSMichael Walsh    default='',
337d68d00bSMichael Walsh    help='bla, bla.')
347d68d00bSMichael Walsh
3541dda1b0SMichael Walsh# Populate stock_list with options we want.
367d68d00bSMichael Walshstock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
377d68d00bSMichael Walsh
387d68d00bSMichael Walsh
397d68d00bSMichael Walshdef exit_function(signal_number=0,
407d68d00bSMichael Walsh                  frame=None):
417d68d00bSMichael Walsh    r"""
427d68d00bSMichael Walsh    Execute whenever the program ends normally or with the signals that we
437d68d00bSMichael Walsh    catch (i.e. TERM, INT).
447d68d00bSMichael Walsh    """
457d68d00bSMichael Walsh
467d68d00bSMichael Walsh    dprint_executing()
477d68d00bSMichael Walsh    dprint_var(signal_number)
487d68d00bSMichael Walsh
497d68d00bSMichael Walsh    # Your cleanup code here.
507d68d00bSMichael Walsh
517d68d00bSMichael Walsh    qprint_pgm_footer()
527d68d00bSMichael Walsh
537d68d00bSMichael Walsh
547d68d00bSMichael Walshdef signal_handler(signal_number,
557d68d00bSMichael Walsh                   frame):
567d68d00bSMichael Walsh    r"""
577d68d00bSMichael Walsh    Handle signals.  Without a function to catch a SIGTERM or SIGINT, our
587d68d00bSMichael Walsh    program would terminate immediately with return code 143 and without
597d68d00bSMichael Walsh    calling our exit_function.
607d68d00bSMichael Walsh    """
617d68d00bSMichael Walsh
627d68d00bSMichael Walsh    # Our convention is to set up exit_function with atexit.register() so
637d68d00bSMichael Walsh    # there is no need to explicitly call exit_function from here.
647d68d00bSMichael Walsh
657d68d00bSMichael Walsh    dprint_executing()
667d68d00bSMichael Walsh
677d68d00bSMichael Walsh    # Calling exit prevents us from returning to the code that was running
687d68d00bSMichael Walsh    # when we received the signal.
697d68d00bSMichael Walsh    exit(0)
707d68d00bSMichael Walsh
717d68d00bSMichael Walsh
727d68d00bSMichael Walshdef validate_parms():
737d68d00bSMichael Walsh    r"""
742d8d7f3cSMichael Walsh    Validate program parameters, etc.
757d68d00bSMichael Walsh    """
767d68d00bSMichael Walsh
772d8d7f3cSMichael Walsh    # Your validation code here...
782d8d7f3cSMichael Walsh    # valid_value(whatever)
797d68d00bSMichael Walsh
807d68d00bSMichael Walsh    gen_post_validation(exit_function, signal_handler)
817d68d00bSMichael Walsh
827d68d00bSMichael Walsh
837d68d00bSMichael Walshdef main():
847d68d00bSMichael Walsh
852d8d7f3cSMichael Walsh    gen_get_options(parser, stock_list)
867d68d00bSMichael Walsh
872d8d7f3cSMichael Walsh    validate_parms()
887d68d00bSMichael Walsh
897d68d00bSMichael Walsh    qprint_pgm_header()
907d68d00bSMichael Walsh
917d68d00bSMichael Walsh    # Your code here.
927d68d00bSMichael Walsh
937d68d00bSMichael Walsh
942d8d7f3cSMichael Walshmain()
95