view numerics/text_display.py @ 97:8ed00f2a3e8a

STUB: numerics/text_display.py
author Jeff Hammel <k0scist@gmail.com>
date Tue, 03 Mar 2015 20:19:00 -0800
parents 1feb14ee7629
children f6d885adb3d7
line wrap: on
line source

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

"""
text display
"""

# imports
import argparse

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

blocks = {0.: '',
          0.125: None, # TODO
          1.: '█'
      }


def iterable(obj):
    """is `obj` iterable?"""
    # TODO: should probably go elsewhere
    try:
        iter(obj)
        return True
    except TypeError:
        return False


def frac(fractions, width=20, bar='│'):
    """display fractions"""
    if not iterable(fractions):
        # convert single item to list
        fractions = [fractions]
    retval = []
    for fraction in 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()