1 """optparse - a powerful, extensible, and easy-to-use option parser.
3 By Greg Ward <gward@python.net>
5 Originally distributed as Optik; see http://optik.sourceforge.net/ .
7 If you have problems with this module, please do not file bugs,
8 patches, or feature requests with Python; instead, use Optik's
9 SourceForge project page:
10 http://sourceforge.net/projects/optik
12 For support, use the optik-users@lists.sourceforge.net mailing list
13 (http://lists.sourceforge.net/lists/listinfo/optik-users).
16 # Python developers: please do not make changes to this file, since
17 # it is automatically generated from the Optik source code.
29 'IndentedHelpFormatter',
30 'TitledHelpFormatter',
33 'OptionConflictError',
38 Copyright (c) 2001-2006 Gregory P. Ward. All rights reserved.
39 Copyright (c) 2002-2006 Python Software Foundation. All rights reserved.
41 Redistribution and use in source and binary forms, with or without
42 modification, are permitted provided that the following conditions are
45 * Redistributions of source code must retain the above copyright
46 notice, this list of conditions and the following disclaimer.
48 * Redistributions in binary form must reproduce the above copyright
49 notice, this list of conditions and the following disclaimer in the
50 documentation and/or other materials provided with the distribution.
52 * Neither the name of the author nor the names of its
53 contributors may be used to endorse or promote products derived from
54 this software without specific prior written permission.
56 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
57 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
58 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
59 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
60 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
61 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
62 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
63 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
64 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
65 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
66 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
75 return "<%s at 0x%x: %s>" % (self.__class__.__name__, id(self), self)
79 sys.getdefaultencoding
80 except AttributeError:
81 def fake_getdefaultencoding():
83 sys.getdefaultencoding = fake_getdefaultencoding
87 except AttributeError:
88 def encode_wrapper(s, encoding, replacement):
91 def encode_wrapper(s, encoding, replacement):
92 return s.encode(encoding, replacement)
95 # This file was generated from:
96 # Id: option_parser.py 527 2006-07-23 15:21:30Z greg
97 # Id: option.py 522 2006-06-11 16:22:03Z gward
98 # Id: help.py 527 2006-07-23 15:21:30Z greg
99 # Id: errors.py 509 2006-04-20 00:58:24Z gward
102 from gettext import gettext
104 def gettext(message):
109 class OptParseError (Exception):
110 def __init__(self, msg):
117 class OptionError (OptParseError):
119 Raised if an Option instance is created with invalid or
120 inconsistent arguments.
123 def __init__(self, msg, option):
125 self.option_id = str(option)
129 return "option %s: %s" % (self.option_id, self.msg)
133 class OptionConflictError (OptionError):
135 Raised if conflicting options are added to an OptionParser.
138 class OptionValueError (OptParseError):
140 Raised if an invalid option value is encountered on the command
144 class BadOptionError (OptParseError):
146 Raised if an invalid option is seen on the command line.
148 def __init__(self, opt_str):
149 self.opt_str = opt_str
152 return _("no such option: %s") % self.opt_str
154 class AmbiguousOptionError (BadOptionError):
156 Raised if an ambiguous option is seen on the command line.
158 def __init__(self, opt_str, possibilities):
159 BadOptionError.__init__(self, opt_str)
160 self.possibilities = possibilities
163 return (_("ambiguous option: %s (%s?)")
164 % (self.opt_str, string.join(self.possibilities, ", ")))
170 Abstract base class for formatting option help. OptionParser
171 instances should use one of the HelpFormatter subclasses for
172 formatting help; by default IndentedHelpFormatter is used.
175 parser : OptionParser
176 the controlling OptionParser instance
177 indent_increment : int
178 the number of columns to indent per nesting level
179 max_help_position : int
180 the maximum starting column for option help text
182 the calculated starting column for option help text;
183 initially the same as the maximum
185 total number of columns for output (pass None to constructor for
186 this value to be taken from the $COLUMNS environment variable)
188 current indentation level
190 current indentation level (in columns)
192 number of columns available for option help text (calculated)
194 text to replace with each option's default value, "%default"
195 by default. Set to false value to disable default value expansion.
196 option_strings : { Option : str }
197 maps Option instances to the snippet of help text explaining
198 the syntax of that option, e.g. "-h, --help" or
199 "-fFILE, --file=FILE"
201 format string controlling how short options with values are
202 printed in help text. Must be either "%s%s" ("-fFILE") or
203 "%s %s" ("-f FILE"), because those are the two syntaxes that
206 similar but for long options; must be either "%s %s" ("--file FILE")
207 or "%s=%s" ("--file=FILE").
210 NO_DEFAULT_VALUE = "none"
218 self.indent_increment = indent_increment
219 self.help_position = self.max_help_position = max_help_position
222 width = int(os.environ['COLUMNS'])
223 except (KeyError, ValueError):
227 self.current_indent = 0
229 self.help_width = None # computed later
230 self.short_first = short_first
231 self.default_tag = "%default"
232 self.option_strings = {}
233 self._short_opt_fmt = "%s %s"
234 self._long_opt_fmt = "%s=%s"
236 def set_parser(self, parser):
239 def set_short_opt_delimiter(self, delim):
240 if delim not in ("", " "):
242 "invalid metavar delimiter for short options: %r" % delim)
243 self._short_opt_fmt = "%s" + delim + "%s"
245 def set_long_opt_delimiter(self, delim):
246 if delim not in ("=", " "):
248 "invalid metavar delimiter for long options: %r" % delim)
249 self._long_opt_fmt = "%s" + delim + "%s"
252 self.current_indent = self.current_indent + self.indent_increment
253 self.level = self.level + 1
256 self.current_indent = self.current_indent - self.indent_increment
257 assert self.current_indent >= 0, "Indent decreased below 0."
258 self.level = self.level - 1
260 def format_usage(self, usage):
261 raise NotImplementedError, "subclasses must implement"
263 def format_heading(self, heading):
264 raise NotImplementedError, "subclasses must implement"
266 def _format_text(self, text):
268 Format a paragraph of free-form text for inclusion in the
269 help output at the current indentation level.
271 text_width = self.width - self.current_indent
272 indent = " "*self.current_indent
273 return textwrap.fill(text,
275 initial_indent=indent,
276 subsequent_indent=indent)
278 def format_description(self, description):
280 return self._format_text(description) + "\n"
284 def format_epilog(self, epilog):
286 return "\n" + self._format_text(epilog) + "\n"
291 def expand_default(self, option):
292 if self.parser is None or not self.default_tag:
295 default_value = self.parser.defaults.get(option.dest)
296 if default_value is NO_DEFAULT or default_value is None:
297 default_value = self.NO_DEFAULT_VALUE
299 return string.replace(option.help, self.default_tag, str(default_value))
301 def format_option(self, option):
302 # The help for each option consists of two parts:
303 # * the opt strings and metavars
304 # eg. ("-x", or "-fFILENAME, --file=FILENAME")
305 # * the user-supplied help string
306 # eg. ("turn on expert mode", "read data from FILENAME")
308 # If possible, we write both of these on the same line:
309 # -x turn on expert mode
311 # But if the opt string list is too long, we put the help
312 # string on a second line, indented to the same column it would
313 # start in if it fit on the first line.
314 # -fFILENAME, --file=FILENAME
315 # read data from FILENAME
317 opts = self.option_strings[option]
318 opt_width = self.help_position - self.current_indent - 2
319 if len(opts) > opt_width:
320 opts = "%*s%s\n" % (self.current_indent, "", opts)
321 indent_first = self.help_position
322 else: # start help on same line as opts
323 opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts)
327 help_text = self.expand_default(option)
328 help_lines = textwrap.wrap(help_text, self.help_width)
329 result.append("%*s%s\n" % (indent_first, "", help_lines[0]))
330 for line in help_lines[1:]:
331 result.append("%*s%s\n" % (self.help_position, "", line))
332 elif opts[-1] != "\n":
334 return string.join(result, "")
336 def store_option_strings(self, parser):
339 for opt in parser.option_list:
340 strings = self.format_option_strings(opt)
341 self.option_strings[opt] = strings
342 max_len = max(max_len, len(strings) + self.current_indent)
344 for group in parser.option_groups:
345 for opt in group.option_list:
346 strings = self.format_option_strings(opt)
347 self.option_strings[opt] = strings
348 max_len = max(max_len, len(strings) + self.current_indent)
351 self.help_position = min(max_len + 2, self.max_help_position)
352 self.help_width = self.width - self.help_position
354 def format_option_strings(self, option):
355 """Return a comma-separated list of option strings & metavariables."""
356 if option.takes_value():
357 metavar = option.metavar or string.upper(option.dest)
359 for sopt in option._short_opts:
360 short_opts.append(self._short_opt_fmt % (sopt, metavar))
362 for lopt in option._long_opts:
363 long_opts.append(self._long_opt_fmt % (lopt, metavar))
365 short_opts = option._short_opts
366 long_opts = option._long_opts
369 opts = short_opts + long_opts
371 opts = long_opts + short_opts
373 return string.join(opts, ", ")
375 class IndentedHelpFormatter (HelpFormatter):
376 """Format help with indented section bodies.
381 max_help_position=24,
384 HelpFormatter.__init__(
385 self, indent_increment, max_help_position, width, short_first)
387 def format_usage(self, usage):
388 return _("Usage: %s\n") % usage
390 def format_heading(self, heading):
391 return "%*s%s:\n" % (self.current_indent, "", heading)
394 class TitledHelpFormatter (HelpFormatter):
395 """Format help with underlined section headers.
400 max_help_position=24,
403 HelpFormatter.__init__ (
404 self, indent_increment, max_help_position, width, short_first)
406 def format_usage(self, usage):
407 return "%s %s\n" % (self.format_heading(_("Usage")), usage)
409 def format_heading(self, heading):
410 return "%s\n%s\n" % (heading, "=-"[self.level] * len(heading))
413 def _parse_num(val, type):
414 if string.lower(val[:2]) == "0x": # hexadecimal
416 elif string.lower(val[:2]) == "0b": # binary
418 val = val[2:] or "0" # have to remove "0b" prefix
419 elif val[:1] == "0": # octal
424 return type(val, radix)
427 return _parse_num(val, int)
429 def _parse_long(val):
430 return _parse_num(val, long)
435 # Python 1.5.2 doesn't allow a radix value to be passed to int().
441 # Python 1.5.2 doesn't allow a radix value to be passed to long().
444 _builtin_cvt = { "int" : (_parse_int, _("integer")),
445 "long" : (_parse_long, _("long integer")),
446 "float" : (float, _("floating-point")),
447 "complex" : (complex, _("complex")) }
449 def check_builtin(option, opt, value):
450 (cvt, what) = _builtin_cvt[option.type]
454 raise OptionValueError(
455 _("option %s: invalid %s value: %r") % (opt, what, value))
457 def check_choice(option, opt, value):
458 if value in option.choices:
461 choices = string.join(map(repr, option.choices), ", ")
462 raise OptionValueError(
463 _("option %s: invalid choice: %r (choose from %s)")
464 % (opt, value, choices))
466 # Not supplying a default is different from a default of None,
467 # so we need an explicit "not supplied" value.
468 NO_DEFAULT = ("NO", "DEFAULT")
474 _short_opts : [string]
475 _long_opts : [string]
485 callback_args : (any*)
486 callback_kwargs : { string : any }
491 # The list of instance attributes that may be set through
492 # keyword args to the constructor.
506 # The set of actions allowed by option parsers. Explicitly listed
507 # here so the constructor can validate its arguments.
519 # The set of actions that involve storing a value somewhere;
520 # also listed just for constructor argument validation. (If
521 # the action is one of these, there must be a destination.)
522 STORE_ACTIONS = ("store",
530 # The set of actions for which it makes sense to supply a value
531 # type, ie. which may consume an argument from the command line.
532 TYPED_ACTIONS = ("store",
536 # The set of actions which *require* a value type, ie. that
537 # always consume an argument from the command line.
538 ALWAYS_TYPED_ACTIONS = ("store",
541 # The set of actions which take a 'const' attribute.
542 CONST_ACTIONS = ("store_const",
545 # The set of known types for option parsers. Again, listed here for
546 # constructor argument validation.
547 TYPES = ("string", "int", "long", "float", "complex", "choice")
549 # Dictionary of argument checking functions, which convert and
550 # validate option arguments according to the option type.
552 # Signature of checking functions is:
553 # check(option : Option, opt : string, value : string) -> any
555 # option is the Option instance calling the checker
556 # opt is the actual option seen on the command-line
557 # (eg. "-a", "--file")
558 # value is the option argument seen on the command-line
560 # The return value should be in the appropriate Python type
561 # for option.type -- eg. an integer if option.type == "int".
563 # If no checker is defined for a type, arguments will be
564 # unchecked and remain strings.
565 TYPE_CHECKER = { "int" : check_builtin,
566 "long" : check_builtin,
567 "float" : check_builtin,
568 "complex": check_builtin,
569 "choice" : check_choice,
573 # CHECK_METHODS is a list of unbound method objects; they are called
574 # by the constructor, in order, after all attributes are
575 # initialized. The list is created and filled in later, after all
576 # the methods are actually defined. (I just put it here because I
577 # like to define and document all class attributes in the same
578 # place.) Subclasses that add another _check_*() method should
579 # define their own CHECK_METHODS list that adds their check method
580 # to those from this class.
584 # -- Constructor/initialization methods ----------------------------
586 def __init__(self, *opts, **attrs):
587 # Set _short_opts, _long_opts attrs from 'opts' tuple.
588 # Have to be set now, in case no option strings are supplied.
589 self._short_opts = []
591 opts = self._check_opt_strings(opts)
592 self._set_opt_strings(opts)
594 # Set all other attrs (action, type, etc.) from 'attrs' dict
595 self._set_attrs(attrs)
597 # Check all the attributes we just set. There are lots of
598 # complicated interdependencies, but luckily they can be farmed
599 # out to the _check_*() methods listed in CHECK_METHODS -- which
600 # could be handy for subclasses! The one thing these all share
601 # is that they raise OptionError if they discover a problem.
602 for checker in self.CHECK_METHODS:
605 def _check_opt_strings(self, opts):
606 # Filter out None because early versions of Optik had exactly
607 # one short option and one long option, either of which
609 opts = filter(None, opts)
611 raise TypeError("at least one option string must be supplied")
614 def _set_opt_strings(self, opts):
618 "invalid option string %r: "
619 "must be at least two characters long" % opt, self)
621 if not (opt[0] == "-" and opt[1] != "-"):
623 "invalid short option string %r: "
624 "must be of the form -x, (x any non-dash char)" % opt,
626 self._short_opts.append(opt)
628 if not (opt[0:2] == "--" and opt[2] != "-"):
630 "invalid long option string %r: "
631 "must start with --, followed by non-dash" % opt,
633 self._long_opts.append(opt)
635 def _set_attrs(self, attrs):
636 for attr in self.ATTRS:
637 if attrs.has_key(attr):
638 setattr(self, attr, attrs[attr])
641 if attr == 'default':
642 setattr(self, attr, NO_DEFAULT)
644 setattr(self, attr, None)
646 attrs = sorted(attrs.keys())
648 "invalid keyword arguments: %s" % string.join(attrs, ", "),
652 # -- Constructor validation methods --------------------------------
654 def _check_action(self):
655 if self.action is None:
656 self.action = "store"
657 elif self.action not in self.ACTIONS:
658 raise OptionError("invalid action: %r" % self.action, self)
660 def _check_type(self):
661 if self.type is None:
662 if self.action in self.ALWAYS_TYPED_ACTIONS:
663 if self.choices is not None:
664 # The "choices" attribute implies "choice" type.
667 # No type given? "string" is the most sensible default.
670 # Allow type objects or builtin type conversion functions
671 # (int, str, etc.) as an alternative to their names. (The
672 # complicated check of __builtin__ is only necessary for
673 # Python 2.1 and earlier, and is short-circuited by the
674 # first check on modern Pythons.)
676 if ( type(self.type) is types.TypeType or
677 (hasattr(self.type, "__name__") and
678 getattr(__builtin__, self.type.__name__, None) is self.type) ):
679 self.type = self.type.__name__
681 if self.type == "str":
684 if self.type not in self.TYPES:
685 raise OptionError("invalid option type: %r" % self.type, self)
686 if self.action not in self.TYPED_ACTIONS:
688 "must not supply a type for action %r" % self.action, self)
690 def _check_choice(self):
691 if self.type == "choice":
692 if self.choices is None:
694 "must supply a list of choices for type 'choice'", self)
695 elif type(self.choices) not in (tuple, list):
697 "choices must be a list of strings ('%s' supplied)"
698 % string.split(str(type(self.choices)), "'")[1], self)
699 elif self.choices is not None:
701 "must not supply choices for type %r" % self.type, self)
703 def _check_dest(self):
704 # No destination given, and we need one for this action. The
705 # self.type check is for callbacks that take a value.
706 takes_value = (self.action in self.STORE_ACTIONS or
707 self.type is not None)
708 if self.dest is None and takes_value:
710 # Glean a destination from the first long option string,
711 # or from the first short option string if no long options.
713 # eg. "--foo-bar" -> "foo_bar"
714 self.dest = string.replace(self._long_opts[0][2:], '-', '_')
716 self.dest = self._short_opts[0][1]
718 def _check_const(self):
719 if self.action not in self.CONST_ACTIONS and self.const is not None:
721 "'const' must not be supplied for action %r" % self.action,
724 def _check_nargs(self):
725 if self.action in self.TYPED_ACTIONS:
726 if self.nargs is None:
728 elif self.nargs is not None:
730 "'nargs' must not be supplied for action %r" % self.action,
733 def _check_callback(self):
734 if self.action == "callback":
735 if not callable(self.callback):
737 "callback not callable: %r" % self.callback, self)
738 if (self.callback_args is not None and
739 type(self.callback_args) is not tuple):
741 "callback_args, if supplied, must be a tuple: not %r"
742 % self.callback_args, self)
743 if (self.callback_kwargs is not None and
744 type(self.callback_kwargs) is not dict):
746 "callback_kwargs, if supplied, must be a dict: not %r"
747 % self.callback_kwargs, self)
749 if self.callback is not None:
751 "callback supplied (%r) for non-callback option"
752 % self.callback, self)
753 if self.callback_args is not None:
755 "callback_args supplied for non-callback option", self)
756 if self.callback_kwargs is not None:
758 "callback_kwargs supplied for non-callback option", self)
761 CHECK_METHODS = [_check_action,
770 # -- Miscellaneous methods -----------------------------------------
773 return string.join(self._short_opts + self._long_opts, "/")
777 def takes_value(self):
778 return self.type is not None
780 def get_opt_string(self):
782 return self._long_opts[0]
784 return self._short_opts[0]
787 # -- Processing methods --------------------------------------------
789 def check_value(self, opt, value):
790 checker = self.TYPE_CHECKER.get(self.type)
794 return checker(self, opt, value)
796 def convert_value(self, opt, value):
797 if value is not None:
799 return self.check_value(opt, value)
801 return tuple(map(lambda v: self.check_value(opt, v), value))
803 def process(self, opt, value, values, parser):
805 # First, convert the value(s) to the right type. Howl if any
806 # value(s) are bogus.
807 value = self.convert_value(opt, value)
809 # And then take whatever action is expected of us.
810 # This is a separate method to make life easier for
811 # subclasses to add new actions.
812 return self.take_action(
813 self.action, self.dest, opt, value, values, parser)
815 def take_action(self, action, dest, opt, value, values, parser):
816 if action == "store":
817 setattr(values, dest, value)
818 elif action == "store_const":
819 setattr(values, dest, self.const)
820 elif action == "store_true":
821 setattr(values, dest, True)
822 elif action == "store_false":
823 setattr(values, dest, False)
824 elif action == "append":
825 values.ensure_value(dest, []).append(value)
826 elif action == "append_const":
827 values.ensure_value(dest, []).append(self.const)
828 elif action == "count":
829 setattr(values, dest, values.ensure_value(dest, 0) + 1)
830 elif action == "callback":
831 args = self.callback_args or ()
832 kwargs = self.callback_kwargs or {}
833 apply(self.callback, (self, opt, value, parser,) + args, kwargs)
834 elif action == "help":
837 elif action == "version":
838 parser.print_version()
841 raise RuntimeError, "unknown action %r" % self.action
848 SUPPRESS_HELP = "SUPPRESS"+"HELP"
849 SUPPRESS_USAGE = "SUPPRESS"+"USAGE"
851 # For compatibility with Python 2.2
855 (True, False) = (1, 0)
860 return isinstance(x, str)
863 return isinstance(x, str) or isinstance(x, unicode)
867 def __init__(self, defaults=None):
869 for (attr, val) in defaults.items():
870 setattr(self, attr, val)
873 return str(self.__dict__)
877 def __cmp__(self, other):
878 if isinstance(other, Values):
879 return cmp(self.__dict__, other.__dict__)
880 elif isinstance(other, dict):
881 return cmp(self.__dict__, other)
885 def _update_careful(self, dict):
887 Update the option values from an arbitrary dictionary, but only
888 use keys from dict that already have a corresponding attribute
889 in self. Any keys in dict without a corresponding attribute
890 are silently ignored.
892 for attr in dir(self):
893 if dict.has_key(attr):
896 setattr(self, attr, dval)
898 def _update_loose(self, dict):
900 Update the option values from an arbitrary dictionary,
901 using all keys from the dictionary regardless of whether
902 they have a corresponding attribute in self or not.
904 self.__dict__.update(dict)
906 def _update(self, dict, mode):
907 if mode == "careful":
908 self._update_careful(dict)
909 elif mode == "loose":
910 self._update_loose(dict)
912 raise ValueError, "invalid update mode: %r" % mode
914 def read_module(self, modname, mode="careful"):
916 mod = sys.modules[modname]
917 self._update(vars(mod), mode)
919 def read_file(self, filename, mode="careful"):
921 exec open(filename, 'rU').read() in vars
922 self._update(vars, mode)
924 def ensure_value(self, attr, value):
925 if not hasattr(self, attr) or getattr(self, attr) is None:
926 setattr(self, attr, value)
927 return getattr(self, attr)
930 class OptionContainer:
936 standard_option_list : [Option]
937 list of standard options that will be accepted by all instances
938 of this parser class (intended to be overridden by subclasses).
941 option_list : [Option]
942 the list of Option objects contained by this OptionContainer
943 _short_opt : { string : Option }
944 dictionary mapping short option strings, eg. "-f" or "-X",
945 to the Option instances that implement them. If an Option
946 has multiple short option strings, it will appears in this
947 dictionary multiple times. [1]
948 _long_opt : { string : Option }
949 dictionary mapping long option strings, eg. "--file" or
950 "--exclude", to the Option instances that implement them.
951 Again, a given Option can occur multiple times in this
953 defaults : { string : any }
954 dictionary mapping option destination names to default
955 values for each destination [1]
957 [1] These mappings are common to (shared by) all components of the
958 controlling OptionParser, where they are initially created.
962 def __init__(self, option_class, conflict_handler, description):
963 # Initialize the option list and related data structures.
964 # This method must be provided by subclasses, and it must
965 # initialize at least the following instance attributes:
966 # option_list, _short_opt, _long_opt, defaults.
967 self._create_option_list()
969 self.option_class = option_class
970 self.set_conflict_handler(conflict_handler)
971 self.set_description(description)
973 def _create_option_mappings(self):
974 # For use by OptionParser constructor -- create the master
975 # option mappings used by this OptionParser and all
976 # OptionGroups that it owns.
977 self._short_opt = {} # single letter -> Option instance
978 self._long_opt = {} # long option -> Option instance
979 self.defaults = {} # maps option dest -> default value
982 def _share_option_mappings(self, parser):
983 # For use by OptionGroup constructor -- use shared option
984 # mappings from the OptionParser that owns this OptionGroup.
985 self._short_opt = parser._short_opt
986 self._long_opt = parser._long_opt
987 self.defaults = parser.defaults
989 def set_conflict_handler(self, handler):
990 if handler not in ("error", "resolve"):
991 raise ValueError, "invalid conflict_resolution value %r" % handler
992 self.conflict_handler = handler
994 def set_description(self, description):
995 self.description = description
997 def get_description(self):
998 return self.description
1002 """see OptionParser.destroy()."""
1008 # -- Option-adding methods -----------------------------------------
1010 def _check_conflict(self, option):
1012 for opt in option._short_opts:
1013 if self._short_opt.has_key(opt):
1014 conflict_opts.append((opt, self._short_opt[opt]))
1015 for opt in option._long_opts:
1016 if self._long_opt.has_key(opt):
1017 conflict_opts.append((opt, self._long_opt[opt]))
1020 handler = self.conflict_handler
1021 if handler == "error":
1022 raise OptionConflictError(
1023 "conflicting option string(s): %s"
1024 % string.join(map(lambda co: co[0], conflict_opts), ", "),
1026 elif handler == "resolve":
1027 for (opt, c_option) in conflict_opts:
1029 c_option._long_opts.remove(opt)
1030 del self._long_opt[opt]
1032 c_option._short_opts.remove(opt)
1033 del self._short_opt[opt]
1034 if not (c_option._short_opts or c_option._long_opts):
1035 c_option.container.option_list.remove(c_option)
1037 def add_option(self, *args, **kwargs):
1038 """add_option(Option)
1039 add_option(opt_str, ..., kwarg=val, ...)
1041 if type(args[0]) is str:
1042 option = apply(self.option_class, args, kwargs)
1043 elif len(args) == 1 and not kwargs:
1045 if not isinstance(option, Option):
1046 raise TypeError, "not an Option instance: %r" % option
1048 raise TypeError, "invalid arguments"
1050 self._check_conflict(option)
1052 self.option_list.append(option)
1053 option.container = self
1054 for opt in option._short_opts:
1055 self._short_opt[opt] = option
1056 for opt in option._long_opts:
1057 self._long_opt[opt] = option
1059 if option.dest is not None: # option has a dest, we need a default
1060 if option.default is not NO_DEFAULT:
1061 self.defaults[option.dest] = option.default
1062 elif not self.defaults.has_key(option.dest):
1063 self.defaults[option.dest] = None
1067 def add_options(self, option_list):
1068 for option in option_list:
1069 self.add_option(option)
1071 # -- Option query/removal methods ----------------------------------
1073 def get_option(self, opt_str):
1074 return (self._short_opt.get(opt_str) or
1075 self._long_opt.get(opt_str))
1077 def has_option(self, opt_str):
1078 return (self._short_opt.has_key(opt_str) or
1079 self._long_opt.has_key(opt_str))
1081 def remove_option(self, opt_str):
1082 option = self._short_opt.get(opt_str)
1084 option = self._long_opt.get(opt_str)
1086 raise ValueError("no such option %r" % opt_str)
1088 for opt in option._short_opts:
1089 del self._short_opt[opt]
1090 for opt in option._long_opts:
1091 del self._long_opt[opt]
1092 option.container.option_list.remove(option)
1095 # -- Help-formatting methods ---------------------------------------
1097 def format_option_help(self, formatter):
1098 if not self.option_list:
1101 for option in self.option_list:
1102 if not option.help is SUPPRESS_HELP:
1103 result.append(formatter.format_option(option))
1104 return string.join(result, "")
1106 def format_description(self, formatter):
1107 return formatter.format_description(self.get_description())
1109 def format_help(self, formatter):
1111 if self.description:
1112 result.append(self.format_description(formatter))
1113 if self.option_list:
1114 result.append(self.format_option_help(formatter))
1115 return string.join(result, "\n")
1118 class OptionGroup (OptionContainer):
1120 def __init__(self, parser, title, description=None):
1121 self.parser = parser
1122 OptionContainer.__init__(
1123 self, parser.option_class, parser.conflict_handler, description)
1126 def _create_option_list(self):
1127 self.option_list = []
1128 self._share_option_mappings(self.parser)
1130 def set_title(self, title):
1134 """see OptionParser.destroy()."""
1135 OptionContainer.destroy(self)
1136 del self.option_list
1138 # -- Help-formatting methods ---------------------------------------
1140 def format_help(self, formatter):
1141 result = formatter.format_heading(self.title)
1143 result = result + OptionContainer.format_help(self, formatter)
1148 class OptionParser (OptionContainer):
1152 standard_option_list : [Option]
1153 list of standard options that will be accepted by all instances
1154 of this parser class (intended to be overridden by subclasses).
1156 Instance attributes:
1158 a usage string for your program. Before it is displayed
1159 to the user, "%prog" will be expanded to the name of
1160 your program (self.prog or os.path.basename(sys.argv[0])).
1162 the name of the current program (to override
1163 os.path.basename(sys.argv[0])).
1165 paragraph of help text to print after option help
1167 option_groups : [OptionGroup]
1168 list of option groups in this parser (option groups are
1169 irrelevant for parsing the command-line, but very useful
1170 for generating help)
1172 allow_interspersed_args : bool = true
1173 if true, positional arguments may be interspersed with options.
1174 Assuming -a and -b each take a single argument, the command-line
1175 -ablah foo bar -bboo baz
1176 will be interpreted the same as
1177 -ablah -bboo -- foo bar baz
1178 If this flag were false, that command line would be interpreted as
1179 -ablah -- foo bar -bboo baz
1180 -- ie. we stop processing options as soon as we see the first
1181 non-option argument. (This is the tradition followed by
1182 Python's getopt module, Perl's Getopt::Std, and other argument-
1183 parsing libraries, but it is generally annoying to users.)
1185 process_default_values : bool = true
1186 if true, option default values are processed similarly to option
1187 values from the command line: that is, they are passed to the
1188 type-checking function for the option's type (as long as the
1189 default value is a string). (This really only matters if you
1190 have defined custom types; see SF bug #955889.) Set it to false
1191 to restore the behaviour of Optik 1.4.1 and earlier.
1194 the argument list currently being parsed. Only set when
1195 parse_args() is active, and continually trimmed down as
1196 we consume arguments. Mainly there for the benefit of
1199 the list of leftover arguments that we have skipped while
1200 parsing options. If allow_interspersed_args is false, this
1201 list is always empty.
1203 the set of option values currently being accumulated. Only
1204 set when parse_args() is active. Also mainly for callbacks.
1206 Because of the 'rargs', 'largs', and 'values' attributes,
1207 OptionParser is not thread-safe. If, for some perverse reason, you
1208 need to parse command-line arguments simultaneously in different
1209 threads, use different OptionParser instances.
1213 standard_option_list = []
1218 option_class=Option,
1220 conflict_handler="error",
1223 add_help_option=True,
1226 OptionContainer.__init__(
1227 self, option_class, conflict_handler, description)
1228 self.set_usage(usage)
1230 self.version = version
1231 self.allow_interspersed_args = True
1232 self.process_default_values = True
1233 if formatter is None:
1234 formatter = IndentedHelpFormatter()
1235 self.formatter = formatter
1236 self.formatter.set_parser(self)
1237 self.epilog = epilog
1239 # Populate the option list; initial sources are the
1240 # standard_option_list class attribute, the 'option_list'
1241 # argument, and (if applicable) the _add_version_option() and
1242 # _add_help_option() methods.
1243 self._populate_option_list(option_list,
1244 add_help=add_help_option)
1246 self._init_parsing_state()
1251 Declare that you are done with this OptionParser. This cleans up
1252 reference cycles so the OptionParser (and all objects referenced by
1253 it) can be garbage-collected promptly. After calling destroy(), the
1254 OptionParser is unusable.
1256 OptionContainer.destroy(self)
1257 for group in self.option_groups:
1259 del self.option_list
1260 del self.option_groups
1264 # -- Private methods -----------------------------------------------
1265 # (used by our or OptionContainer's constructor)
1267 def _create_option_list(self):
1268 self.option_list = []
1269 self.option_groups = []
1270 self._create_option_mappings()
1272 def _add_help_option(self):
1273 self.add_option("-h", "--help",
1275 help=_("show this help message and exit"))
1277 def _add_version_option(self):
1278 self.add_option("--version",
1280 help=_("show program's version number and exit"))
1282 def _populate_option_list(self, option_list, add_help=True):
1283 if self.standard_option_list:
1284 self.add_options(self.standard_option_list)
1286 self.add_options(option_list)
1288 self._add_version_option()
1290 self._add_help_option()
1292 def _init_parsing_state(self):
1293 # These are set in parse_args() for the convenience of callbacks.
1299 # -- Simple modifier methods ---------------------------------------
1301 def set_usage(self, usage):
1303 self.usage = _("%prog [options]")
1304 elif usage is SUPPRESS_USAGE:
1306 # For backwards compatibility with Optik 1.3 and earlier.
1307 elif string.lower(usage)[:7] == "usage: ":
1308 self.usage = usage[7:]
1312 def enable_interspersed_args(self):
1313 self.allow_interspersed_args = True
1315 def disable_interspersed_args(self):
1316 self.allow_interspersed_args = False
1318 def set_process_default_values(self, process):
1319 self.process_default_values = process
1321 def set_default(self, dest, value):
1322 self.defaults[dest] = value
1324 def set_defaults(self, **kwargs):
1325 self.defaults.update(kwargs)
1327 def _get_all_options(self):
1328 options = self.option_list[:]
1329 for group in self.option_groups:
1330 options.extend(group.option_list)
1333 def get_default_values(self):
1334 if not self.process_default_values:
1335 # Old, pre-Optik 1.5 behaviour.
1336 return Values(self.defaults)
1338 defaults = self.defaults.copy()
1339 for option in self._get_all_options():
1340 default = defaults.get(option.dest)
1341 if isbasestring(default):
1342 opt_str = option.get_opt_string()
1343 defaults[option.dest] = option.check_value(opt_str, default)
1345 return Values(defaults)
1348 # -- OptionGroup methods -------------------------------------------
1350 def add_option_group(self, *args, **kwargs):
1351 # XXX lots of overlap with OptionContainer.add_option()
1352 if type(args[0]) is str:
1353 group = apply(OptionGroup, (self,) + args, kwargs)
1354 elif len(args) == 1 and not kwargs:
1356 if not isinstance(group, OptionGroup):
1357 raise TypeError, "not an OptionGroup instance: %r" % group
1358 if group.parser is not self:
1359 raise ValueError, "invalid OptionGroup (wrong parser)"
1361 raise TypeError, "invalid arguments"
1363 self.option_groups.append(group)
1366 def get_option_group(self, opt_str):
1367 option = (self._short_opt.get(opt_str) or
1368 self._long_opt.get(opt_str))
1369 if option and option.container is not self:
1370 return option.container
1374 # -- Option-parsing methods ----------------------------------------
1376 def _get_args(self, args):
1380 return args[:] # don't modify caller's list
1382 def parse_args(self, args=None, values=None):
1384 parse_args(args : [string] = sys.argv[1:],
1385 values : Values = None)
1386 -> (values : Values, args : [string])
1388 Parse the command-line options found in 'args' (default:
1389 sys.argv[1:]). Any errors result in a call to 'error()', which
1390 by default prints the usage message to stderr and calls
1391 sys.exit() with an error message. On success returns a pair
1392 (values, args) where 'values' is an Values instance (with all
1393 your option values) and 'args' is the list of arguments left
1394 over after parsing options.
1396 rargs = self._get_args(args)
1398 values = self.get_default_values()
1400 # Store the halves of the argument list as attributes for the
1401 # convenience of callbacks:
1403 # the rest of the command-line (the "r" stands for
1404 # "remaining" or "right-hand")
1406 # the leftover arguments -- ie. what's left after removing
1407 # options and their arguments (the "l" stands for "leftover"
1410 self.largs = largs = []
1411 self.values = values
1414 stop = self._process_args(largs, rargs, values)
1415 except (BadOptionError, OptionValueError), err:
1416 self.error(str(err))
1418 args = largs + rargs
1419 return self.check_values(values, args)
1421 def check_values(self, values, args):
1423 check_values(values : Values, args : [string])
1424 -> (values : Values, args : [string])
1426 Check that the supplied option values and leftover arguments are
1427 valid. Returns the option values and leftover arguments
1428 (possibly adjusted, possibly completely new -- whatever you
1429 like). Default implementation just returns the passed-in
1430 values; subclasses may override as desired.
1432 return (values, args)
1434 def _process_args(self, largs, rargs, values):
1435 """_process_args(largs : [string],
1439 Process command-line arguments and populate 'values', consuming
1440 options and arguments from 'rargs'. If 'allow_interspersed_args' is
1441 false, stop at the first non-option argument. If true, accumulate any
1442 interspersed non-option arguments in 'largs'.
1446 # We handle bare "--" explicitly, and bare "-" is handled by the
1447 # standard arg handler since the short arg case ensures that the
1448 # len of the opt string is greater than 1.
1452 elif arg[0:2] == "--":
1453 # process a single long option (possibly with value(s))
1454 self._process_long_opt(rargs, values)
1455 elif arg[:1] == "-" and len(arg) > 1:
1456 # process a cluster of short options (possibly with
1457 # value(s) for the last one only)
1458 self._process_short_opts(rargs, values)
1459 elif self.allow_interspersed_args:
1463 return # stop now, leave this arg in rargs
1465 # Say this is the original argument list:
1466 # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)]
1468 # (we are about to process arg(i)).
1470 # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of
1471 # [arg0, ..., arg(i-1)] (any options and their arguments will have
1472 # been removed from largs).
1474 # The while loop will usually consume 1 or more arguments per pass.
1475 # If it consumes 1 (eg. arg is an option that takes no arguments),
1476 # then after _process_arg() is done the situation is:
1478 # largs = subset of [arg0, ..., arg(i)]
1479 # rargs = [arg(i+1), ..., arg(N-1)]
1481 # If allow_interspersed_args is false, largs will always be
1482 # *empty* -- still a subset of [arg0, ..., arg(i-1)], but
1483 # not a very interesting subset!
1485 def _match_long_opt(self, opt):
1486 """_match_long_opt(opt : string) -> string
1488 Determine which long option string 'opt' matches, ie. which one
1489 it is an unambiguous abbrevation for. Raises BadOptionError if
1490 'opt' doesn't unambiguously match any long option string.
1492 return _match_abbrev(opt, self._long_opt)
1494 def _process_long_opt(self, rargs, values):
1497 # Value explicitly attached to arg? Pretend it's the next
1500 (opt, next_arg) = string.split(arg, "=", 1)
1501 rargs.insert(0, next_arg)
1502 had_explicit_value = True
1505 had_explicit_value = False
1507 opt = self._match_long_opt(opt)
1508 option = self._long_opt[opt]
1509 if option.takes_value():
1510 nargs = option.nargs
1511 if len(rargs) < nargs:
1513 self.error(_("%s option requires an argument") % opt)
1515 self.error(_("%s option requires %d arguments")
1518 value = rargs.pop(0)
1520 value = tuple(rargs[0:nargs])
1523 elif had_explicit_value:
1524 self.error(_("%s option does not take a value") % opt)
1529 option.process(opt, value, values, self)
1531 def _process_short_opts(self, rargs, values):
1537 option = self._short_opt.get(opt)
1538 i = i + 1 # we have consumed a character
1541 raise BadOptionError(opt)
1542 if option.takes_value():
1543 # Any characters left in arg? Pretend they're the
1544 # next arg, and stop consuming characters of arg.
1546 rargs.insert(0, arg[i:])
1549 nargs = option.nargs
1550 if len(rargs) < nargs:
1552 self.error(_("%s option requires an argument") % opt)
1554 self.error(_("%s option requires %d arguments")
1557 value = rargs.pop(0)
1559 value = tuple(rargs[0:nargs])
1562 else: # option doesn't take a value
1565 option.process(opt, value, values, self)
1571 # -- Feedback methods ----------------------------------------------
1573 def get_prog_name(self):
1574 if self.prog is None:
1575 return os.path.basename(sys.argv[0])
1579 def expand_prog_name(self, s):
1580 return string.replace(s, "%prog", self.get_prog_name())
1582 def get_description(self):
1583 return self.expand_prog_name(self.description)
1585 def exit(self, status=0, msg=None):
1587 sys.stderr.write(msg)
1590 def error(self, msg):
1591 """error(msg : string)
1593 Print a usage message incorporating 'msg' to stderr and exit.
1594 If you override this in a subclass, it should not return -- it
1595 should either exit or raise an exception.
1597 self.print_usage(sys.stderr)
1598 self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg))
1600 def get_usage(self):
1602 return self.formatter.format_usage(
1603 self.expand_prog_name(self.usage))
1607 def print_usage(self, file=None):
1608 """print_usage(file : file = stdout)
1610 Print the usage message for the current program (self.usage) to
1611 'file' (default stdout). Any occurence of the string "%prog" in
1612 self.usage is replaced with the name of the current program
1613 (basename of sys.argv[0]). Does nothing if self.usage is empty
1617 file.write(self.get_usage() + '\n')
1619 def get_version(self):
1621 return self.expand_prog_name(self.version)
1625 def print_version(self, file=None):
1626 """print_version(file : file = stdout)
1628 Print the version message for this program (self.version) to
1629 'file' (default stdout). As with print_usage(), any occurence
1630 of "%prog" in self.version is replaced by the current program's
1631 name. Does nothing if self.version is empty or undefined.
1634 file.write(self.get_version() + '\n')
1636 def format_option_help(self, formatter=None):
1637 if formatter is None:
1638 formatter = self.formatter
1639 formatter.store_option_strings(self)
1641 result.append(formatter.format_heading(_("Options")))
1643 if self.option_list:
1644 result.append(OptionContainer.format_option_help(self, formatter))
1646 for group in self.option_groups:
1647 result.append(group.format_help(formatter))
1650 # Drop the last "\n", or the header if no options or option groups:
1651 return string.join(result[:-1], "")
1653 def format_epilog(self, formatter):
1654 return formatter.format_epilog(self.epilog)
1656 def format_help(self, formatter=None):
1657 if formatter is None:
1658 formatter = self.formatter
1661 result.append(self.get_usage() + "\n")
1662 if self.description:
1663 result.append(self.format_description(formatter) + "\n")
1664 result.append(self.format_option_help(formatter))
1665 result.append(self.format_epilog(formatter))
1666 return string.join(result, "")
1668 # used by test suite
1669 def _get_encoding(self, file):
1670 encoding = getattr(file, "encoding", None)
1672 encoding = sys.getdefaultencoding()
1675 def print_help(self, file=None):
1676 """print_help(file : file = stdout)
1678 Print an extended help message, listing all options and any
1679 help text provided with them, to 'file' (default stdout).
1683 encoding = self._get_encoding(file)
1684 file.write(encode_wrapper(self.format_help(), encoding, "replace"))
1686 # class OptionParser
1689 def _match_abbrev(s, wordmap):
1690 """_match_abbrev(s : string, wordmap : {string : Option}) -> string
1692 Return the string key in 'wordmap' for which 's' is an unambiguous
1693 abbreviation. If 's' is found to be ambiguous or doesn't match any of
1694 'words', raise BadOptionError.
1696 # Is there an exact match?
1697 if wordmap.has_key(s):
1700 # Isolate all words with s as a prefix.
1701 possibilities = filter(lambda w: w[:len(s)] == s, wordmap.keys())
1702 # No exact match, so there had better be just one possibility.
1703 if len(possibilities) == 1:
1704 return possibilities[0]
1705 elif not possibilities:
1706 raise BadOptionError(s)
1708 # More than one possible completion: ambiguous prefix.
1709 possibilities.sort()
1710 raise AmbiguousOptionError(s, possibilities)
1713 # Some day, there might be many Option classes. As of Optik 1.3, the
1714 # preferred way to instantiate Options is indirectly, via make_option(),
1715 # which will become a factory function when there are many Option
1717 make_option = Option
1721 # indent-tabs-mode:nil
1723 # vim: set expandtab tabstop=4 shiftwidth=4: