Source code for medpy.utilities.argparseu

# Copyright (C) 2013 Oskar Maier
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# author Oskar Maier
# version r0.1.1
# since 2013-07-02
# status Release

# build-in modules
import argparse
import itertools
import os

# third-party modules

# own modules

# code
def existingDirectory(string):
    """
    A custom type for the argparse commandline parser.
    Check whether the supplied string points to a valid directory.
    
    Examples
    --------
    
    >>> parser.add_argument('argname', type=existingDirectory, help='help')    
    """
    if not os.path.isdir(string):
        argparse.ArgumentTypeError('{} is not a valid directory.'.format(string))
    return string

def sequenceOfStrings(string):
    """
    A custom type for the argparse commandline parser.
    Accepts colon-separated lists of strings.
    
    Examples
    --------
    
    >>> parser.add_argument('argname', type=sequenceOfStrings, help='help')
    """
    return string.split(',')

[docs]def sequenceOfIntegersGeAscendingStrict(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid integer values that are greater than or equal to 0 and in ascending order. Examples -------- >>> parser.add_argument('argname', type=sequenceOfIntegersGeAscending, help='help') """ return __sequenceAscendingStrict(__sequenceGe(sequenceOfIntegers(string)))
[docs]def sequenceOfIntegers(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid integer values. Examples -------- >>> parser.add_argument('argname', type=sequenceOfIntegers, help='help') """ value = list(map(int, string.split(','))) return value
[docs]def sequenceOfIntegersGt(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid integer values that are greater than 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfIntegersGt, help='help') """ value = sequenceOfIntegers(string) return __sequenceGt(value)
[docs]def sequenceOfIntegersGe(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid integer values that are greater than or equal to 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfIntegersGe, help='help') """ value = sequenceOfIntegers(string) return __sequenceGe(value)
[docs]def sequenceOfIntegersLt(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid integer values that are less than 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfIntegersLt, help='help') """ value = sequenceOfIntegers(string) return __sequenceLt(value)
[docs]def sequenceOfIntegersLe(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid integer values that are less than or equal to 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfIntegersLe, help='help') """ value = sequenceOfIntegers(string) return __sequenceLe(value)
[docs]def sequenceOfFloats(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid float values. Examples -------- >>> parser.add_argument('argname', type=sequenceOfFloats, help='help') """ value = list(map(float, string.split(','))) return value
[docs]def sequenceOfFloatsGt(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid float values that are greater than 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfFloatsGt, help='help') """ value = sequenceOfFloats(string) return __sequenceGt(value)
[docs]def sequenceOfFloatsGe(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid float values that are greater than or equal to 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfFloatsGe, help='help') """ value = sequenceOfFloats(string) return __sequenceGe(value)
[docs]def sequenceOfFloatsLt(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid float values that are less than 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfFloatsLt, help='help') """ value = sequenceOfFloats(string) return __sequenceLt(value)
[docs]def sequenceOfFloatsLe(string): """ A custom type for the argparse commandline parser. Accepts only colon-separated lists of valid float values that are less than or equal to 0. Examples -------- >>> parser.add_argument('argname', type=sequenceOfFloatsLe, help='help') """ value = sequenceOfFloats(string) return __sequenceLe(value)
def __sequenceGt(l): "Test a sequences values for being greater than 0." for e in l: if 0 >= e: raise argparse.ArgumentTypeError('All values have to be greater than 0.') return l def __sequenceGe(l): "Test a sequences values for being greater than or equal to 0." for e in l: if 0 > e: raise argparse.ArgumentTypeError('All values have to be greater than or equal to 0.') return l def __sequenceLt(l): "Test a sequences values for being less than 0." for e in l: if 0 <= e: raise argparse.ArgumentTypeError('All values have to be less than 0.') return l def __sequenceLe(l): "Test a sequences values for being less than or equal to 0." for e in l: if 0 < e: raise argparse.ArgumentTypeError('All values have to be less than or equal to 0.') return l def __sequenceAscendingStrict(l): "Test a sequences values to be in strictly ascending order." it = iter(l) next(it) if not all(b > a for a, b in zip(l, it)): raise argparse.ArgumentTypeError('All values must be given in strictly ascending order.') return l def __sequenceDescendingStrict(l): "Test a sequences values to be in strictly descending order." it = iter(l) next(it) if not all(b < a for a, b in zip(l, it)): raise argparse.ArgumentTypeError('All values must be given in strictly descending order.') return l