mirror of https://github.com/chriskiehl/Gooey.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
5.3 KiB
141 lines
5.3 KiB
"""
|
|
Created on Dec 8, 2013
|
|
|
|
@author: Chris
|
|
|
|
"""
|
|
|
|
from argparse import (
|
|
_CountAction,
|
|
_HelpAction,
|
|
_StoreConstAction,
|
|
_StoreFalseAction,
|
|
_StoreTrueAction
|
|
)
|
|
|
|
|
|
class ActionSorter(object):
|
|
"""
|
|
Sorts all of the actions into their appropriate containers.
|
|
|
|
Containers are based on the following map:
|
|
|
|
COMPONENT MAP
|
|
Action WxWidget
|
|
--------------------------
|
|
store TextCtrl
|
|
store_const CheckBox
|
|
store_true CheckBox
|
|
store_False CheckBox
|
|
append TextCtrl
|
|
count DropDown
|
|
choice DropDown
|
|
|
|
Instance Variables:
|
|
self._positionals
|
|
self._choices
|
|
self._optionals
|
|
self._flags
|
|
self._counters
|
|
|
|
Example Argparse Def
|
|
|
|
_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None)
|
|
_StoreAction(option_strings=[], dest='filename', nargs=None, const=None, default=None, type=None, choices=None, help='filename', metavar=None)
|
|
_StoreTrueAction(option_strings=['-r', '--recursive'], dest='recurse', nargs=0, const=True, default=False, type=None, choices=None, help='recurse into subfolders [default: %(default)s]', metavar=None)
|
|
_CountAction(option_strings=['-v', '--verbose'], dest='verbose', nargs=0, const=None, default=None, type=None, choices=None, help='set verbosity level [default: %(default)s]', metavar=None)
|
|
_AppendAction(option_strings=['-i', '--include'], dest='include', nargs=None, const=None, default=None, type=None, choices=None, help='only include paths matching this regex pattern. Note: exclude is given preference over include. [default: %(default)s]', metavar='RE')
|
|
_StoreAction(option_strings=['-e', '--exclude'], dest='exclude', nargs=None, const=None, default=None, type=None, choices=None, help='exclude paths matching this regex pattern. [default: %(default)s]', metavar='RE')
|
|
_VersionAction(option_strings=['-V', '--version'], dest='version', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help="show program's version number and exit", metavar=None)
|
|
_StoreAction(option_strings=['-T', '--tester'], dest='tester', nargs=None, const=None, default=None, type=None, choices=['yes', 'no'], help=None, metavar=None)
|
|
_StoreAction(option_strings=[], dest='paths', nargs='+', const=None, default=None, type=None, choices=None, help='paths to folder(s) with source file(s) [default: %(default)s]', metavar='path')
|
|
usage: example_argparse_souce.py [-h] [-r] [-v] [-i RE] [-e RE] [-V]
|
|
"""
|
|
|
|
def __init__(self, actions):
|
|
self._actions = actions[:]
|
|
|
|
self._positionals = self.get_positionals(self._actions)
|
|
self._choices = self.get_optionals_with_choices(self._actions)
|
|
self._optionals = self.get_optionals_without_choices(self._actions)
|
|
self._flags = self.get_flag_style_optionals(self._actions)
|
|
self._counters = self.get_counter_actions(self._actions)
|
|
|
|
def verbose(self):
|
|
self._display('ActionSorter: positionals', self._positionals)
|
|
self._display('ActionSorter: choices', self._choices)
|
|
self._display('ActionSorter: optionals', self._optionals)
|
|
self._display('ActionSorter: booleans', self._flags)
|
|
self._display('ActionSorter: counters', self._counters)
|
|
print '|-------------------------'
|
|
|
|
def _display(self, _type, something):
|
|
for i in something:
|
|
print _type, i
|
|
|
|
def get_counter_actions(self, actions):
|
|
"""
|
|
Returns all instances of type _CountAction
|
|
"""
|
|
return [action
|
|
for action in actions
|
|
if isinstance(action, _CountAction)]
|
|
|
|
def get_positionals(self, actions):
|
|
"""
|
|
Get all required (positional) actions
|
|
"""
|
|
return [action
|
|
for action in actions
|
|
if not action.option_strings]
|
|
|
|
def get_optionals_without_choices(self, actions):
|
|
"""
|
|
All actions which are:
|
|
(a) Optional, but without required choices
|
|
(b) Not of a "boolean" type (storeTrue, etc..)
|
|
(c) Of type _AppendAction
|
|
|
|
e.g. anything which has an argument style like:
|
|
>>> -f myfilename.txt
|
|
"""
|
|
boolean_actions = (
|
|
_StoreConstAction, _StoreFalseAction,
|
|
_StoreTrueAction
|
|
)
|
|
return [action
|
|
for action in actions
|
|
if action.option_strings
|
|
and not action.choices
|
|
and not isinstance(action, _CountAction)
|
|
and not isinstance(action, _HelpAction)
|
|
and type(action) not in boolean_actions]
|
|
|
|
def get_optionals_with_choices(self, actions):
|
|
"""
|
|
All optional arguments which are constrained
|
|
to specific choices.
|
|
"""
|
|
return [action
|
|
for action in actions
|
|
if action.choices]
|
|
|
|
def get_flag_style_optionals(self, actions):
|
|
"""
|
|
Gets all instances of "flag" type options.
|
|
i.e. options which either store a const, or
|
|
store boolean style options (e.g. StoreTrue).
|
|
Types:
|
|
_StoreTrueAction
|
|
_StoreFalseAction
|
|
_StoreConst
|
|
"""
|
|
return [action
|
|
for action in actions
|
|
if isinstance(action, _StoreTrueAction)
|
|
or isinstance(action, _StoreFalseAction)
|
|
or isinstance(action, _StoreConstAction)]
|
|
|
|
|
|
if __name__ == '__main__':
|
|
pass
|