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.

63 lines
1.7 KiB

'''
Created on Dec 8, 2013
@author: Chris
'''
import itertools
import components
from gooey.gui import argparse_test_data
class ComponentFactory(object):
'''
Aggregates all of the actions and
'''
def __init__(self, sorted_actions):
self._actions = sorted_actions
self.required_args = self.BuildPositionals(self._actions)
self.flags = self.BuildFlags(self._actions)
self.general_options = (self.BuildChoices(self._actions)
+ self.BuildOptionals(self._actions)
+ self.BuildCounters(self._actions))
def BuildPositionals(self, actions):
return self._AssembleWidgetsFromActions(actions, 'Positional', '_positionals')
def BuildChoices(self, actions):
return self._AssembleWidgetsFromActions(actions, 'Choice', '_choices')
def BuildOptionals(self, actions):
return self._AssembleWidgetsFromActions(actions, 'Optional', '_optionals')
def BuildFlags(self, actions):
return self._AssembleWidgetsFromActions(actions, 'Flag', '_flags')
def BuildCounters(self, actions):
return self._AssembleWidgetsFromActions(actions, 'Counter', '_counters')
def _AssembleWidgetsFromActions(self, actions, classname, actiontype):
cls = getattr(components, classname)
actions_list = getattr(actions, actiontype)
return [cls(action)
for action in actions_list]
def __iter__(self):
'''
return an iterator for all of the contained gui
'''
return itertools.chain(self.required_args,
self.flags,
self.general_options)
if __name__ == '__main__':
a = ComponentFactory(argparse_test_data.parser)