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
20*2d8d7f3cSMichael Walsh# Set exit_on_error for gen_valid functions.
21*2d8d7f3cSMichael Walshset_exit_on_error(True)
22*2d8d7f3cSMichael Walsh
237d68d00bSMichael Walshparser = argparse.ArgumentParser(
247d68d00bSMichael Walsh    usage='%(prog)s [OPTIONS]',
257d68d00bSMichael Walsh    description="%(prog)s will...",
26d0741f8aSMichael Walsh    formatter_class=argparse.ArgumentDefaultsHelpFormatter,
277d68d00bSMichael Walsh    prefix_chars='-+')
287d68d00bSMichael Walsh
297d68d00bSMichael Walshparser.add_argument(
307d68d00bSMichael Walsh    '--whatever',
31*2d8d7f3cSMichael Walsh    default='',
327d68d00bSMichael Walsh    help='bla, bla.')
337d68d00bSMichael Walsh
3441dda1b0SMichael Walsh# Populate stock_list with options we want.
357d68d00bSMichael Walshstock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)]
367d68d00bSMichael Walsh
377d68d00bSMichael Walsh
387d68d00bSMichael Walshdef exit_function(signal_number=0,
397d68d00bSMichael Walsh                  frame=None):
407d68d00bSMichael Walsh    r"""
417d68d00bSMichael Walsh    Execute whenever the program ends normally or with the signals that we
427d68d00bSMichael Walsh    catch (i.e. TERM, INT).
437d68d00bSMichael Walsh    """
447d68d00bSMichael Walsh
457d68d00bSMichael Walsh    dprint_executing()
467d68d00bSMichael Walsh    dprint_var(signal_number)
477d68d00bSMichael Walsh
487d68d00bSMichael Walsh    # Your cleanup code here.
497d68d00bSMichael Walsh
507d68d00bSMichael Walsh    qprint_pgm_footer()
517d68d00bSMichael Walsh
527d68d00bSMichael Walsh
537d68d00bSMichael Walshdef signal_handler(signal_number,
547d68d00bSMichael Walsh                   frame):
557d68d00bSMichael Walsh    r"""
567d68d00bSMichael Walsh    Handle signals.  Without a function to catch a SIGTERM or SIGINT, our
577d68d00bSMichael Walsh    program would terminate immediately with return code 143 and without
587d68d00bSMichael Walsh    calling our exit_function.
597d68d00bSMichael Walsh    """
607d68d00bSMichael Walsh
617d68d00bSMichael Walsh    # Our convention is to set up exit_function with atexit.register() so
627d68d00bSMichael Walsh    # there is no need to explicitly call exit_function from here.
637d68d00bSMichael Walsh
647d68d00bSMichael Walsh    dprint_executing()
657d68d00bSMichael Walsh
667d68d00bSMichael Walsh    # Calling exit prevents us from returning to the code that was running
677d68d00bSMichael Walsh    # when we received the signal.
687d68d00bSMichael Walsh    exit(0)
697d68d00bSMichael Walsh
707d68d00bSMichael Walsh
717d68d00bSMichael Walshdef validate_parms():
727d68d00bSMichael Walsh    r"""
73*2d8d7f3cSMichael Walsh    Validate program parameters, etc.
747d68d00bSMichael Walsh    """
757d68d00bSMichael Walsh
76*2d8d7f3cSMichael Walsh    # Your validation code here...
77*2d8d7f3cSMichael Walsh    # valid_value(whatever)
787d68d00bSMichael Walsh
797d68d00bSMichael Walsh    gen_post_validation(exit_function, signal_handler)
807d68d00bSMichael Walsh
817d68d00bSMichael Walsh
827d68d00bSMichael Walshdef main():
837d68d00bSMichael Walsh
84*2d8d7f3cSMichael Walsh    gen_get_options(parser, stock_list)
857d68d00bSMichael Walsh
86*2d8d7f3cSMichael Walsh    validate_parms()
877d68d00bSMichael Walsh
887d68d00bSMichael Walsh    qprint_pgm_header()
897d68d00bSMichael Walsh
907d68d00bSMichael Walsh    # Your code here.
917d68d00bSMichael Walsh
927d68d00bSMichael Walsh
93*2d8d7f3cSMichael Walshmain()
94