def _set_attrs(self, attrs): """overwrite _set_attrs to allow store_or callbacks""" Option._set_attrs(self, attrs) if self.action in self.EXTOPTION_STORE_OR: setattr(self, 'store_or', self.action) def store_or(option, opt_str, value, parser, *args, **kwargs): """Callback for supporting options with optional values.""" # see http://stackoverflow.com/questions/1229146/parsing-empty-options-in-python # ugly code, optparse is crap if parser.rargs and not parser.rargs[0].startswith('-'): val = parser.rargs[0] parser.rargs.pop(0) else: val = kwargs.get('orig_default', None) setattr(parser.values, option.dest, val) # without the following, --x=y doesn't work; only --x y self.nargs = 0 # allow 0 args, will also use 0 args if self.type is None: # set to not None, for takes_value to return True self.type = 'string' self.callback = store_or self.callback_kwargs = {'orig_default': copy.deepcopy(self.default), } self.action = 'callback' # act as callback if self.store_or == 'store_or_None': self.default = None else: raise ValueError("_set_attrs: unknown store_or %s" % self.store_or)
def _set_attrs(self, attrs): """overwrite _set_attrs to allow store_or callbacks""" Option._set_attrs(self, attrs) if self.action in self.EXTOPTION_STORE_OR: setattr(self, 'store_or', self.action) def store_or(option, opt_str, value, parser, *args, **kwargs): """Callback for supporting options with optional values.""" # see http://stackoverflow.com/questions/1229146/parsing-empty-options-in-python # ugly code, optparse is crap if parser.rargs and not parser.rargs[0].startswith('-'): val = parser.rargs[0] parser.rargs.pop(0) else: val = kwargs.get('orig_default', None) setattr(parser.values, option.dest, val) # without the following, --x=y doesn't work; only --x y self.nargs = 0 # allow 0 args, will also use 0 args if self.type is None: # set to not None, for takes_value to return True self.type = 'string' self.callback = store_or self.callback_kwargs = { 'orig_default': copy.deepcopy(self.default), } self.action = 'callback' # act as callback if self.store_or == 'store_or_None': self.default = None else: raise ValueError("_set_attrs: unknown store_or %s" % self.store_or)