|
| 1 | +import argparse |
| 2 | +import abc |
| 3 | + |
| 4 | + |
| 5 | +class CDPParser(argparse.ArgumentParser): |
| 6 | + __metaclass__ = abc.ABCMeta |
| 7 | + |
| 8 | + def __init__(self, parameter_cls, *args, **kwargs): |
| 9 | + # conflict_handler='resolve' lets new args override older ones |
| 10 | + super(CDPParser, self).__init__(conflict_handler='resolve', |
| 11 | + *args, **kwargs) |
| 12 | + self.load_default_args() |
| 13 | + self.parameter = parameter_cls() |
| 14 | + self.args_namespace = None∂ |
| 15 | + |
| 16 | + def get_parameter(self): |
| 17 | + """ Returns the parameter created by |
| 18 | + the command line inputs """ |
| 19 | + |
| 20 | + if self.args_namespace is None: |
| 21 | + self.args_namespace = self.parse_args() |
| 22 | + print self.args_namespace |
| 23 | + |
| 24 | + if self.args_namespace.parameter is not None: |
| 25 | + self.parameter.load_parameter_from_py(self.args_namespace.parameter) |
| 26 | + |
| 27 | + # Overwrite the values of the parameter with the user's args |
| 28 | + for arg_name, arg_value in vars(self.args_namespace).iteritems(): |
| 29 | + if arg_value is not None: |
| 30 | + # Add it to the parameter |
| 31 | + setattr(self.parameter, arg_name, arg_value) |
| 32 | + |
| 33 | + self.parameter.check_values() |
| 34 | + return self.parameter |
| 35 | + |
| 36 | + def load_default_args(self): |
| 37 | + """ Load the default arguments for |
| 38 | + the parser. """ |
| 39 | + self.add_argument( |
| 40 | + '-p', '--parameters', |
| 41 | + type=str, |
| 42 | + dest='parameter', |
| 43 | + help='Path to the user-defined parameter file', |
| 44 | + required=False) |
| 45 | + |
| 46 | + def add_args_and_values(self, arg_list): |
| 47 | + """ Used for testing. Can test args input as if they |
| 48 | + were inputted from the command line. """ |
| 49 | + self.args_namespace = self.parse_args(arg_list) |
0 commit comments