-def check_standalone(option, opt, value, parser):
- from optparse import OptionValueError
- assert value is not None
- if parser.values.embedded:
- embedded = filter( lambda a: a.strip(), re.split( "[:;,]", parser.values.embedded ) )
- else:
- embedded = []
- if parser.values.standalone:
- standalone = filter( lambda a: a.strip(), re.split( "[:;,]", parser.values.standalone ) )
- else:
- standalone = []
- vals = filter( lambda a: a.strip(), re.split( "[:;,]", value ) )
- for v in vals:
- if v not in standalone_choices:
- raise OptionValueError( "option %s: invalid choice: %r (choose from %s)" % ( opt, v, ", ".join( map( repr, standalone_choices ) ) ) )
- if v not in standalone:
- standalone.append( v )
- if v in embedded:
- del embedded[ embedded.index( v ) ]
- pass
- parser.values.embedded = ",".join( embedded )
- parser.values.standalone = ",".join( standalone )
- pass
+class CheckEmbeddedAction(argparse.Action):
+ def __call__(self, parser, namespace, value, option_string=None):
+ assert value is not None
+ if namespace.embedded:
+ embedded = [a for a in re.split("[:;,]", namespace.embedded) if a.strip()]
+ else:
+ embedded = []
+ if namespace.standalone:
+ standalone = [a for a in re.split("[:;,]", namespace.standalone) if a.strip()]
+ else:
+ standalone = []
+ vals = [a for a in re.split("[:;,]", value) if a.strip()]
+ for v in vals:
+ if v not in embedded_choices:
+ raise argparse.ArgumentError("option %s: invalid choice: %r (choose from %s)"
+ % (self.dest, v, ", ".join(map(repr, embedded_choices))))
+ if v not in embedded:
+ embedded.append(v)
+ if v in standalone:
+ del standalone[standalone.index(v)]
+ pass
+ namespace.embedded = ",".join(embedded)
+ namespace.standalone = ",".join(standalone)
+ pass
+
+
+class CheckStandaloneAction(argparse.Action):
+ def __call__(self, parser, namespace, value, option_string=None):
+ assert value is not None
+ if namespace.embedded:
+ embedded = [a for a in re.split("[:;,]", namespace.embedded) if a.strip()]
+ else:
+ embedded = []
+ if namespace.standalone:
+ standalone = [a for a in re.split("[:;,]", namespace.standalone) if a.strip()]
+ else:
+ standalone = []
+ vals = [a for a in re.split("[:;,]", value) if a.strip()]
+ for v in vals:
+ if v not in standalone_choices:
+ raise argparse.ArgumentError("option %s: invalid choice: %r (choose from %s)"
+ % (self.dest, v, ", ".join(map(repr, standalone_choices))))
+ if v not in standalone:
+ standalone.append(v)
+ if v in embedded:
+ del embedded[embedded.index(v)]
+ pass
+ namespace.embedded = ",".join(embedded)
+ namespace.standalone = ",".join(standalone)
+
+
+class StoreBooleanAction(argparse.Action):
+ def __call__(self, parser, namespace, value, option_string=None):
+ if isinstance(value, bytes):
+ value = value.decode()
+ if isinstance(value, str):
+ try:
+ value_conv = booleans[value.strip().lower()]
+ setattr(namespace, self.dest, value_conv)
+ except KeyError:
+ raise argparse.ArgumentError(
+ "option %s: invalid boolean value: %s (choose from %s)"
+ % (self.dest, value, boolean_choices))
+ else:
+ setattr(namespace, self.dest, value)