view numerics/text_display.py @ 94:b5aea10e611d

wip
author Jeff Hammel <k0scist@gmail.com>
date Mon, 02 Mar 2015 19:24:26 -0800
parents b755a8d946de
children a027870e7a93
line wrap: on
line source

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
text display
"""

# imports
import argparse

# module globals
__all__ = ['main', 'frac', 'FracParser']

block = ''


def frac(*fractions, width=20, bar='│'):
    """display fractions"""
    raise NotImplementedError('TODO') # -> record TODO items


class FracParser(argparse.ArgumentParser):
    """CLI option parser"""
    def __init__(self, **kwargs):
        kwargs.setdefault('formatter_class', argparse.RawTextHelpFormatter)
        kwargs.setdefault('description', __doc__)
        argparse.ArgumentParser.__init__(self, **kwargs)
        self.add_argument('fraction', type=float, nargs='+'
                          help="fractions to display")
        self.add_argument('-w', '--width', dest='width',
                          type=int, default=20,
                          help="width to display [DEFAULT: %(default)s]")
        self.options = None

    def parse_args(self, *args, **kw):
        options = argparse.ArgumentParser.parse_args(self, *args, **kw)
        self.validate(options)
        self.options = options
        return options

    def validate(self, options):
        """validate options"""
        if options.width < 1:
            self.error("Width must be greater than zero (You gave: {})".format(options.width))
        out_of_range = [i for i in options.fraction
                        if not (0. < i < 1.)]
        if out_of_range:
            self.error("Fractions should be between 0 and 1")

def main(args=sys.argv[1:]):
    """CLI"""

    # parse command line options
    parser = FracParser()
    options = parser.parse_args(args)


if __name__ == '__main__':
    main()