Show More
@@ -208,11 +208,18 class customopt(object): | |||||
208 | __metaclass__ = abc.ABCMeta |
|
208 | __metaclass__ = abc.ABCMeta | |
209 |
|
209 | |||
210 | def __init__(self, defaultvalue): |
|
210 | def __init__(self, defaultvalue): | |
211 | self.defaultvalue = defaultvalue |
|
211 | self._defaultvalue = defaultvalue | |
212 |
|
212 | |||
213 | def _isboolopt(self): |
|
213 | def _isboolopt(self): | |
214 | return False |
|
214 | return False | |
215 |
|
215 | |||
|
216 | def getdefaultvalue(self): | |||
|
217 | """Returns the default value for this opt. | |||
|
218 | ||||
|
219 | Subclasses should override this to return a new value if the value type | |||
|
220 | is mutable.""" | |||
|
221 | return self._defaultvalue | |||
|
222 | ||||
216 | @abc.abstractmethod |
|
223 | @abc.abstractmethod | |
217 | def newstate(self, oldstate, newparam, abort): |
|
224 | def newstate(self, oldstate, newparam, abort): | |
218 | """Adds newparam to oldstate and returns the new state. |
|
225 | """Adds newparam to oldstate and returns the new state. | |
@@ -221,7 +228,7 class customopt(object): | |||||
221 |
|
228 | |||
222 | class _simpleopt(customopt): |
|
229 | class _simpleopt(customopt): | |
223 | def _isboolopt(self): |
|
230 | def _isboolopt(self): | |
224 | return isinstance(self.defaultvalue, (bool, type(None))) |
|
231 | return isinstance(self._defaultvalue, (bool, type(None))) | |
225 |
|
232 | |||
226 | def newstate(self, oldstate, newparam, abort): |
|
233 | def newstate(self, oldstate, newparam, abort): | |
227 | return newparam |
|
234 | return newparam | |
@@ -235,6 +242,9 class _callableopt(customopt): | |||||
235 | return self.callablefn(newparam) |
|
242 | return self.callablefn(newparam) | |
236 |
|
243 | |||
237 | class _listopt(customopt): |
|
244 | class _listopt(customopt): | |
|
245 | def getdefaultvalue(self): | |||
|
246 | return self._defaultvalue[:] | |||
|
247 | ||||
238 | def newstate(self, oldstate, newparam, abort): |
|
248 | def newstate(self, oldstate, newparam, abort): | |
239 | oldstate.append(newparam) |
|
249 | oldstate.append(newparam) | |
240 | return oldstate |
|
250 | return oldstate | |
@@ -313,7 +323,7 def fancyopts(args, options, state, gnu= | |||||
313 | defmap[name] = _defaultopt(default) |
|
323 | defmap[name] = _defaultopt(default) | |
314 |
|
324 | |||
315 | # copy defaults to state |
|
325 | # copy defaults to state | |
316 | state[name] = defmap[name].defaultvalue |
|
326 | state[name] = defmap[name].getdefaultvalue() | |
317 |
|
327 | |||
318 | # does it take a parameter? |
|
328 | # does it take a parameter? | |
319 | if not defmap[name]._isboolopt(): |
|
329 | if not defmap[name]._isboolopt(): |
@@ -87,7 +87,7 def optrst(header, options, verbose): | |||||
87 | lo = '--' + longopt |
|
87 | lo = '--' + longopt | |
88 |
|
88 | |||
89 | if isinstance(default, fancyopts.customopt): |
|
89 | if isinstance(default, fancyopts.customopt): | |
90 | default = default.defaultvalue |
|
90 | default = default.getdefaultvalue() | |
91 | if default and not callable(default): |
|
91 | if default and not callable(default): | |
92 | # default is of unknown type, and in Python 2 we abused |
|
92 | # default is of unknown type, and in Python 2 we abused | |
93 | # the %s-shows-repr property to handle integers etc. To |
|
93 | # the %s-shows-repr property to handle integers etc. To |
General Comments 0
You need to be logged in to leave comments.
Login now