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).
67d68d00bSMichael Walsh"""
77d68d00bSMichael Walsh
87d68d00bSMichael Walshimport sys
97d68d00bSMichael Walsh
107d68d00bSMichael Walshsave_path_0 = sys.path[0]
117d68d00bSMichael Walshdel sys.path[0]
127d68d00bSMichael Walsh
137d68d00bSMichael Walshfrom gen_arg import *
147d68d00bSMichael Walshfrom gen_print import *
157d68d00bSMichael Walshfrom gen_valid import *
167d68d00bSMichael Walsh
177d68d00bSMichael Walsh# Restore sys.path[0].
187d68d00bSMichael Walshsys.path.insert(0, save_path_0)
197d68d00bSMichael Walsh
207d68d00bSMichael Walshparser = argparse.ArgumentParser(
217d68d00bSMichael Walsh    usage='%(prog)s [OPTIONS]',
227d68d00bSMichael Walsh    description="%(prog)s will...",
237d68d00bSMichael Walsh    formatter_class=argparse.RawTextHelpFormatter,
247d68d00bSMichael Walsh    prefix_chars='-+')
257d68d00bSMichael Walsh
267d68d00bSMichael Walshparser.add_argument(
277d68d00bSMichael Walsh    '--whatever',
287d68d00bSMichael Walsh    help='bla, bla.')
297d68d00bSMichael Walsh
30*41dda1b0SMichael Walsh# Populate stock_list with options we want.
317d68d00bSMichael Walshstock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
327d68d00bSMichael Walsh
337d68d00bSMichael Walsh
347d68d00bSMichael Walshdef exit_function(signal_number=0,
357d68d00bSMichael Walsh                  frame=None):
367d68d00bSMichael Walsh
377d68d00bSMichael Walsh    r"""
387d68d00bSMichael Walsh    Execute whenever the program ends normally or with the signals that we
397d68d00bSMichael Walsh    catch (i.e. TERM, INT).
407d68d00bSMichael Walsh    """
417d68d00bSMichael Walsh
427d68d00bSMichael Walsh    dprint_executing()
437d68d00bSMichael Walsh    dprint_var(signal_number)
447d68d00bSMichael Walsh
457d68d00bSMichael Walsh    # Your cleanup code here.
467d68d00bSMichael Walsh
477d68d00bSMichael Walsh    qprint_pgm_footer()
487d68d00bSMichael Walsh
497d68d00bSMichael Walsh
507d68d00bSMichael Walshdef signal_handler(signal_number,
517d68d00bSMichael Walsh                   frame):
527d68d00bSMichael Walsh
537d68d00bSMichael Walsh    r"""
547d68d00bSMichael Walsh    Handle signals.  Without a function to catch a SIGTERM or SIGINT, our
557d68d00bSMichael Walsh    program would terminate immediately with return code 143 and without
567d68d00bSMichael Walsh    calling our exit_function.
577d68d00bSMichael Walsh    """
587d68d00bSMichael Walsh
597d68d00bSMichael Walsh    # Our convention is to set up exit_function with atexit.register() so
607d68d00bSMichael Walsh    # there is no need to explicitly call exit_function from here.
617d68d00bSMichael Walsh
627d68d00bSMichael Walsh    dprint_executing()
637d68d00bSMichael Walsh
647d68d00bSMichael Walsh    # Calling exit prevents us from returning to the code that was running
657d68d00bSMichael Walsh    # when we received the signal.
667d68d00bSMichael Walsh    exit(0)
677d68d00bSMichael Walsh
687d68d00bSMichael Walsh
697d68d00bSMichael Walshdef validate_parms():
707d68d00bSMichael Walsh
717d68d00bSMichael Walsh    r"""
727d68d00bSMichael Walsh    Validate program parameters, etc.  Return True or False (i.e. pass/fail)
737d68d00bSMichael Walsh    accordingly.
747d68d00bSMichael Walsh    """
757d68d00bSMichael Walsh
767d68d00bSMichael Walsh    # Your validation code here.
777d68d00bSMichael Walsh
787d68d00bSMichael Walsh    gen_post_validation(exit_function, signal_handler)
797d68d00bSMichael Walsh
807d68d00bSMichael Walsh    return True
817d68d00bSMichael Walsh
827d68d00bSMichael Walsh
837d68d00bSMichael Walshdef main():
847d68d00bSMichael Walsh
857d68d00bSMichael Walsh    if not gen_get_options(parser, stock_list):
867d68d00bSMichael Walsh        return False
877d68d00bSMichael Walsh
887d68d00bSMichael Walsh    if not validate_parms():
897d68d00bSMichael Walsh        return False
907d68d00bSMichael Walsh
917d68d00bSMichael Walsh    qprint_pgm_header()
927d68d00bSMichael Walsh
937d68d00bSMichael Walsh    # Your code here.
947d68d00bSMichael Walsh
957d68d00bSMichael Walsh    return True
967d68d00bSMichael Walsh
977d68d00bSMichael Walsh
987d68d00bSMichael Walsh# Main
997d68d00bSMichael Walsh
1007d68d00bSMichael Walshif not main():
1017d68d00bSMichael Walsh    exit(1)
102