mirror of
https://github.com/evennia/evennia.git
synced 2026-03-20 14:56:30 +01:00
2791 lines
381 KiB
HTML
2791 lines
381 KiB
HTML
|
|
|
||
|
|
<!DOCTYPE html>
|
||
|
|
|
||
|
|
<html lang="en">
|
||
|
|
<head>
|
||
|
|
<meta charset="utf-8" />
|
||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
|
<title>argparse — Evennia latest documentation</title>
|
||
|
|
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
|
||
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
|
||
|
|
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=245aff17" />
|
||
|
|
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
|
|
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
|
||
|
|
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||
|
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
|
|
<link rel="index" title="Index" href="../genindex.html" />
|
||
|
|
<link rel="search" title="Search" href="../search.html" />
|
||
|
|
</head><body>
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
||
|
|
<h3>Navigation</h3>
|
||
|
|
<ul>
|
||
|
|
<li class="right" style="margin-right: 10px">
|
||
|
|
<a href="../genindex.html" title="General Index"
|
||
|
|
accesskey="I">index</a></li>
|
||
|
|
<li class="right" >
|
||
|
|
<a href="../py-modindex.html" title="Python Module Index"
|
||
|
|
>modules</a> |</li>
|
||
|
|
<li class="nav-item nav-item-0"><a href="../index.html">Evennia latest</a> »</li>
|
||
|
|
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Module code</a> »</li>
|
||
|
|
<li class="nav-item nav-item-this"><a href="">argparse</a></li>
|
||
|
|
</ul>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="document">
|
||
|
|
|
||
|
|
<div class="documentwrapper">
|
||
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
|
|
<div class="sphinxsidebarwrapper">
|
||
|
|
<search id="searchbox" style="display: none" role="search">
|
||
|
|
<h3 id="searchlabel">Quick search</h3>
|
||
|
|
<div class="searchformwrapper">
|
||
|
|
<form class="search" action="../search.html" method="get">
|
||
|
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||
|
|
<input type="submit" value="Go" />
|
||
|
|
</form>
|
||
|
|
</div>
|
||
|
|
</search>
|
||
|
|
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Links</h3>
|
||
|
|
<ul>
|
||
|
|
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
|
||
|
|
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
|
||
|
|
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
|
||
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
||
|
|
<li>
|
||
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
||
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
||
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
||
|
|
</li>
|
||
|
|
</ul>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="bodywrapper">
|
||
|
|
<div class="body" role="main">
|
||
|
|
|
||
|
|
<h1>Source code for argparse</h1><div class="highlight"><pre>
|
||
|
|
<span></span><span class="c1"># Author: Steven J. Bethard <steven.bethard@gmail.com>.</span>
|
||
|
|
<span class="c1"># New maintainer as of 29 August 2019: Raymond Hettinger <raymond.hettinger@gmail.com></span>
|
||
|
|
|
||
|
|
<span class="sd">"""Command-line parsing library</span>
|
||
|
|
|
||
|
|
<span class="sd">This module is an optparse-inspired command-line parsing library that:</span>
|
||
|
|
|
||
|
|
<span class="sd"> - handles both optional and positional arguments</span>
|
||
|
|
<span class="sd"> - produces highly informative usage messages</span>
|
||
|
|
<span class="sd"> - supports parsers that dispatch to sub-parsers</span>
|
||
|
|
|
||
|
|
<span class="sd">The following is a simple usage example that sums integers from the</span>
|
||
|
|
<span class="sd">command-line and writes the result to a file::</span>
|
||
|
|
|
||
|
|
<span class="sd"> parser = argparse.ArgumentParser(</span>
|
||
|
|
<span class="sd"> description='sum the integers at the command line')</span>
|
||
|
|
<span class="sd"> parser.add_argument(</span>
|
||
|
|
<span class="sd"> 'integers', metavar='int', nargs='+', type=int,</span>
|
||
|
|
<span class="sd"> help='an integer to be summed')</span>
|
||
|
|
<span class="sd"> parser.add_argument(</span>
|
||
|
|
<span class="sd"> '--log', default=sys.stdout, type=argparse.FileType('w'),</span>
|
||
|
|
<span class="sd"> help='the file where the sum should be written')</span>
|
||
|
|
<span class="sd"> args = parser.parse_args()</span>
|
||
|
|
<span class="sd"> args.log.write('%s' % sum(args.integers))</span>
|
||
|
|
<span class="sd"> args.log.close()</span>
|
||
|
|
|
||
|
|
<span class="sd">The module contains the following public classes:</span>
|
||
|
|
|
||
|
|
<span class="sd"> - ArgumentParser -- The main entry point for command-line parsing. As the</span>
|
||
|
|
<span class="sd"> example above shows, the add_argument() method is used to populate</span>
|
||
|
|
<span class="sd"> the parser with actions for optional and positional arguments. Then</span>
|
||
|
|
<span class="sd"> the parse_args() method is invoked to convert the args at the</span>
|
||
|
|
<span class="sd"> command-line into an object with attributes.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - ArgumentError -- The exception raised by ArgumentParser objects when</span>
|
||
|
|
<span class="sd"> there are errors with the parser's actions. Errors raised while</span>
|
||
|
|
<span class="sd"> parsing the command-line are caught by ArgumentParser and emitted</span>
|
||
|
|
<span class="sd"> as command-line messages.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - FileType -- A factory for defining types of files to be created. As the</span>
|
||
|
|
<span class="sd"> example above shows, instances of FileType are typically passed as</span>
|
||
|
|
<span class="sd"> the type= argument of add_argument() calls.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - Action -- The base class for parser actions. Typically actions are</span>
|
||
|
|
<span class="sd"> selected by passing strings like 'store_true' or 'append_const' to</span>
|
||
|
|
<span class="sd"> the action= argument of add_argument(). However, for greater</span>
|
||
|
|
<span class="sd"> customization of ArgumentParser actions, subclasses of Action may</span>
|
||
|
|
<span class="sd"> be defined and passed as the action= argument.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,</span>
|
||
|
|
<span class="sd"> ArgumentDefaultsHelpFormatter -- Formatter classes which</span>
|
||
|
|
<span class="sd"> may be passed as the formatter_class= argument to the</span>
|
||
|
|
<span class="sd"> ArgumentParser constructor. HelpFormatter is the default,</span>
|
||
|
|
<span class="sd"> RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser</span>
|
||
|
|
<span class="sd"> not to change the formatting for help text, and</span>
|
||
|
|
<span class="sd"> ArgumentDefaultsHelpFormatter adds information about argument defaults</span>
|
||
|
|
<span class="sd"> to the help.</span>
|
||
|
|
|
||
|
|
<span class="sd">All other classes in this module are considered implementation details.</span>
|
||
|
|
<span class="sd">(Also note that HelpFormatter and RawDescriptionHelpFormatter are only</span>
|
||
|
|
<span class="sd">considered public as object names -- the API of the formatter objects is</span>
|
||
|
|
<span class="sd">still considered an implementation detail.)</span>
|
||
|
|
<span class="sd">"""</span>
|
||
|
|
|
||
|
|
<span class="n">__version__</span> <span class="o">=</span> <span class="s1">'1.1'</span>
|
||
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
|
||
|
|
<span class="s1">'ArgumentParser'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'ArgumentError'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'ArgumentTypeError'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'BooleanOptionalAction'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'FileType'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'HelpFormatter'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'ArgumentDefaultsHelpFormatter'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'RawDescriptionHelpFormatter'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'RawTextHelpFormatter'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'MetavarTypeHelpFormatter'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'Namespace'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'Action'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'ONE_OR_MORE'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'OPTIONAL'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'PARSER'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'REMAINDER'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'SUPPRESS'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'ZERO_OR_MORE'</span><span class="p">,</span>
|
||
|
|
<span class="p">]</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">_os</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">_re</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">_sys</span>
|
||
|
|
|
||
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">gettext</span><span class="w"> </span><span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span><span class="p">,</span> <span class="n">ngettext</span>
|
||
|
|
|
||
|
|
<span class="n">SUPPRESS</span> <span class="o">=</span> <span class="s1">'==SUPPRESS=='</span>
|
||
|
|
|
||
|
|
<span class="n">OPTIONAL</span> <span class="o">=</span> <span class="s1">'?'</span>
|
||
|
|
<span class="n">ZERO_OR_MORE</span> <span class="o">=</span> <span class="s1">'*'</span>
|
||
|
|
<span class="n">ONE_OR_MORE</span> <span class="o">=</span> <span class="s1">'+'</span>
|
||
|
|
<span class="n">PARSER</span> <span class="o">=</span> <span class="s1">'A...'</span>
|
||
|
|
<span class="n">REMAINDER</span> <span class="o">=</span> <span class="s1">'...'</span>
|
||
|
|
<span class="n">_UNRECOGNIZED_ARGS_ATTR</span> <span class="o">=</span> <span class="s1">'_unrecognized_args'</span>
|
||
|
|
|
||
|
|
<span class="c1"># =============================</span>
|
||
|
|
<span class="c1"># Utility functions and classes</span>
|
||
|
|
<span class="c1"># =============================</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_AttributeHolder</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Abstract base class that provides __repr__.</span>
|
||
|
|
|
||
|
|
<span class="sd"> The __repr__ method returns a string in the format::</span>
|
||
|
|
<span class="sd"> ClassName(attr=name, attr=name, ...)</span>
|
||
|
|
<span class="sd"> The attributes are determined either by a class-level attribute,</span>
|
||
|
|
<span class="sd"> '_kwarg_names', or by inspecting the instance __dict__.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">type_name</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
|
||
|
|
<span class="n">arg_strings</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">star_args</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_args</span><span class="p">():</span>
|
||
|
|
<span class="n">arg_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
|
||
|
|
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_kwargs</span><span class="p">():</span>
|
||
|
|
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">():</span>
|
||
|
|
<span class="n">arg_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">=</span><span class="si">%r</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">star_args</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
||
|
|
<span class="k">if</span> <span class="n">star_args</span><span class="p">:</span>
|
||
|
|
<span class="n">arg_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'**</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="nb">repr</span><span class="p">(</span><span class="n">star_args</span><span class="p">))</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_args</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_copy_items</span><span class="p">(</span><span class="n">items</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">items</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="p">[]</span>
|
||
|
|
<span class="c1"># The copy module is used only in the 'append' and 'append_const'</span>
|
||
|
|
<span class="c1"># actions, and it is needed only when the default value isn't a list.</span>
|
||
|
|
<span class="c1"># Delay its import for speeding up the common case.</span>
|
||
|
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">items</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="n">items</span><span class="p">[:]</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">copy</span>
|
||
|
|
<span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">items</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># ===============</span>
|
||
|
|
<span class="c1"># Formatting Help</span>
|
||
|
|
<span class="c1"># ===============</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">HelpFormatter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Formatter for generating usage messages and argument help strings.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Only the name of this class is considered a public API. All the methods</span>
|
||
|
|
<span class="sd"> provided by the class are considered an implementation detail.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">prog</span><span class="p">,</span>
|
||
|
|
<span class="n">indent_increment</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||
|
|
<span class="n">max_help_position</span><span class="o">=</span><span class="mi">24</span><span class="p">,</span>
|
||
|
|
<span class="n">width</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="c1"># default setting for width</span>
|
||
|
|
<span class="k">if</span> <span class="n">width</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">shutil</span>
|
||
|
|
<span class="n">width</span> <span class="o">=</span> <span class="n">shutil</span><span class="o">.</span><span class="n">get_terminal_size</span><span class="p">()</span><span class="o">.</span><span class="n">columns</span>
|
||
|
|
<span class="n">width</span> <span class="o">-=</span> <span class="mi">2</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_prog</span> <span class="o">=</span> <span class="n">prog</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent_increment</span> <span class="o">=</span> <span class="n">indent_increment</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_max_help_position</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">max_help_position</span><span class="p">,</span>
|
||
|
|
<span class="nb">max</span><span class="p">(</span><span class="n">width</span> <span class="o">-</span> <span class="mi">20</span><span class="p">,</span> <span class="n">indent_increment</span> <span class="o">*</span> <span class="mi">2</span><span class="p">))</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_width</span> <span class="o">=</span> <span class="n">width</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_level</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_action_max_length</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_root_section</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_Section</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_section</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_root_section</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_whitespace_matcher</span> <span class="o">=</span> <span class="n">_re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'\s+'</span><span class="p">,</span> <span class="n">_re</span><span class="o">.</span><span class="n">ASCII</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_long_break_matcher</span> <span class="o">=</span> <span class="n">_re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'\n\n\n+'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># ===============================</span>
|
||
|
|
<span class="c1"># Section and indentation methods</span>
|
||
|
|
<span class="c1"># ===============================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent_increment</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_level</span> <span class="o">+=</span> <span class="mi">1</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_dedent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span> <span class="o">-=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_indent_increment</span>
|
||
|
|
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'Indent decreased below 0.'</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_level</span> <span class="o">-=</span> <span class="mi">1</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_Section</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">formatter</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">heading</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">formatter</span> <span class="o">=</span> <span class="n">formatter</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">heading</span> <span class="o">=</span> <span class="n">heading</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">items</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="c1"># format the indented section</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">formatter</span><span class="o">.</span><span class="n">_indent</span><span class="p">()</span>
|
||
|
|
<span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">formatter</span><span class="o">.</span><span class="n">_join_parts</span>
|
||
|
|
<span class="n">item_help</span> <span class="o">=</span> <span class="n">join</span><span class="p">([</span><span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span> <span class="k">for</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">])</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">formatter</span><span class="o">.</span><span class="n">_dedent</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># return nothing if the section was empty</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">item_help</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">''</span>
|
||
|
|
|
||
|
|
<span class="c1"># add the heading if the section was non-empty</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">heading</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">heading</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">current_indent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">formatter</span><span class="o">.</span><span class="n">_current_indent</span>
|
||
|
|
<span class="n">heading_text</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'</span><span class="si">%(heading)s</span><span class="s1">:'</span><span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">(</span><span class="n">heading</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">heading</span><span class="p">)</span>
|
||
|
|
<span class="n">heading</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%*s%s</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">current_indent</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">heading_text</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">heading</span> <span class="o">=</span> <span class="s1">''</span>
|
||
|
|
|
||
|
|
<span class="c1"># join the section-initial newline, the heading and the help</span>
|
||
|
|
<span class="k">return</span> <span class="n">join</span><span class="p">([</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">,</span> <span class="n">heading</span><span class="p">,</span> <span class="n">item_help</span><span class="p">,</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_add_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_section</span><span class="o">.</span><span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># ========================</span>
|
||
|
|
<span class="c1"># Message building methods</span>
|
||
|
|
<span class="c1"># ========================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">start_section</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">heading</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">()</span>
|
||
|
|
<span class="n">section</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_Section</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_section</span><span class="p">,</span> <span class="n">heading</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_add_item</span><span class="p">(</span><span class="n">section</span><span class="o">.</span><span class="n">format_help</span><span class="p">,</span> <span class="p">[])</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_section</span> <span class="o">=</span> <span class="n">section</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">end_section</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_current_section</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_section</span><span class="o">.</span><span class="n">parent</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dedent</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span> <span class="ow">and</span> <span class="n">text</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_add_item</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_format_text</span><span class="p">,</span> <span class="p">[</span><span class="n">text</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">usage</span><span class="p">,</span> <span class="n">actions</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">usage</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="n">usage</span><span class="p">,</span> <span class="n">actions</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">prefix</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_add_item</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_format_usage</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_argument</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># find all invocations</span>
|
||
|
|
<span class="n">get_invocation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_action_invocation</span>
|
||
|
|
<span class="n">invocation_lengths</span> <span class="o">=</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">get_invocation</span><span class="p">(</span><span class="n">action</span><span class="p">))</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span><span class="p">]</span>
|
||
|
|
<span class="k">for</span> <span class="n">subaction</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_iter_indented_subactions</span><span class="p">(</span><span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="n">invocation_lengths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">get_invocation</span><span class="p">(</span><span class="n">subaction</span><span class="p">))</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># update the maximum item length</span>
|
||
|
|
<span class="n">action_length</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">invocation_lengths</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_action_max_length</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_action_max_length</span><span class="p">,</span>
|
||
|
|
<span class="n">action_length</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># add the item to the list</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_add_item</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_format_action</span><span class="p">,</span> <span class="p">[</span><span class="n">action</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">actions</span><span class="p">):</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">actions</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="c1"># Help-formatting methods</span>
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_root_section</span><span class="o">.</span><span class="n">format_help</span><span class="p">()</span>
|
||
|
|
<span class="k">if</span> <span class="n">help</span><span class="p">:</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_long_break_matcher</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">,</span> <span class="n">help</span><span class="p">)</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="n">help</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span>
|
||
|
|
<span class="k">return</span> <span class="n">help</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_join_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part_strings</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">part</span>
|
||
|
|
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">part_strings</span>
|
||
|
|
<span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_format_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">usage</span><span class="p">,</span> <span class="n">actions</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">prefix</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">prefix</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">prefix</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'usage: '</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if usage is specified, use that</span>
|
||
|
|
<span class="k">if</span> <span class="n">usage</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">usage</span> <span class="o">=</span> <span class="n">usage</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prog</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if no optionals or positionals are available, usage is just prog</span>
|
||
|
|
<span class="k">elif</span> <span class="n">usage</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">actions</span><span class="p">:</span>
|
||
|
|
<span class="n">usage</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%(prog)s</span><span class="s1">'</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prog</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if optionals and positionals are available, calculate usage</span>
|
||
|
|
<span class="k">elif</span> <span class="n">usage</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">prog</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%(prog)s</span><span class="s1">'</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prog</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># split optionals from positionals</span>
|
||
|
|
<span class="n">optionals</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">positionals</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">optionals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">positionals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># build full usage string</span>
|
||
|
|
<span class="nb">format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_actions_usage</span>
|
||
|
|
<span class="n">action_usage</span> <span class="o">=</span> <span class="nb">format</span><span class="p">(</span><span class="n">optionals</span> <span class="o">+</span> <span class="n">positionals</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span>
|
||
|
|
<span class="n">usage</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">s</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="p">[</span><span class="n">prog</span><span class="p">,</span> <span class="n">action_usage</span><span class="p">]</span> <span class="k">if</span> <span class="n">s</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="c1"># wrap the usage parts if it's too long</span>
|
||
|
|
<span class="n">text_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_width</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">usage</span><span class="p">)</span> <span class="o">></span> <span class="n">text_width</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># break usage into wrappable parts</span>
|
||
|
|
<span class="n">opt_parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_actions_usage_parts</span><span class="p">(</span><span class="n">optionals</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span>
|
||
|
|
<span class="n">pos_parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_actions_usage_parts</span><span class="p">(</span><span class="n">positionals</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># helper for wrapping lines</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">get_lines</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">line</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">indent_length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">indent</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">prefix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">line_len</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">line_len</span> <span class="o">=</span> <span class="n">indent_length</span> <span class="o">-</span> <span class="mi">1</span>
|
||
|
|
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">line_len</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="o">></span> <span class="n">text_width</span> <span class="ow">and</span> <span class="n">line</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">indent</span> <span class="o">+</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span><span class="p">))</span>
|
||
|
|
<span class="n">line</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">line_len</span> <span class="o">=</span> <span class="n">indent_length</span> <span class="o">-</span> <span class="mi">1</span>
|
||
|
|
<span class="n">line</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
|
||
|
|
<span class="n">line_len</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
|
||
|
|
<span class="k">if</span> <span class="n">line</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">indent</span> <span class="o">+</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span><span class="p">))</span>
|
||
|
|
<span class="k">if</span> <span class="n">prefix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">indent_length</span><span class="p">:]</span>
|
||
|
|
<span class="k">return</span> <span class="n">lines</span>
|
||
|
|
|
||
|
|
<span class="c1"># if prog is short, follow it with optionals or positionals</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span> <span class="o"><=</span> <span class="mf">0.75</span> <span class="o">*</span> <span class="n">text_width</span><span class="p">:</span>
|
||
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="s1">' '</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">opt_parts</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="n">get_lines</span><span class="p">([</span><span class="n">prog</span><span class="p">]</span> <span class="o">+</span> <span class="n">opt_parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">prefix</span><span class="p">)</span>
|
||
|
|
<span class="n">lines</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">get_lines</span><span class="p">(</span><span class="n">pos_parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">))</span>
|
||
|
|
<span class="k">elif</span> <span class="n">pos_parts</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="n">get_lines</span><span class="p">([</span><span class="n">prog</span><span class="p">]</span> <span class="o">+</span> <span class="n">pos_parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">prefix</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">prog</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># if prog is long, put it on its own line</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="s1">' '</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
|
||
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="n">opt_parts</span> <span class="o">+</span> <span class="n">pos_parts</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="n">get_lines</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">lines</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">get_lines</span><span class="p">(</span><span class="n">opt_parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">))</span>
|
||
|
|
<span class="n">lines</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">get_lines</span><span class="p">(</span><span class="n">pos_parts</span><span class="p">,</span> <span class="n">indent</span><span class="p">))</span>
|
||
|
|
<span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">prog</span><span class="p">]</span> <span class="o">+</span> <span class="n">lines</span>
|
||
|
|
|
||
|
|
<span class="c1"># join lines into usage</span>
|
||
|
|
<span class="n">usage</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># prefix with 'usage:'</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'</span><span class="si">%s%s</span><span class="se">\n\n</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">usage</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_format_actions_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">actions</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_actions_usage_parts</span><span class="p">(</span><span class="n">actions</span><span class="p">,</span> <span class="n">groups</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_actions_usage_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">actions</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span>
|
||
|
|
<span class="c1"># find group indices and identify actions in groups</span>
|
||
|
|
<span class="n">group_actions</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
|
<span class="n">inserts</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">groups</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'empty group </span><span class="si">{</span><span class="n">group</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">help</span> <span class="ow">is</span> <span class="n">SUPPRESS</span> <span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">):</span>
|
||
|
|
<span class="k">continue</span>
|
||
|
|
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">start</span> <span class="o">=</span> <span class="n">actions</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||
|
|
<span class="k">continue</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">actions</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="o">==</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">group_actions</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">)</span>
|
||
|
|
<span class="n">inserts</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span> <span class="o">=</span> <span class="n">group</span>
|
||
|
|
|
||
|
|
<span class="c1"># collect all actions format strings</span>
|
||
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">actions</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># suppressed arguments are marked with None</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span> <span class="ow">is</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">part</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># produce all arg strings</span>
|
||
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_default_metavar_for_positional</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_args</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if it's in a group, strip the outer []</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">group_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">part</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'['</span> <span class="ow">and</span> <span class="n">part</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">']'</span><span class="p">:</span>
|
||
|
|
<span class="n">part</span> <span class="o">=</span> <span class="n">part</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># produce the first way to invoke the option in brackets</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">option_string</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the Optional doesn't take a value, format is:</span>
|
||
|
|
<span class="c1"># -s or --long</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||
|
|
<span class="n">part</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">format_usage</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the Optional takes a value, format is:</span>
|
||
|
|
<span class="c1"># -s ARGS or --long ARGS</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_default_metavar_for_optional</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="n">args_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_args</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
|
||
|
|
<span class="n">part</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">option_string</span><span class="p">,</span> <span class="n">args_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># make it look optional if it's not required or in a group</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">required</span> <span class="ow">and</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">group_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">part</span> <span class="o">=</span> <span class="s1">'[</span><span class="si">%s</span><span class="s1">]'</span> <span class="o">%</span> <span class="n">part</span>
|
||
|
|
|
||
|
|
<span class="c1"># add the action string to the list</span>
|
||
|
|
<span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># group mutually exclusive actions</span>
|
||
|
|
<span class="n">inserted_separators_indices</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
|
<span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">inserts</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||
|
|
<span class="n">group</span> <span class="o">=</span> <span class="n">inserts</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
|
||
|
|
<span class="n">group_parts</span> <span class="o">=</span> <span class="p">[</span><span class="n">item</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">item</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">]</span>
|
||
|
|
<span class="n">group_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">group_parts</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">required</span><span class="p">:</span>
|
||
|
|
<span class="nb">open</span><span class="p">,</span> <span class="n">close</span> <span class="o">=</span> <span class="s2">"()"</span> <span class="k">if</span> <span class="n">group_size</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="nb">open</span><span class="p">,</span> <span class="n">close</span> <span class="o">=</span> <span class="s2">"[]"</span>
|
||
|
|
<span class="n">group_parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">open</span> <span class="o">+</span> <span class="n">group_parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="n">group_parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">group_parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">close</span>
|
||
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">group_parts</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">):</span>
|
||
|
|
<span class="c1"># insert a separator if not already done in a nested group</span>
|
||
|
|
<span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">inserted_separators_indices</span><span class="p">:</span>
|
||
|
|
<span class="n">parts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">part</span> <span class="o">+</span> <span class="s1">' |'</span>
|
||
|
|
<span class="n">inserted_separators_indices</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
||
|
|
<span class="n">parts</span><span class="p">[</span><span class="n">start</span> <span class="o">+</span> <span class="n">group_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">group_parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">group_size</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
|
||
|
|
<span class="n">parts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the usage parts</span>
|
||
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">item</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">parts</span> <span class="k">if</span> <span class="n">item</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_format_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="s1">'%(prog)'</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
|
||
|
|
<span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prog</span><span class="p">)</span>
|
||
|
|
<span class="n">text_width</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_width</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span><span class="p">,</span> <span class="mi">11</span><span class="p">)</span>
|
||
|
|
<span class="n">indent</span> <span class="o">=</span> <span class="s1">' '</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fill_text</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">text_width</span><span class="p">,</span> <span class="n">indent</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'</span><span class="se">\n\n</span><span class="s1">'</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_format_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="c1"># determine the required width and the entry label</span>
|
||
|
|
<span class="n">help_position</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_action_max_length</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_max_help_position</span><span class="p">)</span>
|
||
|
|
<span class="n">help_width</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_width</span> <span class="o">-</span> <span class="n">help_position</span><span class="p">,</span> <span class="mi">11</span><span class="p">)</span>
|
||
|
|
<span class="n">action_width</span> <span class="o">=</span> <span class="n">help_position</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span> <span class="o">-</span> <span class="mi">2</span>
|
||
|
|
<span class="n">action_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_action_invocation</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># no help; start on same line and add a final newline</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span><span class="p">:</span>
|
||
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">action_header</span>
|
||
|
|
<span class="n">action_header</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%*s%s</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="n">tup</span>
|
||
|
|
|
||
|
|
<span class="c1"># short action name; start on the same line and pad two spaces</span>
|
||
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">action_header</span><span class="p">)</span> <span class="o"><=</span> <span class="n">action_width</span><span class="p">:</span>
|
||
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">action_width</span><span class="p">,</span> <span class="n">action_header</span>
|
||
|
|
<span class="n">action_header</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%*s%-*s</span><span class="s1"> '</span> <span class="o">%</span> <span class="n">tup</span>
|
||
|
|
<span class="n">indent_first</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
|
|
||
|
|
<span class="c1"># long action name; start on the next line</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current_indent</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">action_header</span>
|
||
|
|
<span class="n">action_header</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%*s%s</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="n">tup</span>
|
||
|
|
<span class="n">indent_first</span> <span class="o">=</span> <span class="n">help_position</span>
|
||
|
|
|
||
|
|
<span class="c1"># collect the pieces of the action help</span>
|
||
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="p">[</span><span class="n">action_header</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># if there was help for the action, add lines of help text</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
|
||
|
|
<span class="n">help_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_expand_help</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">help_text</span><span class="p">:</span>
|
||
|
|
<span class="n">help_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_split_lines</span><span class="p">(</span><span class="n">help_text</span><span class="p">,</span> <span class="n">help_width</span><span class="p">)</span>
|
||
|
|
<span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%*s%s</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">indent_first</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">help_lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
|
||
|
|
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">help_lines</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
|
||
|
|
<span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%*s%s</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">help_position</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">line</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># or add a newline if the description doesn't end with one</span>
|
||
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">action_header</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">):</span>
|
||
|
|
<span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if there are any sub-actions, add their help as well</span>
|
||
|
|
<span class="k">for</span> <span class="n">subaction</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_iter_indented_subactions</span><span class="p">(</span><span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_format_action</span><span class="p">(</span><span class="n">subaction</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># return a single string</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_join_parts</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_format_action_invocation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_default_metavar_for_positional</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_metavar_formatter</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">default</span><span class="p">)(</span><span class="mi">1</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the Optional doesn't take a value, format is:</span>
|
||
|
|
<span class="c1"># -s, --long</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the Optional takes a value, format is:</span>
|
||
|
|
<span class="c1"># -s, --long ARGS</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_default_metavar_for_optional</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="n">args_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_args</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> <span class="n">args_string</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_metavar_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">default_metavar</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">metavar</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">metavar</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">choices</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'{</span><span class="si">%s</span><span class="s1">}'</span> <span class="o">%</span> <span class="s1">','</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">choices</span><span class="p">))</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">default_metavar</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format</span><span class="p">(</span><span class="n">tuple_size</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">result</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="p">)</span> <span class="o">*</span> <span class="n">tuple_size</span>
|
||
|
|
<span class="k">return</span> <span class="nb">format</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">default_metavar</span><span class="p">):</span>
|
||
|
|
<span class="n">get_metavar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metavar_formatter</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">default_metavar</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">get_metavar</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">OPTIONAL</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'[</span><span class="si">%s</span><span class="s1">]'</span> <span class="o">%</span> <span class="n">get_metavar</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">ZERO_OR_MORE</span><span class="p">:</span>
|
||
|
|
<span class="n">metavar</span> <span class="o">=</span> <span class="n">get_metavar</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">metavar</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'[</span><span class="si">%s</span><span class="s1"> [</span><span class="si">%s</span><span class="s1"> ...]]'</span> <span class="o">%</span> <span class="n">metavar</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'[</span><span class="si">%s</span><span class="s1"> ...]'</span> <span class="o">%</span> <span class="n">metavar</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">ONE_OR_MORE</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> [</span><span class="si">%s</span><span class="s1"> ...]'</span> <span class="o">%</span> <span class="n">get_metavar</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">REMAINDER</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'...'</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">PARSER</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> ...'</span> <span class="o">%</span> <span class="n">get_metavar</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">''</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">formats</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'</span><span class="si">%s</span><span class="s1">'</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">nargs</span><span class="p">)]</span>
|
||
|
|
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"invalid nargs value"</span><span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="kc">None</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">formats</span><span class="p">)</span> <span class="o">%</span> <span class="n">get_metavar</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">nargs</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">result</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_expand_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="n">params</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">vars</span><span class="p">(</span><span class="n">action</span><span class="p">),</span> <span class="n">prog</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prog</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">params</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">params</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="ow">is</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="k">del</span> <span class="n">params</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
|
||
|
|
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">params</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="s1">'__name__'</span><span class="p">):</span>
|
||
|
|
<span class="n">params</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="vm">__name__</span>
|
||
|
|
<span class="k">if</span> <span class="n">params</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'choices'</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">params</span><span class="p">[</span><span class="s1">'choices'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">params</span><span class="p">[</span><span class="s1">'choices'</span><span class="p">]))</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_help_string</span><span class="p">(</span><span class="n">action</span><span class="p">)</span> <span class="o">%</span> <span class="n">params</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_iter_indented_subactions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">get_subactions</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">_get_subactions</span>
|
||
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||
|
|
<span class="k">pass</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="p">()</span>
|
||
|
|
<span class="k">yield from</span> <span class="n">get_subactions</span><span class="p">()</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dedent</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_split_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">):</span>
|
||
|
|
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_whitespace_matcher</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||
|
|
<span class="c1"># The textwrap module is used only for formatting help.</span>
|
||
|
|
<span class="c1"># Delay its import for speeding up the common usage of argparse.</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">textwrap</span>
|
||
|
|
<span class="k">return</span> <span class="n">textwrap</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_fill_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">indent</span><span class="p">):</span>
|
||
|
|
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_whitespace_matcher</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">textwrap</span>
|
||
|
|
<span class="k">return</span> <span class="n">textwrap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span>
|
||
|
|
<span class="n">initial_indent</span><span class="o">=</span><span class="n">indent</span><span class="p">,</span>
|
||
|
|
<span class="n">subsequent_indent</span><span class="o">=</span><span class="n">indent</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_help_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_default_metavar_for_optional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_default_metavar_for_positional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">RawDescriptionHelpFormatter</span><span class="p">(</span><span class="n">HelpFormatter</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Help message formatter which retains any formatting in descriptions.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Only the name of this class is considered a public API. All the methods</span>
|
||
|
|
<span class="sd"> provided by the class are considered an implementation detail.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_fill_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">indent</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">indent</span> <span class="o">+</span> <span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">splitlines</span><span class="p">(</span><span class="n">keepends</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">RawTextHelpFormatter</span><span class="p">(</span><span class="n">RawDescriptionHelpFormatter</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Help message formatter which retains formatting of all help text.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Only the name of this class is considered a public API. All the methods</span>
|
||
|
|
<span class="sd"> provided by the class are considered an implementation detail.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_split_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">text</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ArgumentDefaultsHelpFormatter</span><span class="p">(</span><span class="n">HelpFormatter</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Help message formatter which adds default values to argument help.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Only the name of this class is considered a public API. All the methods</span>
|
||
|
|
<span class="sd"> provided by the class are considered an implementation detail.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_help_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span>
|
||
|
|
<span class="k">if</span> <span class="n">help</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="s1">''</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="s1">'%(default)'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">help</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">defaulting_nargs</span> <span class="o">=</span> <span class="p">[</span><span class="n">OPTIONAL</span><span class="p">,</span> <span class="n">ZERO_OR_MORE</span><span class="p">]</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span> <span class="ow">or</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="ow">in</span> <span class="n">defaulting_nargs</span><span class="p">:</span>
|
||
|
|
<span class="n">help</span> <span class="o">+=</span> <span class="n">_</span><span class="p">(</span><span class="s1">' (default: </span><span class="si">%(default)s</span><span class="s1">)'</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">help</span>
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">MetavarTypeHelpFormatter</span><span class="p">(</span><span class="n">HelpFormatter</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Help message formatter which uses the argument 'type' as the default</span>
|
||
|
|
<span class="sd"> metavar value (instead of the argument 'dest')</span>
|
||
|
|
|
||
|
|
<span class="sd"> Only the name of this class is considered a public API. All the methods</span>
|
||
|
|
<span class="sd"> provided by the class are considered an implementation detail.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_default_metavar_for_optional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="vm">__name__</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_default_metavar_for_positional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="vm">__name__</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># =====================</span>
|
||
|
|
<span class="c1"># Options and Arguments</span>
|
||
|
|
<span class="c1"># =====================</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_action_name</span><span class="p">(</span><span class="n">argument</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">argument</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
<span class="k">elif</span> <span class="n">argument</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'/'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argument</span><span class="o">.</span><span class="n">option_strings</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">argument</span><span class="o">.</span><span class="n">metavar</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">SUPPRESS</span><span class="p">):</span>
|
||
|
|
<span class="n">metavar</span> <span class="o">=</span> <span class="n">argument</span><span class="o">.</span><span class="n">metavar</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">metavar</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">metavar</span>
|
||
|
|
<span class="k">if</span> <span class="n">argument</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">ZERO_OR_MORE</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">metavar</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">[, </span><span class="si">%s</span><span class="s1">]'</span> <span class="o">%</span> <span class="n">metavar</span>
|
||
|
|
<span class="k">elif</span> <span class="n">argument</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">ONE_OR_MORE</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">[, </span><span class="si">%s</span><span class="s1">]'</span> <span class="o">%</span> <span class="n">metavar</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">metavar</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">argument</span><span class="o">.</span><span class="n">dest</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">SUPPRESS</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">argument</span><span class="o">.</span><span class="n">dest</span>
|
||
|
|
<span class="k">elif</span> <span class="n">argument</span><span class="o">.</span><span class="n">choices</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'{</span><span class="si">%s</span><span class="s1">}'</span> <span class="o">%</span> <span class="s1">','</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">argument</span><span class="o">.</span><span class="n">choices</span><span class="p">))</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ArgumentError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""An error from creating or using an argument (optional or positional).</span>
|
||
|
|
|
||
|
|
<span class="sd"> The string value of this exception is the message, augmented with</span>
|
||
|
|
<span class="sd"> information about the argument that caused it.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">argument</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">argument_name</span> <span class="o">=</span> <span class="n">_get_action_name</span><span class="p">(</span><span class="n">argument</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">message</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">argument_name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="nb">format</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%(message)s</span><span class="s1">'</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="nb">format</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'argument </span><span class="si">%(argument_name)s</span><span class="s1">: </span><span class="si">%(message)s</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="nb">format</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
|
||
|
|
<span class="n">argument_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">argument_name</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ArgumentTypeError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""An error from trying to convert a command line string to a type."""</span>
|
||
|
|
<span class="k">pass</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># ==============</span>
|
||
|
|
<span class="c1"># Action classes</span>
|
||
|
|
<span class="c1"># ==============</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">Action</span><span class="p">(</span><span class="n">_AttributeHolder</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Information about how to convert command line strings to Python objects.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Action objects are used by an ArgumentParser to represent the information</span>
|
||
|
|
<span class="sd"> needed to parse a single argument from one or more strings from the</span>
|
||
|
|
<span class="sd"> command line. The keyword arguments to the Action constructor are also</span>
|
||
|
|
<span class="sd"> all attributes of Action instances.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Keyword Arguments:</span>
|
||
|
|
|
||
|
|
<span class="sd"> - option_strings -- A list of command-line option strings which</span>
|
||
|
|
<span class="sd"> should be associated with this action.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - dest -- The name of the attribute to hold the created object(s)</span>
|
||
|
|
|
||
|
|
<span class="sd"> - nargs -- The number of command-line arguments that should be</span>
|
||
|
|
<span class="sd"> consumed. By default, one argument will be consumed and a single</span>
|
||
|
|
<span class="sd"> value will be produced. Other values include:</span>
|
||
|
|
<span class="sd"> - N (an integer) consumes N arguments (and produces a list)</span>
|
||
|
|
<span class="sd"> - '?' consumes zero or one arguments</span>
|
||
|
|
<span class="sd"> - '*' consumes zero or more arguments (and produces a list)</span>
|
||
|
|
<span class="sd"> - '+' consumes one or more arguments (and produces a list)</span>
|
||
|
|
<span class="sd"> Note that the difference between the default and nargs=1 is that</span>
|
||
|
|
<span class="sd"> with the default, a single value will be produced, while with</span>
|
||
|
|
<span class="sd"> nargs=1, a list containing a single value will be produced.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - const -- The value to be produced if the option is specified and the</span>
|
||
|
|
<span class="sd"> option uses an action that takes no values.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - default -- The value to be produced if the option is not specified.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - type -- A callable that accepts a single string argument, and</span>
|
||
|
|
<span class="sd"> returns the converted value. The standard Python types str, int,</span>
|
||
|
|
<span class="sd"> float, and complex are useful examples of such callables. If None,</span>
|
||
|
|
<span class="sd"> str is used.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - choices -- A container of values that should be allowed. If not None,</span>
|
||
|
|
<span class="sd"> after a command-line argument has been converted to the appropriate</span>
|
||
|
|
<span class="sd"> type, an exception will be raised if it is not a member of this</span>
|
||
|
|
<span class="sd"> collection.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - required -- True if the action must always be specified at the</span>
|
||
|
|
<span class="sd"> command line. This is only meaningful for optional command-line</span>
|
||
|
|
<span class="sd"> arguments.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - help -- The help string describing the argument.</span>
|
||
|
|
|
||
|
|
<span class="sd"> - metavar -- The name to be used for the option's argument with the</span>
|
||
|
|
<span class="sd"> help string. If None, the 'dest' value will be used as the name.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">option_strings</span> <span class="o">=</span> <span class="n">option_strings</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">nargs</span> <span class="o">=</span> <span class="n">nargs</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">const</span> <span class="o">=</span> <span class="n">const</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="o">=</span> <span class="n">default</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">choices</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="n">required</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">help</span> <span class="o">=</span> <span class="n">help</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">metavar</span> <span class="o">=</span> <span class="n">metavar</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">deprecated</span> <span class="o">=</span> <span class="n">deprecated</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">names</span> <span class="o">=</span> <span class="p">[</span>
|
||
|
|
<span class="s1">'option_strings'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'dest'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'nargs'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'const'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'default'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'type'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'choices'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'required'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'help'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'metavar'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'deprecated'</span><span class="p">,</span>
|
||
|
|
<span class="p">]</span>
|
||
|
|
<span class="k">return</span> <span class="p">[(</span><span class="n">name</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">option_strings</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s1">'.__call__() not defined'</span><span class="p">))</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># FIXME: remove together with `BooleanOptionalAction` deprecated arguments.</span>
|
||
|
|
<span class="n">_deprecated_default</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">BooleanOptionalAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="n">_deprecated_default</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="n">_deprecated_default</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">_deprecated_default</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="n">_option_strings</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">_option_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'--'</span><span class="p">):</span>
|
||
|
|
<span class="n">option_string</span> <span class="o">=</span> <span class="s1">'--no-'</span> <span class="o">+</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
|
||
|
|
<span class="n">_option_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># We need `_deprecated` special value to ban explicit arguments that</span>
|
||
|
|
<span class="c1"># match default value. Like:</span>
|
||
|
|
<span class="c1"># parser.add_argument('-f', action=BooleanOptionalAction, type=int)</span>
|
||
|
|
<span class="k">for</span> <span class="n">field_name</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'type'</span><span class="p">,</span> <span class="s1">'choices'</span><span class="p">,</span> <span class="s1">'metavar'</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="nb">locals</span><span class="p">()[</span><span class="n">field_name</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">_deprecated_default</span><span class="p">:</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span>
|
||
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">_deprecated</span><span class="p">(</span>
|
||
|
|
<span class="n">field_name</span><span class="p">,</span>
|
||
|
|
<span class="s2">"</span><span class="si">{name!r}</span><span class="s2"> is deprecated as of Python 3.12 and will be "</span>
|
||
|
|
<span class="s2">"removed in Python </span><span class="si">{remove}</span><span class="s2">."</span><span class="p">,</span>
|
||
|
|
<span class="n">remove</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">14</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="n">_deprecated_default</span><span class="p">:</span>
|
||
|
|
<span class="nb">type</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
<span class="k">if</span> <span class="n">choices</span> <span class="ow">is</span> <span class="n">_deprecated_default</span><span class="p">:</span>
|
||
|
|
<span class="n">choices</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
<span class="k">if</span> <span class="n">metavar</span> <span class="ow">is</span> <span class="n">_deprecated_default</span><span class="p">:</span>
|
||
|
|
<span class="n">metavar</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">_option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="nb">type</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="n">choices</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">metavar</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="ow">not</span> <span class="n">option_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'--no-'</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="s1">' | '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">option_strings</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_StoreAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">nargs</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'nargs for store actions must be != 0; if you '</span>
|
||
|
|
<span class="s1">'have nothing to store, actions such as store '</span>
|
||
|
|
<span class="s1">'true or store const may be more appropriate'</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">const</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">nargs</span> <span class="o">!=</span> <span class="n">OPTIONAL</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'nargs must be </span><span class="si">%r</span><span class="s1"> to supply const'</span> <span class="o">%</span> <span class="n">OPTIONAL</span><span class="p">)</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_StoreAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="n">nargs</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="n">const</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="nb">type</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="n">choices</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">metavar</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_StoreConstAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_StoreConstAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="n">const</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">const</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_StoreTrueAction</span><span class="p">(</span><span class="n">_StoreConstAction</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_StoreTrueAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_StoreFalseAction</span><span class="p">(</span><span class="n">_StoreConstAction</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_StoreFalseAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_AppendAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">nargs</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'nargs for append actions must be != 0; if arg '</span>
|
||
|
|
<span class="s1">'strings are not supplying the value to append, '</span>
|
||
|
|
<span class="s1">'the append const action may be more appropriate'</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">const</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">nargs</span> <span class="o">!=</span> <span class="n">OPTIONAL</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'nargs must be </span><span class="si">%r</span><span class="s1"> to supply const'</span> <span class="o">%</span> <span class="n">OPTIONAL</span><span class="p">)</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_AppendAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="n">nargs</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="n">const</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="nb">type</span><span class="o">=</span><span class="nb">type</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="n">choices</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">metavar</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">items</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="n">items</span> <span class="o">=</span> <span class="n">_copy_items</span><span class="p">(</span><span class="n">items</span><span class="p">)</span>
|
||
|
|
<span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">items</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_AppendConstAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_AppendConstAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
|
|
<span class="n">const</span><span class="o">=</span><span class="n">const</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">metavar</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">items</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="n">items</span> <span class="o">=</span> <span class="n">_copy_items</span><span class="p">(</span><span class="n">items</span><span class="p">)</span>
|
||
|
|
<span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">const</span><span class="p">)</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">items</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_CountAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_CountAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">count</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">count</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_HelpAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">SUPPRESS</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">SUPPRESS</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_HelpAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="n">deprecated</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">parser</span><span class="o">.</span><span class="n">print_help</span><span class="p">()</span>
|
||
|
|
<span class="n">parser</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_VersionAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">version</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">SUPPRESS</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">SUPPRESS</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">help</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"show program's version number and exit"</span><span class="p">)</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_VersionAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="n">version</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
|
||
|
|
<span class="k">if</span> <span class="n">version</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">version</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">version</span>
|
||
|
|
<span class="n">formatter</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">_get_formatter</span><span class="p">()</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_text</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
|
||
|
|
<span class="n">parser</span><span class="o">.</span><span class="n">_print_message</span><span class="p">(</span><span class="n">formatter</span><span class="o">.</span><span class="n">format_help</span><span class="p">(),</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">)</span>
|
||
|
|
<span class="n">parser</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_SubParsersAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_ChoicesPseudoAction</span><span class="p">(</span><span class="n">Action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">aliases</span><span class="p">,</span> <span class="n">help</span><span class="p">):</span>
|
||
|
|
<span class="n">metavar</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">name</span>
|
||
|
|
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
||
|
|
<span class="n">metavar</span> <span class="o">+=</span> <span class="s1">' (</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
|
||
|
|
<span class="n">sup</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">_SubParsersAction</span><span class="o">.</span><span class="n">_ChoicesPseudoAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||
|
|
<span class="n">sup</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">option_strings</span><span class="o">=</span><span class="p">[],</span> <span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">metavar</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">prog</span><span class="p">,</span>
|
||
|
|
<span class="n">parser_class</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">SUPPRESS</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_prog_prefix</span> <span class="o">=</span> <span class="n">prog</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_parser_class</span> <span class="o">=</span> <span class="n">parser_class</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_choices_actions</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_deprecated</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_SubParsersAction</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">,</span>
|
||
|
|
<span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="n">nargs</span><span class="o">=</span><span class="n">PARSER</span><span class="p">,</span>
|
||
|
|
<span class="n">choices</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">,</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">required</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">help</span><span class="p">,</span>
|
||
|
|
<span class="n">metavar</span><span class="o">=</span><span class="n">metavar</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="c1"># set prog from the existing prefix</span>
|
||
|
|
<span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'prog'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">kwargs</span><span class="p">[</span><span class="s1">'prog'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prog_prefix</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'aliases'</span><span class="p">,</span> <span class="p">())</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'conflicting subparser: </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">alias</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span>
|
||
|
|
<span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'conflicting subparser alias: </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="n">alias</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># create a pseudo-action to hold the choice help</span>
|
||
|
|
<span class="k">if</span> <span class="s1">'help'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="n">help</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'help'</span><span class="p">)</span>
|
||
|
|
<span class="n">choice_action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ChoicesPseudoAction</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">aliases</span><span class="p">,</span> <span class="n">help</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_choices_actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">choice_action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># create the parser and add it to the map</span>
|
||
|
|
<span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parser_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">parser</span>
|
||
|
|
|
||
|
|
<span class="c1"># make parser available under aliases also</span>
|
||
|
|
<span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">[</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">parser</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">deprecated</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_deprecated</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_deprecated</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">return</span> <span class="n">parser</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_subactions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choices_actions</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">parser_name</span> <span class="o">=</span> <span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="n">arg_strings</span> <span class="o">=</span> <span class="n">values</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||
|
|
|
||
|
|
<span class="c1"># set the parser name if requested</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">parser_name</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># select the parser</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">subparser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">[</span><span class="n">parser_name</span><span class="p">]</span>
|
||
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'parser_name'</span><span class="p">:</span> <span class="n">parser_name</span><span class="p">,</span>
|
||
|
|
<span class="s1">'choices'</span><span class="p">:</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_name_parser_map</span><span class="p">)}</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'unknown parser </span><span class="si">%(parser_name)r</span><span class="s1"> (choices: </span><span class="si">%(choices)s</span><span class="s1">)'</span><span class="p">)</span> <span class="o">%</span> <span class="n">args</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">parser_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_deprecated</span><span class="p">:</span>
|
||
|
|
<span class="n">parser</span><span class="o">.</span><span class="n">_warning</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"command '</span><span class="si">%(parser_name)s</span><span class="s2">' is deprecated"</span><span class="p">)</span> <span class="o">%</span>
|
||
|
|
<span class="p">{</span><span class="s1">'parser_name'</span><span class="p">:</span> <span class="n">parser_name</span><span class="p">})</span>
|
||
|
|
|
||
|
|
<span class="c1"># parse all the remaining options into the namespace</span>
|
||
|
|
<span class="c1"># store any unrecognized options on the object, so that the top</span>
|
||
|
|
<span class="c1"># level parser can decide what to do with them</span>
|
||
|
|
|
||
|
|
<span class="c1"># In case this subparser defines new defaults, we parse them</span>
|
||
|
|
<span class="c1"># in a new namespace object and then update the original</span>
|
||
|
|
<span class="c1"># namespace for the relevant parts.</span>
|
||
|
|
<span class="n">subnamespace</span><span class="p">,</span> <span class="n">arg_strings</span> <span class="o">=</span> <span class="n">subparser</span><span class="o">.</span><span class="n">parse_known_args</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">subnamespace</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">arg_strings</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">_UNRECOGNIZED_ARGS_ATTR</span><span class="p">):</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">_UNRECOGNIZED_ARGS_ATTR</span><span class="p">,</span> <span class="p">[])</span>
|
||
|
|
<span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">_UNRECOGNIZED_ARGS_ATTR</span><span class="p">)</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_ExtendAction</span><span class="p">(</span><span class="n">_AppendAction</span><span class="p">):</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">items</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="n">items</span> <span class="o">=</span> <span class="n">_copy_items</span><span class="p">(</span><span class="n">items</span><span class="p">)</span>
|
||
|
|
<span class="n">items</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">items</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># ==============</span>
|
||
|
|
<span class="c1"># Type classes</span>
|
||
|
|
<span class="c1"># ==============</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">FileType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Factory for creating file object types</span>
|
||
|
|
|
||
|
|
<span class="sd"> Instances of FileType are typically passed as type= arguments to the</span>
|
||
|
|
<span class="sd"> ArgumentParser add_argument() method.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Keyword Arguments:</span>
|
||
|
|
<span class="sd"> - mode -- A string indicating how the file is to be opened. Accepts the</span>
|
||
|
|
<span class="sd"> same values as the builtin open() function.</span>
|
||
|
|
<span class="sd"> - bufsize -- The file's desired buffer size. Accepts the same values as</span>
|
||
|
|
<span class="sd"> the builtin open() function.</span>
|
||
|
|
<span class="sd"> - encoding -- The file's encoding. Accepts the same values as the</span>
|
||
|
|
<span class="sd"> builtin open() function.</span>
|
||
|
|
<span class="sd"> - errors -- A string indicating how encoding and decoding errors are to</span>
|
||
|
|
<span class="sd"> be handled. Accepts the same value as the builtin open() function.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">bufsize</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_bufsize</span> <span class="o">=</span> <span class="n">bufsize</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_encoding</span> <span class="o">=</span> <span class="n">encoding</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_errors</span> <span class="o">=</span> <span class="n">errors</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</span><span class="p">):</span>
|
||
|
|
<span class="c1"># the special argument "-" means sys.std{in,out}</span>
|
||
|
|
<span class="k">if</span> <span class="n">string</span> <span class="o">==</span> <span class="s1">'-'</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="s1">'r'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">buffer</span> <span class="k">if</span> <span class="s1">'b'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="k">else</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdin</span>
|
||
|
|
<span class="k">elif</span> <span class="nb">any</span><span class="p">(</span><span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="s1">'wax'</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">buffer</span> <span class="k">if</span> <span class="s1">'b'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="k">else</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdout</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'argument "-" with mode </span><span class="si">%r</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># all other arguments are used as file names</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_bufsize</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_encoding</span><span class="p">,</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_errors</span><span class="p">)</span>
|
||
|
|
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'filename'</span><span class="p">:</span> <span class="n">string</span><span class="p">,</span> <span class="s1">'error'</span><span class="p">:</span> <span class="n">e</span><span class="p">}</span>
|
||
|
|
<span class="n">message</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"can't open '</span><span class="si">%(filename)s</span><span class="s2">': </span><span class="si">%(error)s</span><span class="s2">"</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentTypeError</span><span class="p">(</span><span class="n">message</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_bufsize</span>
|
||
|
|
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">'encoding'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_encoding</span><span class="p">),</span> <span class="p">(</span><span class="s1">'errors'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errors</span><span class="p">)]</span>
|
||
|
|
<span class="n">args_str</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">repr</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span>
|
||
|
|
<span class="p">[</span><span class="s1">'</span><span class="si">%s</span><span class="s1">=</span><span class="si">%r</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">kw</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">kw</span><span class="p">,</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">kwargs</span>
|
||
|
|
<span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">])</span>
|
||
|
|
<span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">args_str</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># ===========================</span>
|
||
|
|
<span class="c1"># Optional and Positional Parsing</span>
|
||
|
|
<span class="c1"># ===========================</span>
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">Namespace</span><span class="p">(</span><span class="n">_AttributeHolder</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Simple object for storing attributes.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Implements equality by attribute names and values, and provides a simple</span>
|
||
|
|
<span class="sd"> string representation.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">[</span><span class="n">name</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Namespace</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="bp">NotImplemented</span>
|
||
|
|
<span class="k">return</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="nb">vars</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_ActionsContainer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">description</span><span class="p">,</span>
|
||
|
|
<span class="n">prefix_chars</span><span class="p">,</span>
|
||
|
|
<span class="n">argument_default</span><span class="p">,</span>
|
||
|
|
<span class="n">conflict_handler</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_ActionsContainer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">description</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">argument_default</span> <span class="o">=</span> <span class="n">argument_default</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span> <span class="o">=</span> <span class="n">prefix_chars</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">conflict_handler</span> <span class="o">=</span> <span class="n">conflict_handler</span>
|
||
|
|
|
||
|
|
<span class="c1"># set up registries</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_registries</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
|
||
|
|
<span class="c1"># register actions</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">_StoreAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'store'</span><span class="p">,</span> <span class="n">_StoreAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'store_const'</span><span class="p">,</span> <span class="n">_StoreConstAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'store_true'</span><span class="p">,</span> <span class="n">_StoreTrueAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'store_false'</span><span class="p">,</span> <span class="n">_StoreFalseAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'append'</span><span class="p">,</span> <span class="n">_AppendAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'append_const'</span><span class="p">,</span> <span class="n">_AppendConstAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'count'</span><span class="p">,</span> <span class="n">_CountAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'help'</span><span class="p">,</span> <span class="n">_HelpAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'version'</span><span class="p">,</span> <span class="n">_VersionAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'parsers'</span><span class="p">,</span> <span class="n">_SubParsersAction</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="s1">'extend'</span><span class="p">,</span> <span class="n">_ExtendAction</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># raise an exception if the conflict handler is invalid</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_get_handler</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># action storage</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_actions</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
|
||
|
|
<span class="c1"># groups</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_action_groups</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
<span class="c1"># defaults storage</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
|
||
|
|
<span class="c1"># determines whether an "option" looks like a negative number</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_negative_number_matcher</span> <span class="o">=</span> <span class="n">_re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^-\d+$|^-\d*\.\d+$'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># whether or not there are any optionals that look like negative</span>
|
||
|
|
<span class="c1"># numbers -- uses a list so it can be shared and edited</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_has_negative_number_optionals</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
<span class="c1"># ====================</span>
|
||
|
|
<span class="c1"># Registration methods</span>
|
||
|
|
<span class="c1"># ====================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">registry_name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="nb">object</span><span class="p">):</span>
|
||
|
|
<span class="n">registry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registries</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">registry_name</span><span class="p">,</span> <span class="p">{})</span>
|
||
|
|
<span class="n">registry</span><span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="nb">object</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_registry_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">registry_name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registries</span><span class="p">[</span><span class="n">registry_name</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># ==================================</span>
|
||
|
|
<span class="c1"># Namespace default accessor methods</span>
|
||
|
|
<span class="c1"># ==================================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">set_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if these defaults match any existing arguments, replace</span>
|
||
|
|
<span class="c1"># the previous default on the object with the new one</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">get_default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span> <span class="o">==</span> <span class="n">dest</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="c1"># Adding argument actions</span>
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_argument</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""</span>
|
||
|
|
<span class="sd"> add_argument(dest, ..., name=value, ...)</span>
|
||
|
|
<span class="sd"> add_argument(option_string, option_string, ..., name=value, ...)</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<span class="c1"># if no positional args are supplied or only one is supplied and</span>
|
||
|
|
<span class="c1"># it doesn't look like an option string, parse a positional</span>
|
||
|
|
<span class="c1"># argument</span>
|
||
|
|
<span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="s1">'dest'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'dest supplied twice for positional argument'</span><span class="p">)</span>
|
||
|
|
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_positional_kwargs</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># otherwise, we're adding an optional argument</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_optional_kwargs</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if no default was supplied, use the parser-level default</span>
|
||
|
|
<span class="k">if</span> <span class="s1">'default'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">'dest'</span><span class="p">]</span>
|
||
|
|
<span class="k">if</span> <span class="n">dest</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="p">:</span>
|
||
|
|
<span class="n">kwargs</span><span class="p">[</span><span class="s1">'default'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="p">[</span><span class="n">dest</span><span class="p">]</span>
|
||
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">argument_default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">kwargs</span><span class="p">[</span><span class="s1">'default'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">argument_default</span>
|
||
|
|
|
||
|
|
<span class="c1"># create the action object, and add it to the parser</span>
|
||
|
|
<span class="n">action_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pop_action_class</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">action_class</span><span class="p">):</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'unknown action "</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action_class</span><span class="p">,))</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="n">action_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># raise an error if the action type is not callable</span>
|
||
|
|
<span class="n">type_func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registry_get</span><span class="p">(</span><span class="s1">'type'</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">type_func</span><span class="p">):</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'</span><span class="si">%r</span><span class="s1"> is not callable'</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_func</span><span class="p">,))</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">type_func</span> <span class="ow">is</span> <span class="n">FileType</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'</span><span class="si">%r</span><span class="s1"> is a FileType class object, instance of it'</span>
|
||
|
|
<span class="s1">' must be passed'</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_func</span><span class="p">,))</span>
|
||
|
|
|
||
|
|
<span class="c1"># raise an error if the metavar does not match the type</span>
|
||
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_get_formatter"</span><span class="p">):</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_get_formatter</span><span class="p">()</span><span class="o">.</span><span class="n">_format_args</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"length of metavar tuple does not match nargs"</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_argument_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="n">group</span> <span class="o">=</span> <span class="n">_ArgumentGroup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_action_groups</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">group</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_mutually_exclusive_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="n">group</span> <span class="o">=</span> <span class="n">_MutuallyExclusiveGroup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">group</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_add_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="c1"># resolve any conflicts</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_check_conflict</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># add to actions list</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="n">action</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="bp">self</span>
|
||
|
|
|
||
|
|
<span class="c1"># index the action by any option strings it has</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
|
||
|
|
|
||
|
|
<span class="c1"># set the flag if any option strings look like negative numbers</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_negative_number_matcher</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">option_string</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_has_negative_number_optionals</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_has_negative_number_optionals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the created action</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_remove_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_add_container_actions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">container</span><span class="p">):</span>
|
||
|
|
<span class="c1"># collect groups by titles</span>
|
||
|
|
<span class="n">title_group_map</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_action_groups</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">title</span> <span class="ow">in</span> <span class="n">title_group_map</span><span class="p">:</span>
|
||
|
|
<span class="c1"># This branch could happen if a derived class added</span>
|
||
|
|
<span class="c1"># groups with duplicated titles in __init__</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'cannot merge actions - two groups are named </span><span class="si">%r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span> <span class="o">%</span> <span class="p">(</span><span class="n">group</span><span class="o">.</span><span class="n">title</span><span class="p">))</span>
|
||
|
|
<span class="n">title_group_map</span><span class="p">[</span><span class="n">group</span><span class="o">.</span><span class="n">title</span><span class="p">]</span> <span class="o">=</span> <span class="n">group</span>
|
||
|
|
|
||
|
|
<span class="c1"># map each action to its group</span>
|
||
|
|
<span class="n">group_map</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">container</span><span class="o">.</span><span class="n">_action_groups</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># if a group with the title exists, use that, otherwise</span>
|
||
|
|
<span class="c1"># create a new group matching the container's group</span>
|
||
|
|
<span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">title</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">title_group_map</span><span class="p">:</span>
|
||
|
|
<span class="n">title_group_map</span><span class="p">[</span><span class="n">group</span><span class="o">.</span><span class="n">title</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span>
|
||
|
|
<span class="n">title</span><span class="o">=</span><span class="n">group</span><span class="o">.</span><span class="n">title</span><span class="p">,</span>
|
||
|
|
<span class="n">description</span><span class="o">=</span><span class="n">group</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
||
|
|
<span class="n">conflict_handler</span><span class="o">=</span><span class="n">group</span><span class="o">.</span><span class="n">conflict_handler</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># map the actions to their new group</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">group_map</span><span class="p">[</span><span class="n">action</span><span class="p">]</span> <span class="o">=</span> <span class="n">title_group_map</span><span class="p">[</span><span class="n">group</span><span class="o">.</span><span class="n">title</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># add container's mutually exclusive groups</span>
|
||
|
|
<span class="c1"># NOTE: if add_mutually_exclusive_group ever gains title= and</span>
|
||
|
|
<span class="c1"># description= then this code will need to be expanded as above</span>
|
||
|
|
<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">container</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">_container</span> <span class="ow">is</span> <span class="n">container</span><span class="p">:</span>
|
||
|
|
<span class="n">cont</span> <span class="o">=</span> <span class="bp">self</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">cont</span> <span class="o">=</span> <span class="n">title_group_map</span><span class="p">[</span><span class="n">group</span><span class="o">.</span><span class="n">_container</span><span class="o">.</span><span class="n">title</span><span class="p">]</span>
|
||
|
|
<span class="n">mutex_group</span> <span class="o">=</span> <span class="n">cont</span><span class="o">.</span><span class="n">add_mutually_exclusive_group</span><span class="p">(</span>
|
||
|
|
<span class="n">required</span><span class="o">=</span><span class="n">group</span><span class="o">.</span><span class="n">required</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># map the actions to their new mutex group</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">group_map</span><span class="p">[</span><span class="n">action</span><span class="p">]</span> <span class="o">=</span> <span class="n">mutex_group</span>
|
||
|
|
|
||
|
|
<span class="c1"># add all actions to this container or their group</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">container</span><span class="o">.</span><span class="n">_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">group_map</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_positional_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="c1"># make sure required is not specified</span>
|
||
|
|
<span class="k">if</span> <span class="s1">'required'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">"'required' is an invalid argument for positionals"</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># mark positional arguments as required if at least one is</span>
|
||
|
|
<span class="c1"># always required</span>
|
||
|
|
<span class="n">nargs</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'nargs'</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">nargs</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">OPTIONAL</span><span class="p">,</span> <span class="n">ZERO_OR_MORE</span><span class="p">,</span> <span class="n">REMAINDER</span><span class="p">,</span> <span class="n">SUPPRESS</span><span class="p">,</span> <span class="mi">0</span><span class="p">]:</span>
|
||
|
|
<span class="n">kwargs</span><span class="p">[</span><span class="s1">'required'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the keyword arguments with no option strings</span>
|
||
|
|
<span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="n">kwargs</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span> <span class="n">option_strings</span><span class="o">=</span><span class="p">[])</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_optional_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="c1"># determine short and long option strings</span>
|
||
|
|
<span class="n">option_strings</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">long_option_strings</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
|
||
|
|
<span class="c1"># error on strings that don't start with an appropriate prefix</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span><span class="p">:</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'option'</span><span class="p">:</span> <span class="n">option_string</span><span class="p">,</span>
|
||
|
|
<span class="s1">'prefix_chars'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span><span class="p">}</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'invalid option string </span><span class="si">%(option)r</span><span class="s1">: '</span>
|
||
|
|
<span class="s1">'must start with a character </span><span class="si">%(prefix_chars)r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># strings starting with two prefix characters are long options</span>
|
||
|
|
<span class="n">option_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span><span class="p">:</span>
|
||
|
|
<span class="n">long_option_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x'</span>
|
||
|
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'dest'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">dest</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">long_option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">dest_option_string</span> <span class="o">=</span> <span class="n">long_option_strings</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">dest_option_string</span> <span class="o">=</span> <span class="n">option_strings</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest_option_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">dest</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'dest= is required for options like </span><span class="si">%r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span> <span class="o">%</span> <span class="n">option_string</span><span class="p">)</span>
|
||
|
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="s1">'_'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the updated keyword arguments</span>
|
||
|
|
<span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="n">kwargs</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span> <span class="n">option_strings</span><span class="o">=</span><span class="n">option_strings</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_pop_action_class</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registry_get</span><span class="p">(</span><span class="s1">'action'</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="c1"># determine function from conflict handler string</span>
|
||
|
|
<span class="n">handler_func_name</span> <span class="o">=</span> <span class="s1">'_handle_conflict_</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">conflict_handler</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handler_func_name</span><span class="p">)</span>
|
||
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'invalid conflict_resolution value: </span><span class="si">%r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">conflict_handler</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_check_conflict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="c1"># find all options that conflict with this option</span>
|
||
|
|
<span class="n">confl_optionals</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">confl_optional</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span>
|
||
|
|
<span class="n">confl_optionals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">option_string</span><span class="p">,</span> <span class="n">confl_optional</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># resolve any conflicts</span>
|
||
|
|
<span class="k">if</span> <span class="n">confl_optionals</span><span class="p">:</span>
|
||
|
|
<span class="n">conflict_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_handler</span><span class="p">()</span>
|
||
|
|
<span class="n">conflict_handler</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">confl_optionals</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_handle_conflict_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">conflicting_actions</span><span class="p">):</span>
|
||
|
|
<span class="n">message</span> <span class="o">=</span> <span class="n">ngettext</span><span class="p">(</span><span class="s1">'conflicting option string: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'conflicting option strings: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span>
|
||
|
|
<span class="nb">len</span><span class="p">(</span><span class="n">conflicting_actions</span><span class="p">))</span>
|
||
|
|
<span class="n">conflict_string</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">option_string</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">action</span>
|
||
|
|
<span class="ow">in</span> <span class="n">conflicting_actions</span><span class="p">])</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">message</span> <span class="o">%</span> <span class="n">conflict_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_handle_conflict_resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">conflicting_actions</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="c1"># remove all conflicting options</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">conflicting_actions</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># remove the conflicting option</span>
|
||
|
|
<span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">option_string</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the option now has no option string, remove it from the</span>
|
||
|
|
<span class="c1"># container holding it</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">_remove_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_ArgumentGroup</span><span class="p">(</span><span class="n">_ActionsContainer</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">container</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="c1"># add any missing keyword arguments by checking the container</span>
|
||
|
|
<span class="n">update</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span>
|
||
|
|
<span class="n">update</span><span class="p">(</span><span class="s1">'conflict_handler'</span><span class="p">,</span> <span class="n">container</span><span class="o">.</span><span class="n">conflict_handler</span><span class="p">)</span>
|
||
|
|
<span class="n">update</span><span class="p">(</span><span class="s1">'prefix_chars'</span><span class="p">,</span> <span class="n">container</span><span class="o">.</span><span class="n">prefix_chars</span><span class="p">)</span>
|
||
|
|
<span class="n">update</span><span class="p">(</span><span class="s1">'argument_default'</span><span class="p">,</span> <span class="n">container</span><span class="o">.</span><span class="n">argument_default</span><span class="p">)</span>
|
||
|
|
<span class="n">super_init</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">_ArgumentGroup</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span>
|
||
|
|
<span class="n">super_init</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># group attributes</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_group_actions</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
<span class="c1"># share most attributes with the container</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_registries</span> <span class="o">=</span> <span class="n">container</span><span class="o">.</span><span class="n">_registries</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_actions</span> <span class="o">=</span> <span class="n">container</span><span class="o">.</span><span class="n">_actions</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span> <span class="o">=</span> <span class="n">container</span><span class="o">.</span><span class="n">_option_string_actions</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span> <span class="o">=</span> <span class="n">container</span><span class="o">.</span><span class="n">_defaults</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_has_negative_number_optionals</span> <span class="o">=</span> \
|
||
|
|
<span class="n">container</span><span class="o">.</span><span class="n">_has_negative_number_optionals</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span> <span class="o">=</span> <span class="n">container</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_add_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">_ArgumentGroup</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_group_actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_remove_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_ArgumentGroup</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_remove_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_group_actions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_argument_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span>
|
||
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
|
||
|
|
<span class="s2">"Nesting argument groups is deprecated."</span><span class="p">,</span>
|
||
|
|
<span class="n">category</span><span class="o">=</span><span class="ne">DeprecationWarning</span><span class="p">,</span>
|
||
|
|
<span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span>
|
||
|
|
<span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_MutuallyExclusiveGroup</span><span class="p">(</span><span class="n">_ArgumentGroup</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">container</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">_MutuallyExclusiveGroup</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">container</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">required</span> <span class="o">=</span> <span class="n">required</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_container</span> <span class="o">=</span> <span class="n">container</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_add_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">required</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'mutually exclusive arguments must be optional'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_container</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_group_actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_remove_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_container</span><span class="o">.</span><span class="n">_remove_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_group_actions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_mutually_exclusive_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span>
|
||
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
|
||
|
|
<span class="s2">"Nesting mutually exclusive groups is deprecated."</span><span class="p">,</span>
|
||
|
|
<span class="n">category</span><span class="o">=</span><span class="ne">DeprecationWarning</span><span class="p">,</span>
|
||
|
|
<span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span>
|
||
|
|
<span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">add_mutually_exclusive_group</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser">[docs]</a>
|
||
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ArgumentParser</span><span class="p">(</span><span class="n">_AttributeHolder</span><span class="p">,</span> <span class="n">_ActionsContainer</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""Object for parsing command line strings into Python objects.</span>
|
||
|
|
|
||
|
|
<span class="sd"> Keyword Arguments:</span>
|
||
|
|
<span class="sd"> - prog -- The name of the program (default:</span>
|
||
|
|
<span class="sd"> ``os.path.basename(sys.argv[0])``)</span>
|
||
|
|
<span class="sd"> - usage -- A usage message (default: auto-generated from arguments)</span>
|
||
|
|
<span class="sd"> - description -- A description of what the program does</span>
|
||
|
|
<span class="sd"> - epilog -- Text following the argument descriptions</span>
|
||
|
|
<span class="sd"> - parents -- Parsers whose arguments should be copied into this one</span>
|
||
|
|
<span class="sd"> - formatter_class -- HelpFormatter class for printing help messages</span>
|
||
|
|
<span class="sd"> - prefix_chars -- Characters that prefix optional arguments</span>
|
||
|
|
<span class="sd"> - fromfile_prefix_chars -- Characters that prefix files containing</span>
|
||
|
|
<span class="sd"> additional arguments</span>
|
||
|
|
<span class="sd"> - argument_default -- The default value for all arguments</span>
|
||
|
|
<span class="sd"> - conflict_handler -- String indicating how to handle conflicts</span>
|
||
|
|
<span class="sd"> - add_help -- Add a -h/-help option</span>
|
||
|
|
<span class="sd"> - allow_abbrev -- Allow long options to be abbreviated unambiguously</span>
|
||
|
|
<span class="sd"> - exit_on_error -- Determines whether or not ArgumentParser exits with</span>
|
||
|
|
<span class="sd"> error info when an error occurs</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.__init__">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.__init__">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
|
||
|
|
<span class="n">prog</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">usage</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">epilog</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">parents</span><span class="o">=</span><span class="p">[],</span>
|
||
|
|
<span class="n">formatter_class</span><span class="o">=</span><span class="n">HelpFormatter</span><span class="p">,</span>
|
||
|
|
<span class="n">prefix_chars</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span>
|
||
|
|
<span class="n">fromfile_prefix_chars</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">argument_default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||
|
|
<span class="n">conflict_handler</span><span class="o">=</span><span class="s1">'error'</span><span class="p">,</span>
|
||
|
|
<span class="n">add_help</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
|
<span class="n">allow_abbrev</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||
|
|
<span class="n">exit_on_error</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="n">superinit</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">ArgumentParser</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span>
|
||
|
|
<span class="n">superinit</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
|
||
|
|
<span class="n">prefix_chars</span><span class="o">=</span><span class="n">prefix_chars</span><span class="p">,</span>
|
||
|
|
<span class="n">argument_default</span><span class="o">=</span><span class="n">argument_default</span><span class="p">,</span>
|
||
|
|
<span class="n">conflict_handler</span><span class="o">=</span><span class="n">conflict_handler</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># default setting for prog</span>
|
||
|
|
<span class="k">if</span> <span class="n">prog</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">prog</span> <span class="o">=</span> <span class="n">_os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">_sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">prog</span> <span class="o">=</span> <span class="n">prog</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">usage</span> <span class="o">=</span> <span class="n">usage</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">epilog</span> <span class="o">=</span> <span class="n">epilog</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">formatter_class</span> <span class="o">=</span> <span class="n">formatter_class</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fromfile_prefix_chars</span> <span class="o">=</span> <span class="n">fromfile_prefix_chars</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">add_help</span> <span class="o">=</span> <span class="n">add_help</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">allow_abbrev</span> <span class="o">=</span> <span class="n">allow_abbrev</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exit_on_error</span> <span class="o">=</span> <span class="n">exit_on_error</span>
|
||
|
|
|
||
|
|
<span class="n">add_group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_argument_group</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_positionals</span> <span class="o">=</span> <span class="n">add_group</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s1">'positional arguments'</span><span class="p">))</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_optionals</span> <span class="o">=</span> <span class="n">add_group</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s1">'options'</span><span class="p">))</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_subparsers</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># register types</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">identity</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="n">string</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s1">'type'</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">identity</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># add help argument if necessary</span>
|
||
|
|
<span class="c1"># (using explicit default to override global argument_default)</span>
|
||
|
|
<span class="n">default_prefix</span> <span class="o">=</span> <span class="s1">'-'</span> <span class="k">if</span> <span class="s1">'-'</span> <span class="ow">in</span> <span class="n">prefix_chars</span> <span class="k">else</span> <span class="n">prefix_chars</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_help</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
|
||
|
|
<span class="n">default_prefix</span><span class="o">+</span><span class="s1">'h'</span><span class="p">,</span> <span class="n">default_prefix</span><span class="o">*</span><span class="mi">2</span><span class="o">+</span><span class="s1">'help'</span><span class="p">,</span>
|
||
|
|
<span class="n">action</span><span class="o">=</span><span class="s1">'help'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">SUPPRESS</span><span class="p">,</span>
|
||
|
|
<span class="n">help</span><span class="o">=</span><span class="n">_</span><span class="p">(</span><span class="s1">'show this help message and exit'</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># add parent arguments and defaults</span>
|
||
|
|
<span class="k">for</span> <span class="n">parent</span> <span class="ow">in</span> <span class="n">parents</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">ArgumentParser</span><span class="p">):</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">'parents must be a list of ArgumentParser'</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_add_container_actions</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
|
||
|
|
<span class="n">defaults</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">_defaults</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">defaults</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="c1"># Pretty __repr__ methods</span>
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">names</span> <span class="o">=</span> <span class="p">[</span>
|
||
|
|
<span class="s1">'prog'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'usage'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'description'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'formatter_class'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'conflict_handler'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'add_help'</span><span class="p">,</span>
|
||
|
|
<span class="p">]</span>
|
||
|
|
<span class="k">return</span> <span class="p">[(</span><span class="n">name</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># ==================================</span>
|
||
|
|
<span class="c1"># Optional/Positional adding methods</span>
|
||
|
|
<span class="c1"># ==================================</span>
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.add_subparsers">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.add_subparsers">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">add_subparsers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subparsers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'cannot have multiple subparser arguments'</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># add the parser class to the arguments if it's not present</span>
|
||
|
|
<span class="n">kwargs</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'parser_class'</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="s1">'title'</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="s1">'description'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||
|
|
<span class="n">title</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'title'</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'subcommands'</span><span class="p">))</span>
|
||
|
|
<span class="n">description</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'description'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_subparsers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">description</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_subparsers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_positionals</span>
|
||
|
|
|
||
|
|
<span class="c1"># prog defaults to the usage message of this parser, skipping</span>
|
||
|
|
<span class="c1"># optional arguments and with no "usage:" prefix</span>
|
||
|
|
<span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'prog'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">formatter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_formatter</span><span class="p">()</span>
|
||
|
|
<span class="n">positionals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_positional_actions</span><span class="p">()</span>
|
||
|
|
<span class="n">groups</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_usage</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usage</span><span class="p">,</span> <span class="n">positionals</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
||
|
|
<span class="n">kwargs</span><span class="p">[</span><span class="s1">'prog'</span><span class="p">]</span> <span class="o">=</span> <span class="n">formatter</span><span class="o">.</span><span class="n">format_help</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># create the parsers action and add it to the positionals list</span>
|
||
|
|
<span class="n">parsers_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pop_action_class</span><span class="p">(</span><span class="n">kwargs</span><span class="p">,</span> <span class="s1">'parsers'</span><span class="p">)</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="n">parsers_class</span><span class="p">(</span><span class="n">option_strings</span><span class="o">=</span><span class="p">[],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_subparsers</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the created parsers action</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_add_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_optionals</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_positionals</span><span class="o">.</span><span class="n">_add_action</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">action</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_optional_actions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">action</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_positional_actions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">action</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># =====================================</span>
|
||
|
|
<span class="c1"># Command line argument parsing methods</span>
|
||
|
|
<span class="c1"># =====================================</span>
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.parse_args">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.parse_args">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">parse_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span><span class="p">,</span> <span class="n">argv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_known_args</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">argv</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'unrecognized arguments: </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argv</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_on_error</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">args</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.parse_known_args">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.parse_known_args">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">parse_known_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_known_args2</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">intermixed</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_parse_known_args2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">intermixed</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">args</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="c1"># args default to the system args</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="n">_sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="c1"># make sure that args are mutable</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># default Namespace built from parser defaults</span>
|
||
|
|
<span class="k">if</span> <span class="n">namespace</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">namespace</span> <span class="o">=</span> <span class="n">Namespace</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># add any action defaults that aren't present</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># add any parser defaults that aren't present</span>
|
||
|
|
<span class="k">for</span> <span class="n">dest</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaults</span><span class="p">[</span><span class="n">dest</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="c1"># parse the arguments and exit if there are any errors</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_on_error</span><span class="p">:</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">namespace</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_known_args</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">intermixed</span><span class="p">)</span>
|
||
|
|
<span class="k">except</span> <span class="n">ArgumentError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">))</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">namespace</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_known_args</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">intermixed</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">_UNRECOGNIZED_ARGS_ATTR</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">_UNRECOGNIZED_ARGS_ATTR</span><span class="p">))</span>
|
||
|
|
<span class="nb">delattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">_UNRECOGNIZED_ARGS_ATTR</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">args</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_parse_known_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg_strings</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">intermixed</span><span class="p">):</span>
|
||
|
|
<span class="c1"># replace arg strings that are file references</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fromfile_prefix_chars</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">arg_strings</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_args_from_files</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># map all mutually exclusive arguments to the other arguments</span>
|
||
|
|
<span class="c1"># they can't occur with</span>
|
||
|
|
<span class="n">action_conflicts</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="k">for</span> <span class="n">mutex_group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span><span class="p">:</span>
|
||
|
|
<span class="n">group_actions</span> <span class="o">=</span> <span class="n">mutex_group</span><span class="o">.</span><span class="n">_group_actions</span>
|
||
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">mutex_action</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">mutex_group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">):</span>
|
||
|
|
<span class="n">conflicts</span> <span class="o">=</span> <span class="n">action_conflicts</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">mutex_action</span><span class="p">,</span> <span class="p">[])</span>
|
||
|
|
<span class="n">conflicts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">group_actions</span><span class="p">[:</span><span class="n">i</span><span class="p">])</span>
|
||
|
|
<span class="n">conflicts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">group_actions</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:])</span>
|
||
|
|
|
||
|
|
<span class="c1"># find all option indices, and determine the arg_string_pattern</span>
|
||
|
|
<span class="c1"># which has an 'O' if there is an option at an index,</span>
|
||
|
|
<span class="c1"># an 'A' if there is an argument, or a '-' if there is a '--'</span>
|
||
|
|
<span class="n">option_string_indices</span> <span class="o">=</span> <span class="p">{}</span>
|
||
|
|
<span class="n">arg_string_pattern_parts</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">arg_strings_iter</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">arg_string</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">arg_strings_iter</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="c1"># all args after -- are non-options</span>
|
||
|
|
<span class="k">if</span> <span class="n">arg_string</span> <span class="o">==</span> <span class="s1">'--'</span><span class="p">:</span>
|
||
|
|
<span class="n">arg_string_pattern_parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'-'</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">arg_string</span> <span class="ow">in</span> <span class="n">arg_strings_iter</span><span class="p">:</span>
|
||
|
|
<span class="n">arg_string_pattern_parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'A'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># otherwise, add the arg to the arg strings</span>
|
||
|
|
<span class="c1"># and note the index if it was an option</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">option_tuples</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_optional</span><span class="p">(</span><span class="n">arg_string</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_tuples</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">pattern</span> <span class="o">=</span> <span class="s1">'A'</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">option_string_indices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">option_tuples</span>
|
||
|
|
<span class="n">pattern</span> <span class="o">=</span> <span class="s1">'O'</span>
|
||
|
|
<span class="n">arg_string_pattern_parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># join the pieces together to form the pattern</span>
|
||
|
|
<span class="n">arg_strings_pattern</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_string_pattern_parts</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># converts arg strings to the appropriate and then takes the action</span>
|
||
|
|
<span class="n">seen_actions</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
|
<span class="n">seen_non_default_actions</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
|
<span class="n">warned</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">take_action</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">argument_strings</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">seen_actions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="n">argument_values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_values</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">argument_strings</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># error if this argument is not allowed with other previously</span>
|
||
|
|
<span class="c1"># seen arguments</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span> <span class="ow">or</span> <span class="n">argument_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">seen_non_default_actions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">conflict_action</span> <span class="ow">in</span> <span class="n">action_conflicts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="p">[]):</span>
|
||
|
|
<span class="k">if</span> <span class="n">conflict_action</span> <span class="ow">in</span> <span class="n">seen_non_default_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'not allowed with argument </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="n">action_name</span> <span class="o">=</span> <span class="n">_get_action_name</span><span class="p">(</span><span class="n">conflict_action</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">action_name</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># take the action if we didn't receive a SUPPRESS value</span>
|
||
|
|
<span class="c1"># (e.g. from a default)</span>
|
||
|
|
<span class="k">if</span> <span class="n">argument_values</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">argument_values</span><span class="p">,</span> <span class="n">option_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># function to convert arg_strings into an optional action</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">consume_optional</span><span class="p">(</span><span class="n">start_index</span><span class="p">):</span>
|
||
|
|
|
||
|
|
<span class="c1"># get the optional identified at this index</span>
|
||
|
|
<span class="n">option_tuples</span> <span class="o">=</span> <span class="n">option_string_indices</span><span class="p">[</span><span class="n">start_index</span><span class="p">]</span>
|
||
|
|
<span class="c1"># if multiple actions match, the option string was ambiguous</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">option_tuples</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||
|
|
<span class="n">options</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">option_string</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span> <span class="ow">in</span> <span class="n">option_tuples</span><span class="p">])</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'option'</span><span class="p">:</span> <span class="n">arg_strings</span><span class="p">[</span><span class="n">start_index</span><span class="p">],</span> <span class="s1">'matches'</span><span class="p">:</span> <span class="n">options</span><span class="p">}</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'ambiguous option: </span><span class="si">%(option)s</span><span class="s1"> could match </span><span class="si">%(matches)s</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="n">action</span><span class="p">,</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="n">option_tuples</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># identify additional optionals in the same arg string</span>
|
||
|
|
<span class="c1"># (e.g. -xyz is the same as -x -y -z if no args are required)</span>
|
||
|
|
<span class="n">match_argument</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_argument</span>
|
||
|
|
<span class="n">action_tuples</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># if we found no optional action, skip it</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">extras</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">[</span><span class="n">start_index</span><span class="p">])</span>
|
||
|
|
<span class="n">extras_pattern</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'O'</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">start_index</span> <span class="o">+</span> <span class="mi">1</span>
|
||
|
|
|
||
|
|
<span class="c1"># if there is an explicit argument, try to match the</span>
|
||
|
|
<span class="c1"># optional's string arguments to only this</span>
|
||
|
|
<span class="k">if</span> <span class="n">explicit_arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">arg_count</span> <span class="o">=</span> <span class="n">match_argument</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="s1">'A'</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the action is a single-dash option and takes no</span>
|
||
|
|
<span class="c1"># arguments, try to parse more single-dash options out</span>
|
||
|
|
<span class="c1"># of the tail of the option string</span>
|
||
|
|
<span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span>
|
||
|
|
<span class="k">if</span> <span class="p">(</span>
|
||
|
|
<span class="n">arg_count</span> <span class="o">==</span> <span class="mi">0</span>
|
||
|
|
<span class="ow">and</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">chars</span>
|
||
|
|
<span class="ow">and</span> <span class="n">explicit_arg</span> <span class="o">!=</span> <span class="s1">''</span>
|
||
|
|
<span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">sep</span> <span class="ow">or</span> <span class="n">explicit_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'ignored explicit argument </span><span class="si">%r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">explicit_arg</span><span class="p">)</span>
|
||
|
|
<span class="n">action_tuples</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action</span><span class="p">,</span> <span class="p">[],</span> <span class="n">option_string</span><span class="p">))</span>
|
||
|
|
<span class="n">char</span> <span class="o">=</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="n">option_string</span> <span class="o">=</span> <span class="n">char</span> <span class="o">+</span> <span class="n">explicit_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
|
|
<span class="n">optionals_map</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">optionals_map</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="n">optionals_map</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span>
|
||
|
|
<span class="n">explicit_arg</span> <span class="o">=</span> <span class="n">explicit_arg</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">explicit_arg</span><span class="p">:</span>
|
||
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
<span class="k">elif</span> <span class="n">explicit_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'='</span><span class="p">:</span>
|
||
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="s1">'='</span>
|
||
|
|
<span class="n">explicit_arg</span> <span class="o">=</span> <span class="n">explicit_arg</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="s1">''</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">extras</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span> <span class="o">+</span> <span class="n">explicit_arg</span><span class="p">)</span>
|
||
|
|
<span class="n">extras_pattern</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'O'</span><span class="p">)</span>
|
||
|
|
<span class="n">stop</span> <span class="o">=</span> <span class="n">start_index</span> <span class="o">+</span> <span class="mi">1</span>
|
||
|
|
<span class="k">break</span>
|
||
|
|
<span class="c1"># if the action expect exactly one argument, we've</span>
|
||
|
|
<span class="c1"># successfully matched the option; exit the loop</span>
|
||
|
|
<span class="k">elif</span> <span class="n">arg_count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
|
|
<span class="n">stop</span> <span class="o">=</span> <span class="n">start_index</span> <span class="o">+</span> <span class="mi">1</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">explicit_arg</span><span class="p">]</span>
|
||
|
|
<span class="n">action_tuples</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">option_string</span><span class="p">))</span>
|
||
|
|
<span class="k">break</span>
|
||
|
|
|
||
|
|
<span class="c1"># error if a double-dash option did not use the</span>
|
||
|
|
<span class="c1"># explicit argument</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'ignored explicit argument </span><span class="si">%r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">explicit_arg</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if there is no explicit argument, try to match the</span>
|
||
|
|
<span class="c1"># optional's string arguments with the following strings</span>
|
||
|
|
<span class="c1"># if successful, exit the loop</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">start</span> <span class="o">=</span> <span class="n">start_index</span> <span class="o">+</span> <span class="mi">1</span>
|
||
|
|
<span class="n">selected_patterns</span> <span class="o">=</span> <span class="n">arg_strings_pattern</span><span class="p">[</span><span class="n">start</span><span class="p">:]</span>
|
||
|
|
<span class="n">arg_count</span> <span class="o">=</span> <span class="n">match_argument</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">selected_patterns</span><span class="p">)</span>
|
||
|
|
<span class="n">stop</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">arg_count</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="n">arg_strings</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">stop</span><span class="p">]</span>
|
||
|
|
<span class="n">action_tuples</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">option_string</span><span class="p">))</span>
|
||
|
|
<span class="k">break</span>
|
||
|
|
|
||
|
|
<span class="c1"># add the Optional to the list and return the index at which</span>
|
||
|
|
<span class="c1"># the Optional's string args stopped</span>
|
||
|
|
<span class="k">assert</span> <span class="n">action_tuples</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="n">action_tuples</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">deprecated</span> <span class="ow">and</span> <span class="n">option_string</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">warned</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_warning</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"option '</span><span class="si">%(option)s</span><span class="s2">' is deprecated"</span><span class="p">)</span> <span class="o">%</span>
|
||
|
|
<span class="p">{</span><span class="s1">'option'</span><span class="p">:</span> <span class="n">option_string</span><span class="p">})</span>
|
||
|
|
<span class="n">warned</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">option_string</span><span class="p">)</span>
|
||
|
|
<span class="n">take_action</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">option_string</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">stop</span>
|
||
|
|
|
||
|
|
<span class="c1"># the list of Positionals left to be parsed; this is modified</span>
|
||
|
|
<span class="c1"># by consume_positionals()</span>
|
||
|
|
<span class="n">positionals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_positional_actions</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># function to convert arg_strings into positional actions</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">consume_positionals</span><span class="p">(</span><span class="n">start_index</span><span class="p">):</span>
|
||
|
|
<span class="c1"># match as many Positionals as possible</span>
|
||
|
|
<span class="n">match_partial</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_arguments_partial</span>
|
||
|
|
<span class="n">selected_pattern</span> <span class="o">=</span> <span class="n">arg_strings_pattern</span><span class="p">[</span><span class="n">start_index</span><span class="p">:]</span>
|
||
|
|
<span class="n">arg_counts</span> <span class="o">=</span> <span class="n">match_partial</span><span class="p">(</span><span class="n">positionals</span><span class="p">,</span> <span class="n">selected_pattern</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># slice off the appropriate arg strings for each Positional</span>
|
||
|
|
<span class="c1"># and add the Positional and its args to the list</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">arg_count</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">positionals</span><span class="p">,</span> <span class="n">arg_counts</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="n">arg_strings</span><span class="p">[</span><span class="n">start_index</span><span class="p">:</span> <span class="n">start_index</span> <span class="o">+</span> <span class="n">arg_count</span><span class="p">]</span>
|
||
|
|
<span class="c1"># Strip out the first '--' if it is not in REMAINDER arg.</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">PARSER</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">arg_strings_pattern</span><span class="p">[</span><span class="n">start_index</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'-'</span><span class="p">:</span>
|
||
|
|
<span class="k">assert</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--'</span>
|
||
|
|
<span class="n">args</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s1">'--'</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">!=</span> <span class="n">REMAINDER</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">arg_strings_pattern</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">start_index</span><span class="p">,</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">+</span> <span class="n">arg_count</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s1">'--'</span><span class="p">)</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">+=</span> <span class="n">arg_count</span>
|
||
|
|
<span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">deprecated</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">warned</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_warning</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"argument '</span><span class="si">%(argument_name)s</span><span class="s2">' is deprecated"</span><span class="p">)</span> <span class="o">%</span>
|
||
|
|
<span class="p">{</span><span class="s1">'argument_name'</span><span class="p">:</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">})</span>
|
||
|
|
<span class="n">warned</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">)</span>
|
||
|
|
<span class="n">take_action</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># slice off the Positionals that we just parsed and return the</span>
|
||
|
|
<span class="c1"># index at which the Positionals' string args stopped</span>
|
||
|
|
<span class="n">positionals</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">positionals</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">arg_counts</span><span class="p">):]</span>
|
||
|
|
<span class="k">return</span> <span class="n">start_index</span>
|
||
|
|
|
||
|
|
<span class="c1"># consume Positionals and Optionals alternately, until we have</span>
|
||
|
|
<span class="c1"># passed the last option string</span>
|
||
|
|
<span class="n">extras</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">extras_pattern</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string_indices</span><span class="p">:</span>
|
||
|
|
<span class="n">max_option_string_index</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">option_string_indices</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">max_option_string_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||
|
|
<span class="k">while</span> <span class="n">start_index</span> <span class="o"><=</span> <span class="n">max_option_string_index</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># consume any Positionals preceding the next option</span>
|
||
|
|
<span class="n">next_option_string_index</span> <span class="o">=</span> <span class="n">start_index</span>
|
||
|
|
<span class="k">while</span> <span class="n">next_option_string_index</span> <span class="o"><=</span> <span class="n">max_option_string_index</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">next_option_string_index</span> <span class="ow">in</span> <span class="n">option_string_indices</span><span class="p">:</span>
|
||
|
|
<span class="k">break</span>
|
||
|
|
<span class="n">next_option_string_index</span> <span class="o">+=</span> <span class="mi">1</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">intermixed</span> <span class="ow">and</span> <span class="n">start_index</span> <span class="o">!=</span> <span class="n">next_option_string_index</span><span class="p">:</span>
|
||
|
|
<span class="n">positionals_end_index</span> <span class="o">=</span> <span class="n">consume_positionals</span><span class="p">(</span><span class="n">start_index</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># only try to parse the next optional if we didn't consume</span>
|
||
|
|
<span class="c1"># the option string during the positionals parsing</span>
|
||
|
|
<span class="k">if</span> <span class="n">positionals_end_index</span> <span class="o">></span> <span class="n">start_index</span><span class="p">:</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">=</span> <span class="n">positionals_end_index</span>
|
||
|
|
<span class="k">continue</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">=</span> <span class="n">positionals_end_index</span>
|
||
|
|
|
||
|
|
<span class="c1"># if we consumed all the positionals we could and we're not</span>
|
||
|
|
<span class="c1"># at the index of an option string, there were extra arguments</span>
|
||
|
|
<span class="k">if</span> <span class="n">start_index</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">option_string_indices</span><span class="p">:</span>
|
||
|
|
<span class="n">strings</span> <span class="o">=</span> <span class="n">arg_strings</span><span class="p">[</span><span class="n">start_index</span><span class="p">:</span><span class="n">next_option_string_index</span><span class="p">]</span>
|
||
|
|
<span class="n">extras</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">strings</span><span class="p">)</span>
|
||
|
|
<span class="n">extras_pattern</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">arg_strings_pattern</span><span class="p">[</span><span class="n">start_index</span><span class="p">:</span><span class="n">next_option_string_index</span><span class="p">])</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">=</span> <span class="n">next_option_string_index</span>
|
||
|
|
|
||
|
|
<span class="c1"># consume the next optional and any arguments for it</span>
|
||
|
|
<span class="n">start_index</span> <span class="o">=</span> <span class="n">consume_optional</span><span class="p">(</span><span class="n">start_index</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">intermixed</span><span class="p">:</span>
|
||
|
|
<span class="c1"># consume any positionals following the last Optional</span>
|
||
|
|
<span class="n">stop_index</span> <span class="o">=</span> <span class="n">consume_positionals</span><span class="p">(</span><span class="n">start_index</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># if we didn't consume all the argument strings, there were extras</span>
|
||
|
|
<span class="n">extras</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">[</span><span class="n">stop_index</span><span class="p">:])</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">extras</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">[</span><span class="n">start_index</span><span class="p">:])</span>
|
||
|
|
<span class="n">extras_pattern</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">arg_strings_pattern</span><span class="p">[</span><span class="n">start_index</span><span class="p">:])</span>
|
||
|
|
<span class="n">extras_pattern</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">extras_pattern</span><span class="p">)</span>
|
||
|
|
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">extras_pattern</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">extras</span><span class="p">)</span>
|
||
|
|
<span class="c1"># consume all positionals</span>
|
||
|
|
<span class="n">arg_strings</span> <span class="o">=</span> <span class="p">[</span><span class="n">s</span> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">extras</span><span class="p">,</span> <span class="n">extras_pattern</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span> <span class="o">!=</span> <span class="s1">'O'</span><span class="p">]</span>
|
||
|
|
<span class="n">arg_strings_pattern</span> <span class="o">=</span> <span class="n">extras_pattern</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'O'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
||
|
|
<span class="n">stop_index</span> <span class="o">=</span> <span class="n">consume_positionals</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||
|
|
<span class="c1"># leave unknown optionals and non-consumed positionals in extras</span>
|
||
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">extras_pattern</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">stop_index</span><span class="p">:</span>
|
||
|
|
<span class="k">break</span>
|
||
|
|
<span class="k">if</span> <span class="n">c</span> <span class="o">!=</span> <span class="s1">'O'</span><span class="p">:</span>
|
||
|
|
<span class="n">stop_index</span> <span class="o">-=</span> <span class="mi">1</span>
|
||
|
|
<span class="n">extras</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
<span class="n">extras</span> <span class="o">=</span> <span class="p">[</span><span class="n">s</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">extras</span> <span class="k">if</span> <span class="n">s</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># make sure all required actions were present and also convert</span>
|
||
|
|
<span class="c1"># action defaults which were not given as arguments</span>
|
||
|
|
<span class="n">required_actions</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">seen_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">required</span><span class="p">:</span>
|
||
|
|
<span class="n">required_actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_get_action_name</span><span class="p">(</span><span class="n">action</span><span class="p">))</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="c1"># Convert action default now instead of doing it before</span>
|
||
|
|
<span class="c1"># parsing arguments to avoid calling convert functions</span>
|
||
|
|
<span class="c1"># twice (which may fail) if the argument was given, but</span>
|
||
|
|
<span class="c1"># only if it was defined already in the namespace</span>
|
||
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span>
|
||
|
|
<span class="nb">isinstance</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">default</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span>
|
||
|
|
<span class="nb">hasattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">)</span> <span class="ow">and</span>
|
||
|
|
<span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">)):</span>
|
||
|
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_get_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">required_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'the following arguments are required: </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span>
|
||
|
|
<span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">required_actions</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># make sure all required groups had one option present</span>
|
||
|
|
<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">required</span><span class="p">:</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">seen_non_default_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">break</span>
|
||
|
|
|
||
|
|
<span class="c1"># if no actions were used, report the error</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="n">_get_action_name</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">group</span><span class="o">.</span><span class="n">_group_actions</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">help</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">]</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'one of the arguments </span><span class="si">%s</span><span class="s1"> is required'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">names</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the updated namespace and the extra arguments</span>
|
||
|
|
<span class="k">return</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">extras</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_read_args_from_files</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg_strings</span><span class="p">):</span>
|
||
|
|
<span class="c1"># expand arguments referencing files</span>
|
||
|
|
<span class="n">new_arg_strings</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">arg_string</span> <span class="ow">in</span> <span class="n">arg_strings</span><span class="p">:</span>
|
||
|
|
|
||
|
|
<span class="c1"># for regular arguments, just add them back into the list</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">arg_string</span> <span class="ow">or</span> <span class="n">arg_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fromfile_prefix_chars</span><span class="p">:</span>
|
||
|
|
<span class="n">new_arg_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># replace arguments referencing files with the file content</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">arg_string</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span>
|
||
|
|
<span class="n">encoding</span><span class="o">=</span><span class="n">_sys</span><span class="o">.</span><span class="n">getfilesystemencoding</span><span class="p">(),</span>
|
||
|
|
<span class="n">errors</span><span class="o">=</span><span class="n">_sys</span><span class="o">.</span><span class="n">getfilesystemencodeerrors</span><span class="p">())</span> <span class="k">as</span> <span class="n">args_file</span><span class="p">:</span>
|
||
|
|
<span class="n">arg_strings</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
<span class="k">for</span> <span class="n">arg_line</span> <span class="ow">in</span> <span class="n">args_file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||
|
|
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_arg_line_to_args</span><span class="p">(</span><span class="n">arg_line</span><span class="p">):</span>
|
||
|
|
<span class="n">arg_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
|
||
|
|
<span class="n">arg_strings</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_args_from_files</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">)</span>
|
||
|
|
<span class="n">new_arg_strings</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">)</span>
|
||
|
|
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the modified argument list</span>
|
||
|
|
<span class="k">return</span> <span class="n">new_arg_strings</span>
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.convert_arg_line_to_args">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.convert_arg_line_to_args">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">convert_arg_line_to_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg_line</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">arg_line</span><span class="p">]</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_match_argument</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">arg_strings_pattern</span><span class="p">):</span>
|
||
|
|
<span class="c1"># match the pattern for this action to the arg strings</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_nargs_pattern</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="n">match</span> <span class="o">=</span> <span class="n">_re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">nargs_pattern</span><span class="p">,</span> <span class="n">arg_strings_pattern</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># raise an exception if we weren't able to find a match</span>
|
||
|
|
<span class="k">if</span> <span class="n">match</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_errors</span> <span class="o">=</span> <span class="p">{</span>
|
||
|
|
<span class="kc">None</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'expected one argument'</span><span class="p">),</span>
|
||
|
|
<span class="n">OPTIONAL</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'expected at most one argument'</span><span class="p">),</span>
|
||
|
|
<span class="n">ONE_OR_MORE</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s1">'expected at least one argument'</span><span class="p">),</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">nargs_errors</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">nargs</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">ngettext</span><span class="p">(</span><span class="s1">'expected </span><span class="si">%s</span><span class="s1"> argument'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'expected </span><span class="si">%s</span><span class="s1"> arguments'</span><span class="p">,</span>
|
||
|
|
<span class="n">action</span><span class="o">.</span><span class="n">nargs</span><span class="p">)</span> <span class="o">%</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the number of arguments matched</span>
|
||
|
|
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_match_arguments_partial</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">actions</span><span class="p">,</span> <span class="n">arg_strings_pattern</span><span class="p">):</span>
|
||
|
|
<span class="c1"># progressively shorten the actions list by slicing off the</span>
|
||
|
|
<span class="c1"># final actions until we find a match</span>
|
||
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">actions</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
||
|
|
<span class="n">actions_slice</span> <span class="o">=</span> <span class="n">actions</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span>
|
||
|
|
<span class="n">pattern</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_nargs_pattern</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
|
||
|
|
<span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">actions_slice</span><span class="p">])</span>
|
||
|
|
<span class="n">match</span> <span class="o">=</span> <span class="n">_re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">arg_strings_pattern</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">match</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="k">for</span> <span class="n">string</span> <span class="ow">in</span> <span class="n">match</span><span class="o">.</span><span class="n">groups</span><span class="p">()]</span>
|
||
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">end</span><span class="p">()</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">arg_strings_pattern</span><span class="p">)</span>
|
||
|
|
<span class="ow">and</span> <span class="n">arg_strings_pattern</span><span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">end</span><span class="p">()]</span> <span class="o">==</span> <span class="s1">'O'</span><span class="p">):</span>
|
||
|
|
<span class="k">while</span> <span class="n">result</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
|
||
|
|
<span class="k">del</span> <span class="n">result</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||
|
|
<span class="k">return</span> <span class="n">result</span>
|
||
|
|
<span class="k">return</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_parse_optional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg_string</span><span class="p">):</span>
|
||
|
|
<span class="c1"># if it's an empty string, it was meant to be a positional</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">arg_string</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># if it doesn't start with a prefix, it was meant to be positional</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">arg_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the option string is present in the parser, return the action</span>
|
||
|
|
<span class="k">if</span> <span class="n">arg_string</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">arg_string</span><span class="p">]</span>
|
||
|
|
<span class="k">return</span> <span class="p">[(</span><span class="n">action</span><span class="p">,</span> <span class="n">arg_string</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)]</span>
|
||
|
|
|
||
|
|
<span class="c1"># if it's just a single character, it was meant to be positional</span>
|
||
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">arg_string</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># if the option string before the "=" is present, return the action</span>
|
||
|
|
<span class="n">option_string</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="n">arg_string</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">'='</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">sep</span> <span class="ow">and</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span>
|
||
|
|
<span class="k">return</span> <span class="p">[(</span><span class="n">action</span><span class="p">,</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span><span class="p">)]</span>
|
||
|
|
|
||
|
|
<span class="c1"># search through all possible prefixes of the option string</span>
|
||
|
|
<span class="c1"># and all actions in the parser for possible interpretations</span>
|
||
|
|
<span class="n">option_tuples</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_option_tuples</span><span class="p">(</span><span class="n">arg_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">if</span> <span class="n">option_tuples</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="n">option_tuples</span>
|
||
|
|
|
||
|
|
<span class="c1"># if it was not found as an option, but it looks like a negative</span>
|
||
|
|
<span class="c1"># number, it was meant to be positional</span>
|
||
|
|
<span class="c1"># unless there are negative-number-like options</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_negative_number_matcher</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">arg_string</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_has_negative_number_optionals</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># if it contains a space, it was meant to be a positional</span>
|
||
|
|
<span class="k">if</span> <span class="s1">' '</span> <span class="ow">in</span> <span class="n">arg_string</span><span class="p">:</span>
|
||
|
|
<span class="k">return</span> <span class="kc">None</span>
|
||
|
|
|
||
|
|
<span class="c1"># it was meant to be an optional but there is no such option</span>
|
||
|
|
<span class="c1"># in this parser (though it might be a valid option in a subparser)</span>
|
||
|
|
<span class="k">return</span> <span class="p">[(</span><span class="kc">None</span><span class="p">,</span> <span class="n">arg_string</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)]</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_option_tuples</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option_string</span><span class="p">):</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||
|
|
|
||
|
|
<span class="c1"># option strings starting with two prefix characters are only</span>
|
||
|
|
<span class="c1"># split at the '='</span>
|
||
|
|
<span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix_chars</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">chars</span> <span class="ow">and</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_abbrev</span><span class="p">:</span>
|
||
|
|
<span class="n">option_prefix</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="n">option_string</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">'='</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">sep</span><span class="p">:</span>
|
||
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">option_prefix</span><span class="p">):</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span>
|
||
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="n">action</span><span class="p">,</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span>
|
||
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># single character options can be concatenated with their arguments</span>
|
||
|
|
<span class="c1"># but multiple character options always have to have their argument</span>
|
||
|
|
<span class="c1"># separate</span>
|
||
|
|
<span class="k">elif</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">chars</span> <span class="ow">and</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
|
||
|
|
<span class="n">option_prefix</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="n">option_string</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">'='</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">sep</span><span class="p">:</span>
|
||
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="n">explicit_arg</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
|
<span class="n">short_option_prefix</span> <span class="o">=</span> <span class="n">option_string</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span>
|
||
|
|
<span class="n">short_explicit_arg</span> <span class="o">=</span> <span class="n">option_string</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
|
||
|
|
|
||
|
|
<span class="k">for</span> <span class="n">option_string</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">option_string</span> <span class="o">==</span> <span class="n">short_option_prefix</span><span class="p">:</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span>
|
||
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="n">action</span><span class="p">,</span> <span class="n">option_string</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="n">short_explicit_arg</span>
|
||
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span>
|
||
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_abbrev</span> <span class="ow">and</span> <span class="n">option_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">option_prefix</span><span class="p">):</span>
|
||
|
|
<span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_option_string_actions</span><span class="p">[</span><span class="n">option_string</span><span class="p">]</span>
|
||
|
|
<span class="n">tup</span> <span class="o">=</span> <span class="n">action</span><span class="p">,</span> <span class="n">option_string</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">explicit_arg</span>
|
||
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># shouldn't ever get here</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'unexpected option string: </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="n">option_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the collected option tuples</span>
|
||
|
|
<span class="k">return</span> <span class="n">result</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_nargs_pattern</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
||
|
|
<span class="c1"># in all examples below, we have to allow for '--' args</span>
|
||
|
|
<span class="c1"># which are represented as '-' in the pattern</span>
|
||
|
|
<span class="n">nargs</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span>
|
||
|
|
<span class="c1"># if this is an optional action, -- is not allowed</span>
|
||
|
|
<span class="n">option</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span>
|
||
|
|
|
||
|
|
<span class="c1"># the default (None) is assumed to be a single argument</span>
|
||
|
|
<span class="k">if</span> <span class="n">nargs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'([A])'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(-*A-*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># allow zero or one arguments</span>
|
||
|
|
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">==</span> <span class="n">OPTIONAL</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'(A?)'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(-*A?-*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># allow zero or more arguments</span>
|
||
|
|
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">==</span> <span class="n">ZERO_OR_MORE</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'(A*)'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(-*[A-]*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># allow one or more arguments</span>
|
||
|
|
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">==</span> <span class="n">ONE_OR_MORE</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'(A+)'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(-*A[A-]*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># allow any number of options or arguments</span>
|
||
|
|
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">==</span> <span class="n">REMAINDER</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'([AO]*)'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(.*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># allow one argument followed by any number of options or arguments</span>
|
||
|
|
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">==</span> <span class="n">PARSER</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'(A[AO]*)'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(-*A[-AO]*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># suppress action, like nargs=0</span>
|
||
|
|
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">==</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'()'</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'(-*)'</span>
|
||
|
|
|
||
|
|
<span class="c1"># all others should be integers</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">nargs_pattern</span> <span class="o">=</span> <span class="s1">'([AO]{</span><span class="si">%d</span><span class="s1">})'</span> <span class="o">%</span> <span class="n">nargs</span> <span class="k">if</span> <span class="n">option</span> <span class="k">else</span> <span class="s1">'((?:-*A){</span><span class="si">%d</span><span class="s1">}-*)'</span> <span class="o">%</span> <span class="n">nargs</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the pattern</span>
|
||
|
|
<span class="k">return</span> <span class="n">nargs_pattern</span>
|
||
|
|
|
||
|
|
<span class="c1"># ========================</span>
|
||
|
|
<span class="c1"># Alt command line argument parsing, allowing free intermix</span>
|
||
|
|
<span class="c1"># ========================</span>
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.parse_intermixed_args">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.parse_intermixed_args">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">parse_intermixed_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span><span class="p">,</span> <span class="n">argv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_known_intermixed_args</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">argv</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'unrecognized arguments: </span><span class="si">%s</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argv</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_on_error</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">args</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.parse_known_intermixed_args">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.parse_known_intermixed_args">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">parse_known_intermixed_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">namespace</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="c1"># returns a namespace and list of extras</span>
|
||
|
|
<span class="c1">#</span>
|
||
|
|
<span class="c1"># positional can be freely intermixed with optionals. optionals are</span>
|
||
|
|
<span class="c1"># first parsed with all positional arguments deactivated. The 'extras'</span>
|
||
|
|
<span class="c1"># are then parsed. If the parser definition is incompatible with the</span>
|
||
|
|
<span class="c1"># intermixed assumptions (e.g. use of REMAINDER, subparsers) a</span>
|
||
|
|
<span class="c1"># TypeError is raised.</span>
|
||
|
|
|
||
|
|
<span class="n">positionals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_positional_actions</span><span class="p">()</span>
|
||
|
|
<span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="n">action</span> <span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">positionals</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="ow">in</span> <span class="p">[</span><span class="n">PARSER</span><span class="p">,</span> <span class="n">REMAINDER</span><span class="p">]]</span>
|
||
|
|
<span class="k">if</span> <span class="n">a</span><span class="p">:</span>
|
||
|
|
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">'parse_intermixed_args: positional arg'</span>
|
||
|
|
<span class="s1">' with nargs=</span><span class="si">%s</span><span class="s1">'</span><span class="o">%</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">nargs</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_known_args2</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">intermixed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="c1"># ========================</span>
|
||
|
|
<span class="c1"># Value conversion methods</span>
|
||
|
|
<span class="c1"># ========================</span>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">arg_strings</span><span class="p">):</span>
|
||
|
|
<span class="c1"># optional argument produces a default when not present</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">arg_strings</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">OPTIONAL</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">const</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span>
|
||
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># when nargs='*' on a positional, if there were no command-line</span>
|
||
|
|
<span class="c1"># args, use the default if it is anything other than None</span>
|
||
|
|
<span class="k">elif</span> <span class="p">(</span><span class="ow">not</span> <span class="n">arg_strings</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">ZERO_OR_MORE</span> <span class="ow">and</span>
|
||
|
|
<span class="ow">not</span> <span class="n">action</span><span class="o">.</span><span class="n">option_strings</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">default</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="c1"># since arg_strings is always [] at this point</span>
|
||
|
|
<span class="c1"># there is no need to use self._check_value(action, value)</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">arg_strings</span>
|
||
|
|
|
||
|
|
<span class="c1"># single argument or optional argument produces a single value</span>
|
||
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">arg_strings</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="ow">in</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="n">OPTIONAL</span><span class="p">]:</span>
|
||
|
|
<span class="n">arg_string</span><span class="p">,</span> <span class="o">=</span> <span class="n">arg_strings</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">arg_string</span><span class="p">)</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># REMAINDER arguments convert all values, checking none</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">REMAINDER</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">arg_strings</span><span class="p">]</span>
|
||
|
|
|
||
|
|
<span class="c1"># PARSER arguments convert all values, but check only the first</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">PARSER</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">arg_strings</span><span class="p">]</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||
|
|
|
||
|
|
<span class="c1"># SUPPRESS argument does not put anything in the namespace</span>
|
||
|
|
<span class="k">elif</span> <span class="n">action</span><span class="o">.</span><span class="n">nargs</span> <span class="o">==</span> <span class="n">SUPPRESS</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">SUPPRESS</span>
|
||
|
|
|
||
|
|
<span class="c1"># all other types of nargs produce a list</span>
|
||
|
|
<span class="k">else</span><span class="p">:</span>
|
||
|
|
<span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">arg_strings</span><span class="p">]</span>
|
||
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the converted value</span>
|
||
|
|
<span class="k">return</span> <span class="n">value</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">arg_string</span><span class="p">):</span>
|
||
|
|
<span class="n">type_func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registry_get</span><span class="p">(</span><span class="s1">'type'</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">type_func</span><span class="p">):</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'</span><span class="si">%r</span><span class="s1"> is not callable'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">type_func</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># convert the value to the appropriate type</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">type_func</span><span class="p">(</span><span class="n">arg_string</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># ArgumentTypeErrors indicate errors</span>
|
||
|
|
<span class="k">except</span> <span class="n">ArgumentTypeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># TypeErrors or ValueErrors also indicate errors</span>
|
||
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span>
|
||
|
|
<span class="n">name</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="s1">'__name__'</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">action</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">:</span> <span class="n">arg_string</span><span class="p">}</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'invalid </span><span class="si">%(type)s</span><span class="s1"> value: </span><span class="si">%(value)r</span><span class="s1">'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># return the converted value</span>
|
||
|
|
<span class="k">return</span> <span class="n">result</span>
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_check_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||
|
|
<span class="c1"># converted value must be one of the choices (if specified)</span>
|
||
|
|
<span class="n">choices</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">choices</span>
|
||
|
|
<span class="k">if</span> <span class="n">choices</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">choices</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||
|
|
<span class="n">choices</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">choices</span><span class="p">)</span>
|
||
|
|
<span class="k">if</span> <span class="n">value</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">choices</span><span class="p">:</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'value'</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span>
|
||
|
|
<span class="s1">'choices'</span><span class="p">:</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">choices</span><span class="p">))}</span>
|
||
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s1">'invalid choice: </span><span class="si">%(value)r</span><span class="s1"> (choose from </span><span class="si">%(choices)s</span><span class="s1">)'</span><span class="p">)</span>
|
||
|
|
<span class="k">raise</span> <span class="n">ArgumentError</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">msg</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<span class="c1"># Help-formatting methods</span>
|
||
|
|
<span class="c1"># =======================</span>
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.format_usage">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.format_usage">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">formatter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_formatter</span><span class="p">()</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_usage</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usage</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="p">,</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span><span class="p">)</span>
|
||
|
|
<span class="k">return</span> <span class="n">formatter</span><span class="o">.</span><span class="n">format_help</span><span class="p">()</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.format_help">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.format_help">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">format_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="n">formatter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_formatter</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># usage</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_usage</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usage</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_actions</span><span class="p">,</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_mutually_exclusive_groups</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># description</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_text</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># positionals, optionals and user-defined groups</span>
|
||
|
|
<span class="k">for</span> <span class="n">action_group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_action_groups</span><span class="p">:</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">start_section</span><span class="p">(</span><span class="n">action_group</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_text</span><span class="p">(</span><span class="n">action_group</span><span class="o">.</span><span class="n">description</span><span class="p">)</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_arguments</span><span class="p">(</span><span class="n">action_group</span><span class="o">.</span><span class="n">_group_actions</span><span class="p">)</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">end_section</span><span class="p">()</span>
|
||
|
|
|
||
|
|
<span class="c1"># epilog</span>
|
||
|
|
<span class="n">formatter</span><span class="o">.</span><span class="n">add_text</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">epilog</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># determine help from format above</span>
|
||
|
|
<span class="k">return</span> <span class="n">formatter</span><span class="o">.</span><span class="n">format_help</span><span class="p">()</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_get_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">formatter_class</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">prog</span><span class="p">)</span>
|
||
|
|
|
||
|
|
<span class="c1"># =====================</span>
|
||
|
|
<span class="c1"># Help-printing methods</span>
|
||
|
|
<span class="c1"># =====================</span>
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.print_usage">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.print_usage">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">print_usage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">file</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">file</span> <span class="o">=</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdout</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_print_message</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_usage</span><span class="p">(),</span> <span class="n">file</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.print_help">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.print_help">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">print_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">file</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
|
|
<span class="n">file</span> <span class="o">=</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stdout</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_print_message</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_help</span><span class="p">(),</span> <span class="n">file</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_print_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">message</span><span class="p">:</span>
|
||
|
|
<span class="n">file</span> <span class="o">=</span> <span class="n">file</span> <span class="ow">or</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stderr</span>
|
||
|
|
<span class="k">try</span><span class="p">:</span>
|
||
|
|
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
|
||
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">):</span>
|
||
|
|
<span class="k">pass</span>
|
||
|
|
|
||
|
|
<span class="c1"># ===============</span>
|
||
|
|
<span class="c1"># Exiting methods</span>
|
||
|
|
<span class="c1"># ===============</span>
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.exit">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.exit">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
|
<span class="k">if</span> <span class="n">message</span><span class="p">:</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_print_message</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||
|
|
<span class="n">_sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">status</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<div class="viewcode-block" id="ArgumentParser.error">
|
||
|
|
<a class="viewcode-back" href="../api/evennia.server.profiling.dummyrunner.html#evennia.server.evennia_launcher.ArgumentParser.error">[docs]</a>
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
|
||
|
|
<span class="w"> </span><span class="sd">"""error(message: string)</span>
|
||
|
|
|
||
|
|
<span class="sd"> Prints a usage message incorporating the message to stderr and</span>
|
||
|
|
<span class="sd"> exits.</span>
|
||
|
|
|
||
|
|
<span class="sd"> If you override this in a subclass, it should not return -- it</span>
|
||
|
|
<span class="sd"> should either exit or raise an exception.</span>
|
||
|
|
<span class="sd"> """</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">print_usage</span><span class="p">(</span><span class="n">_sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'prog'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">prog</span><span class="p">,</span> <span class="s1">'message'</span><span class="p">:</span> <span class="n">message</span><span class="p">}</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s1">'</span><span class="si">%(prog)s</span><span class="s1">: error: </span><span class="si">%(message)s</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="n">args</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
|
||
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_warning</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
|
||
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'prog'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">prog</span><span class="p">,</span> <span class="s1">'message'</span><span class="p">:</span> <span class="n">message</span><span class="p">}</span>
|
||
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_print_message</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s1">'</span><span class="si">%(prog)s</span><span class="s1">: warning: </span><span class="si">%(message)s</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="o">%</span> <span class="n">args</span><span class="p">,</span> <span class="n">_sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span></div>
|
||
|
|
|
||
|
|
</pre></div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
||
|
|
<h3>Navigation</h3>
|
||
|
|
<ul>
|
||
|
|
<li class="right" style="margin-right: 10px">
|
||
|
|
<a href="../genindex.html" title="General Index"
|
||
|
|
>index</a></li>
|
||
|
|
<li class="right" >
|
||
|
|
<a href="../py-modindex.html" title="Python Module Index"
|
||
|
|
>modules</a> |</li>
|
||
|
|
<li class="nav-item nav-item-0"><a href="../index.html">Evennia latest</a> »</li>
|
||
|
|
<li class="nav-item nav-item-1"><a href="index.html" >Module code</a> »</li>
|
||
|
|
<li class="nav-item nav-item-this"><a href="">argparse</a></li>
|
||
|
|
</ul>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
<div class="footer" role="contentinfo">
|
||
|
|
© Copyright 2024, The Evennia developer community.
|
||
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
|
||
|
|
</div>
|
||
|
|
</body>
|
||
|
|
</html>
|